mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-26 23:10:06 +00:00
Remove __need macros from signal.h.
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.
This commit is contained in:
parent
500b3a499f
commit
a992f506ff
127
ChangeLog
127
ChangeLog
@ -1,5 +1,132 @@
|
||||
2017-05-20 Zack Weinberg <zackw@panix.com>
|
||||
|
||||
* bits/sigevent-consts.h
|
||||
* bits/siginfo-consts.h
|
||||
* bits/types/__sigset_t.h
|
||||
* bits/types/sigevent_t.h
|
||||
* bits/types/siginfo_t.h
|
||||
* sysdeps/unix/sysv/linux/bits/sigevent-consts.h
|
||||
* sysdeps/unix/sysv/linux/bits/siginfo-consts.h
|
||||
* sysdeps/unix/sysv/linux/bits/types/__sigset_t.h
|
||||
* sysdeps/unix/sysv/linux/bits/types/sigevent_t.h
|
||||
* sysdeps/unix/sysv/linux/bits/types/siginfo_t.h:
|
||||
New system-dependent bits headers.
|
||||
|
||||
* sysdeps/unix/sysv/linux/bits/siginfo-arch.h
|
||||
* sysdeps/unix/sysv/linux/bits/siginfo-consts-arch.h
|
||||
* sysdeps/unix/sysv/linux/ia64/bits/siginfo-arch.h
|
||||
* sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h
|
||||
* sysdeps/unix/sysv/linux/mips/bits/siginfo-arch.h
|
||||
* sysdeps/unix/sysv/linux/sparc/bits/siginfo-arch.h
|
||||
* sysdeps/unix/sysv/linux/tile/bits/siginfo-arch.h
|
||||
* sysdeps/unix/sysv/linux/tile/bits/siginfo-consts-arch.h
|
||||
* sysdeps/unix/sysv/linux/x86/bits/siginfo-arch.h:
|
||||
New Linux-only system-dependent bits headers.
|
||||
|
||||
* signal/bits/types/sig_atomic_t.h
|
||||
* signal/bits/types/sigset_t.h
|
||||
* signal/bits/types/sigval_t.h:
|
||||
New non-system-dependent bits headers.
|
||||
|
||||
* sysdeps/generic/sigsetops.h
|
||||
* sysdeps/unix/sysv/linux/sigsetops.h:
|
||||
New internal headers.
|
||||
|
||||
* include/bits/types/sig_atomic_t.h
|
||||
* include/bits/types/sigset_t.h
|
||||
* include/bits/types/sigval_t.h:
|
||||
New wrappers.
|
||||
|
||||
* signal/sigsetops.h
|
||||
* bits/siginfo.h
|
||||
* bits/sigset.h
|
||||
* sysdeps/unix/sysv/linux/bits/siginfo.h
|
||||
* sysdeps/unix/sysv/linux/bits/sigset.h
|
||||
* sysdeps/unix/sysv/linux/ia64/bits/siginfo.h
|
||||
* sysdeps/unix/sysv/linux/mips/bits/siginfo.h
|
||||
* sysdeps/unix/sysv/linux/s390/bits/siginfo.h
|
||||
* sysdeps/unix/sysv/linux/sparc/bits/siginfo.h
|
||||
* sysdeps/unix/sysv/linux/tile/bits/siginfo.h
|
||||
* sysdeps/unix/sysv/linux/x86/bits/siginfo.h:
|
||||
Deleted.
|
||||
|
||||
* signal/Makefile, sysdeps/unix/sysv/linux/Makefile:
|
||||
Update lists of installed headers.
|
||||
|
||||
* posix/bits/types.h: Define __sig_atomic_t here.
|
||||
* signal/signal.h: Use the new bits headers; no need to handle
|
||||
__need_sig_atomic_t nor __need_sigset_t. Don't use __sigmask
|
||||
to define sigmask.
|
||||
* include/signal.h: No need to handle __need_sig_atomic_t
|
||||
nor __need_sigset_t. Don't define __sigemptyset.
|
||||
|
||||
* io/sys/poll.h, setjmp/setjmp.h
|
||||
* sysdeps/arm/sys/ucontext.h, sysdeps/generic/sys/ucontext.h
|
||||
* sysdeps/i386/sys/ucontext.h, sysdeps/m68k/sys/ucontext.h
|
||||
* sysdeps/mach/hurd/i386/bits/sigcontext.h
|
||||
* sysdeps/mips/sys/ucontext.h, sysdeps/powerpc/novmxsetjmp.h
|
||||
* sysdeps/pthread/bits/sigthread.h
|
||||
* sysdeps/unix/sysv/linux/hppa/sys/ucontext.h
|
||||
* sysdeps/unix/sysv/linux/m68k/sys/ucontext.h
|
||||
* sysdeps/unix/sysv/linux/mips/sys/ucontext.h
|
||||
* sysdeps/unix/sysv/linux/nios2/sys/ucontext.h
|
||||
* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h
|
||||
* sysdeps/unix/sysv/linux/s390/sys/ucontext.h
|
||||
* sysdeps/unix/sysv/linux/sh/sys/ucontext.h
|
||||
* sysdeps/unix/sysv/linux/sparc/sys/ucontext.h
|
||||
* sysdeps/unix/sysv/linux/tile/sys/ucontext.h
|
||||
* sysdeps/unix/sysv/linux/x86/sys/ucontext.h:
|
||||
Use bits/types/__sigset_t.h.
|
||||
|
||||
* misc/sys/select.h, posix/spawn.h
|
||||
* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h
|
||||
* sysdeps/unix/sysv/linux/sys/epoll.h
|
||||
* sysdeps/unix/sysv/linux/sys/signalfd.h:
|
||||
Use bits/types/sigset_t.h.
|
||||
|
||||
* resolv/netdb.h, rt/mqueue.h: Use bits/types/sigevent_t.h.
|
||||
* rt/aio.h: Use bits/types/sigevent_t.h and bits/sigevent-consts.h.
|
||||
* socket/sys/socket.h: Don't include bits/sigset.h.
|
||||
|
||||
* login/utmp_file.c, shadow/lckpwdf.c, signal/sigandset.c
|
||||
* signal/sigisempty.c, stdlib/abort.c, sysdeps/posix/profil.c
|
||||
* sysdeps/posix/sigignore.c, sysdeps/posix/sigintr.c
|
||||
* sysdeps/posix/signal.c, sysdeps/posix/sigset.c
|
||||
* sysdeps/posix/sprofil.c, sysdeps/posix/sysv_signal.c
|
||||
* sysdeps/unix/sysv/linux/nptl-signals.h:
|
||||
Include sigsetops.h.
|
||||
|
||||
* signal/sigaddset.c, signal/sigandset.c, signal/sigdelset.c
|
||||
* signal/sigorset.c, stdlib/abort.c, sysdeps/posix/sigignore.c
|
||||
* sysdeps/posix/signal.c, sysdeps/posix/sigset.c:
|
||||
__sigaddset, __sigandset, __sigdelset, __sigemptyset, __sigorset
|
||||
now return no value.
|
||||
|
||||
* signal/sigaddset.c, signal/sigdelset.c, signal/sigismem.c
|
||||
Include <errno.h>, <signal.h>, and <sigsetops.h> instead of
|
||||
"sigsetops.h".
|
||||
|
||||
* signal/sigsetops.c: Explicitly define __sigismember,
|
||||
__sigaddset, and __sigdelset as compatibility symbols.
|
||||
|
||||
* signal/Versions: Correct commentary on __sigpause,
|
||||
__sigaddset, __sigdelset, __sigismember.
|
||||
|
||||
* inet/rcmd.c: Include sigsetops.h. Convert old code using
|
||||
__sigblock/__sigsetmask to use __sigprocmask and friends.
|
||||
|
||||
* resolv/resolv.h: Remove __need_res_state logic.
|
||||
Move definition of res_state and related constants to ...
|
||||
* resolv/bits/types/res_state.h: ...this new file.
|
||||
* resolv/Makefile: Install bits/types/res_state.h.
|
||||
* include/bits/types/res_state.h: New wrapper.
|
||||
* include/list.h: Remove __need_list_t logic.
|
||||
Move definition of list_t to ...
|
||||
* include/list_t.h: ...this new file.
|
||||
|
||||
* nptl/descr.h: Include list_t.h and bits/types/res_state.h
|
||||
instead of list.h and resolv.h.
|
||||
|
||||
* resolv/resolv.h: Remove __need_res_state logic.
|
||||
Move definition of res_state and related constants to ...
|
||||
* resolv/bits/types/res_state.h: ...this new file.
|
||||
|
@ -1,4 +1,5 @@
|
||||
/* Copyright (C) 1991-2017 Free Software Foundation, Inc.
|
||||
/* sigevent constants. Stub version.
|
||||
Copyright (C) 1997-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -15,18 +16,22 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Definitions relevant to functions that operate on `sigset_t's. */
|
||||
#ifndef _BITS_SIGEVENT_CONSTS_H
|
||||
#define _BITS_SIGEVENT_CONSTS_H 1
|
||||
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#if !defined _SIGNAL_H && !defined _AIO_H
|
||||
#error "Don't include <bits/sigevent-consts.h> directly; use <signal.h> instead."
|
||||
#endif
|
||||
|
||||
#define BITS (_NSIG - 1)
|
||||
#define ELT(signo) (((signo) - 1) / BITS)
|
||||
#define MASK(signo) (1 << (((signo) - 1) % BITS))
|
||||
/* `sigev_notify' values. */
|
||||
enum
|
||||
{
|
||||
SIGEV_SIGNAL = 0, /* Notify via signal. */
|
||||
# define SIGEV_SIGNAL SIGEV_SIGNAL
|
||||
SIGEV_NONE, /* Other notification: meaningless. */
|
||||
# define SIGEV_NONE SIGEV_NONE
|
||||
SIGEV_THREAD /* Deliver via thread creation. */
|
||||
# define SIGEV_THREAD SIGEV_THREAD
|
||||
};
|
||||
|
||||
#undef sigemptyset
|
||||
#undef sigfillset
|
||||
#undef sigaddset
|
||||
#undef sigdelset
|
||||
#undef sigismember
|
||||
#endif
|
@ -1,4 +1,4 @@
|
||||
/* siginfo_t, sigevent and constants. Stub version.
|
||||
/* siginfo_t constants. Stub version.
|
||||
Copyright (C) 1997-2017 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
@ -16,42 +16,8 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#if !defined _SIGNAL_H && !defined __need_siginfo_t \
|
||||
&& !defined __need_sigevent_t
|
||||
# error "Never include this file directly. Use <signal.h> instead"
|
||||
#endif
|
||||
|
||||
#if (!defined __have_sigval_t \
|
||||
&& (defined _SIGNAL_H || defined __need_siginfo_t \
|
||||
|| defined __need_sigevent_t))
|
||||
# define __have_sigval_t 1
|
||||
|
||||
/* Type for data associated with a signal. */
|
||||
typedef union sigval
|
||||
{
|
||||
int sival_int;
|
||||
void *sival_ptr;
|
||||
} sigval_t;
|
||||
#endif
|
||||
|
||||
#if (!defined __have_siginfo_t \
|
||||
&& (defined _SIGNAL_H || defined __need_siginfo_t))
|
||||
# define __have_siginfo_t 1
|
||||
|
||||
typedef struct siginfo
|
||||
{
|
||||
int si_signo; /* Signal number. */
|
||||
int si_errno; /* If non-zero, an errno value associated with
|
||||
this signal, as defined in <errno.h>. */
|
||||
int si_code; /* Signal code. */
|
||||
__pid_t si_pid; /* Sending process ID. */
|
||||
__uid_t si_uid; /* Real user ID of sending process. */
|
||||
void *si_addr; /* Address of faulting instruction. */
|
||||
int si_status; /* Exit value or signal. */
|
||||
long int si_band; /* Band event for SIGPOLL. */
|
||||
union sigval si_value; /* Signal value. */
|
||||
} siginfo_t;
|
||||
|
||||
#ifndef _BITS_SIGINFO_CONSTS_H
|
||||
#define _BITS_SIGINFO_CONSTS_H 1
|
||||
|
||||
/* Values for `si_code'. Positive values are reserved for kernel-generated
|
||||
signals. */
|
||||
@ -181,36 +147,4 @@ enum
|
||||
};
|
||||
# endif
|
||||
|
||||
# undef __need_siginfo_t
|
||||
#endif /* !have siginfo_t && (have _SIGNAL_H || need siginfo_t). */
|
||||
|
||||
|
||||
#if (defined _SIGNAL_H || defined __need_sigevent_t) \
|
||||
&& !defined __have_sigevent_t
|
||||
# define __have_sigevent_t 1
|
||||
|
||||
/* Structure to transport application-defined values with signals. */
|
||||
# define SIGEV_MAX_SIZE 64
|
||||
# define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE / sizeof (int)) - 3)
|
||||
|
||||
typedef struct sigevent
|
||||
{
|
||||
sigval_t sigev_value;
|
||||
int sigev_signo;
|
||||
int sigev_notify;
|
||||
void (*sigev_notify_function) (sigval_t); /* Function to start. */
|
||||
void *sigev_notify_attributes; /* Really pthread_attr_t.*/
|
||||
} sigevent_t;
|
||||
|
||||
/* `sigev_notify' values. */
|
||||
enum
|
||||
{
|
||||
SIGEV_SIGNAL = 0, /* Notify via signal. */
|
||||
# define SIGEV_SIGNAL SIGEV_SIGNAL
|
||||
SIGEV_NONE, /* Other notification: meaningless. */
|
||||
# define SIGEV_NONE SIGEV_NONE
|
||||
SIGEV_THREAD /* Deliver via thread creation. */
|
||||
# define SIGEV_THREAD SIGEV_THREAD
|
||||
};
|
||||
|
||||
#endif /* have _SIGNAL_H. */
|
||||
#endif
|
@ -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. */
|
7
bits/types/__sigset_t.h
Normal file
7
bits/types/__sigset_t.h
Normal file
@ -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
|
17
bits/types/sigevent_t.h
Normal file
17
bits/types/sigevent_t.h
Normal file
@ -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
|
21
bits/types/siginfo_t.h
Normal file
21
bits/types/siginfo_t.h
Normal file
@ -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
|
1
include/bits/types/sig_atomic_t.h
Normal file
1
include/bits/types/sig_atomic_t.h
Normal file
@ -0,0 +1 @@
|
||||
#include <signal/bits/types/sig_atomic_t.h>
|
1
include/bits/types/sigset_t.h
Normal file
1
include/bits/types/sigset_t.h
Normal file
@ -0,0 +1 @@
|
||||
#include <signal/bits/types/sigset_t.h>
|
1
include/bits/types/sigval_t.h
Normal file
1
include/bits/types/sigval_t.h
Normal file
@ -0,0 +1 @@
|
||||
#include <signal/bits/types/sigval_t.h>
|
@ -1,7 +1,4 @@
|
||||
#ifndef _SIGNAL_H
|
||||
#if defined __need_sig_atomic_t || defined __need_sigset_t
|
||||
# include <signal/signal.h>
|
||||
#else
|
||||
# include <signal/signal.h>
|
||||
|
||||
# ifndef _ISOMAC
|
||||
@ -53,12 +50,6 @@ libc_hidden_proto (__libc_sigaction)
|
||||
extern int __default_sigpause (int mask);
|
||||
extern int __xpg_sigpause (int sig);
|
||||
|
||||
/* Simplified sigemptyset() implementation without the parameter checking. */
|
||||
#undef __sigemptyset
|
||||
#define __sigemptyset(ss) \
|
||||
({ __builtin_memset (ss, '\0', sizeof (sigset_t)); 0; })
|
||||
|
||||
|
||||
/* Allocate real-time signal with highest/lowest available priority. */
|
||||
extern int __libc_allocate_rtsig (int __high);
|
||||
|
||||
@ -66,6 +57,6 @@ extern int __libc_allocate_rtsig (int __high);
|
||||
extern __typeof (__sigaction) __sigaction attribute_hidden;
|
||||
extern __typeof (__libc_sigaction) __libc_sigaction attribute_hidden;
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
# endif /* _ISOMAC */
|
||||
#endif /* signal.h */
|
||||
|
16
inet/rcmd.c
16
inet/rcmd.c
@ -78,6 +78,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <wchar.h>
|
||||
#include <sys/uio.h>
|
||||
#include <sigsetops.h>
|
||||
|
||||
|
||||
int __ivaliduser (FILE *, u_int32_t, const char *, const char *);
|
||||
@ -112,7 +113,8 @@ rcmd_af (char **ahost, u_short rport, const char *locuser, const char *remuser,
|
||||
struct sockaddr_in6 sin6;
|
||||
} from;
|
||||
struct pollfd pfd[2];
|
||||
int32_t oldmask;
|
||||
sigset_t mask, omask;
|
||||
|
||||
pid_t pid;
|
||||
int s, lport, timo, error;
|
||||
char c;
|
||||
@ -160,7 +162,9 @@ rcmd_af (char **ahost, u_short rport, const char *locuser, const char *remuser,
|
||||
*ahost = NULL;
|
||||
ai = res;
|
||||
refused = 0;
|
||||
oldmask = __sigblock(sigmask(SIGURG));
|
||||
__sigemptyset(&mask);
|
||||
__sigaddset(&mask, SIGURG);
|
||||
__sigprocmask (SIG_BLOCK, &mask, &omask);
|
||||
for (timo = 1, lport = IPPORT_RESERVED - 1;;) {
|
||||
char errbuf[200];
|
||||
|
||||
@ -172,7 +176,7 @@ rcmd: socket: All ports in use\n"));
|
||||
else
|
||||
__fxprintf(NULL, "rcmd: socket: %m\n");
|
||||
|
||||
__sigsetmask(oldmask);
|
||||
__sigprocmask (SIG_SETMASK, &omask, 0);
|
||||
freeaddrinfo(res);
|
||||
return -1;
|
||||
}
|
||||
@ -225,7 +229,7 @@ rcmd: socket: All ports in use\n"));
|
||||
freeaddrinfo(res);
|
||||
(void)__fxprintf(NULL, "%s: %s\n", *ahost,
|
||||
__strerror_r(errno, errbuf, sizeof (errbuf)));
|
||||
__sigsetmask(oldmask);
|
||||
__sigprocmask (SIG_SETMASK, &omask, 0);
|
||||
return -1;
|
||||
}
|
||||
lport--;
|
||||
@ -337,7 +341,7 @@ socket: protocol failure in circuit setup\n")) >= 0)
|
||||
}
|
||||
goto bad2;
|
||||
}
|
||||
__sigsetmask(oldmask);
|
||||
__sigprocmask (SIG_SETMASK, &omask, 0);
|
||||
freeaddrinfo(res);
|
||||
return s;
|
||||
bad2:
|
||||
@ -345,7 +349,7 @@ bad2:
|
||||
(void)__close(*fd2p);
|
||||
bad:
|
||||
(void)__close(s);
|
||||
__sigsetmask(oldmask);
|
||||
__sigprocmask (SIG_SETMASK, &omask, 0);
|
||||
freeaddrinfo(res);
|
||||
return -1;
|
||||
}
|
||||
|
@ -24,10 +24,8 @@
|
||||
/* Get the platform dependent bits of `poll'. */
|
||||
#include <bits/poll.h>
|
||||
#ifdef __USE_GNU
|
||||
/* Get the __sigset_t definition. */
|
||||
# include <bits/sigset.h>
|
||||
/* Get the timespec definition. */
|
||||
#include <bits/types/struct_timespec.h>
|
||||
# include <bits/types/__sigset_t.h>
|
||||
# include <bits/types/struct_timespec.h>
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include <utmp.h>
|
||||
#include <not-cancel.h>
|
||||
#include <kernel-features.h>
|
||||
#include <sigsetops.h>
|
||||
|
||||
#include "utmp-private.h"
|
||||
#include "utmp-equal.h"
|
||||
|
@ -29,13 +29,8 @@
|
||||
/* Get __FD_* definitions. */
|
||||
#include <bits/select.h>
|
||||
|
||||
/* Get __sigset_t. */
|
||||
#include <bits/sigset.h>
|
||||
|
||||
#ifndef __sigset_t_defined
|
||||
# define __sigset_t_defined
|
||||
typedef __sigset_t sigset_t;
|
||||
#endif
|
||||
/* Get sigset_t. */
|
||||
#include <bits/types/sigset_t.h>
|
||||
|
||||
/* Get definition of timer specification structures. */
|
||||
#include <bits/types/time_t.h>
|
||||
|
@ -197,6 +197,10 @@ __STD_TYPE __SWORD_TYPE __intptr_t;
|
||||
/* Duplicate info from sys/socket.h. */
|
||||
__STD_TYPE __U32_TYPE __socklen_t;
|
||||
|
||||
/* C99: An integer type that can be accessed as an atomic entity,
|
||||
even in the presence of asynchronous interrupts.
|
||||
It is not currently necessary for this to be machine-specific. */
|
||||
typedef int __sig_atomic_t;
|
||||
|
||||
#undef __STD_TYPE
|
||||
|
||||
|
@ -21,9 +21,8 @@
|
||||
|
||||
#include <features.h>
|
||||
#include <sched.h>
|
||||
#define __need_sigset_t
|
||||
#include <signal.h>
|
||||
#include <sys/types.h>
|
||||
#include <bits/types/sigset_t.h>
|
||||
|
||||
|
||||
/* Data structure to contain attributes for thread creation. */
|
||||
|
@ -103,8 +103,7 @@ typedef __id_t id_t;
|
||||
# define __id_t_defined
|
||||
# endif
|
||||
|
||||
# define __need_siginfo_t
|
||||
# include <bits/siginfo.h>
|
||||
# include <bits/types/siginfo_t.h>
|
||||
|
||||
/* Wait for a childing matching IDTYPE and ID to change the status and
|
||||
place appropriate information in *INFOP.
|
||||
|
@ -33,8 +33,7 @@
|
||||
#endif
|
||||
|
||||
#ifdef __USE_GNU
|
||||
# define __need_sigevent_t
|
||||
# include <bits/siginfo.h>
|
||||
# include <bits/types/sigevent_t.h>
|
||||
# include <bits/types/struct_timespec.h>
|
||||
#endif
|
||||
|
||||
|
4
rt/aio.h
4
rt/aio.h
@ -24,8 +24,8 @@
|
||||
|
||||
#include <features.h>
|
||||
#include <sys/types.h>
|
||||
#define __need_sigevent_t
|
||||
#include <bits/siginfo.h>
|
||||
#include <bits/types/sigevent_t.h>
|
||||
#include <bits/sigevent-consts.h>
|
||||
#include <bits/types/struct_timespec.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
@ -21,8 +21,7 @@
|
||||
#include <features.h>
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
#define __need_sigevent_t
|
||||
#include <bits/siginfo.h>
|
||||
#include <bits/types/sigevent_t.h>
|
||||
#include <bits/types/struct_timespec.h>
|
||||
/* Get the definition of mqd_t and struct mq_attr. */
|
||||
#include <bits/mqueue.h>
|
||||
|
@ -27,8 +27,7 @@
|
||||
__BEGIN_DECLS
|
||||
|
||||
#include <bits/setjmp.h> /* Get `__jmp_buf'. */
|
||||
#include <bits/sigset.h> /* Get `__sigset_t'. */
|
||||
|
||||
#include <bits/types/__sigset_t.h>
|
||||
|
||||
/* Calling environment, plus possibly a saved signal mask. */
|
||||
struct __jmp_buf_tag
|
||||
|
@ -24,6 +24,7 @@
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/file.h>
|
||||
#include <sigsetops.h>
|
||||
|
||||
#include <kernel-features.h>
|
||||
|
||||
|
@ -22,10 +22,14 @@ subdir := signal
|
||||
|
||||
include ../Makeconfig
|
||||
|
||||
headers := signal.h sys/signal.h bits/signum.h bits/sigcontext.h \
|
||||
bits/sigaction.h bits/sigset.h bits/siginfo.h bits/sigstack.h \
|
||||
bits/sigthread.h bits/types/struct_sigstack.h bits/types/stack_t.h \
|
||||
bits/ss_flags.h
|
||||
headers := signal.h sys/signal.h \
|
||||
bits/signum.h bits/sigcontext.h bits/sigaction.h \
|
||||
bits/sigevent-consts.h bits/siginfo-consts.h \
|
||||
bits/sigstack.h bits/sigthread.h bits/ss_flags.h \
|
||||
bits/types/__sigset_t.h bits/types/sig_atomic_t.h \
|
||||
bits/types/sigevent_t.h bits/types/siginfo_t.h \
|
||||
bits/types/sigset_t.h bits/types/stack_t.h \
|
||||
bits/types/struct_sigstack.h
|
||||
|
||||
routines := signal raise killpg \
|
||||
sigaction sigprocmask kill \
|
||||
|
@ -1,13 +1,13 @@
|
||||
libc {
|
||||
GLIBC_2.0 {
|
||||
# functions with special/multiple interfaces
|
||||
__sigaddset; __sigdelset; __sigismember; __sysv_signal;
|
||||
__sigpause; __sysv_signal;
|
||||
|
||||
# functions used in inline functions or macros
|
||||
__sigpause;
|
||||
# functions formerly used in inline functions or macros
|
||||
__sigaddset; __sigdelset; __sigismember;
|
||||
|
||||
# functions used in other libraries
|
||||
__sigaction;
|
||||
__sigaction;
|
||||
|
||||
# b*
|
||||
bsd_signal;
|
||||
|
10
signal/bits/types/sig_atomic_t.h
Normal file
10
signal/bits/types/sig_atomic_t.h
Normal file
@ -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
|
9
signal/bits/types/sigset_t.h
Normal file
9
signal/bits/types/sigset_t.h
Normal file
@ -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
|
13
signal/bits/types/sigval_t.h
Normal file
13
signal/bits/types/sigval_t.h
Normal file
@ -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
|
@ -15,7 +15,9 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include "sigsetops.h"
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <sigsetops.h>
|
||||
|
||||
/* Add SIGNO to SET. */
|
||||
int
|
||||
@ -27,6 +29,7 @@ sigaddset (sigset_t *set, int signo)
|
||||
return -1;
|
||||
}
|
||||
|
||||
return __sigaddset (set, signo);
|
||||
__sigaddset (set, signo);
|
||||
return 0;
|
||||
}
|
||||
libc_hidden_def (sigaddset)
|
||||
|
@ -17,18 +17,18 @@
|
||||
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#define __need_NULL
|
||||
#include <stddef.h>
|
||||
#include <sigsetops.h>
|
||||
|
||||
/* Combine sets LEFT and RIGHT by logical AND and place result in DEST. */
|
||||
int
|
||||
sigandset (sigset_t *dest, const sigset_t *left, const sigset_t *right)
|
||||
{
|
||||
if (dest == NULL || left == NULL || right == NULL)
|
||||
if (!dest || !left || !right)
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return __sigandset (dest, left, right);
|
||||
__sigandset (dest, left, right);
|
||||
return 0;
|
||||
}
|
||||
|
@ -15,7 +15,9 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include "sigsetops.h"
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <sigsetops.h>
|
||||
|
||||
/* Add SIGNO to SET. */
|
||||
int
|
||||
@ -27,6 +29,7 @@ sigdelset (sigset_t *set, int signo)
|
||||
return -1;
|
||||
}
|
||||
|
||||
return __sigdelset (set, signo);
|
||||
__sigdelset (set, signo);
|
||||
return 0;
|
||||
}
|
||||
libc_hidden_def (sigdelset)
|
||||
|
@ -17,18 +17,17 @@
|
||||
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#define __need_NULL
|
||||
#include <stddef.h>
|
||||
#include <sigsetops.h>
|
||||
|
||||
/* Test whether SET is empty. */
|
||||
int
|
||||
sigisemptyset (const sigset_t *set)
|
||||
{
|
||||
if (set == NULL)
|
||||
if (!set)
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return __sigisemptyset (set);
|
||||
return __sigisemptyset (set);
|
||||
}
|
||||
|
@ -15,7 +15,9 @@
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include "sigsetops.h"
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <sigsetops.h>
|
||||
|
||||
/* Return 1 if SIGNO is in SET, 0 if not. */
|
||||
int
|
||||
|
@ -20,40 +20,21 @@
|
||||
*/
|
||||
|
||||
#ifndef _SIGNAL_H
|
||||
|
||||
#if !defined __need_sig_atomic_t && !defined __need_sigset_t
|
||||
# define _SIGNAL_H
|
||||
#endif
|
||||
#define _SIGNAL_H
|
||||
|
||||
#include <features.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
#include <bits/sigset.h> /* __sigset_t, __sig_atomic_t. */
|
||||
|
||||
/* An integral type that can be modified atomically, without the
|
||||
possibility of a signal arriving in the middle of the operation. */
|
||||
#if defined __need_sig_atomic_t || defined _SIGNAL_H
|
||||
# ifndef __sig_atomic_t_defined
|
||||
# define __sig_atomic_t_defined
|
||||
typedef __sig_atomic_t sig_atomic_t;
|
||||
# endif
|
||||
# undef __need_sig_atomic_t
|
||||
#endif
|
||||
|
||||
#if defined __need_sigset_t || (defined _SIGNAL_H && defined __USE_POSIX)
|
||||
# ifndef __sigset_t_defined
|
||||
# define __sigset_t_defined
|
||||
typedef __sigset_t sigset_t;
|
||||
# endif
|
||||
# undef __need_sigset_t
|
||||
#endif
|
||||
|
||||
#ifdef _SIGNAL_H
|
||||
|
||||
#include <bits/types.h>
|
||||
#include <bits/signum.h>
|
||||
|
||||
#include <bits/types/sig_atomic_t.h>
|
||||
|
||||
#if defined __USE_POSIX
|
||||
#include <bits/types/sigset_t.h>
|
||||
#endif
|
||||
|
||||
#if defined __USE_XOPEN || defined __USE_XOPEN2K
|
||||
# ifndef __pid_t_defined
|
||||
typedef __pid_t pid_t;
|
||||
@ -73,8 +54,10 @@ typedef __uid_t uid_t;
|
||||
#endif
|
||||
|
||||
#if defined __USE_POSIX199309 || defined __USE_XOPEN_EXTENDED
|
||||
/* Get the `siginfo_t' type plus the needed symbols. */
|
||||
# include <bits/siginfo.h>
|
||||
# include <bits/types/siginfo_t.h>
|
||||
# include <bits/types/sigevent_t.h>
|
||||
# include <bits/siginfo-consts.h>
|
||||
# include <bits/sigevent-consts.h>
|
||||
#endif
|
||||
|
||||
|
||||
@ -174,7 +157,7 @@ extern int __sigpause (int __sig_or_mask, int __is_sig);
|
||||
simply do not work in many situations. Use `sigprocmask' instead. */
|
||||
|
||||
/* Compute mask for signal SIG. */
|
||||
# define sigmask(sig) __sigmask(sig)
|
||||
# define sigmask(sig) ((int)(1u << ((sig) - 1)))
|
||||
|
||||
/* Block signals in MASK, returning the old mask. */
|
||||
extern int sigblock (int __mask) __THROW __attribute_deprecated__;
|
||||
@ -366,8 +349,6 @@ extern int __libc_current_sigrtmin (void) __THROW;
|
||||
/* Return number of available real-time signal with lowest priority. */
|
||||
extern int __libc_current_sigrtmax (void) __THROW;
|
||||
|
||||
#endif /* signal.h */
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* not signal.h */
|
||||
|
@ -17,18 +17,18 @@
|
||||
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#define __need_NULL
|
||||
#include <stddef.h>
|
||||
#include <sigsetops.h>
|
||||
|
||||
/* Combine sets LEFT and RIGHT by logical OR and place result in DEST. */
|
||||
int
|
||||
sigorset (sigset_t *dest, const sigset_t *left, const sigset_t *right)
|
||||
{
|
||||
if (dest == NULL || left == NULL || right == NULL)
|
||||
if (!dest || !left || !right)
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return __sigorset (dest, left, right);
|
||||
__sigorset (dest, left, right);
|
||||
return 0;
|
||||
}
|
||||
|
@ -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.
|
||||
|
||||
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)
|
||||
|
||||
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);
|
||||
|
||||
#define _EXTERN_INLINE
|
||||
#ifndef __USE_EXTERN_INLINES
|
||||
# define __USE_EXTERN_INLINES 1
|
||||
#endif
|
||||
|
||||
#include "signal.h"
|
||||
|
@ -26,11 +26,6 @@ __BEGIN_DECLS
|
||||
#include <bits/types/struct_iovec.h>
|
||||
#define __need_size_t
|
||||
#include <stddef.h>
|
||||
#ifdef __USE_GNU
|
||||
/* Get the __sigset_t definition. */
|
||||
# include <bits/sigset.h>
|
||||
#endif
|
||||
|
||||
|
||||
/* This operating system-specific header file defines the SOCK_*, PF_*,
|
||||
AF_*, MSG_*, SOL_*, and SO_* constants, and the `struct sockaddr',
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sigsetops.h>
|
||||
|
||||
/* Try to get a machine dependent instruction which will make the
|
||||
program crash. This is used in case everything else fails. */
|
||||
@ -57,13 +58,13 @@ abort (void)
|
||||
|
||||
/* Now it's for sure we are alone. But recursive calls are possible. */
|
||||
|
||||
/* Unlock SIGABRT. */
|
||||
/* Unblock SIGABRT. */
|
||||
if (stage == 0)
|
||||
{
|
||||
++stage;
|
||||
if (__sigemptyset (&sigs) == 0 &&
|
||||
__sigaddset (&sigs, SIGABRT) == 0)
|
||||
__sigprocmask (SIG_UNBLOCK, &sigs, (sigset_t *) NULL);
|
||||
__sigemptyset (&sigs);
|
||||
__sigaddset (&sigs, SIGABRT);
|
||||
__sigprocmask (SIG_UNBLOCK, &sigs, 0);
|
||||
}
|
||||
|
||||
/* Flush all streams. We cannot close them now because the user
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
77
sysdeps/generic/sigsetops.h
Normal file
77
sysdeps/generic/sigsetops.h
Normal file
@ -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
|
@ -27,6 +27,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
@ -26,6 +26,7 @@
|
||||
/* Signal handlers are actually called:
|
||||
void handler (int sig, int code, struct sigcontext *scp); */
|
||||
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <mach/machine/fp_reg.h>
|
||||
|
||||
/* State of this thread when the signal was taken. */
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include <signal.h>
|
||||
#include <sys/time.h>
|
||||
#include <libc-internal.h>
|
||||
#include <sigsetops.h>
|
||||
|
||||
#ifndef SIGPROF
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
#include <stddef.h>
|
||||
#include <signal.h>
|
||||
#include <string.h> /* For the real memset prototype. */
|
||||
|
||||
#include <sigsetops.h>
|
||||
|
||||
int
|
||||
sigignore (int sig)
|
||||
@ -30,8 +30,7 @@ sigignore (int sig)
|
||||
struct sigaction act;
|
||||
|
||||
act.sa_handler = SIG_IGN;
|
||||
if (__sigemptyset (&act.sa_mask) < 0)
|
||||
return -1;
|
||||
__sigemptyset (&act.sa_mask);
|
||||
act.sa_flags = 0;
|
||||
|
||||
return __sigaction (sig, &act, NULL);
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include <stddef.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
#include <sigsetops.h>
|
||||
|
||||
/* If INTERRUPT is nonzero, make signal SIG interrupt system calls
|
||||
(causing them to fail with EINTR); if INTERRUPT is zero, make system
|
||||
|
@ -19,7 +19,7 @@
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <string.h> /* For the real memset prototype. */
|
||||
|
||||
#include <sigsetops.h>
|
||||
|
||||
sigset_t _sigintr attribute_hidden; /* Set by siginterrupt. */
|
||||
|
||||
@ -38,9 +38,8 @@ __bsd_signal (int sig, __sighandler_t handler)
|
||||
}
|
||||
|
||||
act.sa_handler = handler;
|
||||
if (__sigemptyset (&act.sa_mask) < 0
|
||||
|| __sigaddset (&act.sa_mask, sig) < 0)
|
||||
return SIG_ERR;
|
||||
__sigemptyset (&act.sa_mask);
|
||||
__sigaddset (&act.sa_mask, sig);
|
||||
act.sa_flags = __sigismember (&_sigintr, sig) ? 0 : SA_RESTART;
|
||||
if (__sigaction (sig, &act, &oact) < 0)
|
||||
return SIG_ERR;
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
@ -20,7 +20,7 @@
|
||||
#include <stddef.h>
|
||||
#include <signal.h>
|
||||
#include <string.h> /* For the real memset prototype. */
|
||||
|
||||
#include <sigsetops.h>
|
||||
|
||||
/* Set the disposition for SIG. */
|
||||
__sighandler_t
|
||||
@ -31,19 +31,19 @@ sigset (int sig, __sighandler_t disp)
|
||||
sigset_t set;
|
||||
sigset_t oset;
|
||||
|
||||
#ifdef SIG_HOLD
|
||||
/* Handle SIG_HOLD first. */
|
||||
/* Check signal extents to protect __sigismember. */
|
||||
if (disp == SIG_ERR || sig < 1 || sig >= NSIG)
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return SIG_ERR;
|
||||
}
|
||||
|
||||
__sigemptyset (&set);
|
||||
__sigaddset (&set, sig);
|
||||
|
||||
if (disp == SIG_HOLD)
|
||||
{
|
||||
/* Create an empty signal set. */
|
||||
if (__sigemptyset (&set) < 0)
|
||||
return SIG_ERR;
|
||||
|
||||
/* Add the specified signal. */
|
||||
if (__sigaddset (&set, sig) < 0)
|
||||
return SIG_ERR;
|
||||
|
||||
/* Add the signal set to the current signal mask. */
|
||||
/* Add the signal to the current signal mask. */
|
||||
if (__sigprocmask (SIG_BLOCK, &set, &oset) < 0)
|
||||
return SIG_ERR;
|
||||
|
||||
@ -57,34 +57,19 @@ sigset (int sig, __sighandler_t disp)
|
||||
|
||||
return oact.sa_handler;
|
||||
}
|
||||
#endif /* SIG_HOLD */
|
||||
|
||||
/* Check signal extents to protect __sigismember. */
|
||||
if (disp == SIG_ERR || sig < 1 || sig >= NSIG)
|
||||
else
|
||||
{
|
||||
__set_errno (EINVAL);
|
||||
return SIG_ERR;
|
||||
act.sa_handler = disp;
|
||||
__sigemptyset (&act.sa_mask);
|
||||
act.sa_flags = 0;
|
||||
if (__sigaction (sig, &act, &oact) < 0)
|
||||
return SIG_ERR;
|
||||
|
||||
/* Remove the signal from the current signal mask. */
|
||||
if (__sigprocmask (SIG_UNBLOCK, &set, &oset) < 0)
|
||||
return SIG_ERR;
|
||||
|
||||
/* If the signal was already blocked return SIG_HOLD. */
|
||||
return __sigismember (&oset, sig) ? SIG_HOLD : oact.sa_handler;
|
||||
}
|
||||
|
||||
act.sa_handler = disp;
|
||||
if (__sigemptyset (&act.sa_mask) < 0)
|
||||
return SIG_ERR;
|
||||
act.sa_flags = 0;
|
||||
if (__sigaction (sig, &act, &oact) < 0)
|
||||
return SIG_ERR;
|
||||
|
||||
/* Create an empty signal set. */
|
||||
if (__sigemptyset (&set) < 0)
|
||||
return SIG_ERR;
|
||||
|
||||
/* Add the specified signal. */
|
||||
if (__sigaddset (&set, sig) < 0)
|
||||
return SIG_ERR;
|
||||
|
||||
/* Remove the signal set from the current signal mask. */
|
||||
if (__sigprocmask (SIG_UNBLOCK, &set, &oset) < 0)
|
||||
return SIG_ERR;
|
||||
|
||||
/* If the signal was already blocked return SIG_HOLD. */
|
||||
return __sigismember (&oset, sig) ? SIG_HOLD : oact.sa_handler;
|
||||
}
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sigsetops.h>
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <sys/profil.h>
|
||||
|
@ -18,7 +18,7 @@
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <string.h> /* For the real memset prototype. */
|
||||
|
||||
#include <sigsetops.h>
|
||||
|
||||
/* Tolerate non-threads versions of Posix */
|
||||
#ifndef SA_ONESHOT
|
||||
@ -46,8 +46,7 @@ __sysv_signal (int sig, __sighandler_t handler)
|
||||
}
|
||||
|
||||
act.sa_handler = handler;
|
||||
if (__sigemptyset (&act.sa_mask) < 0)
|
||||
return SIG_ERR;
|
||||
__sigemptyset (&act.sa_mask);
|
||||
act.sa_flags = SA_ONESHOT | SA_NOMASK | SA_INTERRUPT;
|
||||
act.sa_flags &= ~SA_RESTART;
|
||||
if (__sigaction (sig, &act, &oact) < 0)
|
||||
|
@ -54,7 +54,7 @@ typedef long int __jmp_buf[40];
|
||||
typedef long int __jmp_buf[58];
|
||||
# endif
|
||||
|
||||
# include <bits/sigset.h> /* Get `__sigset_t'. */
|
||||
# include <bits/types/__sigset_t.h>
|
||||
|
||||
/* Calling environment, plus possibly a saved signal mask. */
|
||||
typedef struct __novmx__jmp_buf_tag
|
||||
|
@ -24,6 +24,7 @@
|
||||
#endif
|
||||
|
||||
/* Functions for handling signals. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
|
||||
/* Modify the signal mask for the calling thread. The arguments have
|
||||
the same meaning as for sigprocmask(2). */
|
||||
|
@ -45,7 +45,8 @@ sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \
|
||||
sys/timerfd.h sys/fanotify.h bits/eventfd.h bits/inotify.h \
|
||||
bits/signalfd.h bits/timerfd.h bits/epoll.h \
|
||||
bits/socket_type.h bits/syscall.h bits/sysctl.h \
|
||||
bits/mman-linux.h
|
||||
bits/mman-linux.h \
|
||||
bits/siginfo-arch.h bits/siginfo-consts-arch.h
|
||||
|
||||
tests += tst-clone tst-clone2 tst-fanotify tst-personality tst-quota \
|
||||
tst-sync_file_range test-errno-linux
|
||||
|
@ -26,6 +26,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
@ -23,6 +23,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
41
sysdeps/unix/sysv/linux/bits/sigevent-consts.h
Normal file
41
sysdeps/unix/sysv/linux/bits/sigevent-consts.h
Normal file
@ -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
|
7
sysdeps/unix/sysv/linux/bits/siginfo-arch.h
Normal file
7
sysdeps/unix/sysv/linux/bits/siginfo-arch.h
Normal file
@ -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
|
7
sysdeps/unix/sysv/linux/bits/siginfo-consts-arch.h
Normal file
7
sysdeps/unix/sysv/linux/bits/siginfo-consts-arch.h
Normal file
@ -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
|
185
sysdeps/unix/sysv/linux/bits/siginfo-consts.h
Normal file
185
sysdeps/unix/sysv/linux/bits/siginfo-consts.h
Normal file
@ -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. */
|
10
sysdeps/unix/sysv/linux/bits/types/__sigset_t.h
Normal file
10
sysdeps/unix/sysv/linux/bits/types/__sigset_t.h
Normal file
@ -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
|
48
sysdeps/unix/sysv/linux/bits/types/sigevent_t.h
Normal file
48
sysdeps/unix/sysv/linux/bits/types/sigevent_t.h
Normal file
@ -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
|
139
sysdeps/unix/sysv/linux/bits/types/siginfo_t.h
Normal file
139
sysdeps/unix/sysv/linux/bits/types/siginfo_t.h
Normal file
@ -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
|
@ -25,6 +25,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
19
sysdeps/unix/sysv/linux/ia64/bits/siginfo-arch.h
Normal file
19
sysdeps/unix/sysv/linux/ia64/bits/siginfo-arch.h
Normal file
@ -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
|
45
sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h
Normal file
45
sysdeps/unix/sysv/linux/ia64/bits/siginfo-consts-arch.h
Normal file
@ -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. */
|
@ -25,6 +25,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
15
sysdeps/unix/sysv/linux/mips/bits/siginfo-arch.h
Normal file
15
sysdeps/unix/sysv/linux/mips/bits/siginfo-arch.h
Normal file
@ -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. */
|
@ -24,6 +24,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
@ -26,6 +26,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
@ -17,6 +17,7 @@
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <signal.h>
|
||||
#include <sigsetops.h>
|
||||
|
||||
/* The signal used for asynchronous cancelation. */
|
||||
#define SIGCANCEL __SIGRTMIN
|
||||
|
@ -19,13 +19,12 @@
|
||||
#define _SYS_UCONTEXT_H 1
|
||||
|
||||
#include <features.h>
|
||||
#define __need_sigset_t
|
||||
#include <signal.h>
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/sigset_t.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
#include <bits/types/stack_t.h>
|
||||
#include <bits/ss_flags.h>
|
||||
|
@ -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. */
|
@ -24,6 +24,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by in <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
108
sysdeps/unix/sysv/linux/sigsetops.h
Normal file
108
sysdeps/unix/sysv/linux/sigsetops.h
Normal file
@ -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 */
|
14
sysdeps/unix/sysv/linux/sparc/bits/siginfo-arch.h
Normal file
14
sysdeps/unix/sysv/linux/sparc/bits/siginfo-arch.h
Normal file
@ -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
|
12
sysdeps/unix/sysv/linux/sparc/bits/siginfo-consts-arch.h
Normal file
12
sysdeps/unix/sysv/linux/sparc/bits/siginfo-consts-arch.h
Normal file
@ -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. */
|
@ -23,6 +23,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
@ -21,13 +21,7 @@
|
||||
#include <stdint.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
/* Get __sigset_t. */
|
||||
#include <bits/sigset.h>
|
||||
|
||||
#ifndef __sigset_t_defined
|
||||
# define __sigset_t_defined
|
||||
typedef __sigset_t sigset_t;
|
||||
#endif
|
||||
#include <bits/types/sigset_t.h>
|
||||
|
||||
/* Get the platform-dependent flags. */
|
||||
#include <bits/epoll.h>
|
||||
|
@ -18,9 +18,8 @@
|
||||
#ifndef _SYS_SIGNALFD_H
|
||||
#define _SYS_SIGNALFD_H 1
|
||||
|
||||
#define __need_sigset_t
|
||||
#include <signal.h>
|
||||
#include <stdint.h>
|
||||
#include <bits/types/sigset_t.h>
|
||||
|
||||
/* Get the platform-dependent flags. */
|
||||
#include <bits/signalfd.h>
|
||||
|
11
sysdeps/unix/sysv/linux/tile/bits/siginfo-arch.h
Normal file
11
sysdeps/unix/sysv/linux/tile/bits/siginfo-arch.h
Normal file
@ -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
|
14
sysdeps/unix/sysv/linux/tile/bits/siginfo-consts-arch.h
Normal file
14
sysdeps/unix/sysv/linux/tile/bits/siginfo-consts-arch.h
Normal file
@ -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. */
|
@ -24,6 +24,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
19
sysdeps/unix/sysv/linux/x86/bits/siginfo-arch.h
Normal file
19
sysdeps/unix/sysv/linux/x86/bits/siginfo-arch.h
Normal file
@ -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. */
|
@ -23,6 +23,7 @@
|
||||
|
||||
/* We need the signal context definitions even if they are not exposed
|
||||
by <signal.h>. */
|
||||
#include <bits/types/__sigset_t.h>
|
||||
#include <bits/sigcontext.h>
|
||||
#include <bits/sigstack.h>
|
||||
#include <bits/types/struct_sigstack.h>
|
||||
|
Loading…
Reference in New Issue
Block a user