Rename sys/ucontext.h to bits/ucontext.h.

sys/ucontext.h is effectively a bits header.  Its contents are
extremely system-specific, and it’s strongly associated with a
specific public header (ucontext.h) that provides a superset of its
definitions, but there are other public headers that also require some
of its definitions.  This patch therefore moves it into the bits/
namespace and adjusts all the headers that refer to it.  In case there
are external users, a stub is added that includes ucontext.h.

Most of the fallout changes are trivial, but aarch64, ia64 and riscv
need a little more work.  aarch64 sys/ucontext.h (now bits/ucontext.h)
was including sys/procfs.h for the definition of elf_greg_t etc;
the simplest fix is to have it include bits/procfs.h instead (and then
that needs to include sys/user.h for user_regs_struct).  This is not
ideal but fixing it properly would require disentangling all of the
debugger interface headers which is more than I’m up for at the moment.

ia64 bits/ptrace.h and bits/procfs.h were both including
bits/sigcontext.h, which is only licensed to be included from
signal.h.  (I’m not sure how this ever worked, or why it broke with
this patch and not some previous one.)  This is fixed by creating
another single-type header, bits/types/__ia64_fpreg.h, which provides
the only thing they need from bits/sigcontext.h.

s/u/s/l/riscv/makecontext.c was defining makecontext with a function
head that didn’t agree with its official prototype (in ucontext.h);
formerly that file did not include ucontext.h, only sys/ucontext.h,
so we were getting away with it, but it’s still wrong.  Making the
function head match the prototype actually simplifies the code.

	* sysdeps/generic/sys/ucontext.h: Move to top level bits/ucontext.h.
	Adjust multiple inclusion guard.
	* sysdeps/arm/sys/ucontext.h: Move to sysdeps/arm/bits/ucontext.h.
	Adjust multiple inclusion guard.
	* sysdeps/i386/sys/ucontext.h: Similarly.
	* sysdeps/m68k/sys/ucontext.h: Similarly.
	* sysdeps/mips/sys/ucontext.h: Similarly.
	* sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h: Similarly.
	* sysdeps/unix/sysv/linux/alpha/sys/ucontext.h: Similarly.
	* sysdeps/unix/sysv/linux/arm/sys/ucontext.h: Similarly.
	* sysdeps/unix/sysv/linux/csky/sys/ucontext.h: Similarly.
	* sysdeps/unix/sysv/linux/hppa/sys/ucontext.h: Similarly.
	* sysdeps/unix/sysv/linux/ia64/sys/ucontext.h: Similarly.
	* sysdeps/unix/sysv/linux/m68k/sys/ucontext.h: Similarly.
	* sysdeps/unix/sysv/linux/microblaze/sys/ucontext.h: Similarly.
	* sysdeps/unix/sysv/linux/mips/sys/ucontext.h: Similarly.
	* sysdeps/unix/sysv/linux/nios2/sys/ucontext.h: Similarly.
	* sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h: Similarly.
	* sysdeps/unix/sysv/linux/riscv/sys/ucontext.h: Similarly.
	* sysdeps/unix/sysv/linux/s390/sys/ucontext.h: Similarly.
	* sysdeps/unix/sysv/linux/sh/sys/ucontext.h: Similarly.
	* sysdeps/unix/sysv/linux/sparc/sys/ucontext.h: Similarly.
	* sysdeps/unix/sysv/linux/x86/sys/ucontext.h: Similarly.
	* stdlib/Makefile: Install bits/ucontext.h.

	* stdlib/sys/ucontext.h: New backward compatibility stub header,
	includes ucontext.h.
	* include/sys/ucontext.h: New wrapper.

	* sysdeps/unix/sysv/linux/aarch64/bits/procfs.h: Allow inclusion
	by bits/ucontext.h as well as sys/procfs.h.  Include sys/user.h.
	* sysdeps/unix/sysv/linux/aarch64/bits/ucontext.h: Include
	bits/procfs.h instead of sys/procfs.h.

	* sysdeps/unix/sysv/linux/ia64/bits/types/__ia64_fpreg.h:
	New file, contents factored out of ia64/bits/sigcontext.h and
	ia64/bits/ucontext.h.
	* sysdeps/unix/sysv/linux/ia64/Makefile:
	Install bits/types/__ia64_fpreg.h.  Merge subdir=misc blocks.
	* sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h
	* sysdeps/unix/sysv/linux/ia64/bits/ucontext.h:
	Include bits/types/__ia64_fpreg.h for struct ia64_fpreg.

	* sysdeps/unix/sysv/linux/ia64/bits/procfs.h:
	Include bits/types/__ia64_fpreg.h for struct ia64_fpreg.
	Don’t include bits/sigcontext.h or bits/ucontext.h.
	* sysdeps/unix/sysv/linux/ia64/sys/ptrace.h:
	Don’t include bits/sigcontext.h.

	* sysdeps/unix/sysv/linux/riscv/makecontext.c: Include
	ucontext.h, not sys/ucontext.h. Correct function head to match
	prototype in ucontext.h.  Use va_arg to retrieve all arguments
	past argc.

	* sysdeps/unix/sysv/linux/s390/tst-ptrace-singleblock.c:
	Sort list of includes.

	* signal/signal.h, stdlib/ucontext.h
	* sysdeps/unix/sysv/linux/alpha/bits/procfs-prregset.h
	* sysdeps/unix/sysv/linux/ia64/sys/ptrace.h
	* sysdeps/unix/sysv/linux/riscv/bits/procfs.h
	* sysdeps/unix/sysv/linux/s390/bits/procfs.h:
	Include bits/ucontext.h, not sys/ucontext.h.

	* sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h
	* sysdeps/unix/sysv/linux/arm/sigcontextinfo.h
	* sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h
	* sysdeps/unix/sysv/linux/riscv/sigcontextinfo.h:
	Include signal.h, not sys/ucontext.h.

	* sysdeps/unix/sysv/linux/arm/register-dump.h
	* sysdeps/unix/sysv/linux/csky/register-dump.h:
	Include ucontext.h, not sys/ucontext.h.

	* sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym
	* sysdeps/unix/sysv/linux/alpha/ucontext-offsets.sym
	* sysdeps/unix/sysv/linux/arm/ucontext_i.sym
	* sysdeps/unix/sysv/linux/csky/abiv2/ucontext_i.sym
	* sysdeps/unix/sysv/linux/hppa/ucontext_i.sym
	* sysdeps/unix/sysv/linux/i386/ucontext_i.sym
	* sysdeps/unix/sysv/linux/ia64/sigcontext-offsets.sym
	* sysdeps/unix/sysv/linux/m68k/m680x0/ucontext_i.sym
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/ucontext_i.sym
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/ucontext_i.sym
	* sysdeps/unix/sysv/linux/mips/ucontext_i.sym
	* sysdeps/unix/sysv/linux/nios2/ucontext_i.sym
	* sysdeps/unix/sysv/linux/riscv/ucontext_i.sym
	* sysdeps/unix/sysv/linux/s390/ucontext_i.sym
	* sysdeps/unix/sysv/linux/sh/sh3/ucontext_i.sym
	* sysdeps/unix/sysv/linux/sh/sh4/ucontext_i.sym
	* sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym
	* sysdeps/unix/sysv/linux/x86_64/ucontext_i.sym:
	Include stddef.h and signal.h; don’t include any other headers.

	* scripts/check-obsolete-constructs.py (HEADER_ALLOWED_INCLUDES)
	(SYSDEP_ALLOWED_INCLUDES): Update.
