This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
PATCH: Add x32 support to <sys/user.h>
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: GNU C Library <libc-alpha at sourceware dot org>
- Date: Wed, 16 May 2012 06:30:28 -0700
- Subject: PATCH: Add x32 support to <sys/user.h>
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
Hi,
X32 has the same machine state as x86-64. This patch adds x32 support
to <sys/user.h>. Tested on Linux/x86-64. OK to install?
Thanks.
H.J.
---
* sysdeps/unix/sysv/linux/x86_64/sys/user.h: Don't
include <bits/wordsize.h>. Check __x86_64__ instead of
__WORDSIZE.
(user_regs_struct): Use "unsigned long long" instead of
"unsigned long" if __x86_64__ is defined.
(user): Likewise. Pad after pointer field if __ILP32__ is
defined.
diff --git a/sysdeps/unix/sysv/linux/x86_64/sys/user.h b/sysdeps/unix/sysv/linux/x86_64/sys/user.h
index 3cecfa8..ecc120d 100644
--- a/sysdeps/unix/sysv/linux/x86_64/sys/user.h
+++ b/sysdeps/unix/sysv/linux/x86_64/sys/user.h
@@ -1,4 +1,5 @@
-/* Copyright (C) 2001, 2002, 2004, 2011 Free Software Foundation, Inc.
+/* Copyright (C) 2001, 2002, 2004, 2011, 2012
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -22,9 +23,7 @@
too much into it. Don't use it for anything other than GDB unless
you know what you are doing. */
-#include <bits/wordsize.h>
-
-#if __WORDSIZE == 64
+#ifdef __x86_64__
struct user_fpregs_struct
{
@@ -32,8 +31,8 @@ struct user_fpregs_struct
unsigned short int swd;
unsigned short int ftw;
unsigned short int fop;
- unsigned long int rip;
- unsigned long int rdp;
+ unsigned long long int rip;
+ unsigned long long int rdp;
unsigned int mxcsr;
unsigned int mxcr_mask;
unsigned int st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */
@@ -43,33 +42,33 @@ struct user_fpregs_struct
struct user_regs_struct
{
- unsigned long int r15;
- unsigned long int r14;
- unsigned long int r13;
- unsigned long int r12;
- unsigned long int rbp;
- unsigned long int rbx;
- unsigned long int r11;
- unsigned long int r10;
- unsigned long int r9;
- unsigned long int r8;
- unsigned long int rax;
- unsigned long int rcx;
- unsigned long int rdx;
- unsigned long int rsi;
- unsigned long int rdi;
- unsigned long int orig_rax;
- unsigned long int rip;
- unsigned long int cs;
- unsigned long int eflags;
- unsigned long int rsp;
- unsigned long int ss;
- unsigned long int fs_base;
- unsigned long int gs_base;
- unsigned long int ds;
- unsigned long int es;
- unsigned long int fs;
- unsigned long int gs;
+ unsigned long long int r15;
+ unsigned long long int r14;
+ unsigned long long int r13;
+ unsigned long long int r12;
+ unsigned long long int rbp;
+ unsigned long long int rbx;
+ unsigned long long int r11;
+ unsigned long long int r10;
+ unsigned long long int r9;
+ unsigned long long int r8;
+ unsigned long long int rax;
+ unsigned long long int rcx;
+ unsigned long long int rdx;
+ unsigned long long int rsi;
+ unsigned long long int rdi;
+ unsigned long long int orig_rax;
+ unsigned long long int rip;
+ unsigned long long int cs;
+ unsigned long long int eflags;
+ unsigned long long int rsp;
+ unsigned long long int ss;
+ unsigned long long int fs_base;
+ unsigned long long int gs_base;
+ unsigned long long int ds;
+ unsigned long long int es;
+ unsigned long long int fs;
+ unsigned long long int gs;
};
struct user
@@ -77,18 +76,24 @@ struct user
struct user_regs_struct regs;
int u_fpvalid;
struct user_fpregs_struct i387;
- unsigned long int u_tsize;
- unsigned long int u_dsize;
- unsigned long int u_ssize;
- unsigned long int start_code;
- unsigned long int start_stack;
- long int signal;
+ unsigned long long int u_tsize;
+ unsigned long long int u_dsize;
+ unsigned long long int u_ssize;
+ unsigned long long int start_code;
+ unsigned long long int start_stack;
+ long long int signal;
int reserved;
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
+ unsigned long long int magic;
char u_comm [32];
- unsigned long int u_debugreg [8];
+ unsigned long long int u_debugreg [8];
};
#else
@@ -161,7 +166,7 @@ struct user
char u_comm [32];
int u_debugreg [8];
};
-#endif /* __WORDSIZE */
+#endif /* __x86_64__ */
#define PAGE_SHIFT 12
#define PAGE_SIZE (1UL << PAGE_SHIFT)