diff options
author | Yvan Roux <yvan.roux@linaro.org> | 2014-05-20 13:45:22 +0100 |
---|---|---|
committer | Will Newton <will.newton@linaro.org> | 2014-06-06 11:51:58 +0100 |
commit | d5a18ed19e2f9c2914a26a124e27a8129ba7121d (patch) | |
tree | 4aa3ac0f1e435438c2ab04fd72441f7feba5621e | |
parent | 074ae1942e811a459e811674a7b70186d3abc6ff (diff) |
AArch64: Remove asm/ptrace.h inclusion in sys/user.h and sys/procfs.h
This patch fixes an issue observed by the Xen project, where including
signal.h exposes various PSR_MODE #defines. This is due to the usage
in sys/user.h and sys/procfs.h of the struct user_pt_regs and
user_fpsimd_state included via asm/ptrace.h. The namespace pollution
this inclusion introduce is already partially fixed with some #undef
of the PTRACE_* symbols, but other symbols like the PSR_MODE ones are
still present, and undefining them is not safe since a user can
include ptrace.h before user.h.
My proposition is to define the 2 structures we need in user.h and get
rid of the asm/ptrace.h inclusion.
Build and make check are clean on AArch64.
2014-05-20 Will Newton <will.newton@linaro.org>
Yvan Roux <yvan.roux@linaro.org>
* sysdeps/unix/sysv/linux/aarch64/sys/user.h: Remove unused
#include of asm/ptrace.h.
(PTRACE_GET_THREAD_AREA): Remove #undef.
(PTRACE_GETHBPREGS): Likewise.
(PTRACE_SETHBPREGS): Likewise.
(struct user_regs_struct): New structure.
(struct user_fpsimd_struct): New structure.
* sysdeps/unix/sysv/linux/aarch64/sys/procfs.h: Remove unused
#include of asm/ptrace.h and second #include of sys/user.h.
(PTRACE_GET_THREAD_AREA): Remove #undef.
(PTRACE_GETHBPREGS): Likewise.
(PTRACE_SETHBPREGS): Likewise.
(ELF_NGREG): Use new struct user_regs_struct.
(elf_fpregset_t): Use new struct user_fpsimd_struct.
-rw-r--r-- | libc/ports/ChangeLog.aarch64.linaro | 18 | ||||
-rw-r--r-- | libc/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h | 15 | ||||
-rw-r--r-- | libc/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h | 22 |
3 files changed, 34 insertions, 21 deletions
diff --git a/libc/ports/ChangeLog.aarch64.linaro b/libc/ports/ChangeLog.aarch64.linaro index 4ee954b03..ff97a9a67 100644 --- a/libc/ports/ChangeLog.aarch64.linaro +++ b/libc/ports/ChangeLog.aarch64.linaro @@ -1,3 +1,21 @@ +2014-05-20 Will Newton <will.newton@linaro.org> + Yvan Roux <yvan.roux@linaro.org> + + * sysdeps/unix/sysv/linux/aarch64/sys/user.h: Remove unused + #include of asm/ptrace.h. + (PTRACE_GET_THREAD_AREA): Remove #undef. + (PTRACE_GETHBPREGS): Likewise. + (PTRACE_SETHBPREGS): Likewise. + (struct user_regs_struct): New structure. + (struct user_fpsimd_struct): New structure. + * sysdeps/unix/sysv/linux/aarch64/sys/procfs.h: Remove unused + #include of asm/ptrace.h and second #include of sys/user.h. + (PTRACE_GET_THREAD_AREA): Remove #undef. + (PTRACE_GETHBPREGS): Likewise. + (PTRACE_SETHBPREGS): Likewise. + (ELF_NGREG): Use new struct user_regs_struct. + (elf_fpregset_t): Use new struct user_fpsimd_struct. + 2014-04-24 Ian Bolton <ian.bolton@arm.com> * sysdeps/aarch64/fpu/fclrexcpt.c (feclearexcept): Don't write to diff --git a/libc/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h b/libc/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h index b02af8ac1..211227cc4 100644 --- a/libc/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h +++ b/libc/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h @@ -33,17 +33,6 @@ #include <sys/types.h> #include <sys/user.h> -/* We need to see the definition of struct pt_regs but do not want the - linux PTRACE_* defines since they conflict with the generic eglibc - definitions in sys/ptrace.h Hence the undef's below. */ -#include <asm/ptrace.h> - -#undef PTRACE_GET_THREAD_AREA -#undef PTRACE_GETHBPREGS -#undef PTRACE_SETHBPREGS - -#include <sys/user.h> - __BEGIN_DECLS /* Type for a general-purpose register. */ @@ -53,11 +42,11 @@ typedef unsigned long elf_greg_t; pt_regs' directly in the typedef, but tradition says that the register set is an array, which does have some peculiar semantics, so leave it that way. */ -#define ELF_NGREG (sizeof (struct user_pt_regs) / sizeof(elf_greg_t)) +#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t)) typedef elf_greg_t elf_gregset_t[ELF_NGREG]; /* Register set for the floating-point registers. */ -typedef struct user_fpsimd_state elf_fpregset_t; +typedef struct user_fpsimd_struct elf_fpregset_t; /* Signal info. */ struct elf_siginfo diff --git a/libc/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h b/libc/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h index eceeb389e..0ca2715a4 100644 --- a/libc/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h +++ b/libc/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h @@ -19,13 +19,19 @@ #ifndef _SYS_USER_H #define _SYS_USER_H 1 -/* We need to see the definition of struct pt_regs but do not want the - linux PTRACE_* defines since they conflict with the generic glibc - definitions in sys/ptrace.h Hence the undef's below. */ -#include <asm/ptrace.h> - -#undef PTRACE_GET_THREAD_AREA -#undef PTRACE_GETHBPREGS -#undef PTRACE_SETHBPREGS +struct user_regs_struct +{ + unsigned long long regs[31]; + unsigned long long sp; + unsigned long long pc; + unsigned long long pstate; +}; + +struct user_fpsimd_struct +{ + __uint128_t vregs[32]; + unsigned int fpsr; + unsigned int fpcr; +}; #endif |