mirror of https://gitee.com/Nocallback/glibc.git
Browse Source
The types affected are __sig_atomic_t, sig_atomic_t, __sigset_t, sigset_t, sigval_t, sigevent_t, and siginfo_t. __sig_atomic_t is a scalar, so it's now directly available from bits/types.h. The others get bits/types/ headers. Side effects include: There have been small changes to which non-signal headers expose which subset of the signal-related types. A couple of architectures' nested siginfo_t fields had to be renamed to prevent undesired macro expansion. Internal code that wants to manipulate signal masks must now include <sigsetops.h> (which is not installed) and should be aware that __sigaddset, __sigandset, __sigdelset, __sigemptyset, and __sigorset no longer return a value (unlike the public API). Relatedly, the public signal.h no longer declares any of those functions. The obsolete sigmask() macro no longer has a system-specific definition -- in the cases where it matters, it didn't work anyway. New Linux architectures should create bits/siginfo-arch.h and/or bits/siginfo-consts-arch.h to customize their siginfo_t, rather than duplicating everything in bits/siginfo.h (which no longer exists). Add new __SI_* macros if necessary. Ports to other operating systems are strongly encouraged to generalize this scheme further. * 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.hjl/cacheinfo/master
95 changed files with 1192 additions and 2911 deletions
@ -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. */ |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -0,0 +1 @@ |
|||
#include <signal/bits/types/sig_atomic_t.h> |
|||
@ -0,0 +1 @@ |
|||
#include <signal/bits/types/sigset_t.h> |
|||
@ -0,0 +1 @@ |
|||
#include <signal/bits/types/sigval_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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
|
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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. */ |
|||
@ -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. */ |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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. */ |
|||
@ -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 |
|||
@ -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. */ |
|||
@ -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. */ |
|||
@ -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 */ |
|||
@ -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 |
|||
@ -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 |
|||
@ -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. */ |
|||
@ -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 |
|||
@ -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 |
|||
@ -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. */ |
|||
@ -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 |
|||
@ -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. */ |
|||
Loading…
Reference in new issue