This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
[glibc/zack/no-nested-includes] Rename sys/ucontext.h to bits/ucontext.h.
- From: Zack Weinberg <zack at sourceware dot org>
- To: glibc-cvs at sourceware dot org
- Date: 25 Jun 2019 20:33:00 -0000
- Subject: [glibc/zack/no-nested-includes] Rename sys/ucontext.h to bits/ucontext.h.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=fd937b61650f992c03f72bf4569eb491ca9d2c65
commit fd937b61650f992c03f72bf4569eb491ca9d2c65
Author: Zack Weinberg <zackw@panix.com>
Date: Tue Jun 25 16:18:31 2019 -0400
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.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Tue Jun 11 13:05:02 2019 -0400
#
# On branch after-amend
# Changes to be committed:
# renamed: sysdeps/generic/sys/ucontext.h -> bits/ucontext.h
# new file: include/sys/ucontext.h
# modified: scripts/check-obsolete-constructs.py
# modified: signal/signal.h
# modified: stdlib/Makefile
# new file: stdlib/sys/ucontext.h
# modified: stdlib/ucontext.h
# renamed: sysdeps/arm/sys/ucontext.h -> sysdeps/arm/bits/ucontext.h
# renamed: sysdeps/i386/sys/ucontext.h -> sysdeps/i386/bits/ucontext.h
# renamed: sysdeps/m68k/sys/ucontext.h -> sysdeps/m68k/bits/ucontext.h
# renamed: sysdeps/mips/sys/ucontext.h -> sysdeps/mips/bits/ucontext.h
# modified: sysdeps/unix/sysv/linux/aarch64/bits/procfs.h
# renamed: sysdeps/unix/sysv/linux/aarch64/sys/ucontext.h -> sysdeps/unix/sysv/linux/aarch64/bits/ucontext.h
# modified: sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h
# modified: sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym
# modified: sysdeps/unix/sysv/linux/alpha/bits/procfs-prregset.h
# renamed: sysdeps/unix/sysv/linux/alpha/sys/ucontext.h -> sysdeps/unix/sysv/linux/alpha/bits/ucontext.h
# modified: sysdeps/unix/sysv/linux/alpha/ucontext-offsets.sym
# renamed: sysdeps/unix/sysv/linux/arm/sys/ucontext.h -> sysdeps/unix/sysv/linux/arm/bits/ucontext.h
# modified: sysdeps/unix/sysv/linux/arm/register-dump.h
# modified: sysdeps/unix/sysv/linux/arm/sigcontextinfo.h
# modified: sysdeps/unix/sysv/linux/arm/ucontext_i.sym
# modified: sysdeps/unix/sysv/linux/csky/abiv2/ucontext_i.sym
# renamed: sysdeps/unix/sysv/linux/csky/sys/ucontext.h -> sysdeps/unix/sysv/linux/csky/bits/ucontext.h
# modified: sysdeps/unix/sysv/linux/csky/register-dump.h
# renamed: sysdeps/unix/sysv/linux/hppa/sys/ucontext.h -> sysdeps/unix/sysv/linux/hppa/bits/ucontext.h
# modified: sysdeps/unix/sysv/linux/hppa/ucontext_i.sym
# modified: sysdeps/unix/sysv/linux/i386/ucontext_i.sym
# modified: sysdeps/unix/sysv/linux/ia64/Makefile
# modified: sysdeps/unix/sysv/linux/ia64/bits/procfs.h
# modified: sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h
# new file: sysdeps/unix/sysv/linux/ia64/bits/types/__ia64_fpreg.h
# renamed: sysdeps/unix/sysv/linux/ia64/sys/ucontext.h -> sysdeps/unix/sysv/linux/ia64/bits/ucontext.h
# modified: sysdeps/unix/sysv/linux/ia64/sigcontext-offsets.sym
# modified: sysdeps/unix/sysv/linux/ia64/sys/ptrace.h
# renamed: sysdeps/unix/sysv/linux/m68k/sys/ucontext.h -> sysdeps/unix/sysv/linux/m68k/bits/ucontext.h
# modified: sysdeps/unix/sysv/linux/m68k/m680x0/ucontext_i.sym
# renamed: sysdeps/unix/sysv/linux/microblaze/sys/ucontext.h -> sysdeps/unix/sysv/linux/microblaze/bits/ucontext.h
# renamed: sysdeps/unix/sysv/linux/mips/sys/ucontext.h -> sysdeps/unix/sysv/linux/mips/bits/ucontext.h
# modified: sysdeps/unix/sysv/linux/mips/ucontext_i.sym
# renamed: sysdeps/unix/sysv/linux/nios2/sys/ucontext.h -> sysdeps/unix/sysv/linux/nios2/bits/ucontext.h
# modified: sysdeps/unix/sysv/linux/nios2/sigcontextinfo.h
# modified: sysdeps/unix/sysv/linux/nios2/ucontext_i.sym
# renamed: sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h -> sysdeps/unix/sysv/linux/powerpc/bits/ucontext.h
# modified: sysdeps/unix/sysv/linux/powerpc/powerpc32/ucontext_i.sym
# modified: sysdeps/unix/sysv/linux/powerpc/powerpc64/ucontext_i.sym
# modified: sysdeps/unix/sysv/linux/riscv/bits/procfs.h
# renamed: sysdeps/unix/sysv/linux/riscv/sys/ucontext.h -> sysdeps/unix/sysv/linux/riscv/bits/ucontext.h
# modified: sysdeps/unix/sysv/linux/riscv/makecontext.c
# modified: sysdeps/unix/sysv/linux/riscv/sigcontextinfo.h
# modified: sysdeps/unix/sysv/linux/riscv/ucontext_i.sym
# modified: sysdeps/unix/sysv/linux/s390/bits/procfs.h
# renamed: sysdeps/unix/sysv/linux/s390/sys/ucontext.h -> sysdeps/unix/sysv/linux/s390/bits/ucontext.h
# modified: sysdeps/unix/sysv/linux/s390/tst-ptrace-singleblock.c
# modified: sysdeps/unix/sysv/linux/s390/ucontext_i.sym
# renamed: sysdeps/unix/sysv/linux/sh/sys/ucontext.h -> sysdeps/unix/sysv/linux/sh/bits/ucontext.h
# modified: sysdeps/unix/sysv/linux/sh/sh3/ucontext_i.sym
# modified: sysdeps/unix/sysv/linux/sh/sh4/ucontext_i.sym
# renamed: sysdeps/unix/sysv/linux/sparc/sys/ucontext.h -> sysdeps/unix/sysv/linux/sparc/bits/ucontext.h
# modified: sysdeps/unix/sysv/linux/sparc/sparc32/ucontext_i.sym
# renamed: sysdeps/unix/sysv/linux/x86/sys/ucontext.h -> sysdeps/unix/sysv/linux/x86/bits/ucontext.h
# modified: sysdeps/unix/sysv/linux/x86_64/ucontext_i.sym
#
Diff:
---
scripts/check-obsolete-constructs.py | 3 ++-
sysdeps/unix/sysv/linux/aarch64/bits/procfs.h | 3 ++-
sysdeps/unix/sysv/linux/aarch64/bits/ucontext.h | 2 +-
3 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/scripts/check-obsolete-constructs.py b/scripts/check-obsolete-constructs.py
index e142818..997b73b 100755
--- a/scripts/check-obsolete-constructs.py
+++ b/scripts/check-obsolete-constructs.py
@@ -667,7 +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.h": [ "asm/elf.h", "asm/ptrace.h",
+ "sys/user.h" ],
"bits/sigcontext.h": [ "asm/sigcontext.h" ],
"bits/socket.h": [ "asm/socket.h" ],
},
diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/procfs.h b/sysdeps/unix/sysv/linux/aarch64/bits/procfs.h
index fec2f6a..9603b02 100644
--- a/sysdeps/unix/sysv/linux/aarch64/bits/procfs.h
+++ b/sysdeps/unix/sysv/linux/aarch64/bits/procfs.h
@@ -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;
diff --git a/sysdeps/unix/sysv/linux/aarch64/bits/ucontext.h b/sysdeps/unix/sysv/linux/aarch64/bits/ucontext.h
index 00df592..7be5302 100644
--- a/sysdeps/unix/sysv/linux/aarch64/bits/ucontext.h
+++ b/sysdeps/unix/sysv/linux/aarch64/bits/ucontext.h
@@ -33,7 +33,7 @@
#endif
#ifdef __USE_MISC
-# include <sys/procfs.h>
+# include <bits/procfs.h>
typedef elf_greg_t greg_t;