aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/unix/sysv')
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/sys/reg.h6
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/sys/user.h94
2 files changed, 92 insertions, 8 deletions
diff --git a/sysdeps/unix/sysv/linux/x86_64/sys/reg.h b/sysdeps/unix/sysv/linux/x86_64/sys/reg.h
index c34eb96e78..5d3df0eb21 100644
--- a/sysdeps/unix/sysv/linux/x86_64/sys/reg.h
+++ b/sysdeps/unix/sysv/linux/x86_64/sys/reg.h
@@ -46,6 +46,12 @@
# define EFLAGS 18
# define RSP 19
# define SS 20
+# define FS_BASE 21
+# define GS_BASE 22
+# define DS 23
+# define ES 24
+# define FS 25
+# define GS 26
#else
/* Index into an array of 4 byte integers returned from ptrace for
diff --git a/sysdeps/unix/sysv/linux/x86_64/sys/user.h b/sysdeps/unix/sysv/linux/x86_64/sys/user.h
index 2df7b2e46d..98820a8d66 100644
--- a/sysdeps/unix/sysv/linux/x86_64/sys/user.h
+++ b/sysdeps/unix/sysv/linux/x86_64/sys/user.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2001, 2002 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
@@ -23,21 +23,23 @@
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
+
struct user_fpregs_struct
{
unsigned short int cwd;
unsigned short int swd;
unsigned short int twd;
unsigned short int fop;
- unsigned int fip;
- unsigned int fcs;
- unsigned int foo;
- unsigned int fos;
+ unsigned long int frip;
+ unsigned long int frdp;
unsigned int mxcsr;
unsigned int reserved;
unsigned int st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */
- unsigned int xmm_space[32]; /* 8*16 bytes for each XMM-reg = 128 bytes */
- unsigned int padding[56];
+ unsigned int xmm_space[64]; /* 16*16 bytes for each XMM-reg = 128 bytes */
+ unsigned int padding[24];
};
struct user_regs_struct
@@ -64,7 +66,82 @@ struct user_regs_struct
unsigned long rsp;
unsigned long ss;
unsigned long fs_base;
- unsigned long kernel_gs_base;
+ unsigned long gs_base;
+ unsigned long ds;
+ unsigned long es;
+ unsigned long fs;
+ unsigned long gs;
+};
+
+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 start_code;
+ unsigned long start_stack;
+ long int signal;
+ int reserved;
+ struct user_regs_struct* u_ar0;
+ struct user_fpregs_struct* u_fpstate;
+ unsigned long int magic;
+ char u_comm [32];
+ unsigned long int u_debugreg [8];
+};
+
+#else
+/* These are the 32-bit x86 structures. */
+struct user_fpregs_struct
+{
+ long int cwd;
+ long int swd;
+ long int twd;
+ long int fip;
+ long int fcs;
+ long int foo;
+ long int fos;
+ long int st_space [20];
+};
+
+struct user_fpxregs_struct
+{
+ unsigned short int cwd;
+ unsigned short int swd;
+ unsigned short int twd;
+ unsigned short int fop;
+ long int fip;
+ long int fcs;
+ long int foo;
+ long int fos;
+ long int mxcsr;
+ long int reserved;
+ long int st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */
+ long int xmm_space[32]; /* 8*16 bytes for each XMM-reg = 128 bytes */
+ long int padding[56];
+};
+
+struct user_regs_struct
+{
+ long int ebx;
+ long int ecx;
+ long int edx;
+ long int esi;
+ long int edi;
+ long int ebp;
+ long int eax;
+ long int xds;
+ long int xes;
+ long int xfs;
+ long int xgs;
+ long int orig_eax;
+ long int eip;
+ long int xcs;
+ long int eflags;
+ long int esp;
+ long int xss;
};
struct user
@@ -85,6 +162,7 @@ struct user
char u_comm [32];
int u_debugreg [8];
};
+#endif /* __WORDSIZE */
#define PAGE_SHIFT 12
#define PAGE_SIZE (1UL << PAGE_SHIFT)