2017-01-01 00:14:16 +00:00
|
|
|
/* Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
2001-09-19 10:37:31 +00:00
|
|
|
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
|
2012-02-09 23:18:22 +00:00
|
|
|
License along with the GNU C Library; if not, see
|
|
|
|
<http://www.gnu.org/licenses/>. */
|
2001-09-19 10:37:31 +00:00
|
|
|
|
|
|
|
#ifndef _SYS_UCONTEXT_H
|
|
|
|
#define _SYS_UCONTEXT_H 1
|
|
|
|
|
|
|
|
#include <features.h>
|
|
|
|
#include <signal.h>
|
|
|
|
|
Installed-header hygiene (BZ#20366): stack_t.
sys/ucontext.h unconditionally uses stack_t, and it does not make
sense to change that. But signal.h only declares stack_t under
__USE_XOPEN_EXTENDED || __USE_XOPEN2K8. The actual definition is
already in a bits header, bits/sigstack.h, but that header insists on
only being included by signal.h, so we have to change that as well as
all of the sys/ucontext.h variants. (Some but not all variants of
bits/sigcontext.h, which sys/ucontext.h may also need, had already
received this adjustment; for consistency, I made them all the same,
even if that's not strictly necessary in some configurations.)
bits/sigcontext.h and bits/sigstack.h also all need to receive
multiple inclusion guards.
* sysdeps/generic/sys/ucontext.h
* sysdeps/arm/sys/ucontext.h
* sysdeps/i386/sys/ucontext.h
* sysdeps/m68k/sys/ucontext.h
* sysdeps/mips/sys/ucontext.h
* sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h
* sysdeps/unix/sysv/linux/alpha/sys/ucontext.h
* sysdeps/unix/sysv/linux/arm/sys/ucontext.h
* sysdeps/unix/sysv/linux/hppa/sys/ucontext.h
* sysdeps/unix/sysv/linux/ia64/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:
Include both bits/sigcontext.h and bits/sigstack.h.
Fix grammar error in comment, if present.
* bits/sigstack.h
* sysdeps/unix/sysv/linux/aarch64/bits/sigstack.h
* sysdeps/unix/sysv/linux/alpha/bits/sigstack.h
* sysdeps/unix/sysv/linux/bits/sigstack.h
* sysdeps/unix/sysv/linux/ia64/bits/sigstack.h
* sysdeps/unix/sysv/linux/mips/bits/sigstack.h
* sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h
* sysdeps/unix/sysv/linux/sparc/bits/sigstack.h
* bits/sigcontext.h
* sysdeps/mach/hurd/i386/bits/sigcontext.h
* sysdeps/unix/sysv/linux/bits/sigcontext.h
* sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h
* sysdeps/unix/sysv/linux/sparc/bits/sigcontext.h:
Add multiple inclusion guard. Permit inclusion by sys/ucontext.h
as well as signal.h, if this was not already allowed. Request
definition of size_t if necessary. Minimize semantically-null
differences across files.
2016-07-13 20:11:57 +00:00
|
|
|
/* We need the signal context definitions even if they are not exposed
|
|
|
|
by <signal.h>. */
|
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.
2016-12-02 00:24:13 +00:00
|
|
|
#include <bits/types/__sigset_t.h>
|
2001-09-19 10:37:31 +00:00
|
|
|
#include <bits/sigcontext.h>
|
Installed-header hygiene (BZ#20366): stack_t.
sys/ucontext.h unconditionally uses stack_t, and it does not make
sense to change that. But signal.h only declares stack_t under
__USE_XOPEN_EXTENDED || __USE_XOPEN2K8. The actual definition is
already in a bits header, bits/sigstack.h, but that header insists on
only being included by signal.h, so we have to change that as well as
all of the sys/ucontext.h variants. (Some but not all variants of
bits/sigcontext.h, which sys/ucontext.h may also need, had already
received this adjustment; for consistency, I made them all the same,
even if that's not strictly necessary in some configurations.)
bits/sigcontext.h and bits/sigstack.h also all need to receive
multiple inclusion guards.
* sysdeps/generic/sys/ucontext.h
* sysdeps/arm/sys/ucontext.h
* sysdeps/i386/sys/ucontext.h
* sysdeps/m68k/sys/ucontext.h
* sysdeps/mips/sys/ucontext.h
* sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h
* sysdeps/unix/sysv/linux/alpha/sys/ucontext.h
* sysdeps/unix/sysv/linux/arm/sys/ucontext.h
* sysdeps/unix/sysv/linux/hppa/sys/ucontext.h
* sysdeps/unix/sysv/linux/ia64/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:
Include both bits/sigcontext.h and bits/sigstack.h.
Fix grammar error in comment, if present.
* bits/sigstack.h
* sysdeps/unix/sysv/linux/aarch64/bits/sigstack.h
* sysdeps/unix/sysv/linux/alpha/bits/sigstack.h
* sysdeps/unix/sysv/linux/bits/sigstack.h
* sysdeps/unix/sysv/linux/ia64/bits/sigstack.h
* sysdeps/unix/sysv/linux/mips/bits/sigstack.h
* sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h
* sysdeps/unix/sysv/linux/sparc/bits/sigstack.h
* bits/sigcontext.h
* sysdeps/mach/hurd/i386/bits/sigcontext.h
* sysdeps/unix/sysv/linux/bits/sigcontext.h
* sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h
* sysdeps/unix/sysv/linux/sparc/bits/sigcontext.h:
Add multiple inclusion guard. Permit inclusion by sys/ucontext.h
as well as signal.h, if this was not already allowed. Request
definition of size_t if necessary. Minimize semantically-null
differences across files.
2016-07-13 20:11:57 +00:00
|
|
|
#include <bits/sigstack.h>
|
Split up bits/sigstack.h.
bits/sigstack.h contains four things: the legacy struct sigstack type,
the preferred stack_t type, the SS_* enum values and macros for signal
stack sizes.
These vary in different ways between glibc configurations; in
particular, the stack sizes vary much more than any of the other
pieces. Furthermore, these pieces have different standard namespace
rules for when they should be visible (not currently visible in
conform/ results both because the relevant tests are XFAILed for
sys/ucontext.h namespace issues, and because some of the expectations
are incorrect in the same way as the headers, e.g. neither
expectations nor headers reflect that current POSIX no longer has
either the sigstack function or the sigstack structure).
To reduce duplication of identical definitions, and facilitate
namespace fixes without requiring the same feature test macro
conditions to be repeated in many versions of the same header, this
patch splits bits/sigstack.h up into four headers. It keeps the stack
size macros, while new bits/types/struct_sigstack.h,
bits/types/stack_t.h and bits/ss_flags.h are added for the other
pieces. bits/types/struct_sigstack.h is the same everywhere,
bits/types/stack_t.h has three variants different in the order of the
structure elements (generic = MIPS Linux, and other Linux), and
bits/ss_flags.h has generic and Linux variants.
This patch includes the new headers everywhere that included
<bits/sigstack.h>, so should cause no difference to what any public
header defines. Subsequent namespace fixes would then remove or
condition some of those includes.
There should be no conflicts with Zack's changes to signal.h types,
beyond the trivial conflict of both making additions to
signal/Makefile's headers list; the two patches affect disjoint sets
of types and other definitions.
Tested for x86_64 and x86, and with build-many-glibcs.py.
* bits/ss_flags.h: New file.
* bits/types/stack_t.h: Likewise.
* include/bits/types/struct_sigstack.h: Likewise.
* signal/bits/types/struct_sigstack.h: Likewise.
* sysdeps/unix/sysv/linux/bits/ss_flags.h: Likewise.
* sysdeps/unix/sysv/linux/bits/types/stack_t.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/types/stack_t.h: Likewise.
* signal/Makefile (headers): Add bits/types/struct_sigstack.h,
bits/types/stack_t.h and bits/ss_flags.h.
* signal/signal.h [__USE_XOPEN_EXTENDED || __USE_XOPEN2K8]:
Include <bits/types/struct_sigstack.h>, <bits/types/stack_t.h> and
<bits/ss_flags.h>.
* bits/sigstack.h (struct sigstack): Remove.
(stack_t): Likewise.
(SS_ONSTACK): Likewise.
(SS_DISABLE): Likewise.
* sysdeps/unix/sysv/linux/aarch64/bits/sigstack.h
(struct sigstack): Likewise.
(stack_t): Likewise.
(SS_ONSTACK): Likewise.
(SS_DISABLE): Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/sigstack.h (struct sigstack):
Likewise.
(stack_t): Likewise.
(SS_ONSTACK): Likewise.
(SS_DISABLE): Likewise.
* sysdeps/unix/sysv/linux/bits/sigstack.h (struct sigstack):
Likewise.
(stack_t): Likewise.
(SS_ONSTACK): Likewise.
(SS_DISABLE): Likewise.
* sysdeps/unix/sysv/linux/mips/bits/sigstack.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/sigstack.h (struct sigstack):
Likewise.
(stack_t): Likewise.
(SS_ONSTACK): Likewise.
(SS_DISABLE): Likewise.
* sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h
(struct sigstack): Likewise.
(stack_t): Likewise.
(SS_ONSTACK): Likewise.
(SS_DISABLE): Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/sigstack.h (struct sigstack):
Likewise.
(stack_t): Likewise.
(SS_ONSTACK): Likewise.
(SS_DISABLE): Likewise.
* sysdeps/arm/sys/ucontext.h: Include
<bits/types/struct_sigstack.h>, <bits/types/stack_t.h> and
<bits/ss_flags.h>.
* sysdeps/generic/sys/ucontext.h: Likewise.
* sysdeps/i386/sys/ucontext.h: Likewise.
* sysdeps/m68k/sys/ucontext.h: Likewise.
* sysdeps/mips/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/arm/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/hppa/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/m68k/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/mips/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/nios2/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/s390/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/sh/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/tile/sys/ucontext.h: Likewise.
* sysdeps/unix/sysv/linux/x86/sys/ucontext.h: Likewise.
2017-05-19 20:35:07 +00:00
|
|
|
#include <bits/types/struct_sigstack.h>
|
|
|
|
#include <bits/types/stack_t.h>
|
|
|
|
#include <bits/ss_flags.h>
|
Installed-header hygiene (BZ#20366): stack_t.
sys/ucontext.h unconditionally uses stack_t, and it does not make
sense to change that. But signal.h only declares stack_t under
__USE_XOPEN_EXTENDED || __USE_XOPEN2K8. The actual definition is
already in a bits header, bits/sigstack.h, but that header insists on
only being included by signal.h, so we have to change that as well as
all of the sys/ucontext.h variants. (Some but not all variants of
bits/sigcontext.h, which sys/ucontext.h may also need, had already
received this adjustment; for consistency, I made them all the same,
even if that's not strictly necessary in some configurations.)
bits/sigcontext.h and bits/sigstack.h also all need to receive
multiple inclusion guards.
* sysdeps/generic/sys/ucontext.h
* sysdeps/arm/sys/ucontext.h
* sysdeps/i386/sys/ucontext.h
* sysdeps/m68k/sys/ucontext.h
* sysdeps/mips/sys/ucontext.h
* sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h
* sysdeps/unix/sysv/linux/alpha/sys/ucontext.h
* sysdeps/unix/sysv/linux/arm/sys/ucontext.h
* sysdeps/unix/sysv/linux/hppa/sys/ucontext.h
* sysdeps/unix/sysv/linux/ia64/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:
Include both bits/sigcontext.h and bits/sigstack.h.
Fix grammar error in comment, if present.
* bits/sigstack.h
* sysdeps/unix/sysv/linux/aarch64/bits/sigstack.h
* sysdeps/unix/sysv/linux/alpha/bits/sigstack.h
* sysdeps/unix/sysv/linux/bits/sigstack.h
* sysdeps/unix/sysv/linux/ia64/bits/sigstack.h
* sysdeps/unix/sysv/linux/mips/bits/sigstack.h
* sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h
* sysdeps/unix/sysv/linux/sparc/bits/sigstack.h
* bits/sigcontext.h
* sysdeps/mach/hurd/i386/bits/sigcontext.h
* sysdeps/unix/sysv/linux/bits/sigcontext.h
* sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h
* sysdeps/unix/sysv/linux/sparc/bits/sigcontext.h:
Add multiple inclusion guard. Permit inclusion by sys/ucontext.h
as well as signal.h, if this was not already allowed. Request
definition of size_t if necessary. Minimize semantically-null
differences across files.
2016-07-13 20:11:57 +00:00
|
|
|
|
2001-09-19 10:37:31 +00:00
|
|
|
|
2012-05-16 19:52:45 +00:00
|
|
|
#ifdef __x86_64__
|
2002-03-26 12:38:27 +00:00
|
|
|
|
2001-09-19 10:37:31 +00:00
|
|
|
/* Type for general register. */
|
2012-05-16 19:52:45 +00:00
|
|
|
__extension__ typedef long long int greg_t;
|
2001-09-19 10:37:31 +00:00
|
|
|
|
|
|
|
/* Number of general registers. */
|
2002-11-10 11:10:49 +00:00
|
|
|
#define NGREG 23
|
2001-09-19 10:37:31 +00:00
|
|
|
|
|
|
|
/* Container for all general registers. */
|
|
|
|
typedef greg_t gregset_t[NGREG];
|
|
|
|
|
|
|
|
#ifdef __USE_GNU
|
|
|
|
/* Number of each register in the `gregset_t' array. */
|
|
|
|
enum
|
|
|
|
{
|
2002-03-26 12:38:27 +00:00
|
|
|
REG_R8 = 0,
|
2001-09-19 10:37:31 +00:00
|
|
|
# define REG_R8 REG_R8
|
|
|
|
REG_R9,
|
|
|
|
# define REG_R9 REG_R9
|
|
|
|
REG_R10,
|
|
|
|
# define REG_R10 REG_R10
|
|
|
|
REG_R11,
|
|
|
|
# define REG_R11 REG_R11
|
|
|
|
REG_R12,
|
|
|
|
# define REG_R12 REG_R12
|
|
|
|
REG_R13,
|
|
|
|
# define REG_R13 REG_R13
|
|
|
|
REG_R14,
|
|
|
|
# define REG_R14 REG_R14
|
|
|
|
REG_R15,
|
|
|
|
# define REG_R15 REG_R15
|
|
|
|
REG_RDI,
|
|
|
|
# define REG_RDI REG_RDI
|
|
|
|
REG_RSI,
|
|
|
|
# define REG_RSI REG_RSI
|
|
|
|
REG_RBP,
|
|
|
|
# define REG_RBP REG_RBP
|
|
|
|
REG_RBX,
|
|
|
|
# define REG_RBX REG_RBX
|
|
|
|
REG_RDX,
|
|
|
|
# define REG_RDX REG_RDX
|
|
|
|
REG_RAX,
|
|
|
|
# define REG_RAX REG_RAX
|
2002-03-26 12:38:27 +00:00
|
|
|
REG_RCX,
|
|
|
|
# define REG_RCX REG_RCX
|
|
|
|
REG_RSP,
|
|
|
|
# define REG_RSP REG_RSP
|
|
|
|
REG_RIP,
|
|
|
|
# define REG_RIP REG_RIP
|
|
|
|
REG_EFL,
|
|
|
|
# define REG_EFL REG_EFL
|
2002-03-27 11:08:02 +00:00
|
|
|
REG_CSGSFS, /* Actually short cs, gs, fs, __pad0. */
|
|
|
|
# define REG_CSGSFS REG_CSGSFS
|
2002-03-26 12:38:27 +00:00
|
|
|
REG_ERR,
|
|
|
|
# define REG_ERR REG_ERR
|
2002-11-10 11:10:49 +00:00
|
|
|
REG_TRAPNO,
|
2002-03-26 12:38:27 +00:00
|
|
|
# define REG_TRAPNO REG_TRAPNO
|
2002-11-10 11:10:49 +00:00
|
|
|
REG_OLDMASK,
|
|
|
|
# define REG_OLDMASK REG_OLDMASK
|
|
|
|
REG_CR2
|
|
|
|
# define REG_CR2 REG_CR2
|
2002-03-26 12:38:27 +00:00
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
struct _libc_fpxreg
|
|
|
|
{
|
|
|
|
unsigned short int significand[4];
|
|
|
|
unsigned short int exponent;
|
2017-05-04 11:26:33 +00:00
|
|
|
unsigned short int __glibc_reserved1[3];
|
2002-03-26 12:38:27 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct _libc_xmmreg
|
|
|
|
{
|
|
|
|
__uint32_t element[4];
|
|
|
|
};
|
|
|
|
|
|
|
|
struct _libc_fpstate
|
|
|
|
{
|
|
|
|
/* 64-bit FXSAVE format. */
|
|
|
|
__uint16_t cwd;
|
|
|
|
__uint16_t swd;
|
|
|
|
__uint16_t ftw;
|
|
|
|
__uint16_t fop;
|
|
|
|
__uint64_t rip;
|
|
|
|
__uint64_t rdp;
|
|
|
|
__uint32_t mxcsr;
|
|
|
|
__uint32_t mxcr_mask;
|
|
|
|
struct _libc_fpxreg _st[8];
|
|
|
|
struct _libc_xmmreg _xmm[16];
|
2017-05-04 11:26:33 +00:00
|
|
|
__uint32_t __glibc_reserved1[24];
|
2002-03-26 12:38:27 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Structure to describe FPU registers. */
|
|
|
|
typedef struct _libc_fpstate *fpregset_t;
|
|
|
|
|
|
|
|
/* Context to describe whole processor state. */
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
gregset_t gregs;
|
|
|
|
/* Note that fpregs is a pointer. */
|
|
|
|
fpregset_t fpregs;
|
2012-05-16 19:52:45 +00:00
|
|
|
__extension__ unsigned long long __reserved1 [8];
|
2002-03-26 12:38:27 +00:00
|
|
|
} mcontext_t;
|
|
|
|
|
|
|
|
/* Userlevel context. */
|
|
|
|
typedef struct ucontext
|
|
|
|
{
|
|
|
|
unsigned long int uc_flags;
|
|
|
|
struct ucontext *uc_link;
|
|
|
|
stack_t uc_stack;
|
|
|
|
mcontext_t uc_mcontext;
|
|
|
|
__sigset_t uc_sigmask;
|
|
|
|
struct _libc_fpstate __fpregs_mem;
|
|
|
|
} ucontext_t;
|
|
|
|
|
2012-05-16 19:52:45 +00:00
|
|
|
#else /* !__x86_64__ */
|
2002-03-26 12:38:27 +00:00
|
|
|
|
|
|
|
/* Type for general register. */
|
|
|
|
typedef int greg_t;
|
|
|
|
|
|
|
|
/* Number of general registers. */
|
|
|
|
#define NGREG 19
|
|
|
|
|
|
|
|
/* Container for all general registers. */
|
|
|
|
typedef greg_t gregset_t[NGREG];
|
|
|
|
|
|
|
|
#ifdef __USE_GNU
|
|
|
|
/* Number of each register is the `gregset_t' array. */
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
REG_GS = 0,
|
|
|
|
# define REG_GS REG_GS
|
|
|
|
REG_FS,
|
|
|
|
# define REG_FS REG_FS
|
|
|
|
REG_ES,
|
|
|
|
# define REG_ES REG_ES
|
|
|
|
REG_DS,
|
|
|
|
# define REG_DS REG_DS
|
|
|
|
REG_EDI,
|
|
|
|
# define REG_EDI REG_EDI
|
|
|
|
REG_ESI,
|
|
|
|
# define REG_ESI REG_ESI
|
|
|
|
REG_EBP,
|
|
|
|
# define REG_EBP REG_EBP
|
|
|
|
REG_ESP,
|
|
|
|
# define REG_ESP REG_ESP
|
|
|
|
REG_EBX,
|
|
|
|
# define REG_EBX REG_EBX
|
|
|
|
REG_EDX,
|
|
|
|
# define REG_EDX REG_EDX
|
|
|
|
REG_ECX,
|
|
|
|
# define REG_ECX REG_ECX
|
|
|
|
REG_EAX,
|
|
|
|
# define REG_EAX REG_EAX
|
2001-09-19 10:37:31 +00:00
|
|
|
REG_TRAPNO,
|
|
|
|
# define REG_TRAPNO REG_TRAPNO
|
|
|
|
REG_ERR,
|
|
|
|
# define REG_ERR REG_ERR
|
2002-03-26 12:38:27 +00:00
|
|
|
REG_EIP,
|
|
|
|
# define REG_EIP REG_EIP
|
2001-09-19 10:37:31 +00:00
|
|
|
REG_CS,
|
|
|
|
# define REG_CS REG_CS
|
|
|
|
REG_EFL,
|
|
|
|
# define REG_EFL REG_EFL
|
2002-03-26 12:38:27 +00:00
|
|
|
REG_UESP,
|
|
|
|
# define REG_UESP REG_UESP
|
2001-09-19 10:37:31 +00:00
|
|
|
REG_SS
|
|
|
|
# define REG_SS REG_SS
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Definitions taken from the kernel headers. */
|
|
|
|
struct _libc_fpreg
|
|
|
|
{
|
|
|
|
unsigned short int significand[4];
|
|
|
|
unsigned short int exponent;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct _libc_fpstate
|
|
|
|
{
|
|
|
|
unsigned long int cw;
|
|
|
|
unsigned long int sw;
|
|
|
|
unsigned long int tag;
|
|
|
|
unsigned long int ipoff;
|
|
|
|
unsigned long int cssel;
|
|
|
|
unsigned long int dataoff;
|
|
|
|
unsigned long int datasel;
|
2002-03-26 12:38:27 +00:00
|
|
|
struct _libc_fpreg _st[8];
|
|
|
|
unsigned long int status;
|
2001-09-19 10:37:31 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Structure to describe FPU registers. */
|
2002-03-26 12:38:27 +00:00
|
|
|
typedef struct _libc_fpstate *fpregset_t;
|
2001-09-19 10:37:31 +00:00
|
|
|
|
|
|
|
/* Context to describe whole processor state. */
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
gregset_t gregs;
|
2002-03-26 12:38:27 +00:00
|
|
|
/* Due to Linux's history we have to use a pointer here. The SysV/i386
|
|
|
|
ABI requires a struct with the values. */
|
2001-09-19 10:37:31 +00:00
|
|
|
fpregset_t fpregs;
|
|
|
|
unsigned long int oldmask;
|
|
|
|
unsigned long int cr2;
|
|
|
|
} mcontext_t;
|
|
|
|
|
|
|
|
/* Userlevel context. */
|
|
|
|
typedef struct ucontext
|
|
|
|
{
|
|
|
|
unsigned long int uc_flags;
|
|
|
|
struct ucontext *uc_link;
|
|
|
|
stack_t uc_stack;
|
|
|
|
mcontext_t uc_mcontext;
|
|
|
|
__sigset_t uc_sigmask;
|
|
|
|
struct _libc_fpstate __fpregs_mem;
|
|
|
|
} ucontext_t;
|
|
|
|
|
2012-05-16 19:52:45 +00:00
|
|
|
#endif /* !__x86_64__ */
|
2002-03-26 12:38:27 +00:00
|
|
|
|
2001-09-19 10:37:31 +00:00
|
|
|
#endif /* sys/ucontext.h */
|