This commit is contained in:
Zack Weinberg 2019-06-11 13:05:02 -04:00
parent 9e32bbc2da
commit 536eef52c5
No known key found for this signature in database
GPG Key ID: 5106A66578DC148C
60 changed files with 140 additions and 168 deletions

View File

@ -21,8 +21,8 @@
use of struct sigcontext does not conform to POSIX namespace
requirements. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -51,4 +51,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

1
include/sys/ucontext.h Normal file
View File

@ -0,0 +1 @@
#include <stdlib/sys/ucontext.h>

View File

@ -504,24 +504,25 @@ HEADER_ALLOWED_INCLUDES = {
# tgmath.h -> complex.h, math.h
# threads.h -> time.h
"inttypes.h": [ "stdint.h" ],
"signal.h": [ "sys/ucontext.h" ],
"stdlib.h": [ "alloca.h", "sys/types.h" ],
"tgmath.h": [ "complex.h", "math.h" ],
"threads.h": [ "time.h" ],
# necessary for backward compatibility with old GNU extensions
"stdlib.h": [ "alloca.h", "sys/types.h" ],
# POSIX top-level headers
# mandated: pthread.h -> sched.h, time.h
"pthread.h": [ "sched.h", "time.h" ],
# allowed: ftw.h -> sys/stat.h
# mqueue.h -> fcntl.h
# sched.h -> time.h
# spawn.h -> sched.h
"ftw.h": [ "sys/stat.h" ],
"langinfo.h": [ "nl_types.h" ],
"mqueue.h": [ "fcntl.h" ],
"pthread.h": [ "sched.h", "time.h" ],
"regex.h": [ "limits.h", "sys/types.h" ],
"sched.h": [ "time.h" ],
"spawn.h": [ "sched.h" ],
# not yet analyzed
"langinfo.h": [ "nl_types.h" ],
"regex.h": [ "limits.h", "sys/types.h" ],
"termios.h": [ "sys/ttydefaults.h" ],
"utmpx.h": [ "paths.h" ],
@ -562,7 +563,6 @@ HEADER_ALLOWED_INCLUDES = {
"shadow.h": [ "paths.h" ],
"stdio_ext.h": [ "stdio.h" ],
"thread_db.h": [ "pthread.h", "stdint.h", "sys/procfs.h" ],
"ucontext.h": [ "sys/ucontext.h" ],
"utmp.h": [ "paths.h" ],
"values.h": [ "float.h", "limits.h" ],
@ -574,12 +574,10 @@ HEADER_ALLOWED_INCLUDES = {
"sys/mount.h": [ "sys/ioctl.h" ],
"sys/mtio.h": [ "sys/ioctl.h" ],
"sys/param.h": [ "endian.h", "limits.h", "sys/types.h" ],
"sys/procfs.h": [ "sys/ucontext.h", "sys/user.h" ],
"sys/ptrace.h": [ "sys/ucontext.h" ],
"sys/procfs.h": [ "sys/user.h" ],
"sys/raw.h": [ "sys/ioctl.h" ],
"sys/timerfd.h": [ "time.h" ],
"sys/ttychars.h": [ "sys/ttydefaults.h" ],
"sys/ucontext.h": [ "sys/procfs.h" ],
"sys/vfs.h": [ "sys/statfs.h" ],
# Nonstandardized headers that do nothing but include some other
@ -597,6 +595,7 @@ HEADER_ALLOWED_INCLUDES = {
"sys/socketvar.h": [ "sys/socket.h" ],
"sys/syslog.h": [ "syslog.h" ],
"sys/termios.h": [ "termios.h" ],
"sys/ucontext.h": [ "ucontext.h" ],
"sys/unistd.h": [ "unistd.h" ],
"syscall.h": [ "sys/syscall.h" ],
"termio.h": [ "sys/ioctl.h", "termios.h" ],
@ -623,8 +622,6 @@ HEADER_ALLOWED_INCLUDES = {
"features.h": [ "gnu/stubs.h", "stdc-predef.h",
"sys/cdefs.h" ],
"bits/procfs.h": [ "signal.h", "sys/ucontext.h" ],
"bits/types/__va_list.h": [ "stdarg.h" ],
"bits/types/ptrdiff_t.h": [ "stddef.h" ],
"bits/types/size_t.h": [ "stddef.h" ],
@ -670,8 +667,8 @@ SYSDEP_ALLOWED_INCLUDES = {
"bits/ioctls.h": [ "asm/ioctls.h", "linux/sockios.h" ],
"bits/local_lim.h": [ "linux/limits.h" ],
"bits/param.h": [ "linux/limits.h", "linux/param.h" ],
"bits/procfs.h": [ "asm/elf.h", "asm/ptrace.h" ],
"bits/procfs-prregset.h": [ "sys/ucontext.h" ],
"bits/procfs.h": [ "asm/elf.h", "asm/ptrace.h",
"sys/user.h" ],
"bits/sigcontext.h": [ "asm/sigcontext.h" ],
"bits/socket.h": [ "asm/socket.h" ],
},
@ -689,7 +686,6 @@ SYSDEP_ALLOWED_INCLUDES = {
"sys/fpregdef.h": [ "sgidefs.h" ],
"sys/regdef.h": [ "sgidefs.h" ],
"sys/tas.h": [ "sgidefs.h" ],
"sys/ucontext.h": [ "sgidefs.h" ],
"sys/user.h": [ "sgidefs.h" ],
"bits/fcntl.h": [ "sgidefs.h" ],
@ -699,6 +695,7 @@ SYSDEP_ALLOWED_INCLUDES = {
"bits/setjmp.h": [ "sgidefs.h" ],
"bits/sigcontext.h": [ "sgidefs.h" ],
"bits/stat.h": [ "sgidefs.h" ],
"bits/ucontext.h": [ "sgidefs.h" ],
"bits/wordsize.h": [ "sgidefs.h" ],
},
}

View File

@ -293,7 +293,7 @@ extern int sigreturn (struct sigcontext *__scp) __THROW;
# include <bits/types/stack_t.h>
# if defined __USE_XOPEN || defined __USE_XOPEN2K8
/* This will define `ucontext_t' and `mcontext_t'. */
# include <sys/ucontext.h>
# include <bits/ucontext.h>
# endif
#endif /* Use POSIX.1-2008 or X/Open Unix. */

View File

@ -26,7 +26,7 @@ headers := stdlib.h bits/stdlib.h bits/stdlib-ldbl.h bits/stdlib-float.h \
monetary.h bits/monetary-ldbl.h \
inttypes.h stdint.h bits/wordsize.h bits/timesize.h \
errno.h sys/errno.h bits/errno.h bits/types/error_t.h \
ucontext.h sys/ucontext.h bits/indirect-return.h \
ucontext.h sys/ucontext.h bits/ucontext.h bits/indirect-return.h \
alloca.h fmtmsg.h \
bits/stdlib-bsearch.h sys/random.h bits/stdint-intn.h \
bits/stdint-uintn.h bits/time64.h bits/NULL.h \

1
stdlib/sys/ucontext.h Normal file
View File

@ -0,0 +1 @@
#include <ucontext.h>

View File

@ -26,7 +26,7 @@
#include <bits/indirect-return.h>
/* Get machine dependent definition of data structures. */
#include <sys/ucontext.h>
#include <bits/ucontext.h>
__BEGIN_DECLS

View File

@ -17,8 +17,8 @@
/* System V/ARM ABI compliant context switching support. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -107,4 +107,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -17,8 +17,8 @@
/* System V/i386 ABI compliant context switching support. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -135,4 +135,4 @@ typedef struct ucontext_t
#undef __ctx
#undef __ctxt
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -17,8 +17,8 @@
/* System V/m68k ABI compliant context switching support. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -122,4 +122,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -17,8 +17,8 @@
/* System V/mips ABI compliant context switching support. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -173,4 +173,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -20,11 +20,12 @@
#ifndef _BITS_PROCFS_H
#define _BITS_PROCFS_H 1
#ifndef _SYS_PROCFS_H
#if !defined _SYS_PROCFS_H && !defined _BITS_UCONTEXT_H
# error "Never include <bits/procfs.h> directly; use <sys/procfs.h> instead."
#endif
#include <bits/types.h>
#include <sys/user.h>
/* Type for a general-purpose register. */
typedef __uint64_t elf_greg_t;

View File

@ -18,8 +18,8 @@
/* System V/AArch64 ABI compliant context switching support. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -33,7 +33,7 @@
#endif
#ifdef __USE_MISC
# include <sys/procfs.h>
# include <bits/procfs.h>
typedef elf_greg_t greg_t;
@ -75,4 +75,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -20,7 +20,7 @@
#define _SIGCONTEXTINFO_H
#include <stdint.h>
#include <sys/ucontext.h>
#include <signal.h>
static inline uintptr_t
sigcontext_get_pc (const ucontext_t *ctx)

View File

@ -1,8 +1,5 @@
#include <inttypes.h>
#include <signal.h>
#include <stddef.h>
#include <sys/ucontext.h>
#include <asm/sigcontext.h>
#include <signal.h>
#include "kernel_rt_sigframe.h"

View File

@ -25,8 +25,8 @@
#endif
/* For gregset_t and fpregset_t. FIXME: sys/procfs.h should not
expose all of sys/ucontext.h. */
#include <sys/ucontext.h>
expose all of bits/ucontext.h. */
#include <bits/ucontext.h>
typedef gregset_t __prgregset_t;
typedef fpregset_t __prfpregset_t;

View File

@ -15,8 +15,8 @@
License along with the GNU C Library. If not, see
<https://www.gnu.org/licenses/>. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -91,4 +91,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -1,5 +1,5 @@
#include <stddef.h>
#include <sys/ucontext.h>
#include <signal.h>
--
UC_LINK offsetof (ucontext_t, uc_link)

View File

@ -17,8 +17,8 @@
/* System V/ARM ABI compliant context switching support. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -141,4 +141,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -19,7 +19,7 @@
#include <sys/uio.h>
#include <_itoa.h>
#include <sys/ucontext.h>
#include <ucontext.h>
/* We will print the register dump in this format:

View File

@ -1,7 +1,5 @@
#include <inttypes.h>
#include <signal.h>
#include <stddef.h>
#include <sys/ucontext.h>
#include <signal.h>
SIG_BLOCK
SIG_SETMASK

View File

@ -1,7 +1,5 @@
#include <inttypes.h>
#include <signal.h>
#include <stddef.h>
#include <sys/ucontext.h>
#include <signal.h>
SIG_BLOCK
SIG_SETMASK

View File

@ -16,8 +16,8 @@
License along with the GNU C Library. If not, see
<https://www.gnu.org/licenses/>. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -86,4 +86,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -19,7 +19,7 @@
#include <sys/uio.h>
#include <_itoa.h>
#include <bits/sigcontext.h>
#include <sys/ucontext.h>
#include <ucontext.h>
/* abiv1 register dump in this format:

View File

@ -17,8 +17,8 @@
/* Don't rely on this, the interface is currently messed up and may need to
be broken to be fixed. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -79,4 +79,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -1,6 +1,5 @@
#include <stddef.h>
#include <signal.h>
#include <sys/ucontext.h>
--

View File

@ -1,6 +1,5 @@
#include <stddef.h>
#include <signal.h>
#include <sys/ucontext.h>
--

View File

@ -1,5 +1,5 @@
ifeq ($(subdir),misc)
sysdep_headers += sys/rse.h
ifeq ($(subdir),signal)
sysdep_headers += bits/types/__ia64_fpreg.h
endif
ifeq ($(subdir),stdlib)
@ -8,7 +8,7 @@ gen-as-const-headers += sigcontext-offsets.sym
endif
ifeq ($(subdir),misc)
sysdep_headers += sys/io.h
sysdep_headers += sys/io.h sys/rse.h
sysdep_routines += ioperm clone2
gen-as-const-headers += sigaltstack-offsets.sym
endif

View File

@ -23,10 +23,7 @@
# error "Never include <bits/procfs.h> directly; use <sys/procfs.h> instead."
#endif
/* For struct __ia64_fpreg. FIXME: sys/procfs.h should not expose all
of sys/ucontext.h. */
#include <sys/ucontext.h>
#include <bits/sigcontext.h>
#include <bits/types/__ia64_fpreg.h>
/* We really need just 72 but let's leave some headroom... */
#define ELF_NGREG 128

View File

@ -26,17 +26,10 @@
#include <bits/types/size_t.h>
#include <bits/types/struct_sigstack.h>
#include <bits/types/stack_t.h>
#include <bits/types/__ia64_fpreg.h>
#include <bits/sigstack.h>
#include <bits/ss_flags.h>
struct __ia64_fpreg
{
union
{
unsigned long bits[2];
} u;
} __attribute__ ((__aligned__ (16)));
struct sigcontext
{
unsigned long int sc_flags; /* see manifest constants below */

View File

@ -0,0 +1,22 @@
#ifndef ____ia64_fpreg_defined
#define ____ia64_fpreg_defined
#include <features.h>
#ifdef __USE_MISC
# define __ctx(fld) fld
#else
# define __ctx(fld) __ ## fld
#endif
struct __ia64_fpreg
{
union
{
unsigned long __ctx(bits)[2];
} __ctx(u);
} __attribute__ ((__aligned__ (16)));
#undef __ctx
#endif /* __ia64_fpreg */

View File

@ -15,14 +15,14 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
#include <bits/types/sigset_t.h>
#include <bits/types/stack_t.h>
#include <bits/types/__ia64_fpreg.h>
#ifdef __USE_MISC
# define __ctx(fld) fld
@ -36,14 +36,6 @@
* "ucontext_t" as all the necessary info is inside the former.
*/
struct __ia64_fpreg_mcontext
{
union
{
unsigned long __ctx(bits)[2];
} __ctx(u);
} __attribute__ ((__aligned__ (16)));
typedef struct
{
unsigned long int __ctx(sc_flags);
@ -63,7 +55,7 @@ typedef struct
unsigned long int __ctx(sc_pr);
unsigned long int __ctx(sc_br)[8];
unsigned long int __ctx(sc_gr)[32];
struct __ia64_fpreg_mcontext __ctx(sc_fr)[128];
struct __ia64_fpreg __ctx(sc_fr)[128];
unsigned long int __ctx(sc_rbs_base);
unsigned long int __ctx(sc_loadrs);
unsigned long int __ctx(sc_ar25);
@ -103,4 +95,4 @@ ucontext_t;
#define uc_stack _u._mc.__ctx(sc_stack)
#define uc_link _u._uc._link
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -1,5 +1,5 @@
#include <stddef.h>
#include <sys/ucontext.h>
#include <signal.h>
--
SC_NAT offsetof (mcontext_t, sc_nat)

View File

@ -20,9 +20,8 @@
#define _SYS_PTRACE_H 1
#include <features.h>
#include <sys/ucontext.h>
#include <bits/sigcontext.h>
#include <bits/types.h>
#include <bits/ucontext.h>
__BEGIN_DECLS

View File

@ -17,8 +17,8 @@
/* System V/m68k ABI compliant context switching support. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -127,4 +127,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -1,6 +1,5 @@
#include <stddef.h>
#include <signal.h>
#include <sys/ucontext.h>
--

View File

@ -16,8 +16,8 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -89,4 +89,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -16,8 +16,8 @@
/* Don't rely on this, the interface is currently messed up and may need to
be broken to be fixed. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -121,4 +121,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -1,7 +1,5 @@
#include <inttypes.h>
#include <signal.h>
#include <stddef.h>
#include <sys/ucontext.h>
#include <kernel_rt_sigframe.h>

View File

@ -18,8 +18,8 @@
/* System V/Nios II ABI compliant context switching support. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -58,4 +58,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -1,7 +1,5 @@
#include <inttypes.h>
#include <signal.h>
#include <stddef.h>
#include <sys/ucontext.h>
#include "kernel_rt_sigframe.h"

View File

@ -15,8 +15,8 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -197,4 +197,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -1,6 +1,5 @@
#include <stddef.h>
#include <signal.h>
#include <sys/ucontext.h>
--

View File

@ -1,6 +1,5 @@
#include <stddef.h>
#include <signal.h>
#include <sys/ucontext.h>
--

View File

@ -23,10 +23,10 @@
# error "Never include <bits/procfs.h> directly; use <sys/procfs.h> instead."
#endif
/* FIXME: sys/ucontext.h does not define NGREG or NFPREG unless
/* FIXME: bits/ucontext.h does not define NGREG or NFPREG unless
__USE_MISC is active, and sys/procfs.h should not expose all of
sys/ucontext.h. */
#include <sys/ucontext.h>
bits/ucontext.h. */
#include <bits/ucontext.h>
/* ELF register definitions */
#define ELF_NGREG NGREG

View File

@ -18,8 +18,8 @@
/* Don't rely on this, the interface is currently messed up and may need to
be broken to be fixed. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -107,4 +107,4 @@ typedef struct ucontext_t
mcontext_t uc_mcontext;
} ucontext_t;
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -18,14 +18,12 @@
#include <sysdep.h>
#include <sys/asm.h>
#include <sys/ucontext.h>
#include <ucontext.h>
#include <stdarg.h>
#include <assert.h>
void
__makecontext (ucontext_t *ucp, void (*func) (void), int argc,
long int a0, long int a1, long int a2, long int a3, long int a4,
...)
__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
{
extern void __start_context (void) attribute_hidden;
long int i, sp;
@ -47,19 +45,13 @@ __makecontext (ucontext_t *ucp, void (*func) (void), int argc,
ucp->uc_mcontext.__gregs[REG_PC] = (long int) &__start_context;
/* Put args in a0-a7, then put any remaining args on the stack. */
ucp->uc_mcontext.__gregs[REG_A0 + 0] = a0;
ucp->uc_mcontext.__gregs[REG_A0 + 1] = a1;
ucp->uc_mcontext.__gregs[REG_A0 + 2] = a2;
ucp->uc_mcontext.__gregs[REG_A0 + 3] = a3;
ucp->uc_mcontext.__gregs[REG_A0 + 4] = a4;
if (__glibc_unlikely (argc > 5))
if (argc > 0)
{
va_list vl;
va_start (vl, a4);
va_start (vl, argc);
long reg_args = argc < REG_NARGS ? argc : REG_NARGS;
for (i = 5; i < reg_args; i++)
for (i = 0; i < reg_args; i++)
ucp->uc_mcontext.__gregs[REG_A0 + i] = va_arg (vl, long);
long int stack_args = argc - reg_args;

View File

@ -19,7 +19,7 @@
#ifndef _SIGCONTEXTINFO_H
#define _SIGCONTEXTINFO_H
#include <sys/ucontext.h>
#include <signal.h>
static inline uintptr_t
sigcontext_get_pc (const ucontext_t *ctx)

View File

@ -1,7 +1,5 @@
#include <inttypes.h>
#include <signal.h>
#include <stddef.h>
#include <sys/ucontext.h>
#include <signal.h>
-- Constants used by the rt_sigprocmask call.

View File

@ -23,9 +23,9 @@
# error "Never include <bits/procfs.h> directly; use <sys/procfs.h> instead."
#endif
/* FIXME: sys/ucontext.h does not define NGREG unless __USE_MISC is
active, and sys/procfs.h should not expose all of sys/ucontext.h. */
#include <sys/ucontext.h>
/* FIXME: bits/ucontext.h does not define NGREG unless __USE_MISC is
active, and sys/procfs.h should not expose all of bits/ucontext.h. */
#include <bits/ucontext.h>
typedef greg_t elf_greg_t;
#define ELF_NGREG NGREG

View File

@ -16,8 +16,8 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -92,4 +92,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -16,19 +16,19 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <elf.h>
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <elf.h>
#include <support/xunistd.h>
#include <sys/wait.h>
#include <support/check.h>
#include <string.h>
#include <errno.h>
#include <support/xunistd.h>
/* Ensure that we use the PTRACE_SINGLEBLOCK definition from glibc ptrace.h
in tracer_func. We need the kernel ptrace.h for structs ptrace_area

View File

@ -1,6 +1,5 @@
#include <stddef.h>
#include <signal.h>
#include <sys/ucontext.h>
--

View File

@ -17,8 +17,8 @@
/* Where is System V/SH ABI? */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -123,4 +123,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -1,6 +1,5 @@
#include <stddef.h>
#include <signal.h>
#include <sys/ucontext.h>
--

View File

@ -1,6 +1,5 @@
#include <stddef.h>
#include <signal.h>
#include <sys/ucontext.h>
--

View File

@ -15,8 +15,8 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -301,4 +301,4 @@ typedef struct ucontext_t
} ucontext_t;
#endif /* __WORDSIZE == 32 */
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -1,6 +1,5 @@
#include <stddef.h>
#include <signal.h>
#include <sys/ucontext.h>
--

View File

@ -15,8 +15,8 @@
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#ifndef _BITS_UCONTEXT_H
#define _BITS_UCONTEXT_H 1
#include <features.h>
@ -259,4 +259,4 @@ typedef struct ucontext_t
#undef __ctx
#endif /* sys/ucontext.h */
#endif /* bits/ucontext.h */

View File

@ -1,6 +1,5 @@
#include <stddef.h>
#include <signal.h>
#include <sys/ucontext.h>
--