diff options
95 files changed, 1192 insertions, 2911 deletions
diff --git a/ChangeLog b/ChangeLog index 43beed2983..62341b8ed3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,132 @@ 2017-05-20 Zack Weinberg <zackw@panix.com> + * bits/sigevent-consts.h + * bits/siginfo-consts.h + * bits/types/__sigset_t.h + * bits/types/sigevent_t.h + * bits/types/siginfo_t.h + * sysdeps/unix/sysv/linux/bits/sigevent-consts.h + * sysdeps/unix/sysv/linux/bits/siginfo-consts.h + * sysdeps/unix/sysv/linux/bits/types/__sigset_t.h + * sysdeps/unix/sysv/linux/bits/types/sigevent_t.h + * sysdeps/unix/sysv/linux/bits/types/siginfo_t.h: + New system-dependent bits headers. + + * sysdeps/unix/sysv/linux/bits/siginfo-arch.h + * sysdeps/unix/sysv/linux/bits/siginfo-consts-arch.h + * sysdeps/unix/sysv/linux/ia64/bits/siginfo-arch.h + * sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h + * sysdeps/unix/sysv/linux/mips/bits/siginfo-arch.h + * sysdeps/unix/sysv/linux/sparc/bits/siginfo-arch.h + * sysdeps/unix/sysv/linux/tile/bits/siginfo-arch.h + * sysdeps/unix/sysv/linux/tile/bits/siginfo-consts-arch.h + * sysdeps/unix/sysv/linux/x86/bits/siginfo-arch.h: + New Linux-only system-dependent bits headers. + + * signal/bits/types/sig_atomic_t.h + * signal/bits/types/sigset_t.h + * signal/bits/types/sigval_t.h: + New non-system-dependent bits headers. + + * sysdeps/generic/sigsetops.h + * sysdeps/unix/sysv/linux/sigsetops.h: + New internal headers. + + * include/bits/types/sig_atomic_t.h + * include/bits/types/sigset_t.h + * include/bits/types/sigval_t.h: + New wrappers. + + * signal/sigsetops.h + * bits/siginfo.h + * bits/sigset.h + * sysdeps/unix/sysv/linux/bits/siginfo.h + * sysdeps/unix/sysv/linux/bits/sigset.h + * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h + * sysdeps/unix/sysv/linux/mips/bits/siginfo.h + * sysdeps/unix/sysv/linux/s390/bits/siginfo.h + * sysdeps/unix/sysv/linux/sparc/bits/siginfo.h + * sysdeps/unix/sysv/linux/tile/bits/siginfo.h + * sysdeps/unix/sysv/linux/x86/bits/siginfo.h: + Deleted. + + * signal/Makefile, sysdeps/unix/sysv/linux/Makefile: + Update lists of installed headers. + + * posix/bits/types.h: Define __sig_atomic_t here. + * signal/signal.h: Use the new bits headers; no need to handle + __need_sig_atomic_t nor __need_sigset_t. Don't use __sigmask + to define sigmask. + * include/signal.h: No need to handle __need_sig_atomic_t + nor __need_sigset_t. Don't define __sigemptyset. + + * io/sys/poll.h, setjmp/setjmp.h + * sysdeps/arm/sys/ucontext.h, sysdeps/generic/sys/ucontext.h + * sysdeps/i386/sys/ucontext.h, sysdeps/m68k/sys/ucontext.h + * sysdeps/mach/hurd/i386/bits/sigcontext.h + * sysdeps/mips/sys/ucontext.h, sysdeps/powerpc/novmxsetjmp.h + * sysdeps/pthread/bits/sigthread.h + * sysdeps/unix/sysv/linux/hppa/sys/ucontext.h + * sysdeps/unix/sysv/linux/m68k/sys/ucontext.h + * sysdeps/unix/sysv/linux/mips/sys/ucontext.h + * sysdeps/unix/sysv/linux/nios2/sys/ucontext.h + * sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h + * sysdeps/unix/sysv/linux/s390/sys/ucontext.h + * sysdeps/unix/sysv/linux/sh/sys/ucontext.h + * sysdeps/unix/sysv/linux/sparc/sys/ucontext.h + * sysdeps/unix/sysv/linux/tile/sys/ucontext.h + * sysdeps/unix/sysv/linux/x86/sys/ucontext.h: + Use bits/types/__sigset_t.h. + + * misc/sys/select.h, posix/spawn.h + * sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h + * sysdeps/unix/sysv/linux/sys/epoll.h + * sysdeps/unix/sysv/linux/sys/signalfd.h: + Use bits/types/sigset_t.h. + + * resolv/netdb.h, rt/mqueue.h: Use bits/types/sigevent_t.h. + * rt/aio.h: Use bits/types/sigevent_t.h and bits/sigevent-consts.h. + * socket/sys/socket.h: Don't include bits/sigset.h. + + * login/utmp_file.c, shadow/lckpwdf.c, signal/sigandset.c + * signal/sigisempty.c, stdlib/abort.c, sysdeps/posix/profil.c + * sysdeps/posix/sigignore.c, sysdeps/posix/sigintr.c + * sysdeps/posix/signal.c, sysdeps/posix/sigset.c + * sysdeps/posix/sprofil.c, sysdeps/posix/sysv_signal.c + * sysdeps/unix/sysv/linux/nptl-signals.h: + Include sigsetops.h. + + * signal/sigaddset.c, signal/sigandset.c, signal/sigdelset.c + * signal/sigorset.c, stdlib/abort.c, sysdeps/posix/sigignore.c + * sysdeps/posix/signal.c, sysdeps/posix/sigset.c: + __sigaddset, __sigandset, __sigdelset, __sigemptyset, __sigorset + now return no value. + + * signal/sigaddset.c, signal/sigdelset.c, signal/sigismem.c + Include <errno.h>, <signal.h>, and <sigsetops.h> instead of + "sigsetops.h". + + * signal/sigsetops.c: Explicitly define __sigismember, + __sigaddset, and __sigdelset as compatibility symbols. + + * signal/Versions: Correct commentary on __sigpause, + __sigaddset, __sigdelset, __sigismember. + + * inet/rcmd.c: Include sigsetops.h. Convert old code using + __sigblock/__sigsetmask to use __sigprocmask and friends. + + * resolv/resolv.h: Remove __need_res_state logic. + Move definition of res_state and related constants to ... + * resolv/bits/types/res_state.h: ...this new file. + * resolv/Makefile: Install bits/types/res_state.h. + * include/bits/types/res_state.h: New wrapper. + * include/list.h: Remove __need_list_t logic. + Move definition of list_t to ... + * include/list_t.h: ...this new file. + + * nptl/descr.h: Include list_t.h and bits/types/res_state.h + instead of list.h and resolv.h. + * resolv/resolv.h: Remove __need_res_state logic. Move definition of res_state and related constants to ... * resolv/bits/types/res_state.h: ...this new file. diff --git a/signal/sigsetops.h b/bits/sigevent-consts.h index cd1282000e..f5940e00ea 100644 --- a/signal/sigsetops.h +++ b/bits/sigevent-consts.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1991-2017 Free Software Foundation, Inc. +/* sigevent constants. Stub version. + Copyright (C) 1997-2017 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 @@ -15,18 +16,22 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -/* Definitions relevant to functions that operate on `sigset_t's. */ +#ifndef _BITS_SIGEVENT_CONSTS_H +#define _BITS_SIGEVENT_CONSTS_H 1 -#include <errno.h> -#include <signal.h> -#include <string.h> +#if !defined _SIGNAL_H && !defined _AIO_H +#error "Don't include <bits/sigevent-consts.h> directly; use <signal.h> instead." +#endif -#define BITS (_NSIG - 1) -#define ELT(signo) (((signo) - 1) / BITS) -#define MASK(signo) (1 << (((signo) - 1) % BITS)) +/* `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 +}; -#undef sigemptyset -#undef sigfillset -#undef sigaddset -#undef sigdelset -#undef sigismember +#endif diff --git a/bits/siginfo.h b/bits/siginfo-consts.h index 4919df5436..a58ac4bdb7 100644 --- a/bits/siginfo.h +++ b/bits/siginfo-consts.h @@ -1,4 +1,4 @@ -/* siginfo_t, sigevent and constants. Stub version. +/* siginfo_t constants. Stub version. Copyright (C) 1997-2017 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -16,42 +16,8 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#if !defined _SIGNAL_H && !defined __need_siginfo_t \ - && !defined __need_sigevent_t -# error "Never include this file directly. Use <signal.h> instead" -#endif - -#if (!defined __have_sigval_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t \ - || defined __need_sigevent_t)) -# define __have_sigval_t 1 - -/* Type for data associated with a signal. */ -typedef union sigval - { - int sival_int; - void *sival_ptr; - } sigval_t; -#endif - -#if (!defined __have_siginfo_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t)) -# define __have_siginfo_t 1 - -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; - +#ifndef _BITS_SIGINFO_CONSTS_H +#define _BITS_SIGINFO_CONSTS_H 1 /* Values for `si_code'. Positive values are reserved for kernel-generated signals. */ @@ -181,36 +147,4 @@ enum }; # endif -# undef __need_siginfo_t -#endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ - - -#if (defined _SIGNAL_H || defined __need_sigevent_t) \ - && !defined __have_sigevent_t -# define __have_sigevent_t 1 - -/* 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) (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 -}; - -#endif /* have _SIGNAL_H. */ +#endif diff --git a/bits/sigset.h b/bits/sigset.h deleted file mode 100644 index 4099cc703f..0000000000 --- a/bits/sigset.h +++ /dev/null @@ -1,84 +0,0 @@ -/* __sig_atomic_t, __sigset_t, and related definitions. Generic/BSD version. - Copyright (C) 1991-2017 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SIGSET_H_types -#define _SIGSET_H_types 1 - -typedef int __sig_atomic_t; - -/* A `sigset_t' has a bit for each signal. */ -typedef unsigned long int __sigset_t; - -#endif - - -/* We only want to define these functions if <signal.h> was actually - included; otherwise we were included just to define the types. Since we - are namespace-clean, it wouldn't hurt to define extra macros. But - trouble can be caused by functions being defined (e.g., any global - register vars declared later will cause compilation errors). */ - -#if !defined _SIGSET_H_fns && defined _SIGNAL_H -#define _SIGSET_H_fns 1 - -#ifndef _EXTERN_INLINE -# define _EXTERN_INLINE __extern_inline -#endif - -/* Return a mask that includes SIG only. The cast to `sigset_t' avoids - overflow if `sigset_t' is wider than `int'. */ -#define __sigmask(sig) (((__sigset_t) 1) << ((sig) - 1)) - -#define __sigemptyset(set) \ - (__extension__ ({ *(set) = (__sigset_t) 0; 0; }) -#define __sigfillset(set) \ - (__extension__ ({ *(set) = ~(__sigset_t) 0; 0; })) - -#ifdef _GNU_SOURCE -# define __sigisemptyset(set) (*(set) == (__sigset_t) 0) -# define __sigandset(dest, left, right) \ - (__extension__ ({ *(dest) = *(left) & *(right); 0; })) -# define __sigorset(dest, left, right) \ - (__extension__ ({ *(dest) = *(left) | *(right); 0; })) -#endif - -/* These functions needn't check for a bogus signal number -- error - checking is done in the non __ versions. */ - -extern int __sigismember (const __sigset_t *, int); -extern int __sigaddset (__sigset_t *, int); -extern int __sigdelset (__sigset_t *, int); - -#ifdef __USE_EXTERN_INLINES -# define __SIGSETFN(NAME, BODY, CONST) \ - _EXTERN_INLINE int \ - NAME (CONST __sigset_t *__set, int __sig) \ - { \ - __sigset_t __mask = __sigmask (__sig); \ - return BODY; \ - } - -__SIGSETFN (__sigismember, (*__set & __mask) ? 1 : 0, const) -__SIGSETFN (__sigaddset, ((*__set |= __mask), 0), ) -__SIGSETFN (__sigdelset, ((*__set &= ~__mask), 0), ) - -# undef __SIGSETFN -#endif - - -#endif /* ! _SIGSET_H_fns. */ diff --git a/bits/types/__sigset_t.h b/bits/types/__sigset_t.h new file mode 100644 index 0000000000..c90d760a6e --- /dev/null +++ b/bits/types/__sigset_t.h @@ -0,0 +1,7 @@ +#ifndef ____sigset_t_defined +#define ____sigset_t_defined 1 + +/* A `sigset_t' has a bit for each signal. */ +typedef unsigned long int __sigset_t; + +#endif diff --git a/bits/types/sigevent_t.h b/bits/types/sigevent_t.h new file mode 100644 index 0000000000..7b8cb054d7 --- /dev/null +++ b/bits/types/sigevent_t.h @@ -0,0 +1,17 @@ +#ifndef __sigevent_t_defined +#define __sigevent_t_defined 1 + +#include <bits/types.h> +#include <bits/types/sigval_t.h> + +/* Structure to transport application-defined values with signals. */ +typedef struct sigevent + { + sigval_t sigev_value; + int sigev_signo; + int sigev_notify; + void (*sigev_notify_function) (sigval_t); /* Function to start. */ + void *sigev_notify_attributes; /* Really pthread_attr_t.*/ + } sigevent_t; + +#endif diff --git a/bits/types/siginfo_t.h b/bits/types/siginfo_t.h new file mode 100644 index 0000000000..ab6bf18bec --- /dev/null +++ b/bits/types/siginfo_t.h @@ -0,0 +1,21 @@ +#ifndef __siginfo_t_defined +#define __siginfo_t_defined 1 + +#include <bits/types.h> +#include <bits/types/sigval_t.h> + +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. */ + sigval_t si_value; /* Signal value. */ + } siginfo_t; + +#endif diff --git a/include/bits/types/sig_atomic_t.h b/include/bits/types/sig_atomic_t.h new file mode 100644 index 0000000000..783693f71c --- /dev/null +++ b/include/bits/types/sig_atomic_t.h @@ -0,0 +1 @@ +#include <signal/bits/types/sig_atomic_t.h> diff --git a/include/bits/types/sigset_t.h b/include/bits/types/sigset_t.h new file mode 100644 index 0000000000..20c3dc2095 --- /dev/null +++ b/include/bits/types/sigset_t.h @@ -0,0 +1 @@ +#include <signal/bits/types/sigset_t.h> diff --git a/include/bits/types/sigval_t.h b/include/bits/types/sigval_t.h new file mode 100644 index 0000000000..296734e827 --- /dev/null +++ b/include/bits/types/sigval_t.h @@ -0,0 +1 @@ +#include <signal/bits/types/sigval_t.h> diff --git a/include/signal.h b/include/signal.h index 276a99d80a..e39ddc60b9 100644 --- a/include/signal.h +++ b/include/signal.h @@ -1,7 +1,4 @@ #ifndef _SIGNAL_H -#if defined __need_sig_atomic_t || defined __need_sigset_t -# include <signal/signal.h> -#else # include <signal/signal.h> # ifndef _ISOMAC @@ -53,12 +50,6 @@ libc_hidden_proto (__libc_sigaction) extern int __default_sigpause (int mask); extern int __xpg_sigpause (int sig); -/* Simplified sigemptyset() implementation without the parameter checking. */ -#undef __sigemptyset -#define __sigemptyset(ss) \ - ({ __builtin_memset (ss, '\0', sizeof (sigset_t)); 0; }) - - /* Allocate real-time signal with highest/lowest available priority. */ extern int __libc_allocate_rtsig (int __high); @@ -66,6 +57,6 @@ extern int __libc_allocate_rtsig (int __high); extern __typeof (__sigaction) __sigaction attribute_hidden; extern __typeof (__libc_sigaction) __libc_sigaction attribute_hidden; # endif -# endif -#endif -#endif + +# endif /* _ISOMAC */ +#endif /* signal.h */ diff --git a/inet/rcmd.c b/inet/rcmd.c index c285b9ecd6..e970123a9a 100644 --- a/inet/rcmd.c +++ b/inet/rcmd.c @@ -78,6 +78,7 @@ #include <stdlib.h> #include <wchar.h> #include <sys/uio.h> +#include <sigsetops.h> int __ivaliduser (FILE *, u_int32_t, const char *, const char *); @@ -112,7 +113,8 @@ rcmd_af (char **ahost, u_short rport, const char *locuser, const char *remuser, struct sockaddr_in6 sin6; } from; struct pollfd pfd[2]; - int32_t oldmask; + sigset_t mask, omask; + pid_t pid; int s, lport, timo, error; char c; @@ -160,7 +162,9 @@ rcmd_af (char **ahost, u_short rport, const char *locuser, const char *remuser, *ahost = NULL; ai = res; refused = 0; - oldmask = __sigblock(sigmask(SIGURG)); + __sigemptyset(&mask); + __sigaddset(&mask, SIGURG); + __sigprocmask (SIG_BLOCK, &mask, &omask); for (timo = 1, lport = IPPORT_RESERVED - 1;;) { char errbuf[200]; @@ -172,7 +176,7 @@ rcmd: socket: All ports in use\n")); else __fxprintf(NULL, "rcmd: socket: %m\n"); - __sigsetmask(oldmask); + __sigprocmask (SIG_SETMASK, &omask, 0); freeaddrinfo(res); return -1; } @@ -225,7 +229,7 @@ rcmd: socket: All ports in use\n")); freeaddrinfo(res); (void)__fxprintf(NULL, "%s: %s\n", *ahost, __strerror_r(errno, errbuf, sizeof (errbuf))); - __sigsetmask(oldmask); + __sigprocmask (SIG_SETMASK, &omask, 0); return -1; } lport--; @@ -337,7 +341,7 @@ socket: protocol failure in circuit setup\n")) >= 0) } goto bad2; } - __sigsetmask(oldmask); + __sigprocmask (SIG_SETMASK, &omask, 0); freeaddrinfo(res); return s; bad2: @@ -345,7 +349,7 @@ bad2: (void)__close(*fd2p); bad: (void)__close(s); - __sigsetmask(oldmask); + __sigprocmask (SIG_SETMASK, &omask, 0); freeaddrinfo(res); return -1; } diff --git a/io/sys/poll.h b/io/sys/poll.h index 7356fb9ea5..e34c2db5a9 100644 --- a/io/sys/poll.h +++ b/io/sys/poll.h @@ -24,10 +24,8 @@ /* Get the platform dependent bits of `poll'. */ #include <bits/poll.h> #ifdef __USE_GNU -/* Get the __sigset_t definition. */ -# include <bits/sigset.h> -/* Get the timespec definition. */ -#include <bits/types/struct_timespec.h> +# include <bits/types/__sigset_t.h> +# include <bits/types/struct_timespec.h> #endif diff --git a/login/utmp_file.c b/login/utmp_file.c index 6ebe1ef123..240e0e3c10 100644 --- a/login/utmp_file.c +++ b/login/utmp_file.c @@ -28,6 +28,7 @@ #include <utmp.h> #include <not-cancel.h> #include <kernel-features.h> +#include <sigsetops.h> #include "utmp-private.h" #include "utmp-equal.h" diff --git a/misc/sys/select.h b/misc/sys/select.h index e27fb44af8..06dd31b476 100644 --- a/misc/sys/select.h +++ b/misc/sys/select.h @@ -29,13 +29,8 @@ /* Get __FD_* definitions. */ #include <bits/select.h> -/* Get __sigset_t. */ -#include <bits/sigset.h> - -#ifndef __sigset_t_defined -# define __sigset_t_defined -typedef __sigset_t sigset_t; -#endif +/* Get sigset_t. */ +#include <bits/types/sigset_t.h> /* Get definition of timer specification structures. */ #include <bits/types/time_t.h> diff --git a/posix/bits/types.h b/posix/bits/types.h index 7638bd044d..e2f73a89e4 100644 --- a/posix/bits/types.h +++ b/posix/bits/types.h @@ -197,6 +197,10 @@ __STD_TYPE __SWORD_TYPE __intptr_t; /* Duplicate info from sys/socket.h. */ __STD_TYPE __U32_TYPE __socklen_t; +/* C99: An integer type that can be accessed as an atomic entity, + even in the presence of asynchronous interrupts. + It is not currently necessary for this to be machine-specific. */ +typedef int __sig_atomic_t; #undef __STD_TYPE diff --git a/posix/spawn.h b/posix/spawn.h index a1154a3cdf..2fa5f547c7 100644 --- a/posix/spawn.h +++ b/posix/spawn.h @@ -21,9 +21,8 @@ #include <features.h> #include <sched.h> -#define __need_sigset_t -#include <signal.h> #include <sys/types.h> +#include <bits/types/sigset_t.h> /* Data structure to contain attributes for thread creation. */ diff --git a/posix/sys/wait.h b/posix/sys/wait.h index 897bfaed6f..d5b7e4d8d4 100644 --- a/posix/sys/wait.h +++ b/posix/sys/wait.h @@ -103,8 +103,7 @@ typedef __id_t id_t; # define __id_t_defined # endif -# define __need_siginfo_t -# include <bits/siginfo.h> +# include <bits/types/siginfo_t.h> /* Wait for a childing matching IDTYPE and ID to change the status and place appropriate information in *INFOP. diff --git a/resolv/netdb.h b/resolv/netdb.h index 936fab95ed..f76ccf123e 100644 --- a/resolv/netdb.h +++ b/resolv/netdb.h @@ -33,8 +33,7 @@ #endif #ifdef __USE_GNU -# define __need_sigevent_t -# include <bits/siginfo.h> +# include <bits/types/sigevent_t.h> # include <bits/types/struct_timespec.h> #endif diff --git a/rt/aio.h b/rt/aio.h index 5647e521f5..d72ad5d97d 100644 --- a/rt/aio.h +++ b/rt/aio.h @@ -24,8 +24,8 @@ #include <features.h> #include <sys/types.h> -#define __need_sigevent_t -#include <bits/siginfo.h> +#include <bits/types/sigevent_t.h> +#include <bits/sigevent-consts.h> #include <bits/types/struct_timespec.h> __BEGIN_DECLS diff --git a/rt/mqueue.h b/rt/mqueue.h index d65871e3c2..c79aa53b94 100644 --- a/rt/mqueue.h +++ b/rt/mqueue.h @@ -21,8 +21,7 @@ #include <features.h> #include <sys/types.h> #include <fcntl.h> -#define __need_sigevent_t -#include <bits/siginfo.h> +#include <bits/types/sigevent_t.h> #include <bits/types/struct_timespec.h> /* Get the definition of mqd_t and struct mq_attr. */ #include <bits/mqueue.h> diff --git a/setjmp/setjmp.h b/setjmp/setjmp.h index e10adaf1fc..86fb2edf6c 100644 --- a/setjmp/setjmp.h +++ b/setjmp/setjmp.h @@ -27,8 +27,7 @@ __BEGIN_DECLS #include <bits/setjmp.h> /* Get `__jmp_buf'. */ -#include <bits/sigset.h> /* Get `__sigset_t'. */ - +#include <bits/types/__sigset_t.h> /* Calling environment, plus possibly a saved signal mask. */ struct __jmp_buf_tag diff --git a/shadow/lckpwdf.c b/shadow/lckpwdf.c index 09427eb233..15602efb68 100644 --- a/shadow/lckpwdf.c +++ b/shadow/lckpwdf.c @@ -24,6 +24,7 @@ #include <string.h> #include <unistd.h> #include <sys/file.h> +#include <sigsetops.h> #include <kernel-features.h> diff --git a/signal/Makefile b/signal/Makefile index 077aaea6ad..de92558f2c 100644 --- a/signal/Makefile +++ b/signal/Makefile @@ -22,10 +22,14 @@ subdir := signal include ../Makeconfig -headers := signal.h sys/signal.h bits/signum.h bits/sigcontext.h \ - bits/sigaction.h bits/sigset.h bits/siginfo.h bits/sigstack.h \ - bits/sigthread.h bits/types/struct_sigstack.h bits/types/stack_t.h \ - bits/ss_flags.h +headers := signal.h sys/signal.h \ + bits/signum.h bits/sigcontext.h bits/sigaction.h \ + bits/sigevent-consts.h bits/siginfo-consts.h \ + bits/sigstack.h bits/sigthread.h bits/ss_flags.h \ + bits/types/__sigset_t.h bits/types/sig_atomic_t.h \ + bits/types/sigevent_t.h bits/types/siginfo_t.h \ + bits/types/sigset_t.h bits/types/stack_t.h \ + bits/types/struct_sigstack.h routines := signal raise killpg \ sigaction sigprocmask kill \ diff --git a/signal/Versions b/signal/Versions index 4d86930ec6..a915ef400f 100644 --- a/signal/Versions +++ b/signal/Versions @@ -1,13 +1,13 @@ libc { GLIBC_2.0 { # functions with special/multiple interfaces - __sigaddset; __sigdelset; __sigismember; __sysv_signal; + __sigpause; __sysv_signal; - # functions used in inline functions or macros - __sigpause; + # functions formerly used in inline functions or macros + __sigaddset; __sigdelset; __sigismember; # functions used in other libraries - __sigaction; + __sigaction; # b* bsd_signal; diff --git a/signal/bits/types/sig_atomic_t.h b/signal/bits/types/sig_atomic_t.h new file mode 100644 index 0000000000..47eaa28311 --- /dev/null +++ b/signal/bits/types/sig_atomic_t.h @@ -0,0 +1,10 @@ +#ifndef __sig_atomic_t_defined +#define __sig_atomic_t_defined 1 + +#include <bits/types.h> + +/* An integral type that can be modified atomically, without the + possibility of a signal arriving in the middle of the operation. */ +typedef __sig_atomic_t sig_atomic_t; + +#endif diff --git a/signal/bits/types/sigset_t.h b/signal/bits/types/sigset_t.h new file mode 100644 index 0000000000..8b27e9112d --- /dev/null +++ b/signal/bits/types/sigset_t.h @@ -0,0 +1,9 @@ +#ifndef __sigset_t_defined +#define __sigset_t_defined 1 + +#include <bits/types/__sigset_t.h> + +/* A set of signals to be blocked, unblocked, or waited for. */ +typedef __sigset_t sigset_t; + +#endif diff --git a/signal/bits/types/sigval_t.h b/signal/bits/types/sigval_t.h new file mode 100644 index 0000000000..666598f0ca --- /dev/null +++ b/signal/bits/types/sigval_t.h @@ -0,0 +1,13 @@ +#ifndef __sigval_t_defined +#define __sigval_t_defined + +/* Type for data associated with a signal. */ +union sigval +{ + int sival_int; + void *sival_ptr; +}; + +typedef union sigval sigval_t; + +#endif diff --git a/signal/sigaddset.c b/signal/sigaddset.c index ca280d8e76..161be7b352 100644 --- a/signal/sigaddset.c +++ b/signal/sigaddset.c @@ -15,7 +15,9 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#include "sigsetops.h" +#include <errno.h> +#include <signal.h> +#include <sigsetops.h> /* Add SIGNO to SET. */ int @@ -27,6 +29,7 @@ sigaddset (sigset_t *set, int signo) return -1; } - return __sigaddset (set, signo); + __sigaddset (set, signo); + return 0; } libc_hidden_def (sigaddset) diff --git a/signal/sigandset.c b/signal/sigandset.c index f81a5939ee..ffea141c63 100644 --- a/signal/sigandset.c +++ b/signal/sigandset.c @@ -17,18 +17,18 @@ #include <errno.h> #include <signal.h> -#define __need_NULL -#include <stddef.h> +#include <sigsetops.h> /* Combine sets LEFT and RIGHT by logical AND and place result in DEST. */ int sigandset (sigset_t *dest, const sigset_t *left, const sigset_t *right) { - if (dest == NULL || left == NULL || right == NULL) + if (!dest || !left || !right) { __set_errno (EINVAL); return -1; } - return __sigandset (dest, left, right); + __sigandset (dest, left, right); + return 0; } diff --git a/signal/sigdelset.c b/signal/sigdelset.c index 4632103b22..2aaa536937 100644 --- a/signal/sigdelset.c +++ b/signal/sigdelset.c @@ -15,7 +15,9 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#include "sigsetops.h" +#include <errno.h> +#include <signal.h> +#include <sigsetops.h> /* Add SIGNO to SET. */ int @@ -27,6 +29,7 @@ sigdelset (sigset_t *set, int signo) return -1; } - return __sigdelset (set, signo); + __sigdelset (set, signo); + return 0; } libc_hidden_def (sigdelset) diff --git a/signal/sigisempty.c b/signal/sigisempty.c index eabe71ce6b..bea03f1216 100644 --- a/signal/sigisempty.c +++ b/signal/sigisempty.c @@ -17,18 +17,17 @@ #include <errno.h> #include <signal.h> -#define __need_NULL -#include <stddef.h> +#include <sigsetops.h> /* Test whether SET is empty. */ int sigisemptyset (const sigset_t *set) { - if (set == NULL) + if (!set) { __set_errno (EINVAL); return -1; } - return __sigisemptyset (set); + return __sigisemptyset (set); } diff --git a/signal/sigismem.c b/signal/sigismem.c index 8da14ac26d..6ef4a4d19d 100644 --- a/signal/sigismem.c +++ b/signal/sigismem.c @@ -15,7 +15,9 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#include "sigsetops.h" +#include <errno.h> +#include <signal.h> +#include <sigsetops.h> /* Return 1 if SIGNO is in SET, 0 if not. */ int diff --git a/signal/signal.h b/signal/signal.h index d01df3290a..a51e912d08 100644 --- a/signal/signal.h +++ b/signal/signal.h @@ -20,40 +20,21 @@ */ #ifndef _SIGNAL_H - -#if !defined __need_sig_atomic_t && !defined __need_sigset_t -# define _SIGNAL_H -#endif +#define _SIGNAL_H #include <features.h> __BEGIN_DECLS -#include <bits/sigset.h> /* __sigset_t, __sig_atomic_t. */ +#include <bits/types.h> +#include <bits/signum.h> -/* An integral type that can be modified atomically, without the - possibility of a signal arriving in the middle of the operation. */ -#if defined __need_sig_atomic_t || defined _SIGNAL_H -# ifndef __sig_atomic_t_defined -# define __sig_atomic_t_defined -typedef __sig_atomic_t sig_atomic_t; -# endif -# undef __need_sig_atomic_t -#endif +#include <bits/types/sig_atomic_t.h> -#if defined __need_sigset_t || (defined _SIGNAL_H && defined __USE_POSIX) -# ifndef __sigset_t_defined -# define __sigset_t_defined -typedef __sigset_t sigset_t; -# endif -# undef __need_sigset_t +#if defined __USE_POSIX +#include <bits/types/sigset_t.h> #endif -#ifdef _SIGNAL_H - -#include <bits/types.h> -#include <bits/signum.h> - #if defined __USE_XOPEN || defined __USE_XOPEN2K # ifndef __pid_t_defined typedef __pid_t pid_t; @@ -73,8 +54,10 @@ typedef __uid_t uid_t; #endif #if defined __USE_POSIX199309 || defined __USE_XOPEN_EXTENDED -/* Get the `siginfo_t' type plus the needed symbols. */ -# include <bits/siginfo.h> +# include <bits/types/siginfo_t.h> +# include <bits/types/sigevent_t.h> +# include <bits/siginfo-consts.h> +# include <bits/sigevent-consts.h> #endif @@ -174,7 +157,7 @@ extern int __sigpause (int __sig_or_mask, int __is_sig); simply do not work in many situations. Use `sigprocmask' instead. */ /* Compute mask for signal SIG. */ -# define sigmask(sig) __sigmask(sig) +# define sigmask(sig) ((int)(1u << ((sig) - 1))) /* Block signals in MASK, returning the old mask. */ extern int sigblock (int __mask) __THROW __attribute_deprecated__; @@ -366,8 +349,6 @@ extern int __libc_current_sigrtmin (void) __THROW; /* Return number of available real-time signal with lowest priority. */ extern int __libc_current_sigrtmax (void) __THROW; -#endif /* signal.h */ - __END_DECLS #endif /* not signal.h */ diff --git a/signal/sigorset.c b/signal/sigorset.c index 9ea867d79d..8a586db6b5 100644 --- a/signal/sigorset.c +++ b/signal/sigorset.c @@ -17,18 +17,18 @@ #include <errno.h> #include <signal.h> -#define __need_NULL -#include <stddef.h> +#include <sigsetops.h> /* Combine sets LEFT and RIGHT by logical OR and place result in DEST. */ int sigorset (sigset_t *dest, const sigset_t *left, const sigset_t *right) { - if (dest == NULL || left == NULL || right == NULL) + if (!dest || !left || !right) { __set_errno (EINVAL); return -1; } - return __sigorset (dest, left, right); + __sigorset (dest, left, right); + return 0; } diff --git a/signal/sigsetops.c b/signal/sigsetops.c index 0317662a14..d56412f94b 100644 --- a/signal/sigsetops.c +++ b/signal/sigsetops.c @@ -1,11 +1,53 @@ -/* Define the real-function versions of all inline functions - defined in signal.h (or bits/sigset.h). */ +/* Compatibility symbols for old versions of signal.h. + Copyright (C) 2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. -#include <features.h> + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. -#define _EXTERN_INLINE -#ifndef __USE_EXTERN_INLINES -# define __USE_EXTERN_INLINES 1 -#endif + 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include <signal.h> +#include <sigsetops.h> +#include <shlib-compat.h> + +/* These were formerly defined by <signal.h> as inline functions, + so they require out-of-line compatibility definitions. */ +#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_26) -#include "signal.h" +int +attribute_compat_text_section +(__sigismember) (const __sigset_t *set, int sig) +{ + return __sigismember (set, sig); +} +compat_symbol (libc, __sigismember, __sigismember, GLIBC_2_0); + +int +attribute_compat_text_section +(__sigaddset) (__sigset_t *set, int sig) +{ + __sigaddset (set, sig); + return 0; +} +compat_symbol (libc, __sigaddset, __sigaddset, GLIBC_2_0); + +int +attribute_compat_text_section +(__sigdelset) (__sigset_t *set, int sig) +{ + __sigdelset (set, sig); + return 0; +} +compat_symbol (libc, __sigdelset, __sigdelset, GLIBC_2_0); + +#endif diff --git a/socket/sys/socket.h b/socket/sys/socket.h index 7af41097bb..bbfde8f602 100644 --- a/socket/sys/socket.h +++ b/socket/sys/socket.h @@ -26,11 +26,6 @@ __BEGIN_DECLS #include <bits/types/struct_iovec.h> #define __need_size_t #include <stddef.h> -#ifdef __USE_GNU -/* Get the __sigset_t definition. */ -# include <bits/sigset.h> -#endif - /* This operating system-specific header file defines the SOCK_*, PF_*, AF_*, MSG_*, SOL_*, and SO_* constants, and the `struct sockaddr', diff --git a/stdlib/abort.c b/stdlib/abort.c index d30de0b02c..19882f3e3d 100644 --- a/stdlib/abort.c +++ b/stdlib/abort.c @@ -21,6 +21,7 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <sigsetops.h> /* Try to get a machine dependent instruction which will make the program crash. This is used in case everything else fails. */ @@ -57,13 +58,13 @@ abort (void) /* Now it's for sure we are alone. But recursive calls are possible. */ - /* Unlock SIGABRT. */ + /* Unblock SIGABRT. */ if (stage == 0) { ++stage; - if (__sigemptyset (&sigs) == 0 && - __sigaddset (&sigs, SIGABRT) == 0) - __sigprocmask (SIG_UNBLOCK, &sigs, (sigset_t *) NULL); + __sigemptyset (&sigs); + __sigaddset (&sigs, SIGABRT); + __sigprocmask (SIG_UNBLOCK, &sigs, 0); } /* Flush all streams. We cannot close them now because the user diff --git a/sysdeps/arm/sys/ucontext.h b/sysdeps/arm/sys/ucontext.h index 49d60395dd..bbfeb20bb5 100644 --- a/sysdeps/arm/sys/ucontext.h +++ b/sysdeps/arm/sys/ucontext.h @@ -25,6 +25,7 @@ /* We need the signal context definitions even if they are not exposed by <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> diff --git a/sysdeps/generic/sigsetops.h b/sysdeps/generic/sigsetops.h new file mode 100644 index 0000000000..e8e5553981 --- /dev/null +++ b/sysdeps/generic/sigsetops.h @@ -0,0 +1,77 @@ +/* __sigset_t manipulators. Generic/BSD version. + Copyright (C) 1991-2017 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef _SIGSETOPS_H +#define _SIGSETOPS_H 1 + +#include <signal.h> + +/* Return a mask that includes SIG only. The cast to `sigset_t' avoids + overflow if `sigset_t' is wider than `int'. */ +# define __sigmask(sig) (((__sigset_t) 1) << ((sig) - 1)) + +#define __sigemptyset(set) \ + (__extension__ ({ \ + *(set) = (__sigset_t) 0; \ + (void)0; \ + })) +#define __sigfillset(set) \ + (__extension__ ({ \ + *(set) = ~(__sigset_t) 0; \ + (void)0; \ + })) + +# define __sigisemptyset(set) \ + (*(set) == (__sigset_t) 0) + +# define __sigandset(dest, left, right) \ + (__extension__ ({ \ + *(dest) = *(left) & *(right); \ + (void)0; \ + })) + +# define __sigorset(dest, left, right) \ + (__extension__ ({ \ + *(dest) = *(left) | *(right); \ + (void)0; \ + })) +#endif + +/* These macros needn't check for a bogus signal number; + checking is done in the non-__ versions. */ +# define __sigismember(set, sig) \ + (__extension__ ({ \ + __sigset_t __mask = __sigmask (sig); \ + (set) & __mask ? 1 : 0; \ + })) + +# define __sigaddset(set, sig) \ + (__extension__ ({ \ + __sigset_t __mask = __sigmask (sig); \ + (set) |= __mask; \ + (void)0; \ + })) + +# define __sigdelset(set, sig) \ + (__extension__ ({ \ + __sigset_t __mask = __sigmask (sig); \ + (set) &= ~__mask; \ + (void)0; \ + })) + +#endif diff --git a/sysdeps/generic/sys/ucontext.h b/sysdeps/generic/sys/ucontext.h index 052c5401cb..a0602a7ad3 100644 --- a/sysdeps/generic/sys/ucontext.h +++ b/sysdeps/generic/sys/ucontext.h @@ -27,6 +27,7 @@ /* We need the signal context definitions even if they are not exposed by <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> diff --git a/sysdeps/i386/sys/ucontext.h b/sysdeps/i386/sys/ucontext.h index 241f270a99..92deea92ea 100644 --- a/sysdeps/i386/sys/ucontext.h +++ b/sysdeps/i386/sys/ucontext.h @@ -25,6 +25,7 @@ /* We need the signal context definitions even if they are not exposed by <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> diff --git a/sysdeps/m68k/sys/ucontext.h b/sysdeps/m68k/sys/ucontext.h index 4e5ec3b090..4f185ce63f 100644 --- a/sysdeps/m68k/sys/ucontext.h +++ b/sysdeps/m68k/sys/ucontext.h @@ -25,6 +25,7 @@ /* We need the signal context definitions even if they are not exposed by <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> diff --git a/sysdeps/mach/hurd/i386/bits/sigcontext.h b/sysdeps/mach/hurd/i386/bits/sigcontext.h index 286b80efbd..3d5a6736aa 100644 --- a/sysdeps/mach/hurd/i386/bits/sigcontext.h +++ b/sysdeps/mach/hurd/i386/bits/sigcontext.h @@ -26,6 +26,7 @@ /* Signal handlers are actually called: void handler (int sig, int code, struct sigcontext *scp); */ +#include <bits/types/__sigset_t.h> #include <mach/machine/fp_reg.h> /* State of this thread when the signal was taken. */ diff --git a/sysdeps/mips/sys/ucontext.h b/sysdeps/mips/sys/ucontext.h index cb8fbcd3d2..9c6f8f8221 100644 --- a/sysdeps/mips/sys/ucontext.h +++ b/sysdeps/mips/sys/ucontext.h @@ -25,6 +25,7 @@ /* We need the signal context definitions even if they are not exposed by <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> diff --git a/sysdeps/posix/profil.c b/sysdeps/posix/profil.c index f5b8ee19fc..4d3fbe0b8a 100644 --- a/sysdeps/posix/profil.c +++ b/sysdeps/posix/profil.c @@ -22,6 +22,7 @@ #include <signal.h> #include <sys/time.h> #include <libc-internal.h> +#include <sigsetops.h> #ifndef SIGPROF diff --git a/sysdeps/posix/sigignore.c b/sysdeps/posix/sigignore.c index e7975739e8..601ae9685a 100644 --- a/sysdeps/posix/sigignore.c +++ b/sysdeps/posix/sigignore.c @@ -22,7 +22,7 @@ #include <stddef.h> #include <signal.h> #include <string.h> /* For the real memset prototype. */ - +#include <sigsetops.h> int sigignore (int sig) @@ -30,8 +30,7 @@ sigignore (int sig) struct sigaction act; act.sa_handler = SIG_IGN; - if (__sigemptyset (&act.sa_mask) < 0) - return -1; + __sigemptyset (&act.sa_mask); act.sa_flags = 0; return __sigaction (sig, &act, NULL); diff --git a/sysdeps/posix/sigintr.c b/sysdeps/posix/sigintr.c index d02469a8dd..a6202de6a9 100644 --- a/sysdeps/posix/sigintr.c +++ b/sysdeps/posix/sigintr.c @@ -18,6 +18,7 @@ #include <stddef.h> #include <signal.h> #include <errno.h> +#include <sigsetops.h> /* If INTERRUPT is nonzero, make signal SIG interrupt system calls (causing them to fail with EINTR); if INTERRUPT is zero, make system diff --git a/sysdeps/posix/signal.c b/sysdeps/posix/signal.c index 32db07b519..81ba17745d 100644 --- a/sysdeps/posix/signal.c +++ b/sysdeps/posix/signal.c @@ -19,7 +19,7 @@ #include <errno.h> #include <signal.h> #include <string.h> /* For the real memset prototype. */ - +#include <sigsetops.h> sigset_t _sigintr attribute_hidden; /* Set by siginterrupt. */ @@ -38,9 +38,8 @@ __bsd_signal (int sig, __sighandler_t handler) } act.sa_handler = handler; - if (__sigemptyset (&act.sa_mask) < 0 - || __sigaddset (&act.sa_mask, sig) < 0) - return SIG_ERR; + __sigemptyset (&act.sa_mask); + __sigaddset (&act.sa_mask, sig); act.sa_flags = __sigismember (&_sigintr, sig) ? 0 : SA_RESTART; if (__sigaction (sig, &act, &oact) < 0) return SIG_ERR; diff --git a/sysdeps/posix/sigset.c b/sysdeps/posix/sigset.c index 0c2aa76ad4..a4dfe0ae93 100644 --- a/sysdeps/posix/sigset.c +++ b/sysdeps/posix/sigset.c @@ -8,7 +8,7 @@ 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 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public @@ -20,7 +20,7 @@ #include <stddef.h> #include <signal.h> #include <string.h> /* For the real memset prototype. */ - +#include <sigsetops.h> /* Set the disposition for SIG. */ __sighandler_t @@ -31,19 +31,19 @@ sigset (int sig, __sighandler_t disp) sigset_t set; sigset_t oset; -#ifdef SIG_HOLD - /* Handle SIG_HOLD first. */ - if (disp == SIG_HOLD) + /* Check signal extents to protect __sigismember. */ + if (disp == SIG_ERR || sig < 1 || sig >= NSIG) { - /* Create an empty signal set. */ - if (__sigemptyset (&set) < 0) - return SIG_ERR; + __set_errno (EINVAL); + return SIG_ERR; + } - /* Add the specified signal. */ - if (__sigaddset (&set, sig) < 0) - return SIG_ERR; + __sigemptyset (&set); + __sigaddset (&set, sig); - /* Add the signal set to the current signal mask. */ + if (disp == SIG_HOLD) + { + /* Add the signal to the current signal mask. */ if (__sigprocmask (SIG_BLOCK, &set, &oset) < 0) return SIG_ERR; @@ -57,34 +57,19 @@ sigset (int sig, __sighandler_t disp) return oact.sa_handler; } -#endif /* SIG_HOLD */ - - /* Check signal extents to protect __sigismember. */ - if (disp == SIG_ERR || sig < 1 || sig >= NSIG) + else { - __set_errno (EINVAL); - return SIG_ERR; - } - - act.sa_handler = disp; - if (__sigemptyset (&act.sa_mask) < 0) - return SIG_ERR; - act.sa_flags = 0; - if (__sigaction (sig, &act, &oact) < 0) - return SIG_ERR; - - /* Create an empty signal set. */ - if (__sigemptyset (&set) < 0) - return SIG_ERR; - - /* Add the specified signal. */ - if (__sigaddset (&set, sig) < 0) - return SIG_ERR; + act.sa_handler = disp; + __sigemptyset (&act.sa_mask); + act.sa_flags = 0; + if (__sigaction (sig, &act, &oact) < 0) + return SIG_ERR; - /* Remove the signal set from the current signal mask. */ - if (__sigprocmask (SIG_UNBLOCK, &set, &oset) < 0) - return SIG_ERR; + /* Remove the signal from the current signal mask. */ + if (__sigprocmask (SIG_UNBLOCK, &set, &oset) < 0) + return SIG_ERR; - /* If the signal was already blocked return SIG_HOLD. */ - return __sigismember (&oset, sig) ? SIG_HOLD : oact.sa_handler; + /* If the signal was already blocked return SIG_HOLD. */ + return __sigismember (&oset, sig) ? SIG_HOLD : oact.sa_handler; + } } diff --git a/sysdeps/posix/sprofil.c b/sysdeps/posix/sprofil.c index f72245cb52..f704b9e8f4 100644 --- a/sysdeps/posix/sprofil.c +++ b/sysdeps/posix/sprofil.c @@ -21,6 +21,7 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <sigsetops.h> #include <sys/time.h> #include <sys/profil.h> diff --git a/sysdeps/posix/sysv_signal.c b/sysdeps/posix/sysv_signal.c index 6d80803fd5..6893ec23e4 100644 --- a/sysdeps/posix/sysv_signal.c +++ b/sysdeps/posix/sysv_signal.c @@ -18,7 +18,7 @@ #include <errno.h> #include <signal.h> #include <string.h> /* For the real memset prototype. */ - +#include <sigsetops.h> /* Tolerate non-threads versions of Posix */ #ifndef SA_ONESHOT @@ -46,8 +46,7 @@ __sysv_signal (int sig, __sighandler_t handler) } act.sa_handler = handler; - if (__sigemptyset (&act.sa_mask) < 0) - return SIG_ERR; + __sigemptyset (&act.sa_mask); act.sa_flags = SA_ONESHOT | SA_NOMASK | SA_INTERRUPT; act.sa_flags &= ~SA_RESTART; if (__sigaction (sig, &act, &oact) < 0) diff --git a/sysdeps/powerpc/novmxsetjmp.h b/sysdeps/powerpc/novmxsetjmp.h index ed87efff3f..aa76bf9d1e 100644 --- a/sysdeps/powerpc/novmxsetjmp.h +++ b/sysdeps/powerpc/novmxsetjmp.h @@ -54,7 +54,7 @@ typedef long int __jmp_buf[40]; typedef long int __jmp_buf[58]; # endif -# include <bits/sigset.h> /* Get `__sigset_t'. */ +# include <bits/types/__sigset_t.h> /* Calling environment, plus possibly a saved signal mask. */ typedef struct __novmx__jmp_buf_tag diff --git a/sysdeps/pthread/bits/sigthread.h b/sysdeps/pthread/bits/sigthread.h index 4302ee41e8..a7a861c9b7 100644 --- a/sysdeps/pthread/bits/sigthread.h +++ b/sysdeps/pthread/bits/sigthread.h @@ -24,6 +24,7 @@ #endif /* Functions for handling signals. */ +#include <bits/types/__sigset_t.h> /* Modify the signal mask for the calling thread. The arguments have the same meaning as for sigprocmask(2). */ diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index fc6b3a9612..99b3f9d346 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -45,7 +45,8 @@ sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \ sys/timerfd.h sys/fanotify.h bits/eventfd.h bits/inotify.h \ bits/signalfd.h bits/timerfd.h bits/epoll.h \ bits/socket_type.h bits/syscall.h bits/sysctl.h \ - bits/mman-linux.h + bits/mman-linux.h \ + bits/siginfo-arch.h bits/siginfo-consts-arch.h tests += tst-clone tst-clone2 tst-fanotify tst-personality tst-quota \ tst-sync_file_range test-errno-linux diff --git a/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h b/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h index 1a5fa29ce8..597f9eac2f 100644 --- a/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h @@ -26,6 +26,7 @@ /* We need the signal context definitions even if they are not exposed by <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> diff --git a/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h b/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h index 912c61c841..4491ff7c81 100644 --- a/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/alpha/sys/ucontext.h @@ -23,6 +23,7 @@ /* We need the signal context definitions even if they are not exposed by <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> diff --git a/sysdeps/unix/sysv/linux/arm/sys/ucontext.h b/sysdeps/unix/sysv/linux/arm/sys/ucontext.h index 8a5ea71a20..d7c7d9ec47 100644 --- a/sysdeps/unix/sysv/linux/arm/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/arm/sys/ucontext.h @@ -25,6 +25,7 @@ /* We need the signal context definitions even if they are not exposed by <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> diff --git a/sysdeps/unix/sysv/linux/bits/sigevent-consts.h b/sysdeps/unix/sysv/linux/bits/sigevent-consts.h new file mode 100644 index 0000000000..df3513bde2 --- /dev/null +++ b/sysdeps/unix/sysv/linux/bits/sigevent-consts.h @@ -0,0 +1,41 @@ +/* sigevent constants. Linux version. + Copyright (C) 1997-2017 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef _BITS_SIGEVENT_CONSTS_H +#define _BITS_SIGEVENT_CONSTS_H 1 + +#if !defined _SIGNAL_H && !defined _AIO_H +#error "Don't include <bits/sigevent-consts.h> directly; use <signal.h> instead." +#endif + +/* `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 + + SIGEV_THREAD_ID = 4 /* Send signal to specific thread. + This is a Linux extension. */ +#define SIGEV_THREAD_ID SIGEV_THREAD_ID +}; + +#endif diff --git a/sysdeps/unix/sysv/linux/bits/siginfo-arch.h b/sysdeps/unix/sysv/linux/bits/siginfo-arch.h new file mode 100644 index 0000000000..00018fa620 --- /dev/null +++ b/sysdeps/unix/sysv/linux/bits/siginfo-arch.h @@ -0,0 +1,7 @@ +/* Architecture-specific adjustments to siginfo_t. */ +#ifndef _BITS_SIGINFO_ARCH_H +#define _BITS_SIGINFO_ARCH_H 1 + +/* This architecture has no adjustments to make to siginfo_t. */ + +#endif diff --git a/sysdeps/unix/sysv/linux/bits/siginfo-consts-arch.h b/sysdeps/unix/sysv/linux/bits/siginfo-consts-arch.h new file mode 100644 index 0000000000..96b4edbccd --- /dev/null +++ b/sysdeps/unix/sysv/linux/bits/siginfo-consts-arch.h @@ -0,0 +1,7 @@ +/* Architecture-specific additional siginfo constants. */ +#ifndef _BITS_SIGINFO_CONSTS_ARCH_H +#define _BITS_SIGINFO_CONSTS_ARCH_H 1 + +/* This architecture has no additional siginfo constants. */ + +#endif diff --git a/sysdeps/unix/sysv/linux/bits/siginfo-consts.h b/sysdeps/unix/sysv/linux/bits/siginfo-consts.h new file mode 100644 index 0000000000..a7a31bfe5f --- /dev/null +++ b/sysdeps/unix/sysv/linux/bits/siginfo-consts.h @@ -0,0 +1,185 @@ +/* siginfo constants. Linux version. + Copyright (C) 1997-2017 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef _BITS_SIGINFO_CONSTS_H +#define _BITS_SIGINFO_CONSTS_H 1 + +#ifndef _SIGNAL_H +#error "Don't include <bits/siginfo-consts.h> directly; use <signal.h> instead." +#endif + +/* Most of these constants are uniform across all architectures, but there + is one exception. */ +#define __SI_ASYNCIO_AFTER_SIGIO 1 +#include <bits/siginfo-arch.h> + +/* Values for `si_code'. Positive values are reserved for kernel-generated + signals. */ +enum +{ + SI_ASYNCNL = -60, /* Sent by asynch name lookup completion. */ + SI_TKILL = -6, /* Sent by tkill. */ + SI_SIGIO, /* Sent by queued SIGIO. */ +#if __SI_ASYNCIO_AFTER_SIGIO + SI_ASYNCIO, /* Sent by AIO completion. */ + SI_MESGQ, /* Sent by real time mesq state change. */ + SI_TIMER, /* Sent by timer expiration. */ +#else + SI_MESGQ, + SI_TIMER, + SI_ASYNCIO, +#endif + SI_QUEUE, /* Sent by sigqueue. */ + SI_USER, /* Sent by kill, sigsend. */ + SI_KERNEL = 0x80 /* Send by kernel. */ + +#define SI_ASYNCNL SI_ASYNCNL +#define SI_TKILL SI_TKILL +#define SI_SIGIO SI_SIGIO +#define SI_ASYNCIO SI_ASYNCIO +#define SI_MESGQ SI_MESGQ +#define SI_TIMER SI_TIMER +#define SI_ASYNCIO SI_ASYNCIO +#define SI_QUEUE SI_QUEUE +#define SI_USER SI_USER +#define SI_KERNEL SI_KERNEL +}; + + +# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +/* `si_code' values for SIGILL signal. */ +enum +{ + ILL_ILLOPC = 1, /* Illegal opcode. */ +# define ILL_ILLOPC ILL_ILLOPC + ILL_ILLOPN, /* 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 + BUS_MCEERR_AR, /* Hardware memory error: action required. */ +# define BUS_MCEERR_AR BUS_MCEERR_AR + BUS_MCEERR_AO /* Hardware memory error: action optional. */ +# define BUS_MCEERR_AO BUS_MCEERR_AO +}; +# endif + +# ifdef __USE_XOPEN_EXTENDED +/* `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 +}; +# endif + +# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 +/* `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 +}; +# endif + +/* Architectures might also add architecture-specific constants. + These are all considered GNU extensions. */ +#ifdef __USE_GNU +# include <bits/siginfo-consts-arch.h> +#endif + +#endif diff --git a/sysdeps/unix/sysv/linux/bits/siginfo.h b/sysdeps/unix/sysv/linux/bits/siginfo.h deleted file mode 100644 index 7b0d4f62a3..0000000000 --- a/sysdeps/unix/sysv/linux/bits/siginfo.h +++ /dev/null @@ -1,341 +0,0 @@ -/* siginfo_t, sigevent and constants. Linux version. - Copyright (C) 1997-2017 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#if !defined _SIGNAL_H && !defined __need_siginfo_t \ - && !defined __need_sigevent_t -# error "Never include this file directly. Use <signal.h> instead" -#endif - -#include <bits/wordsize.h> - -#if (!defined __have_sigval_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t \ - || defined __need_sigevent_t)) -# define __have_sigval_t 1 - -/* Type for data associated with a signal. */ -typedef union sigval - { - int sival_int; - void *sival_ptr; - } sigval_t; -#endif - -#if (!defined __have_siginfo_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t)) -# define __have_siginfo_t 1 - -# define __SI_MAX_SIZE 128 -# if __WORDSIZE == 64 -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4) -# else -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3) -# endif - -typedef struct - { - 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. */ - - union - { - int _pad[__SI_PAD_SIZE]; - - /* kill(). */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - } _kill; - - /* POSIX.1b timers. */ - struct - { - int si_tid; /* Timer ID. */ - int si_overrun; /* Overrun count. */ - sigval_t si_sigval; /* Signal value. */ - } _timer; - - /* POSIX.1b signals. */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - sigval_t si_sigval; /* Signal value. */ - } _rt; - - /* SIGCHLD. */ - struct - { - __pid_t si_pid; /* Which child. */ - __uid_t si_uid; /* Real user ID of sending process. */ - int si_status; /* Exit value or signal. */ - __clock_t si_utime; - __clock_t si_stime; - } _sigchld; - - /* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */ - struct - { - void *si_addr; /* Faulting insn/memory ref. */ - short int si_addr_lsb; /* Valid LSB of the reported address. */ - } _sigfault; - - /* SIGPOLL. */ - struct - { - long int si_band; /* Band event for SIGPOLL. */ - int si_fd; - } _sigpoll; - - /* SIGSYS. */ - struct - { - void *_call_addr; /* Calling user insn. */ - int _syscall; /* Triggering system call number. */ - unsigned int _arch; /* AUDIT_ARCH_* of syscall. */ - } _sigsys; - } _sifields; - } siginfo_t; - - -/* X/Open requires some more fields with fixed names. */ -# define si_pid _sifields._kill.si_pid -# define si_uid _sifields._kill.si_uid -# define si_timerid _sifields._timer.si_tid -# define si_overrun _sifields._timer.si_overrun -# define si_status _sifields._sigchld.si_status -# define si_utime _sifields._sigchld.si_utime -# define si_stime _sifields._sigchld.si_stime -# define si_value _sifields._rt.si_sigval -# define si_int _sifields._rt.si_sigval.sival_int -# define si_ptr _sifields._rt.si_sigval.sival_ptr -# define si_addr _sifields._sigfault.si_addr -# define si_addr_lsb _sifields._sigfault.si_addr_lsb -# define si_band _sifields._sigpoll.si_band -# define si_fd _sifields._sigpoll.si_fd -# define si_call_addr _sifields._sigsys._call_addr -# define si_syscall _sifields._sigsys._syscall -# define si_arch _sifields._sigsys._arch - - -/* Values for `si_code'. Positive values are reserved for kernel-generated - signals. */ -enum -{ - SI_ASYNCNL = -60, /* Sent by asynch name lookup completion. */ -# define SI_ASYNCNL SI_ASYNCNL - SI_TKILL = -6, /* Sent by tkill. */ -# define SI_TKILL SI_TKILL - SI_SIGIO, /* Sent by queued SIGIO. */ -# define SI_SIGIO SI_SIGIO - SI_ASYNCIO, /* 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. */ -# define SI_USER SI_USER - SI_KERNEL = 0x80 /* Send by kernel. */ -#define SI_KERNEL SI_KERNEL -}; - - -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -/* `si_code' values for SIGILL signal. */ -enum -{ - ILL_ILLOPC = 1, /* Illegal opcode. */ -# define ILL_ILLOPC ILL_ILLOPC - ILL_ILLOPN, /* 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 - BUS_MCEERR_AR, /* Hardware memory error: action required. */ -# define BUS_MCEERR_AR BUS_MCEERR_AR - BUS_MCEERR_AO /* Hardware memory error: action optional. */ -# define BUS_MCEERR_AO BUS_MCEERR_AO -}; -# endif - -# ifdef __USE_XOPEN_EXTENDED -/* `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 -}; -# endif - -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -/* `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 -}; -# endif - -# undef __need_siginfo_t -#endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ - - -#if (defined _SIGNAL_H || defined __need_sigevent_t) \ - && !defined __have_sigevent_t -# define __have_sigevent_t 1 - -/* Structure to transport application-defined values with signals. */ -# define __SIGEV_MAX_SIZE 64 -# if __WORDSIZE == 64 -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4) -# else -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3) -# endif - -/* Forward declaration. */ -# ifndef __have_pthread_attr_t -typedef union pthread_attr_t pthread_attr_t; -# define __have_pthread_attr_t 1 -# endif - -typedef struct sigevent - { - sigval_t sigev_value; - int sigev_signo; - int sigev_notify; - - union - { - int _pad[__SIGEV_PAD_SIZE]; - - /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the - thread to receive the signal. */ - __pid_t _tid; - - struct - { - void (*_function) (sigval_t); /* Function to start. */ - pthread_attr_t *_attribute; /* Thread attributes. */ - } _sigev_thread; - } _sigev_un; - } sigevent_t; - -/* POSIX names to access some of the members. */ -# define sigev_notify_function _sigev_un._sigev_thread._function -# define sigev_notify_attributes _sigev_un._sigev_thread._attribute - -/* `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 - - SIGEV_THREAD_ID = 4 /* Send signal to specific thread. */ -#define SIGEV_THREAD_ID SIGEV_THREAD_ID -}; - -#endif /* have _SIGNAL_H. */ diff --git a/sysdeps/unix/sysv/linux/bits/sigset.h b/sysdeps/unix/sysv/linux/bits/sigset.h deleted file mode 100644 index 4b2916f3d9..0000000000 --- a/sysdeps/unix/sysv/linux/bits/sigset.h +++ /dev/null @@ -1,124 +0,0 @@ -/* __sig_atomic_t, __sigset_t, and related definitions. Linux version. - Copyright (C) 1991-2017 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SIGSET_H_types -# define _SIGSET_H_types 1 - -typedef int __sig_atomic_t; - -/* A `sigset_t' has a bit for each signal. */ - -# define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int))) -typedef struct - { - unsigned long int __val[_SIGSET_NWORDS]; - } __sigset_t; - -#endif - - -/* We only want to define these functions if <signal.h> was actually - included; otherwise we were included just to define the types. Since we - are namespace-clean, it wouldn't hurt to define extra macros. But - trouble can be caused by functions being defined (e.g., any global - register vars declared later will cause compilation errors). */ - -#if !defined _SIGSET_H_fns && defined _SIGNAL_H -# define _SIGSET_H_fns 1 - -# ifndef _EXTERN_INLINE -# define _EXTERN_INLINE __extern_inline -# endif - -/* Return a mask that includes the bit for SIG only. */ -# define __sigmask(sig) \ - (((unsigned long int) 1) << (((sig) - 1) % (8 * sizeof (unsigned long int)))) - -/* Return the word index for SIG. */ -# define __sigword(sig) (((sig) - 1) / (8 * sizeof (unsigned long int))) - -# if defined __GNUC__ && __GNUC__ >= 2 -# define __sigemptyset(set) \ - (__extension__ ({ int __cnt = _SIGSET_NWORDS; \ - sigset_t *__set = (set); \ - while (--__cnt >= 0) __set->__val[__cnt] = 0; \ - 0; })) -# define __sigfillset(set) \ - (__extension__ ({ int __cnt = _SIGSET_NWORDS; \ - sigset_t *__set = (set); \ - while (--__cnt >= 0) __set->__val[__cnt] = ~0UL; \ - 0; })) - -# ifdef __USE_GNU -/* The POSIX does not specify for handling the whole signal set in one - command. This is often wanted and so we define three more functions - here. */ -# define __sigisemptyset(set) \ - (__extension__ ({ int __cnt = _SIGSET_NWORDS; \ - const sigset_t *__set = (set); \ - int __ret = __set->__val[--__cnt]; \ - while (!__ret && --__cnt >= 0) \ - __ret = __set->__val[__cnt]; \ - __ret == 0; })) -# define __sigandset(dest, left, right) \ - (__extension__ ({ int __cnt = _SIGSET_NWORDS; \ - sigset_t *__dest = (dest); \ - const sigset_t *__left = (left); \ - const sigset_t *__right = (right); \ - while (--__cnt >= 0) \ - __dest->__val[__cnt] = (__left->__val[__cnt] \ - & __right->__val[__cnt]); \ - 0; })) -# define __sigorset(dest, left, right) \ - (__extension__ ({ int __cnt = _SIGSET_NWORDS; \ - sigset_t *__dest = (dest); \ - const sigset_t *__left = (left); \ - const sigset_t *__right = (right); \ - while (--__cnt >= 0) \ - __dest->__val[__cnt] = (__left->__val[__cnt] \ - | __right->__val[__cnt]); \ - 0; })) -# endif -# endif - -/* These functions needn't check for a bogus signal number -- error - checking is done in the non __ versions. */ - -extern int __sigismember (const __sigset_t *, int); -extern int __sigaddset (__sigset_t *, int); -extern int __sigdelset (__sigset_t *, int); - -# ifdef __USE_EXTERN_INLINES -# define __SIGSETFN(NAME, BODY, CONST) \ - _EXTERN_INLINE int \ - NAME (CONST __sigset_t *__set, int __sig) \ - { \ - unsigned long int __mask = __sigmask (__sig); \ - unsigned long int __word = __sigword (__sig); \ - return BODY; \ - } - -__SIGSETFN (__sigismember, (__set->__val[__word] & __mask) ? 1 : 0, const) -__SIGSETFN (__sigaddset, ((__set->__val[__word] |= __mask), 0), ) -__SIGSETFN (__sigdelset, ((__set->__val[__word] &= ~__mask), 0), ) - -# undef __SIGSETFN -# endif - - -#endif /* ! _SIGSET_H_fns. */ diff --git a/sysdeps/unix/sysv/linux/bits/types/__sigset_t.h b/sysdeps/unix/sysv/linux/bits/types/__sigset_t.h new file mode 100644 index 0000000000..e2f18acf30 --- /dev/null +++ b/sysdeps/unix/sysv/linux/bits/types/__sigset_t.h @@ -0,0 +1,10 @@ +#ifndef ____sigset_t_defined +#define ____sigset_t_defined + +#define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int))) +typedef struct +{ + unsigned long int __val[_SIGSET_NWORDS]; +} __sigset_t; + +#endif diff --git a/sysdeps/unix/sysv/linux/bits/types/sigevent_t.h b/sysdeps/unix/sysv/linux/bits/types/sigevent_t.h new file mode 100644 index 0000000000..0d4857b16e --- /dev/null +++ b/sysdeps/unix/sysv/linux/bits/types/sigevent_t.h @@ -0,0 +1,48 @@ +#ifndef __sigevent_t_defined +#define __sigevent_t_defined 1 + +#include <bits/wordsize.h> +#include <bits/types.h> +#include <bits/types/sigval_t.h> + +#define __SIGEV_MAX_SIZE 64 +#if __WORDSIZE == 64 +# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4) +#else +# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3) +#endif + +/* Forward declaration. */ +#ifndef __have_pthread_attr_t +typedef union pthread_attr_t pthread_attr_t; +# define __have_pthread_attr_t 1 +#endif + +/* Structure to transport application-defined values with signals. */ +typedef struct sigevent + { + sigval_t sigev_value; + int sigev_signo; + int sigev_notify; + + union + { + int _pad[__SIGEV_PAD_SIZE]; + + /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the + thread to receive the signal. */ + __pid_t _tid; + + struct + { + void (*_function) (sigval_t); /* Function to start. */ + pthread_attr_t *_attribute; /* Thread attributes. */ + } _sigev_thread; + } _sigev_un; + } sigevent_t; + +/* POSIX names to access some of the members. */ +#define sigev_notify_function _sigev_un._sigev_thread._function +#define sigev_notify_attributes _sigev_un._sigev_thread._attribute + +#endif diff --git a/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h b/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h new file mode 100644 index 0000000000..1bb6da5264 --- /dev/null +++ b/sysdeps/unix/sysv/linux/bits/types/siginfo_t.h @@ -0,0 +1,139 @@ +#ifndef __siginfo_t_defined +#define __siginfo_t_defined 1 + +#include <bits/wordsize.h> +#include <bits/types.h> +#include <bits/types/sigval_t.h> + +#define __SI_MAX_SIZE 128 +#if __WORDSIZE == 64 +# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4) +#else +# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3) +#endif + +/* Some fields of siginfo_t have architecture-specific variations. */ +#define __SI_ALIGNMENT /* nothing */ +#define __SI_BAND_TYPE long int +#define __SI_CLOCK_T __clock_t +#define __SI_ERRNO_THEN_CODE 1 +#define __SI_HAVE_SIGSYS 1 +#define __SI_SIGFAULT_ADDL /* nothing */ +#include <bits/siginfo-arch.h> + +typedef struct + { + int si_signo; /* Signal number. */ +#if __SI_ERRNO_THEN_CODE + int si_errno; /* If non-zero, an errno value associated with + this signal, as defined in <errno.h>. */ + int si_code; /* Signal code. */ +#else + int si_code; + int si_errno; +#endif +#if __WORDSIZE == 64 + int __pad0; /* Explicit padding. */ +#endif + + union + { + int _pad[__SI_PAD_SIZE]; + + /* kill(). */ + struct + { + __pid_t si_pid; /* Sending process ID. */ + __uid_t si_uid; /* Real user ID of sending process. */ + } _kill; + + /* POSIX.1b timers. */ + struct + { + int si_tid; /* Timer ID. */ + int si_overrun; /* Overrun count. */ + sigval_t si_sigval; /* Signal value. */ + } _timer; + + /* POSIX.1b signals. */ + struct + { + __pid_t si_pid; /* Sending process ID. */ + __uid_t si_uid; /* Real user ID of sending process. */ + sigval_t si_sigval; /* Signal value. */ + } _rt; + + /* SIGCHLD. */ + struct + { + __pid_t si_pid; /* Which child. */ + __uid_t si_uid; /* Real user ID of sending process. */ + int si_status; /* Exit value or signal. */ + __SI_CLOCK_T si_utime; + __SI_CLOCK_T si_stime; + } _sigchld; + + /* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */ + struct + { + void *si_addr; /* Faulting insn/memory ref. */ + __SI_SIGFAULT_ADDL + short int si_addr_lsb; /* Valid LSB of the reported address. */ + union + { + /* used when si_code=SEGV_BNDERR */ + struct + { + void *_lower; + void *_upper; + } _addr_bnd; + /* used when si_code=SEGV_PKUERR */ + __uint32_t _pkey; + } _bounds; + } _sigfault; + + /* SIGPOLL. */ + struct + { + long int si_band; /* Band event for SIGPOLL. */ + int si_fd; + } _sigpoll; + + /* SIGSYS. */ +#if __SI_HAVE_SIGSYS + struct + { + void *_call_addr; /* Calling user insn. */ + int _syscall; /* Triggering system call number. */ + unsigned int _arch; /* AUDIT_ARCH_* of syscall. */ + } _sigsys; +#endif + } _sifields; + } siginfo_t __SI_ALIGNMENT; + + +/* X/Open requires some more fields with fixed names. */ +#define si_pid _sifields._kill.si_pid +#define si_uid _sifields._kill.si_uid +#define si_timerid _sifields._timer.si_tid +#define si_overrun _sifields._timer.si_overrun +#define si_status _sifields._sigchld.si_status +#define si_utime _sifields._sigchld.si_utime +#define si_stime _sifields._sigchld.si_stime +#define si_value _sifields._rt.si_sigval +#define si_int _sifields._rt.si_sigval.sival_int +#define si_ptr _sifields._rt.si_sigval.sival_ptr +#define si_addr _sifields._sigfault.si_addr +#define si_addr_lsb _sifields._sigfault.si_addr_lsb +#define si_lower _sifields._sigfault._bounds._addr_bnd._lower +#define si_upper _sifields._sigfault._bounds._addr_bnd._upper +#define si_pkey _sifields._sigfault._bounds._pkey +#define si_band _sifields._sigpoll.si_band +#define si_fd _sifields._sigpoll.si_fd +#if __SI_HAVE_SIGSYS +# define si_call_addr _sifields._sigsys._call_addr +# define si_syscall _sifields._sigsys._syscall +# define si_arch _sifields._sigsys._arch +#endif + +#endif diff --git a/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h b/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h index 50e585d163..79b99ff6a2 100644 --- a/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h @@ -25,6 +25,7 @@ /* We need the signal context definitions even if they are not exposed by <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> diff --git a/sysdeps/unix/sysv/linux/ia64/bits/siginfo-arch.h b/sysdeps/unix/sysv/linux/ia64/bits/siginfo-arch.h new file mode 100644 index 0000000000..f824adb77a --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/bits/siginfo-arch.h @@ -0,0 +1,19 @@ +/* Architecture-specific adjustments to siginfo_t. ia64 version. */ +#ifndef _BITS_SIGINFO_ARCH_H + +#undef __SI_HAVE_SIGSYS +#define __SI_HAVE_SIGSYS 0 + +#undef __SI_SIGFAULT_ADDL +#define __SI_SIGFAULT_ADDL \ + int _si_imm; \ + unsigned int _si_flags; \ + unsigned long int _si_isr; + +#ifdef __USE_GNU +# define si_imm _sifields._sigfault._si_imm +# define si_segvflags _sifields._sigfault._si_flags +# define si_isr _sifields._sigfault._si_isr +#endif + +#endif diff --git a/sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h b/sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h new file mode 100644 index 0000000000..4c5c4da516 --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h @@ -0,0 +1,45 @@ +/* Architecture-specific additional siginfo constants. ia64 version. */ +#ifndef _BITS_SIGINFO_CONSTS_ARCH_H +#define _BITS_SIGINFO_CONSTS_ARCH_H 1 + +/* `si_code' values for SIGILL signal. */ +enum +{ + ILL_BADIADDR = ILL_BADSTK + 1, /* Unimplemented instruction address. */ +#define ILL_BADIADDR ILL_BADIADDR + ILL_BREAK +#define ILL_BREAK ILL_BREAK +}; + +/* `si_code' values for SIGFPE signal. */ +enum +{ + FPE_DECOVF = FPE_FLTSUB + 1, +#define FPE_DECOVF FPE_DECOVF + FPE_DECDIV, +#define FPE_DECDIV FPE_DECDIV + FPE_DECERR, +#define FPE_DECERR FPE_DECERR + FPE_INVASC, +#define FPE_INVASC FPE_INVASC + FPE_INVDEC +#define FPE_INVDEC FPE_INVDEC +}; + +/* `si_code' values for SIGSEGV signal. */ +enum +{ + SEGV_PSTKOVF = SEGV_ACCERR + 1 +#define SEGV_PSTKOVF SEGV_PSTKOVF +}; + +/* `si_code' values for SIGTRAP signal. */ +enum +{ + TRAP_BRANCH = TRAP_TRACE + 1, +#define TRAP_BRANCH TRAP_BRANCH + TRAP_HWBKPT +#define TRAP_HWBKPT TRAP_HWBKPT +}; + +#endif diff --git a/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h b/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h deleted file mode 100644 index b2a7338824..0000000000 --- a/sysdeps/unix/sysv/linux/ia64/bits/siginfo.h +++ /dev/null @@ -1,360 +0,0 @@ -/* siginfo_t, sigevent and constants. Linux/ia64 version. - Copyright (C) 2000-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Mosberger-Tang <davidm@hpl.hp.com>. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#if !defined _SIGNAL_H && !defined __need_siginfo_t \ - && !defined __need_sigevent_t -# error "Never include this file directly. Use <signal.h> instead" -#endif - -#if (!defined __have_sigval_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t \ - || defined __need_sigevent_t)) -# define __have_sigval_t 1 - -/* Type for data associated with a signal. */ -typedef union sigval - { - int sival_int; - void *sival_ptr; - } sigval_t; -#endif - -#if (!defined __have_siginfo_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t)) -# define __have_siginfo_t 1 - -# define __SI_MAX_SIZE 128 -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4) - -typedef struct - { - 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. */ - int __pad0; /* Explicit padding. */ - - union - { - int _pad[__SI_PAD_SIZE]; - - /* kill(). */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - } _kill; - - /* POSIX.1b timers. */ - struct - { - int si_tid; /* Timer ID. */ - int si_overrun; /* Overrun count. */ - sigval_t si_sigval; /* Signal value. */ - } _timer; - - /* POSIX.1b signals. */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - sigval_t si_sigval; /* Signal value. */ - } _rt; - - /* SIGCHLD. */ - struct - { - __pid_t si_pid; /* Which child. */ - __uid_t si_uid; /* Real user ID of sending process. */ - int si_status; /* Exit value or signal. */ - __clock_t si_utime; - __clock_t si_stime; - } _sigchld; - - /* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */ - struct - { - void *si_addr; /* Faulting insn/memory ref. */ - int _si_imm; - unsigned int _si_flags; - unsigned long int _si_isr; - short int si_addr_lsb; /* Valid LSB of the reported address. */ - } _sigfault; - - /* SIGPOLL. */ - struct - { - long int si_band; /* Band event for SIGPOLL. */ - int si_fd; - } _sigpoll; - } _sifields; - } siginfo_t; - - -/* X/Open requires some more fields with fixed names. */ -# define si_pid _sifields._kill.si_pid -# define si_uid _sifields._kill.si_uid -# define si_timerid _sifields._timer.si_tid -# define si_overrun _sifields._timer.si_overrun -# define si_status _sifields._sigchld.si_status -# define si_utime _sifields._sigchld.si_utime -# define si_stime _sifields._sigchld.si_stime -# define si_value _sifields._rt.si_sigval -# define si_int _sifields._rt.si_sigval.sival_int -# define si_ptr _sifields._rt.si_sigval.sival_ptr -# define si_addr _sifields._sigfault.si_addr -# define si_addr_lsb _sifields._sigfault.si_addr_lsb -# define si_band _sifields._sigpoll.si_band -# define si_fd _sifields._sigpoll.si_fd - -# ifdef __USE_GNU -# define si_imm _sifields._sigfault._si_imm -# define si_segvflags _sifields._sigfault._si_flags -# define si_isr _sifields._sigfault._si_isr -# endif - -/* Values for `si_code'. Positive values are reserved for kernel-generated - signals. */ -enum -{ - SI_ASYNCNL = -60, /* Sent by asynch name lookup completion. */ -# define SI_ASYNCNL SI_ASYNCNL - SI_TKILL = -6, /* Sent by tkill. */ -# define SI_TKILL SI_TKILL - SI_SIGIO, /* Sent by queued SIGIO. */ -# define SI_SIGIO SI_SIGIO - SI_ASYNCIO, /* 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. */ -# define SI_USER SI_USER - SI_KERNEL = 0x80 /* Send by kernel. */ -#define SI_KERNEL SI_KERNEL -}; - - -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -/* `si_code' values for SIGILL signal. */ -enum -{ - ILL_ILLOPC = 1, /* Illegal opcode. */ -# define ILL_ILLOPC ILL_ILLOPC - ILL_ILLOPN, /* 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 - ILL_BADIADDR /* Unimplemented instruction address. */ -# define ILL_BADIADDR ILL_BADIADDR - -# ifdef __USE_GNU - , ILL_BREAK -# define ILL_BREAK ILL_BREAK -# endif -}; - -/* `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 -# ifdef __USE_GNU - , FPE_DECOVF -# define FPE_DECOVF FPE_DECOVF - , FPE_DECDIV -# define FPE_DECDIV FPE_DECDIV - , FPE_DECERR -# define FPE_DECERR FPE_DECERR - , FPE_INVASC -# define FPE_INVASC FPE_INVASC - , FPE_INVDEC -# define FPE_INVDEC FPE_INVDEC -# endif -}; - -/* `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 -# ifdef __USE_GNU - , SEGV_PSTKOVF /* Paragraph stack overflow. */ -# define SEGV_PSTKOVF SEGV_PSTKOVF -# endif -}; - -/* `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 - BUS_MCEERR_AR, /* Hardware memory error: action required. */ -# define BUS_MCEERR_AR BUS_MCEERR_AR - BUS_MCEERR_AO /* Hardware memory error: action optional. */ -# define BUS_MCEERR_AO BUS_MCEERR_AO -}; -# endif - -# ifdef __USE_XOPEN_EXTENDED -/* `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 - -# ifdef __USE_GNU - , TRAP_BRANCH -# define TRAP_BRANCH TRAP_BRANCH - , TRAP_HWBKPT -# define TRAP_HWBKPT TRAP_HWBKPT -# endif -}; -# endif - -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -/* `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 -}; -# endif - -# undef __need_siginfo_t -#endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ - - -#if (defined _SIGNAL_H || defined __need_sigevent_t) \ - && !defined __have_sigevent_t -# define __have_sigevent_t 1 - -/* Structure to transport application-defined values with signals. */ -# define __SIGEV_MAX_SIZE 64 -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4) - -/* Forward declaration. */ -# ifndef __have_pthread_attr_t -typedef union pthread_attr_t pthread_attr_t; -# define __have_pthread_attr_t 1 -# endif - -typedef struct sigevent - { - sigval_t sigev_value; - int sigev_signo; - int sigev_notify; - - union - { - int _pad[__SIGEV_PAD_SIZE]; - - /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the - thread to receive the signal. */ - __pid_t _tid; - - struct - { - void (*_function) (sigval_t); /* Function to start. */ - pthread_attr_t *_attribute; /* Thread attributes. */ - } _sigev_thread; - } _sigev_un; - } sigevent_t; - -/* POSIX names to access some of the members. */ -# define sigev_notify_function _sigev_un._sigev_thread._function -# define sigev_notify_attributes _sigev_un._sigev_thread._attribute - -/* `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 - - SIGEV_THREAD_ID = 4 /* Send signal to specific thread. */ -#define SIGEV_THREAD_ID SIGEV_THREAD_ID -}; - -#endif /* have _SIGNAL_H. */ diff --git a/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h b/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h index 18ff02233f..62dd96e9f2 100644 --- a/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/m68k/sys/ucontext.h @@ -25,6 +25,7 @@ /* We need the signal context definitions even if they are not exposed by <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> diff --git a/sysdeps/unix/sysv/linux/mips/bits/siginfo-arch.h b/sysdeps/unix/sysv/linux/mips/bits/siginfo-arch.h new file mode 100644 index 0000000000..4292d7c9cd --- /dev/null +++ b/sysdeps/unix/sysv/linux/mips/bits/siginfo-arch.h @@ -0,0 +1,15 @@ +/* Architecture-specific adjustments to siginfo_t. MIPS version. */ +#ifndef _BITS_SIGINFO_ARCH_H +#define _BITS_SIGINFO_ARCH_H 1 + +/* MIPS has the si_code and si_errno fields in the opposite order from + all other architectures. */ +#undef __SI_ERRNO_THEN_CODE +#define __SI_ERRNO_THEN_CODE 0 + +/* MIPS also has different values for SI_ASYNCIO, SI_MESGQ, and SI_TIMER + than all other architectures. */ +#undef __SI_ASYNCIO_AFTER_SIGIO +#define __SI_ASYNCIO_AFTER_SIGIO 0 + +#endif diff --git a/sysdeps/unix/sysv/linux/mips/bits/siginfo.h b/sysdeps/unix/sysv/linux/mips/bits/siginfo.h deleted file mode 100644 index 8d3f1dfdb6..0000000000 --- a/sysdeps/unix/sysv/linux/mips/bits/siginfo.h +++ /dev/null @@ -1,344 +0,0 @@ -/* siginfo_t, sigevent and constants. Linux/MIPS version. - Copyright (C) 1997-2017 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#if !defined _SIGNAL_H && !defined __need_siginfo_t \ - && !defined __need_sigevent_t -# error "Never include this file directly. Use <signal.h> instead" -#endif - -#include <bits/wordsize.h> - -#if (!defined __have_sigval_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t \ - || defined __need_sigevent_t)) -# define __have_sigval_t 1 - -/* Type for data associated with a signal. */ -typedef union sigval - { - int sival_int; - void *sival_ptr; - } sigval_t; -#endif - -#if (!defined __have_siginfo_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t)) -# define __have_siginfo_t 1 - -# define __SI_MAX_SIZE 128 -# if __WORDSIZE == 64 -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4) -# else -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3) -# endif - - -typedef struct - { - int si_signo; /* Signal number. */ - int si_code; /* Signal code. */ - int si_errno; /* If non-zero, an errno value associated with - this signal, as defined in <errno.h>. */ - int __pad0[__SI_MAX_SIZE / sizeof (int) - __SI_PAD_SIZE - 3]; - /* Explicit padding. */ - - union - { - int _pad[__SI_PAD_SIZE]; - - /* kill(). */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - } _kill; - - /* POSIX.1b timers. */ - struct - { - int si_tid; /* Timer ID. */ - int si_overrun; /* Overrun count. */ - sigval_t si_sigval; /* Signal value. */ - } _timer; - - /* POSIX.1b signals. */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - sigval_t si_sigval; /* Signal value. */ - } _rt; - - /* SIGCHLD. */ - struct - { - __pid_t si_pid; /* Which child. */ - __uid_t si_uid; /* Real user ID of sending process. */ - int si_status; /* Exit value or signal. */ - __clock_t si_utime; - __clock_t si_stime; - } _sigchld; - - /* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */ - struct - { - void *si_addr; /* Faulting insn/memory ref. */ - short int si_addr_lsb; /* Valid LSB of the reported address. */ - } _sigfault; - - /* SIGPOLL. */ - struct - { - long int si_band; /* Band event for SIGPOLL. */ - int si_fd; - } _sigpoll; - - /* SIGSYS. */ - struct - { - void *_call_addr; /* Calling user insn. */ - int _syscall; /* Triggering system call number. */ - unsigned int _arch; /* AUDIT_ARCH_* of syscall. */ - } _sigsys; - } _sifields; - } siginfo_t; - - -/* X/Open requires some more fields with fixed names. */ -# define si_pid _sifields._kill.si_pid -# define si_uid _sifields._kill.si_uid -# define si_timerid _sifields._timer.si_tid -# define si_overrun _sifields._timer.si_overrun -# define si_status _sifields._sigchld.si_status -# define si_utime _sifields._sigchld.si_utime -# define si_stime _sifields._sigchld.si_stime -# define si_value _sifields._rt.si_sigval -# define si_int _sifields._rt.si_sigval.sival_int -# define si_ptr _sifields._rt.si_sigval.sival_ptr -# define si_addr _sifields._sigfault.si_addr -# define si_addr_lsb _sifields._sigfault.si_addr_lsb -# define si_band _sifields._sigpoll.si_band -# define si_fd _sifields._sigpoll.si_fd -# define si_call_addr _sifields._sigsys._call_addr -# define si_syscall _sifields._sigsys._syscall -# define si_arch _sifields._sigsys._arch - - -/* Values for `si_code'. Positive values are reserved for kernel-generated - signals. */ -enum -{ - SI_ASYNCNL = -60, /* Sent by asynch name lookup completion. */ -# define SI_ASYNCNL SI_ASYNCNL - SI_TKILL = -6, /* Sent by tkill. */ -# define SI_TKILL SI_TKILL - SI_SIGIO, /* Sent by queued SIGIO. */ -# define SI_SIGIO SI_SIGIO - SI_MESGQ, /* Sent by real time mesq state change. */ -# define SI_MESGQ SI_MESGQ - SI_TIMER, /* Sent by real time mesq state change. */ -# define SI_TIMER SI_TIMER - SI_ASYNCIO, /* Sent by AIO completion. */ -# define SI_ASYNCIO SI_ASYNCIO - SI_QUEUE, /* Sent by sigqueue. */ -# define SI_QUEUE SI_QUEUE - SI_USER, /* Sent by kill, sigsend. */ -# define SI_USER SI_USER - SI_KERNEL = 0x80 /* Send by kernel. */ -#define SI_KERNEL SI_KERNEL -}; - - -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -/* `si_code' values for SIGILL signal. */ -enum -{ - ILL_ILLOPC = 1, /* Illegal opcode. */ -# define ILL_ILLOPC ILL_ILLOPC - ILL_ILLOPN, /* 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 - BUS_MCEERR_AR, /* Hardware memory error: action required. */ -# define BUS_MCEERR_AR BUS_MCEERR_AR - BUS_MCEERR_AO /* Hardware memory error: action optional. */ -# define BUS_MCEERR_AO BUS_MCEERR_AO -}; -# endif - -# ifdef __USE_XOPEN_EXTENDED -/* `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 -}; -# endif - -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -/* `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 -}; -# endif - -# undef __need_siginfo_t -#endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ - - -#if (defined _SIGNAL_H || defined __need_sigevent_t) \ - && !defined __have_sigevent_t -# define __have_sigevent_t 1 - -/* Structure to transport application-defined values with signals. */ -# define __SIGEV_MAX_SIZE 64 -# if __WORDSIZE == 64 -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4) -# else -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3) -# endif - -/* Forward declaration. */ -# ifndef __have_pthread_attr_t -typedef union pthread_attr_t pthread_attr_t; -# define __have_pthread_attr_t 1 -# endif - -typedef struct sigevent - { - sigval_t sigev_value; - int sigev_signo; - int sigev_notify; - - union - { - int _pad[__SIGEV_PAD_SIZE]; - - /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the - thread to receive the signal. */ - __pid_t _tid; - - struct - { - void (*_function) (sigval_t); /* Function to start. */ - pthread_attr_t *_attribute; /* Thread attributes. */ - } _sigev_thread; - } _sigev_un; - } sigevent_t; - -/* POSIX names to access some of the members. */ -# define sigev_notify_function _sigev_un._sigev_thread._function -# define sigev_notify_attributes _sigev_un._sigev_thread._attribute - -/* `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 - - SIGEV_THREAD_ID = 4 /* Send signal to specific thread. */ -#define SIGEV_THREAD_ID SIGEV_THREAD_ID -}; - -#endif /* have _SIGNAL_H. */ diff --git a/sysdeps/unix/sysv/linux/mips/sys/ucontext.h b/sysdeps/unix/sysv/linux/mips/sys/ucontext.h index f933780dbe..06b45a8726 100644 --- a/sysdeps/unix/sysv/linux/mips/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/mips/sys/ucontext.h @@ -24,6 +24,7 @@ /* We need the signal context definitions even if they are not exposed by <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> diff --git a/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h b/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h index c961e5be40..7099b458d4 100644 --- a/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/nios2/sys/ucontext.h @@ -26,6 +26,7 @@ /* We need the signal context definitions even if they are not exposed by <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> diff --git a/sysdeps/unix/sysv/linux/nptl-signals.h b/sysdeps/unix/sysv/linux/nptl-signals.h index 43aa1a9390..f30c597c0e 100644 --- a/sysdeps/unix/sysv/linux/nptl-signals.h +++ b/sysdeps/unix/sysv/linux/nptl-signals.h @@ -17,6 +17,7 @@ <http://www.gnu.org/licenses/>. */ #include <signal.h> +#include <sigsetops.h> /* The signal used for asynchronous cancelation. */ #define SIGCANCEL __SIGRTMIN diff --git a/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h b/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h index d9fad4cf8b..d91a5ac59f 100644 --- a/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h @@ -19,13 +19,12 @@ #define _SYS_UCONTEXT_H 1 #include <features.h> -#define __need_sigset_t -#include <signal.h> /* We need the signal context definitions even if they are not exposed by <signal.h>. */ #include <bits/sigcontext.h> #include <bits/sigstack.h> +#include <bits/types/sigset_t.h> #include <bits/types/struct_sigstack.h> #include <bits/types/stack_t.h> #include <bits/ss_flags.h> diff --git a/sysdeps/unix/sysv/linux/s390/bits/siginfo.h b/sysdeps/unix/sysv/linux/s390/bits/siginfo.h deleted file mode 100644 index b32b9ebd6e..0000000000 --- a/sysdeps/unix/sysv/linux/s390/bits/siginfo.h +++ /dev/null @@ -1,341 +0,0 @@ -/* siginfo_t, sigevent and constants. S/390 version. - Copyright (C) 2001-2017 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#if !defined _SIGNAL_H && !defined __need_siginfo_t \ - && !defined __need_sigevent_t -# error "Never include this file directly. Use <signal.h> instead" -#endif - -#include <bits/wordsize.h> - -#if (!defined __have_sigval_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t \ - || defined __need_sigevent_t)) -# define __have_sigval_t 1 - -/* Type for data associated with a signal. */ -typedef union sigval - { - int sival_int; - void *sival_ptr; - } sigval_t; -#endif - -#if (!defined __have_siginfo_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t)) -# define __have_siginfo_t 1 - -# define __SI_MAX_SIZE 128 -# if __WORDSIZE == 64 -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4) -# else -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3) -# endif - -typedef struct - { - 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. */ - - union - { - int _pad[__SI_PAD_SIZE]; - - /* kill(). */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - } _kill; - - /* POSIX.1b timers. */ - struct - { - int si_tid; /* Timer ID. */ - int si_overrun; /* Overrun count. */ - sigval_t si_sigval; /* Signal value. */ - } _timer; - - /* POSIX.1b signals. */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - sigval_t si_sigval; /* Signal value. */ - } _rt; - - /* SIGCHLD. */ - struct - { - __pid_t si_pid; /* Which child. */ - __uid_t si_uid; /* Real user ID of sending process. */ - int si_status; /* Exit value or signal. */ - __clock_t si_utime; - __clock_t si_stime; - } _sigchld; - - /* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */ - struct - { - void *si_addr; /* Faulting insn/memory ref. */ - short si_addr_lsb; /* Valid LSB of the reported address. */ - } _sigfault; - - /* SIGPOLL. */ - struct - { - long int si_band; /* Band event for SIGPOLL. */ - int si_fd; - } _sigpoll; - - /* SIGSYS. */ - struct - { - void *_call_addr; /* Calling user insn. */ - int _syscall; /* Triggering system call number. */ - unsigned int _arch; /* AUDIT_ARCH_* of syscall. */ - } _sigsys; - } _sifields; - } siginfo_t; - - -/* X/Open requires some more fields with fixed names. */ -# define si_pid _sifields._kill.si_pid -# define si_uid _sifields._kill.si_uid -# define si_timerid _sifields._timer.si_tid -# define si_overrun _sifields._timer.si_overrun -# define si_status _sifields._sigchld.si_status -# define si_utime _sifields._sigchld.si_utime -# define si_stime _sifields._sigchld.si_stime -# define si_value _sifields._rt.si_sigval -# define si_int _sifields._rt.si_sigval.sival_int -# define si_ptr _sifields._rt.si_sigval.sival_ptr -# define si_addr _sifields._sigfault.si_addr -# define si_addr_lsb _sifields._sigfault.si_addr_lsb -# define si_band _sifields._sigpoll.si_band -# define si_fd _sifields._sigpoll.si_fd -# define si_call_addr _sifields._sigsys._call_addr -# define si_syscall _sifields._sigsys._syscall -# define si_arch _sifields._sigsys._arch - - -/* Values for `si_code'. Positive values are reserved for kernel-generated - signals. */ -enum -{ - SI_ASYNCNL = -60, /* Sent by asynch name lookup completion. */ -# define SI_ASYNCNL SI_ASYNCNL - SI_TKILL = -6, /* Sent by tkill. */ -# define SI_TKILL SI_TKILL - SI_SIGIO, /* Sent by queued SIGIO. */ -# define SI_SIGIO SI_SIGIO - SI_ASYNCIO, /* 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. */ -# define SI_USER SI_USER - SI_KERNEL = 0x80 /* Send by kernel. */ -#define SI_KERNEL SI_KERNEL -}; - - -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -/* `si_code' values for SIGILL signal. */ -enum -{ - ILL_ILLOPC = 1, /* Illegal opcode. */ -# define ILL_ILLOPC ILL_ILLOPC - ILL_ILLOPN, /* 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 - BUS_MCEERR_AR, /* Hardware memory error: action required. */ -# define BUS_MCEERR_AR BUS_MCEERR_AR - BUS_MCEERR_AO /* Hardware memory error: action optional. */ -# define BUS_MCEERR_AO BUS_MCEERR_AO -}; -# endif - -# ifdef __USE_XOPEN_EXTENDED -/* `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 -}; -# endif - -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -/* `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 -}; -# endif - -# undef __need_siginfo_t -#endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ - - -#if (defined _SIGNAL_H || defined __need_sigevent_t) \ - && !defined __have_sigevent_t -# define __have_sigevent_t 1 - -/* Structure to transport application-defined values with signals. */ -# define __SIGEV_MAX_SIZE 64 -# if __WORDSIZE == 64 -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4) -# else -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3) -# endif - -/* Forward declaration. */ -# ifndef __have_pthread_attr_t -typedef union pthread_attr_t pthread_attr_t; -# define __have_pthread_attr_t 1 -# endif - -typedef struct sigevent - { - sigval_t sigev_value; - int sigev_signo; - int sigev_notify; - - union - { - int _pad[__SIGEV_PAD_SIZE]; - - /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the - thread to receive the signal. */ - __pid_t _tid; - - struct - { - void (*_function) (sigval_t); /* Function to start. */ - pthread_attr_t *_attribute; /* Thread attributes. */ - } _sigev_thread; - } _sigev_un; - } sigevent_t; - -/* POSIX names to access some of the members. */ -# define sigev_notify_function _sigev_un._sigev_thread._function -# define sigev_notify_attributes _sigev_un._sigev_thread._attribute - -/* `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 - - SIGEV_THREAD_ID = 4 /* Send signal to specific thread. */ -#define SIGEV_THREAD_ID SIGEV_THREAD_ID -}; - -#endif /* have _SIGNAL_H. */ diff --git a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h b/sysdeps/unix/sysv/linux/s390/sys/ucontext.h index 955a8fef9c..fcbd48ddad 100644 --- a/sysdeps/unix/sysv/linux/s390/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/s390/sys/ucontext.h @@ -24,6 +24,7 @@ /* We need the signal context definitions even if they are not exposed by in <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> diff --git a/sysdeps/unix/sysv/linux/sh/sys/ucontext.h b/sysdeps/unix/sysv/linux/sh/sys/ucontext.h index 3ce381d2c6..cefb918831 100644 --- a/sysdeps/unix/sysv/linux/sh/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/sh/sys/ucontext.h @@ -25,6 +25,7 @@ /* We need the signal context definitions even if they are not exposed by <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> diff --git a/sysdeps/unix/sysv/linux/sigsetops.h b/sysdeps/unix/sysv/linux/sigsetops.h new file mode 100644 index 0000000000..05a605ff3f --- /dev/null +++ b/sysdeps/unix/sysv/linux/sigsetops.h @@ -0,0 +1,108 @@ +/* __sigset_t manipulators. Linux version. + Copyright (C) 1991-2017 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 Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef _SIGSETOPS_H +#define _SIGSETOPS_H 1 + +#include <signal.h> + +/* Return a mask that includes the bit for SIG only. */ +# define __sigmask(sig) \ + (((unsigned long int) 1) << (((sig) - 1) % (8 * sizeof (unsigned long int)))) + +/* Return the word index for SIG. */ +# define __sigword(sig) (((sig) - 1) / (8 * sizeof (unsigned long int))) + +# define __sigemptyset(set) \ + (__extension__ ({ \ + int __cnt = _SIGSET_NWORDS; \ + sigset_t *__set = (set); \ + while (--__cnt >= 0) \ + __set->__val[__cnt] = 0; \ + (void)0; \ + })) + +# define __sigfillset(set) \ + (__extension__ ({ \ + int __cnt = _SIGSET_NWORDS; \ + sigset_t *__set = (set); \ + while (--__cnt >= 0) \ + __set->__val[__cnt] = ~0UL; \ + (void)0; \ + })) + +# define __sigisemptyset(set) \ + (__extension__ ({ \ + int __cnt = _SIGSET_NWORDS; \ + const sigset_t *__set = (set); \ + int __ret = __set->__val[--__cnt]; \ + while (!__ret && --__cnt >= 0) \ + __ret = __set->__val[__cnt]; \ + __ret == 0; \ + })) + +# define __sigandset(dest, left, right) \ + (__extension__ ({ \ + int __cnt = _SIGSET_NWORDS; \ + sigset_t *__dest = (dest); \ + const sigset_t *__left = (left); \ + const sigset_t *__right = (right); \ + while (--__cnt >= 0) \ + __dest->__val[__cnt] = (__left->__val[__cnt] \ + & __right->__val[__cnt]); \ + (void)0; \ + })) + +# define __sigorset(dest, left, right) \ + (__extension__ ({ \ + int __cnt = _SIGSET_NWORDS; \ + sigset_t *__dest = (dest); \ + const sigset_t *__left = (left); \ + const sigset_t *__right = (right); \ + while (--__cnt >= 0) \ + __dest->__val[__cnt] = (__left->__val[__cnt] \ + | __right->__val[__cnt]); \ + (void)0; \ + })) + +/* These macros needn't check for a bogus signal number; + error checking is done in the non-__ versions. */ +# define __sigismember(set, sig) \ + (__extension__ ({ \ + unsigned long int __mask = __sigmask (sig); \ + unsigned long int __word = __sigword (sig); \ + (set)->__val[__word] & __mask ? 1 : 0; \ + })) + +# define __sigaddset(set, sig) \ + (__extension__ ({ \ + unsigned long int __mask = __sigmask (sig); \ + unsigned long int __word = __sigword (sig); \ + (set)->__val[__word] |= __mask; \ + (void)0; \ + })) + +# define __sigdelset(set, sig) \ + (__extension__ ({ \ + unsigned long int __mask = __sigmask (sig); \ + unsigned long int __word = __sigword (sig); \ + (set)->__val[__word] &= ~__mask; \ + (void)0; \ + })) + +#endif /* bits/sigsetops.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/siginfo-arch.h b/sysdeps/unix/sysv/linux/sparc/bits/siginfo-arch.h new file mode 100644 index 0000000000..92fe30f11e --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/bits/siginfo-arch.h @@ -0,0 +1,14 @@ +/* Architecture-specific adjustments to siginfo_t. SPARC version. */ +#ifndef _BITS_SIGINFO_ARCH_H +#define _BITS_SIGINFO_ARCH_H 1 + +#undef __SI_BAND_TYPE +#define __SI_BAND_TYPE int + +#undef __SI_SIGFAULT_ADDL +#define __SI_SIGFAULT_ADDL \ + int _si_trapno; + +#define si_trapno _sifields._sigfault._si_trapno + +#endif diff --git a/sysdeps/unix/sysv/linux/sparc/bits/siginfo-consts-arch.h b/sysdeps/unix/sysv/linux/sparc/bits/siginfo-consts-arch.h new file mode 100644 index 0000000000..721dc9cd43 --- /dev/null +++ b/sysdeps/unix/sysv/linux/sparc/bits/siginfo-consts-arch.h @@ -0,0 +1,12 @@ +/* Architecture-specific additional siginfo constants. SPARC version. */ +#ifndef _BITS_SIGINFO_CONSTS_ARCH_H +#define _BITS_SIGINFO_CONSTS_ARCH_H 1 + +/* `si_code' values for SIGEMT signal. */ +enum +{ + EMT_TAGOVF = 1 /* Tag overflow. */ +#define EMT_TAGOVF EMT_TAGOVF +}; + +#endif diff --git a/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h b/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h deleted file mode 100644 index 58814164ce..0000000000 --- a/sysdeps/unix/sysv/linux/sparc/bits/siginfo.h +++ /dev/null @@ -1,352 +0,0 @@ -/* siginfo_t, sigevent and constants. Linux/SPARC version. - Copyright (C) 1997-2017 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#if !defined _SIGNAL_H && !defined __need_siginfo_t \ - && !defined __need_sigevent_t -# error "Never include this file directly. Use <signal.h> instead" -#endif - -#include <bits/wordsize.h> - -#if (!defined __have_sigval_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t \ - || defined __need_sigevent_t)) -# define __have_sigval_t 1 - -/* Type for data associated with a signal. */ -typedef union sigval - { - int sival_int; - void *sival_ptr; - } sigval_t; -#endif - -#if (!defined __have_siginfo_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t)) -# define __have_siginfo_t 1 - -# define __SI_MAX_SIZE 128 -# if __WORDSIZE == 64 -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4) -# else -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3) -# endif - -typedef struct - { - 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. */ - - union - { - int _pad[__SI_PAD_SIZE]; - - /* kill(). */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - } _kill; - - /* POSIX.1b timers. */ - struct - { - int si_tid; /* Timer ID. */ - int si_overrun; /* Overrun count. */ - sigval_t si_sigval; /* Signal value. */ - } _timer; - - /* POSIX.1b signals. */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - sigval_t si_sigval; /* Signal value. */ - } _rt; - - /* SIGCHLD. */ - struct - { - __pid_t si_pid; /* Which child. */ - __uid_t si_uid; /* Real user ID of sending process. */ - int si_status; /* Exit value or signal. */ - __clock_t si_utime; - __clock_t si_stime; - } _sigchld; - - /* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */ - struct - { - void *si_addr; /* Faulting insn/memory ref. */ - int si_trapno; - short int si_addr_lsb; /* Valid LSB of the reported address. */ - } _sigfault; - - /* SIGPOLL. */ - struct - { - int si_band; /* Band event for SIGPOLL. */ - int si_fd; - } _sigpoll; - - /* SIGSYS. */ - struct - { - void *_call_addr; /* Calling user insn. */ - int _syscall; /* Triggering system call number. */ - unsigned int _arch; /* AUDIT_ARCH_* of syscall. */ - } _sigsys; - } _sifields; - } siginfo_t; - - -/* X/Open requires some more fields with fixed names. */ -# define si_pid _sifields._kill.si_pid -# define si_uid _sifields._kill.si_uid -# define si_timerid _sifields._timer.si_tid -# define si_overrun _sifields._timer.si_overrun -# define si_status _sifields._sigchld.si_status -# define si_utime _sifields._sigchld.si_utime -# define si_stime _sifields._sigchld.si_stime -# define si_value _sifields._rt.si_sigval -# define si_int _sifields._rt.si_sigval.sival_int -# define si_ptr _sifields._rt.si_sigval.sival_ptr -# define si_addr _sifields._sigfault.si_addr -# define si_trapno _sifields._sigfault.si_trapno -# define si_addr_lsb _sifields._sigfault.si_addr_lsb -# define si_band _sifields._sigpoll.si_band -# define si_fd _sifields._sigpoll.si_fd -# define si_call_addr _sifields._sigsys._call_addr -# define si_syscall _sifields._sigsys._syscall -# define si_arch _sifields._sigsys._arch - - -/* Values for `si_code'. Positive values are reserved for kernel-generated - signals. */ -enum -{ - SI_ASYNCNL = -60, /* Sent by asynch name lookup completion. */ -# define SI_ASYNCNL SI_ASYNCNL - SI_TKILL = -6, /* Sent by tkill. */ -# define SI_TKILL SI_TKILL - SI_SIGIO, /* Sent by queued SIGIO. */ -# define SI_SIGIO SI_SIGIO - SI_ASYNCIO, /* 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. */ -# define SI_USER SI_USER - SI_KERNEL = 0x80 /* Send by kernel. */ -#define SI_KERNEL SI_KERNEL -}; - - -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -/* `si_code' values for SIGILL signal. */ -enum -{ - ILL_ILLOPC = 1, /* Illegal opcode. */ -# define ILL_ILLOPC ILL_ILLOPC - ILL_ILLOPN, /* 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 - BUS_MCEERR_AR, /* Hardware memory error: action required. */ -# define BUS_MCEERR_AR BUS_MCEERR_AR - BUS_MCEERR_AO /* Hardware memory error: action optional. */ -# define BUS_MCEERR_AO BUS_MCEERR_AO -}; -# endif - -# ifdef __USE_XOPEN_EXTENDED -/* `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 -}; -# endif - -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -/* `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 -}; -# endif - -# if defined __USE_GNU -/* `si_code' values for SIGEMT signal. */ -enum -{ - EMT_TAGOVF = 1 /* Tag overflow. */ -# define EMT_TAGOVF EMT_TAGOVF -}; -# endif - -# undef __need_siginfo_t -#endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ - - -#if (defined _SIGNAL_H || defined __need_sigevent_t) \ - && !defined __have_sigevent_t -# define __have_sigevent_t 1 - -/* Structure to transport application-defined values with signals. */ -# define __SIGEV_MAX_SIZE 64 -# if __WORDSIZE == 64 -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4) -# else -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3) -# endif - -/* Forward declaration. */ -# ifndef __have_pthread_attr_t -typedef union pthread_attr_t pthread_attr_t; -# define __have_pthread_attr_t 1 -# endif - -typedef struct sigevent - { - sigval_t sigev_value; - int sigev_signo; - int sigev_notify; - - union - { - int _pad[__SIGEV_PAD_SIZE]; - - /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the - thread to receive the signal. */ - __pid_t _tid; - - struct - { - void (*_function) (sigval_t); /* Function to start. */ - pthread_attr_t *_attribute; /* Thread attributes. */ - } _sigev_thread; - } _sigev_un; - } sigevent_t; - -/* POSIX names to access some of the members. */ -# define sigev_notify_function _sigev_un._sigev_thread._function -# define sigev_notify_attributes _sigev_un._sigev_thread._attribute - -/* `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 - - SIGEV_THREAD_ID = 4 /* Send signal to specific thread. */ -#define SIGEV_THREAD_ID SIGEV_THREAD_ID -}; - -#endif /* have _SIGNAL_H. */ diff --git a/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h b/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h index 0d6cbe6e6b..e859b79c9d 100644 --- a/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/sparc/sys/ucontext.h @@ -23,6 +23,7 @@ /* We need the signal context definitions even if they are not exposed by <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> diff --git a/sysdeps/unix/sysv/linux/sys/epoll.h b/sysdeps/unix/sysv/linux/sys/epoll.h index 7542e8ac0b..1498058396 100644 --- a/sysdeps/unix/sysv/linux/sys/epoll.h +++ b/sysdeps/unix/sysv/linux/sys/epoll.h @@ -21,13 +21,7 @@ #include <stdint.h> #include <sys/types.h> -/* Get __sigset_t. */ -#include <bits/sigset.h> - -#ifndef __sigset_t_defined -# define __sigset_t_defined -typedef __sigset_t sigset_t; -#endif +#include <bits/types/sigset_t.h> /* Get the platform-dependent flags. */ #include <bits/epoll.h> diff --git a/sysdeps/unix/sysv/linux/sys/signalfd.h b/sysdeps/unix/sysv/linux/sys/signalfd.h index a18db513b9..a01c7d1cc1 100644 --- a/sysdeps/unix/sysv/linux/sys/signalfd.h +++ b/sysdeps/unix/sysv/linux/sys/signalfd.h @@ -18,9 +18,8 @@ #ifndef _SYS_SIGNALFD_H #define _SYS_SIGNALFD_H 1 -#define __need_sigset_t -#include <signal.h> #include <stdint.h> +#include <bits/types/sigset_t.h> /* Get the platform-dependent flags. */ #include <bits/signalfd.h> diff --git a/sysdeps/unix/sysv/linux/tile/bits/siginfo-arch.h b/sysdeps/unix/sysv/linux/tile/bits/siginfo-arch.h new file mode 100644 index 0000000000..013ad7187d --- /dev/null +++ b/sysdeps/unix/sysv/linux/tile/bits/siginfo-arch.h @@ -0,0 +1,11 @@ +/* Architecture-specific adjustments to siginfo_t. Tile version. */ +#ifndef _BITS_SIGINFO_ARCH_H +#define _BITS_SIGINFO_ARCH_H 1 + +#undef __SI_SIGFAULT_ADDL +#define __SI_SIGFAULT_ADDL \ + int _si_trapno; + +#define si_trapno _sifields._sigfault._si_trapno + +#endif diff --git a/sysdeps/unix/sysv/linux/tile/bits/siginfo-consts-arch.h b/sysdeps/unix/sysv/linux/tile/bits/siginfo-consts-arch.h new file mode 100644 index 0000000000..2e76d2082a --- /dev/null +++ b/sysdeps/unix/sysv/linux/tile/bits/siginfo-consts-arch.h @@ -0,0 +1,14 @@ +/* Architecture-specific additional siginfo constants. Tile version. */ +#ifndef _BITS_SIGINFO_CONSTS_ARCH_H +#define _BITS_SIGINFO_CONSTS_ARCH_H 1 + +/* `si_code' values for SIGILL signal. */ +enum +{ + ILL_DBLFLT = ILL_BADSTK + 1, /* Double fault. */ +#define ILL_DBLFLT ILL_DBLFLT + ILL_HARDWALL /* User networks hardwall violation. */ +#define ILL_HARDWALL ILL_HARDWALL +}; + +#endif diff --git a/sysdeps/unix/sysv/linux/tile/bits/siginfo.h b/sysdeps/unix/sysv/linux/tile/bits/siginfo.h deleted file mode 100644 index 44d66a0597..0000000000 --- a/sysdeps/unix/sysv/linux/tile/bits/siginfo.h +++ /dev/null @@ -1,347 +0,0 @@ -/* Copyright (C) 2011-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#if !defined _SIGNAL_H && !defined __need_siginfo_t \ - && !defined __need_sigevent_t -# error "Never include this file directly. Use <signal.h> instead" -#endif - -#include <bits/wordsize.h> - -#if (!defined __have_sigval_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t \ - || defined __need_sigevent_t)) -# define __have_sigval_t 1 - -/* Type for data associated with a signal. */ -typedef union sigval - { - int sival_int; - void *sival_ptr; - } sigval_t; -#endif - -#if (!defined __have_siginfo_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t)) -# define __have_siginfo_t 1 - -# define __SI_MAX_SIZE 128 -# if __WORDSIZE == 64 -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4) -# else -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3) -# endif - -typedef struct - { - 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. */ - - union - { - int _pad[__SI_PAD_SIZE]; - - /* kill(). */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - } _kill; - - /* POSIX.1b timers. */ - struct - { - int si_tid; /* Timer ID. */ - int si_overrun; /* Overrun count. */ - sigval_t si_sigval; /* Signal value. */ - } _timer; - - /* POSIX.1b signals. */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - sigval_t si_sigval; /* Signal value. */ - } _rt; - - /* SIGCHLD. */ - struct - { - __pid_t si_pid; /* Which child. */ - __uid_t si_uid; /* Real user ID of sending process. */ - int si_status; /* Exit value or signal. */ - __clock_t si_utime; - __clock_t si_stime; - } _sigchld; - - /* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */ - struct - { - void *si_addr; /* Faulting insn/memory ref. */ - int si_trapno; /* TRAP # which caused the signal. */ - short int si_addr_lsb; /* Valid LSB of the reported address. */ - } _sigfault; - - /* SIGPOLL. */ - struct - { - long int si_band; /* Band event for SIGPOLL. */ - int si_fd; - } _sigpoll; - - /* SIGSYS. */ - struct - { - void *_call_addr; /* Calling user insn. */ - int _syscall; /* Triggering system call number. */ - unsigned int _arch; /* AUDIT_ARCH_* of syscall. */ - } _sigsys; - } _sifields; - } siginfo_t; - - -/* X/Open requires some more fields with fixed names. */ -# define si_pid _sifields._kill.si_pid -# define si_uid _sifields._kill.si_uid -# define si_timerid _sifields._timer.si_tid -# define si_overrun _sifields._timer.si_overrun -# define si_status _sifields._sigchld.si_status -# define si_utime _sifields._sigchld.si_utime -# define si_stime _sifields._sigchld.si_stime -# define si_value _sifields._rt.si_sigval -# define si_int _sifields._rt.si_sigval.sival_int -# define si_ptr _sifields._rt.si_sigval.sival_ptr -# define si_addr _sifields._sigfault.si_addr -# define si_trapno _sifields._sigfault.si_trapno -# define si_addr_lsb _sifields._sigfault.si_addr_lsb -# define si_band _sifields._sigpoll.si_band -# define si_fd _sifields._sigpoll.si_fd -# define si_call_addr _sifields._sigsys._call_addr -# define si_syscall _sifields._sigsys._syscall -# define si_arch _sifields._sigsys._arch - - -/* Values for `si_code'. Positive values are reserved for kernel-generated - signals. */ -enum -{ - SI_ASYNCNL = -60, /* Sent by asynch name lookup completion. */ -# define SI_ASYNCNL SI_ASYNCNL - SI_TKILL = -6, /* Sent by tkill. */ -# define SI_TKILL SI_TKILL - SI_SIGIO, /* Sent by queued SIGIO. */ -# define SI_SIGIO SI_SIGIO - SI_ASYNCIO, /* 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_KERNEL = 0x80 /* Send by kernel. */ -#define SI_KERNEL SI_KERNEL -}; - - -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -/* `si_code' values for SIGILL signal. */ -enum -{ - ILL_ILLOPC = 1, /* Illegal opcode. */ -# define ILL_ILLOPC ILL_ILLOPC - ILL_ILLOPN, /* 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 - ILL_DBLFLT, /* Double fault. */ -# define ILL_DBLFLT ILL_DBLFLT - ILL_HARDWALL /* User networks hardwall violation. */ -# define ILL_HARDWALL ILL_HARDWALL -}; - -/* `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 - BUS_MCEERR_AR, /* Hardware memory error: action required. */ -# define BUS_MCEERR_AR BUS_MCEERR_AR - BUS_MCEERR_AO /* Hardware memory error: action optional. */ -# define BUS_MCEERR_AO BUS_MCEERR_AO -}; -# endif - -# ifdef __USE_XOPEN_EXTENDED -/* `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 -}; -# endif - -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -/* `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 -}; -# endif - -# undef __need_siginfo_t -#endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ - - -#if (defined _SIGNAL_H || defined __need_sigevent_t) \ - && !defined __have_sigevent_t -# define __have_sigevent_t 1 - -/* Structure to transport application-defined values with signals. */ -# define __SIGEV_MAX_SIZE 64 -# if __WORDSIZE == 64 -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4) -# else -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3) -# endif - -/* Forward declaration. */ -# ifndef __have_pthread_attr_t -typedef union pthread_attr_t pthread_attr_t; -# define __have_pthread_attr_t 1 -# endif - -typedef struct sigevent - { - sigval_t sigev_value; - int sigev_signo; - int sigev_notify; - - union - { - int _pad[__SIGEV_PAD_SIZE]; - - /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the - thread to receive the signal. */ - __pid_t _tid; - - struct - { - void (*_function) (sigval_t); /* Function to start. */ - pthread_attr_t *_attribute; /* Thread attributes. */ - } _sigev_thread; - } _sigev_un; - } sigevent_t; - -/* POSIX names to access some of the members. */ -# define sigev_notify_function _sigev_un._sigev_thread._function -# define sigev_notify_attributes _sigev_un._sigev_thread._attribute - -/* `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 - - SIGEV_THREAD_ID = 4 /* Send signal to specific thread. */ -#define SIGEV_THREAD_ID SIGEV_THREAD_ID -}; - -#endif /* have _SIGNAL_H. */ diff --git a/sysdeps/unix/sysv/linux/tile/sys/ucontext.h b/sysdeps/unix/sysv/linux/tile/sys/ucontext.h index 8fc2f13834..4a40e5710f 100644 --- a/sysdeps/unix/sysv/linux/tile/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/tile/sys/ucontext.h @@ -24,6 +24,7 @@ /* We need the signal context definitions even if they are not exposed by <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> diff --git a/sysdeps/unix/sysv/linux/x86/bits/siginfo-arch.h b/sysdeps/unix/sysv/linux/x86/bits/siginfo-arch.h new file mode 100644 index 0000000000..6c85dbb6e8 --- /dev/null +++ b/sysdeps/unix/sysv/linux/x86/bits/siginfo-arch.h @@ -0,0 +1,19 @@ +/* Architecture-specific adjustments to siginfo_t. x86 version. */ +#ifndef _BITS_SIGINFO_ARCH_H +#define _BITS_SIGINFO_ARCH_H 1 + +#if defined __x86_64__ && __WORDSIZE == 32 +/* si_utime and si_stime must be 4 byte aligned for x32 to match the + kernel. We align siginfo_t to 8 bytes so that si_utime and + si_stime are actually aligned to 8 bytes since their offsets are + multiple of 8 bytes. Note: with some compilers, the alignment + attribute would be ignored if it were put in __SI_CLOCK_T instead + of encapsulated in a typedef. */ +typedef __clock_t __attribute__ ((__aligned__ (4))) __sigchld_clock_t; +# undef __SI_ALIGNMENT +# define __SI_ALIGNMENT __attribute__ ((__aligned__ (8))) +# undef __SI_CLOCK_T +# define __SI_CLOCK_T __sigchld_clock_t +#endif + +#endif diff --git a/sysdeps/unix/sysv/linux/x86/bits/siginfo.h b/sysdeps/unix/sysv/linux/x86/bits/siginfo.h deleted file mode 100644 index 569359980d..0000000000 --- a/sysdeps/unix/sysv/linux/x86/bits/siginfo.h +++ /dev/null @@ -1,360 +0,0 @@ -/* siginfo_t, sigevent and constants. Linux x86-64 version. - Copyright (C) 2012-2017 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#if !defined _SIGNAL_H && !defined __need_siginfo_t \ - && !defined __need_sigevent_t -# error "Never include this file directly. Use <signal.h> instead" -#endif - -#include <bits/wordsize.h> - -#if (!defined __have_sigval_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t \ - || defined __need_sigevent_t)) -# define __have_sigval_t 1 - -/* Type for data associated with a signal. */ -typedef union sigval - { - int sival_int; - void *sival_ptr; - } sigval_t; -#endif - -#if (!defined __have_siginfo_t \ - && (defined _SIGNAL_H || defined __need_siginfo_t)) -# define __have_siginfo_t 1 - -# define __SI_MAX_SIZE 128 -# if __WORDSIZE == 64 -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 4) -# else -# define __SI_PAD_SIZE ((__SI_MAX_SIZE / sizeof (int)) - 3) -# endif - -# if defined __x86_64__ && __WORDSIZE == 32 -/* si_utime and si_stime must be 4 byte aligned for x32 to match the - kernel. We align siginfo_t to 8 bytes so that si_utime and si_stime - are actually aligned to 8 bytes since their offsets are multiple of - 8 bytes. */ -typedef __clock_t __attribute__ ((__aligned__ (4))) __sigchld_clock_t; -# define __SI_ALIGNMENT __attribute__ ((__aligned__ (8))) -# else -typedef __clock_t __sigchld_clock_t; -# define __SI_ALIGNMENT -# endif - -typedef struct - { - 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. */ - - union - { - int _pad[__SI_PAD_SIZE]; - - /* kill(). */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - } _kill; - - /* POSIX.1b timers. */ - struct - { - int si_tid; /* Timer ID. */ - int si_overrun; /* Overrun count. */ - sigval_t si_sigval; /* Signal value. */ - } _timer; - - /* POSIX.1b signals. */ - struct - { - __pid_t si_pid; /* Sending process ID. */ - __uid_t si_uid; /* Real user ID of sending process. */ - sigval_t si_sigval; /* Signal value. */ - } _rt; - - /* SIGCHLD. */ - struct - { - __pid_t si_pid; /* Which child. */ - __uid_t si_uid; /* Real user ID of sending process. */ - int si_status; /* Exit value or signal. */ - __sigchld_clock_t si_utime; - __sigchld_clock_t si_stime; - } _sigchld; - - /* SIGILL, SIGFPE, SIGSEGV, SIGBUS. */ - struct - { - void *si_addr; /* Faulting insn/memory ref. */ - short int si_addr_lsb; /* Valid LSB of the reported address. */ - struct - { - void *_lower; - void *_upper; - } si_addr_bnd; - } _sigfault; - - /* SIGPOLL. */ - struct - { - long int si_band; /* Band event for SIGPOLL. */ - int si_fd; - } _sigpoll; - - /* SIGSYS. */ - struct - { - void *_call_addr; /* Calling user insn. */ - int _syscall; /* Triggering system call number. */ - unsigned int _arch; /* AUDIT_ARCH_* of syscall. */ - } _sigsys; - } _sifields; - } siginfo_t __SI_ALIGNMENT; - - -/* X/Open requires some more fields with fixed names. */ -# define si_pid _sifields._kill.si_pid -# define si_uid _sifields._kill.si_uid -# define si_timerid _sifields._timer.si_tid -# define si_overrun _sifields._timer.si_overrun -# define si_status _sifields._sigchld.si_status -# define si_utime _sifields._sigchld.si_utime -# define si_stime _sifields._sigchld.si_stime -# define si_value _sifields._rt.si_sigval -# define si_int _sifields._rt.si_sigval.sival_int -# define si_ptr _sifields._rt.si_sigval.sival_ptr -# define si_addr _sifields._sigfault.si_addr -# define si_addr_lsb _sifields._sigfault.si_addr_lsb -# define si_lower _sifields._sigfault.si_addr_bnd._lower -# define si_upper _sifields._sigfault.si_addr_bnd._upper -# define si_band _sifields._sigpoll.si_band -# define si_fd _sifields._sigpoll.si_fd -# define si_call_addr _sifields._sigsys._call_addr -# define si_syscall _sifields._sigsys._syscall -# define si_arch _sifields._sigsys._arch - - -/* Values for `si_code'. Positive values are reserved for kernel-generated - signals. */ -enum -{ - SI_ASYNCNL = -60, /* Sent by asynch name lookup completion. */ -# define SI_ASYNCNL SI_ASYNCNL - SI_TKILL = -6, /* Sent by tkill. */ -# define SI_TKILL SI_TKILL - SI_SIGIO, /* Sent by queued SIGIO. */ -# define SI_SIGIO SI_SIGIO - SI_ASYNCIO, /* 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. */ -# define SI_USER SI_USER - SI_KERNEL = 0x80 /* Send by kernel. */ -#define SI_KERNEL SI_KERNEL -}; - - -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -/* `si_code' values for SIGILL signal. */ -enum -{ - ILL_ILLOPC = 1, /* Illegal opcode. */ -# define ILL_ILLOPC ILL_ILLOPC - ILL_ILLOPN, /* 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 - BUS_MCEERR_AR, /* Hardware memory error: action required. */ -# define BUS_MCEERR_AR BUS_MCEERR_AR - BUS_MCEERR_AO /* Hardware memory error: action optional. */ -# define BUS_MCEERR_AO BUS_MCEERR_AO -}; -# endif - -# ifdef __USE_XOPEN_EXTENDED -/* `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 -}; -# endif - -# if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 -/* `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 -}; -# endif - -# undef __need_siginfo_t -#endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */ - - -#if (defined _SIGNAL_H || defined __need_sigevent_t) \ - && !defined __have_sigevent_t -# define __have_sigevent_t 1 - -/* Structure to transport application-defined values with signals. */ -# define __SIGEV_MAX_SIZE 64 -# if __WORDSIZE == 64 -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 4) -# else -# define __SIGEV_PAD_SIZE ((__SIGEV_MAX_SIZE / sizeof (int)) - 3) -# endif - -/* Forward declaration. */ -# ifndef __have_pthread_attr_t -typedef union pthread_attr_t pthread_attr_t; -# define __have_pthread_attr_t 1 -# endif - -typedef struct sigevent - { - sigval_t sigev_value; - int sigev_signo; - int sigev_notify; - - union - { - int _pad[__SIGEV_PAD_SIZE]; - - /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the - thread to receive the signal. */ - __pid_t _tid; - - struct - { - void (*_function) (sigval_t); /* Function to start. */ - pthread_attr_t *_attribute; /* Thread attributes. */ - } _sigev_thread; - } _sigev_un; - } sigevent_t; - -/* POSIX names to access some of the members. */ -# define sigev_notify_function _sigev_un._sigev_thread._function -# define sigev_notify_attributes _sigev_un._sigev_thread._attribute - -/* `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 - - SIGEV_THREAD_ID = 4 /* Send signal to specific thread. */ -#define SIGEV_THREAD_ID SIGEV_THREAD_ID -}; - -#endif /* have _SIGNAL_H. */ diff --git a/sysdeps/unix/sysv/linux/x86/sys/ucontext.h b/sysdeps/unix/sysv/linux/x86/sys/ucontext.h index 5dd72acf48..60a3edfea0 100644 --- a/sysdeps/unix/sysv/linux/x86/sys/ucontext.h +++ b/sysdeps/unix/sysv/linux/x86/sys/ucontext.h @@ -23,6 +23,7 @@ /* We need the signal context definitions even if they are not exposed by <signal.h>. */ +#include <bits/types/__sigset_t.h> #include <bits/sigcontext.h> #include <bits/sigstack.h> #include <bits/types/struct_sigstack.h> |