AARCH64: remove asm/prtace.h inclusion in sys/user.h and sys/procfs.h
Commit Message
Hi,
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 lile 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
ride of the asm/ptrace.h inclusion.
Build + Make check are clean on AArch64.
Thanks,
Yvan
2014-05-14 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.
Comments
Ping.
On 14 May 2014 13:46, Yvan Roux <yvan.roux@linaro.org> wrote:
> Hi,
>
> 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 lile 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
> ride of the asm/ptrace.h inclusion.
>
> Build + Make check are clean on AArch64.
>
> Thanks,
> Yvan
>
> 2014-05-14 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.
On 14 May 2014 12:46, Yvan Roux <yvan.roux@linaro.org> wrote:
Hi Yvan,
There is a typo in the subject line (ptrace.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 lile 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
> ride of the asm/ptrace.h inclusion.
>
> Build + Make check are clean on AArch64.
>
> Thanks,
> Yvan
>
> 2014-05-14 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
Missing full stop at the end of the sentence.
> * 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.
Otherwise this looks ok to me.
On 14 May 2014 12:46, Yvan Roux <yvan.roux@linaro.org> wrote:
> Hi,
>
> 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 lile 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
> ride of the asm/ptrace.h inclusion.
>
> Build + Make check are clean on AArch64.
>
> Thanks,
> Yvan
>
> 2014-05-14 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.
I think this re-structure is OK and can go in with the corrections
Will called out.
Thanks
/Marcus
On 20 May 2014 11:31, Marcus Shawcroft <marcus.shawcroft@gmail.com> wrote:
> On 14 May 2014 12:46, Yvan Roux <yvan.roux@linaro.org> wrote:
>> Hi,
>>
>> 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 lile 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
>> ride of the asm/ptrace.h inclusion.
>>
>> Build + Make check are clean on AArch64.
>>
>> Thanks,
>> Yvan
>>
>> 2014-05-14 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.
>
> I think this re-structure is OK and can go in with the corrections
> Will called out.
I committed this patch on Yvan's behalf.
@@ -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
@@ -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