diff options
Diffstat (limited to 'sysdeps/generic')
-rw-r--r-- | sysdeps/generic/Makefile | 2 | ||||
-rw-r--r-- | sysdeps/generic/aio_sigqueue.c | 33 | ||||
-rw-r--r-- | sysdeps/generic/bits/confname.h | 11 | ||||
-rw-r--r-- | sysdeps/generic/bits/siginfo.h | 184 | ||||
-rw-r--r-- | sysdeps/generic/bits/utsname.h | 2 | ||||
-rw-r--r-- | sysdeps/generic/dl-sysdep.c | 3 | ||||
-rw-r--r-- | sysdeps/generic/enbl-secure.c | 8 | ||||
-rw-r--r-- | sysdeps/generic/sigqueue.c | 32 | ||||
-rw-r--r-- | sysdeps/generic/sigtimedwait.c | 33 | ||||
-rw-r--r-- | sysdeps/generic/sigwaitinfo.c | 32 | ||||
-rw-r--r-- | sysdeps/generic/testrtsig.h | 28 |
11 files changed, 363 insertions, 5 deletions
diff --git a/sysdeps/generic/Makefile b/sysdeps/generic/Makefile index 2f6a8f4333..4d6c60447a 100644 --- a/sysdeps/generic/Makefile +++ b/sysdeps/generic/Makefile @@ -33,6 +33,7 @@ endif ifeq ($(subdir),stdio-common) ifneq ($(inhibit-siglist),yes) +ifneq ($(cross-compiling),yes) ifeq "$(filter %siglist.c,$(before-compile))" "" before-compile := $(before-compile) $(objpfx)siglist.c $(objpfx)siglist.c: $(objpfx)make_siglist @@ -49,6 +50,7 @@ generated := $(generated) make_siglist siglist.c endif endif endif +endif ifeq ($(subdir),string) CFLAGS-wordcopy.c += -Wno-uninitialized diff --git a/sysdeps/generic/aio_sigqueue.c b/sysdeps/generic/aio_sigqueue.c new file mode 100644 index 0000000000..0a871e24d9 --- /dev/null +++ b/sysdeps/generic/aio_sigqueue.c @@ -0,0 +1,33 @@ +/* Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <aio.h> +#include <errno.h> +#include <signal.h> + +#include "aio_misc.h" + +int +__aio_sigqueue (int sig, const union sigval val) +{ + __set_errno (ENOSYS); + return -1; +} + +stub_warning (__aio_sigqueue) +#include <stub-tag.h> diff --git a/sysdeps/generic/bits/confname.h b/sysdeps/generic/bits/confname.h index 3991fb1df4..1b75d6e5b5 100644 --- a/sysdeps/generic/bits/confname.h +++ b/sysdeps/generic/bits/confname.h @@ -316,8 +316,17 @@ enum #define _SC_NL_NMAX _SC_NL_NMAX _SC_NL_SETMAX, #define _SC_NL_SETMAX _SC_NL_SETMAX - _SC_NL_TEXTMAX + _SC_NL_TEXTMAX, #define _SC_NL_TEXTMAX _SC_NL_TEXTMAX + + _SC_XBS5_ILP32_OFF32, +#define _SC_XBS5_ILP32_OFF32 _SC_XBS5_ILP32_OFF32 + _SC_XBS5_ILP32_OFFBIG, +#define _SC_XBS5_ILP32_OFFBIG _SC_XBS5_ILP32_OFFBIG + _SC_XBS5_LP64_OFF64, +#define _SC_XBS5_LP64_OFF64 _SC_XBS5_LP64_OFF64 + _SC_XBS5_LPBIG_OFFBIG +#define _SC_XBS5_LPBIG_OFFBIG _SC_XBS5_LPBIG_OFFBIG }; #if (defined __USE_POSIX2 || defined __USE_UNIX98 \ diff --git a/sysdeps/generic/bits/siginfo.h b/sysdeps/generic/bits/siginfo.h new file mode 100644 index 0000000000..35d9d69892 --- /dev/null +++ b/sysdeps/generic/bits/siginfo.h @@ -0,0 +1,184 @@ +/* siginfo_t, sigevent and constants. Stub version. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _SIGNAL_H +# error "Never include this file directly. Use <signal.h> instead" +#endif + +typedef struct siginfo + { + int si_signo; /* Signal number. */ + int si_errno; /* If non-zero, an errno value associated with + this signal, as defined in <errno.h>. */ + int si_code; /* Signal code. */ + __pid_t si_pid; /* Sending process ID. */ + __uid_t si_uid; /* Real user ID of sending process. */ + void *si_addr; /* Address of faulting instruction. */ + int si_status; /* Exit value or signal. */ + long int si_band; /* Band event for SIGPOLL. */ + union sigval si_value; /* Signal value. */ + } siginfo_t; + + +/* Values for `si_code'. Positive values are reserved for kernel-generated + signals. */ +enum +{ + SI_ASYNCIO = -4, /* Sent by AIO completion. */ +#define SI_ASYNCIO SI_ASYNCIO + SI_MESGQ, /* Sent by real time mesq state change. */ +#define SI_MESGQ SI_MESGQ + SI_TIMER, /* Sent by timer expiration. */ +#define SI_TIMER SI_TIMER + SI_QUEUE, /* Sent by sigqueue. */ +#define SI_QUEUE SI_QUEUE + SI_USER /* Sent by kill, sigsend, raise. */ +#define SI_USER SI_USER +}; + + +/* `si_code' values for SIGILL signal. */ +enum +{ + ILL_ILLOPC = 1, /* Illegal opcode. */ +#define ILL_ILLOPC ILL_ILLOPC + ILL_ILL_OPN, /* Illegal operand. */ +#define ILL_ILLOPN ILL_ILLOPN + ILL_ILLADR, /* Illegal addressing mode. */ +#define ILL_ILLADR ILL_ILLADR + ILL_ILLTRP, /* Illegal trap. */ +#define ILL_ILLTRP ILL_ILLTRP + ILL_PRVOPC, /* Privileged opcode. */ +#define ILL_PRVOPC ILL_PRVOPC + ILL_PRVREG, /* Privileged register. */ +#define ILL_PRVREG ILL_PRVREG + ILL_COPROC, /* Coprocessor error. */ +#define ILL_COPROC ILL_COPROC + ILL_BADSTK /* Internal stack error. */ +#define ILL_BADSTK ILL_BADSTK +}; + +/* `si_code' values for SIGFPE signal. */ +enum +{ + FPE_INTDIV = 1, /* Integer divide by zero. */ +#define FPE_INTDIV FPE_INTDIV + FPE_INTOVF, /* Integer overflow. */ +#define FPE_INTOVF FPE_INTOVF + FPE_FLTDIV, /* Floating point divide by zero. */ +#define FPE_FLTDIV FPE_FLTDIV + FPE_FLTOVF, /* Floating point overflow. */ +#define FPE_FLTOVF FPE_FLTOVF + FPE_FLTUND, /* Floating point underflow. */ +#define FPE_FLTUND FPE_FLTUND + FPE_FLTRES, /* Floating point inexact result. */ +#define FPE_FLTRES FPE_FLTRES + FPE_FLTINV, /* Floating point invalid operation. */ +#define FPE_FLTINV FPE_FLTINV + FPE_FLTSUB /* Subscript out of range. */ +#define FPE_FLTSUB FPE_FLTSUB +}; + +/* `si_code' values for SIGSEGV signal. */ +enum +{ + SEGV_MAPERR = 1, /* Address not mapped to object. */ +#define SEGV_MAPERR SEGV_MAPERR + SEGV_ACCERR /* Invalid permissions for mapped object. */ +#define SEGV_ACCERR SEGV_ACCERR +}; + +/* `si_code' values for SIGBUS signal. */ +enum +{ + BUS_ADRALN = 1, /* Invalid address alignment. */ +#define BUS_ADRALN BUS_ADRALN + BUS_ADRERR, /* Non-existant physical address. */ +#define BUS_ADRERR BUS_ADRERR + BUS_OBJERR /* Object specific hardware error. */ +#define BUS_OBJERR BUS_OBJERR +}; + +/* `si_code' values for SIGTRAP signal. */ +enum +{ + TRAP_BRKPT = 1, /* Process breakpoint. */ +#define TRAP_BRKPT TRAP_BRKPT + TRAP_TRACE /* Process trace trap. */ +#define TRAP_TRACE TRAP_TRACE +}; + +/* `si_code' values for SIGCHLD signal. */ +enum +{ + CLD_EXITED = 1, /* Child has exited. */ +#define CLD_EXITED CLD_EXITED + CLD_KILLED, /* Child was killed. */ +#define CLD_KILLED CLD_KILLED + CLD_DUMPED, /* Child terminated abnormally. */ +#define CLD_DUMPED CLD_DUMPED + CLD_TRAPPED, /* Traced child has trapped. */ +#define CLD_TRAPPED CLD_TRAPPED + CLD_STOPPED, /* Child has stopped. */ +#define CLD_STOPPED CLD_STOPPED + CLD_CONTINUED /* Stopped child has continued. */ +#define CLD_CONTINUED CLD_CONTINUED +}; + +/* `si_code' values for SIGPOLL signal. */ +enum +{ + POLL_IN = 1, /* Data input available. */ +#define POLL_IN POLL_IN + POLL_OUT, /* Output buffers available. */ +#define POLL_OUT POLL_OUT + POLL_MSG, /* Input message available. */ +#define POLL_MSG POLL_MSG + POLL_ERR, /* I/O error. */ +#define POLL_ERR POLL_ERR + POLL_PRI, /* High priority input available. */ +#define POLL_PRI POLL_PRI + POLL_HUP /* Device disconnected. */ +#define POLL_HUP POLL_HUP +}; + + +/* Structure to transport application-defined values with signals. */ +#define SIGEV_MAX_SIZE 64 +#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE / sizeof (int)) - 3) + +typedef struct sigevent + { + sigval_t sigev_value; + int sigev_signo; + int sigev_notify; + void (*sigev_notify_function) __P ((sigval_t)); /* Function to start. */ + void *sigev_notify_attributes; /* Really pthread_attr_t.*/ + } sigevent_t; + +/* `sigev_notify' values. */ +enum +{ + SIGEV_SIGNAL = 0, /* Notify via signal. */ +#define SIGEV_SIGNAL SIGEV_SIGNAL + SIGEV_NONE, /* Other notification: meaningless. */ +#define SIGEV_NONE SIGEV_NONE + SIGEV_THREAD /* Deliver via thread creation. */ +#define SIGEV_THREAD SIGEV_THREAD +}; diff --git a/sysdeps/generic/bits/utsname.h b/sysdeps/generic/bits/utsname.h index ea3f163cef..cd05db1438 100644 --- a/sysdeps/generic/bits/utsname.h +++ b/sysdeps/generic/bits/utsname.h @@ -16,7 +16,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef _UTSNAME_H +#ifndef _SYS_UTSNAME_H # error "Never include <bits/utsname.h> directly; use <sys/utsname.h> instead." #endif diff --git a/sysdeps/generic/dl-sysdep.c b/sysdeps/generic/dl-sysdep.c index 7ee3002314..b71ad54e55 100644 --- a/sysdeps/generic/dl-sysdep.c +++ b/sysdeps/generic/dl-sysdep.c @@ -40,6 +40,7 @@ extern void _end; extern void ENTRY_POINT (void); ElfW(Addr) _dl_base_addr; +uid_t __libc_uid; int __libc_enable_secure; int __libc_multiple_libcs; /* Defining this here avoids the inclusion of init-first. */ @@ -130,7 +131,7 @@ _dl_sysdep_start (void **start_argptr, SEE (EUID, euid); SEE (EGID, egid); - + __libc_uid = uid; __libc_enable_secure = uid != euid || gid != egid; if (_dl_pagesize == 0) diff --git a/sysdeps/generic/enbl-secure.c b/sysdeps/generic/enbl-secure.c index fdf6f154f6..8e1327c878 100644 --- a/sysdeps/generic/enbl-secure.c +++ b/sysdeps/generic/enbl-secure.c @@ -26,9 +26,13 @@ /* Safest assumption, if somehow the initializer isn't run. */ int __libc_enable_secure = 1; +/* We often need the UID. */ +uid_t __libc_uid; + void __libc_init_secure (void) { - __libc_enable_secure = (__geteuid () != __getuid () || - __getegid () != __getgid ()); + __libc_uid == __getuid (); + __libc_enable_secure = (__geteuid () != __libc_uid + || __getegid () != __getgid ()); } diff --git a/sysdeps/generic/sigqueue.c b/sysdeps/generic/sigqueue.c new file mode 100644 index 0000000000..c6af1d7021 --- /dev/null +++ b/sysdeps/generic/sigqueue.c @@ -0,0 +1,32 @@ +/* Implementation of sigqueue function from POSIX.1b. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <errno.h> +#include <signal.h> + +int +__sigqueue (pid_t pid, int sig, const union sigval val) +{ + __set_errno (ENOSYS); + return -1; +} +weak_alias (__sigqueue, sigqueue) + +stub_warning (sigqueue) +#include <stub-tag.h> diff --git a/sysdeps/generic/sigtimedwait.c b/sysdeps/generic/sigtimedwait.c new file mode 100644 index 0000000000..4f9497794b --- /dev/null +++ b/sysdeps/generic/sigtimedwait.c @@ -0,0 +1,33 @@ +/* Implementation of sigtimedwait function from POSIX.1b. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <errno.h> +#include <signal.h> + +int +__sigtimedwait (const sigset_t *set, siginfo_t *info, + const struct timespec *timeout) +{ + __set_errno (ENOSYS); + return -1; +} +weak_alias (__sigtimedwait, sigtimedwait) + +stub_warning (sigtimedwait) +#include <stub-tag.h> diff --git a/sysdeps/generic/sigwaitinfo.c b/sysdeps/generic/sigwaitinfo.c new file mode 100644 index 0000000000..49014e94b0 --- /dev/null +++ b/sysdeps/generic/sigwaitinfo.c @@ -0,0 +1,32 @@ +/* Implementation of sigwaitinfo function from POSIX.1b. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <errno.h> +#include <signal.h> + +int +__sigwaitinfo (const sigset_t *set, siginfo_t *info) +{ + __set_errno (ENOSYS); + return -1; +} +weak_alias (__sigwaitinfo, sigwaitinfo) + +stub_warning (sigwaitinfo) +#include <stub-tag.h> diff --git a/sysdeps/generic/testrtsig.h b/sysdeps/generic/testrtsig.h new file mode 100644 index 0000000000..25eb488f84 --- /dev/null +++ b/sysdeps/generic/testrtsig.h @@ -0,0 +1,28 @@ +/* Test whether RT signals are really available. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <string.h> +#include <sys/utsname.h> + +int +kernel_has_rtsig (void) +{ + return 0; +} |