AArch64: Remove asm/ptrace.h inclusion in sys/user.h and sys/procfs.h
authorYvan Roux <yvan.roux@linaro.org>
Tue, 20 May 2014 12:45:22 +0000 (13:45 +0100)
committerWill Newton <will.newton@linaro.org>
Tue, 20 May 2014 12:45:22 +0000 (13:45 +0100)
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.

ChangeLog
sysdeps/unix/sysv/linux/aarch64/sys/procfs.h
sysdeps/unix/sysv/linux/aarch64/sys/user.h

index 2060344..8c2fd97 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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-05-19  Adhemerval Zanella  <azanella@linux.vnet.ibm.com>
 
        * sysdeps/powerpc/powerpc64/fpu/multiarch/e_hypof.c: Moved ...
index b02af8a..211227c 100644 (file)
 #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
index eceeb38..0ca2715 100644 (file)
 #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