summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYvan Roux <yvan.roux@linaro.org>2014-05-20 13:45:22 +0100
committerWill Newton <will.newton@linaro.org>2014-06-06 11:51:58 +0100
commitd5a18ed19e2f9c2914a26a124e27a8129ba7121d (patch)
tree4aa3ac0f1e435438c2ab04fd72441f7feba5621e
parent074ae1942e811a459e811674a7b70186d3abc6ff (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.linaro18
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/aarch64/sys/procfs.h15
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/aarch64/sys/user.h22
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