diff options
author | Zack Weinberg <zackw@panix.com> | 2019-06-11 13:05:02 -0400 |
---|---|---|
committer | Zack Weinberg <zackw@panix.com> | 2020-01-08 14:17:46 -0500 |
commit | 536eef52c5c6bae9939aa5b591b914273e731a13 (patch) | |
tree | d5df4847c9a68195309d362d3b87d7610a54ff19 /sysdeps/unix/sysv/linux/ia64/bits/ucontext.h | |
parent | 9e32bbc2da1644f4ec9c1428faf98ed6ad508e4a (diff) | |
download | glibc-zack/no-nested-includes.tar.gz glibc-zack/no-nested-includes.tar.xz glibc-zack/no-nested-includes.zip |
Rename sys/ucontext.h to bits/ucontext.h. zack/no-nested-includes
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.
Diffstat (limited to 'sysdeps/unix/sysv/linux/ia64/bits/ucontext.h')
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/bits/ucontext.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/ucontext.h b/sysdeps/unix/sysv/linux/ia64/bits/ucontext.h new file mode 100644 index 0000000000..ce1503368d --- /dev/null +++ b/sysdeps/unix/sysv/linux/ia64/bits/ucontext.h @@ -0,0 +1,98 @@ +/* Copyright (C) 1998-2020 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 + <https://www.gnu.org/licenses/>. */ + +#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 +#else +# define __ctx(fld) __ ## fld +#endif + +/* + * These are here mostly for backwards compatibility with older Unices. + * IA-64 Linux does not distinguish between "mcontext_t" and + * "ucontext_t" as all the necessary info is inside the former. + */ + +typedef struct + { + unsigned long int __ctx(sc_flags); + unsigned long int __ctx(sc_nat); + stack_t __ctx(sc_stack); + unsigned long int __ctx(sc_ip); + unsigned long int __ctx(sc_cfm); + unsigned long int __ctx(sc_um); + unsigned long int __ctx(sc_ar_rsc); + unsigned long int __ctx(sc_ar_bsp); + unsigned long int __ctx(sc_ar_rnat); + unsigned long int __ctx(sc_ar_ccv); + unsigned long int __ctx(sc_ar_unat); + unsigned long int __ctx(sc_ar_fpsr); + unsigned long int __ctx(sc_ar_pfs); + unsigned long int __ctx(sc_ar_lc); + unsigned long int __ctx(sc_pr); + unsigned long int __ctx(sc_br)[8]; + unsigned long int __ctx(sc_gr)[32]; + 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); + unsigned long int __ctx(sc_ar26); + unsigned long int __ctx(sc_rsvd)[12]; + unsigned long int __ctx(sc_mask); + } mcontext_t; + +#if __GNUC_PREREQ (3, 5) +# define _SC_GR0_OFFSET \ + __builtin_offsetof (mcontext_t, __ctx(sc_gr)[0]) +#elif defined __GNUC__ +# define _SC_GR0_OFFSET \ + (((char *) &((mcontext_t *) 0)->__ctx(sc_gr)[0]) - (char *) 0) +#else +# define _SC_GR0_OFFSET 0xc8 /* pray that this is correct... */ +#endif + +typedef struct ucontext_t + { + union + { + mcontext_t _mc; + struct + { + unsigned long _pad[_SC_GR0_OFFSET/8]; + struct ucontext_t *_link; /* this should overlay sc_gr[0] */ + } + _uc; + } + _u; + } +ucontext_t; + +#define uc_mcontext _u._mc +#define uc_sigmask _u._mc.__ctx(sc_mask) +#define uc_stack _u._mc.__ctx(sc_stack) +#define uc_link _u._uc._link + +#endif /* bits/ucontext.h */ |