PATCH: Add x32 support to <sys/user.h>

H.J. Lu hjl.tools@gmail.com
Wed May 16 21:18:00 GMT 2012


On Wed, May 16, 2012 at 2:13 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Wed, May 16, 2012 at 12:47 PM, Roland McGrath <roland@hack.frob.com> wrote:
>>>    struct user_regs_struct*   u_ar0;
>>> +# ifdef __ILP32__
>>> +  unsigned int                       pad0;
>>> +# endif
>>>    struct user_fpregs_struct* u_fpstate;
>>> -  unsigned long int          magic;
>>> +# ifdef __ILP32__
>>> +  unsigned int                       pad1;
>>> +# endif
>>> +  __extension__ unsigned long long int       magic;
>>
>> For consistency all fields should have names starting with "u_".
>> But I prefer the union trick over #ifdef'd padding fields.
>
> Like this?
>

Should be this.  OK to install?

Thanks.

-- 
H.J.
---
	* sysdeps/unix/sysv/linux/x86_64/sys/user.h (user): Use
	anonymous union.

diff --git a/sysdeps/unix/sysv/linux/x86_64/sys/user.h
b/sysdeps/unix/sysv/linux/x86_64/sys/user.h
index 46bf6ef..9db2937 100644
--- a/sysdeps/unix/sysv/linux/x86_64/sys/user.h
+++ b/sysdeps/unix/sysv/linux/x86_64/sys/user.h
@@ -82,14 +82,16 @@ struct user
   __extension__ unsigned long long int	start_stack;
   __extension__ long long int		signal;
   int				reserved;
-  struct user_regs_struct*	u_ar0;
-# ifdef __ILP32__
-  unsigned int			pad0;
-# endif
-  struct user_fpregs_struct*	u_fpstate;
-# ifdef __ILP32__
-  unsigned int			pad1;
-# endif
+  __extension__ union
+    {
+      struct user_regs_struct*	u_ar0;
+      __extension__ unsigned long long int	__u_ar0_word;
+    };
+  __extension__ union
+    {
+      struct user_fpregs_struct*	u_fpstate;
+      __extension__ unsigned long long int	__u_fpstate_word;
+    };
   __extension__ unsigned long long int	magic;
   char				u_comm [32];
   __extension__ unsigned long long int	u_debugreg [8];



More information about the Libc-alpha mailing list