![]() |
|
|||
0001 /* SPDX-License-Identifier: GPL-2.0 */ 0002 #ifndef _ASM_X86_USER_32_H 0003 #define _ASM_X86_USER_32_H 0004 0005 #include <asm/page.h> 0006 /* Core file format: The core file is written in such a way that gdb 0007 can understand it and provide useful information to the user (under 0008 linux we use the 'trad-core' bfd). There are quite a number of 0009 obstacles to being able to view the contents of the floating point 0010 registers, and until these are solved you will not be able to view the 0011 contents of them. Actually, you can read in the core file and look at 0012 the contents of the user struct to find out what the floating point 0013 registers contain. 0014 The actual file contents are as follows: 0015 UPAGE: 1 page consisting of a user struct that tells gdb what is present 0016 in the file. Directly after this is a copy of the task_struct, which 0017 is currently not used by gdb, but it may come in useful at some point. 0018 All of the registers are stored as part of the upage. The upage should 0019 always be only one page. 0020 DATA: The data area is stored. We use current->end_text to 0021 current->brk to pick up all of the user variables, plus any memory 0022 that may have been malloced. No attempt is made to determine if a page 0023 is demand-zero or if a page is totally unused, we just cover the entire 0024 range. All of the addresses are rounded in such a way that an integral 0025 number of pages is written. 0026 STACK: We need the stack information in order to get a meaningful 0027 backtrace. We need to write the data from (esp) to 0028 current->start_stack, so we round each of these off in order to be able 0029 to write an integer number of pages. 0030 The minimum core file size is 3 pages, or 12288 bytes. 0031 */ 0032 0033 /* 0034 * Pentium III FXSR, SSE support 0035 * Gareth Hughes <gareth@valinux.com>, May 2000 0036 * 0037 * Provide support for the GDB 5.0+ PTRACE_{GET|SET}FPXREGS requests for 0038 * interacting with the FXSR-format floating point environment. Floating 0039 * point data can be accessed in the regular format in the usual manner, 0040 * and both the standard and SIMD floating point data can be accessed via 0041 * the new ptrace requests. In either case, changes to the FPU environment 0042 * will be reflected in the task's state as expected. 0043 */ 0044 0045 struct user_i387_struct { 0046 long cwd; 0047 long swd; 0048 long twd; 0049 long fip; 0050 long fcs; 0051 long foo; 0052 long fos; 0053 long st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */ 0054 }; 0055 0056 struct user_fxsr_struct { 0057 unsigned short cwd; 0058 unsigned short swd; 0059 unsigned short twd; 0060 unsigned short fop; 0061 long fip; 0062 long fcs; 0063 long foo; 0064 long fos; 0065 long mxcsr; 0066 long reserved; 0067 long st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */ 0068 long xmm_space[32]; /* 8*16 bytes for each XMM-reg = 128 bytes */ 0069 long padding[56]; 0070 }; 0071 0072 /* 0073 * This is the old layout of "struct pt_regs", and 0074 * is still the layout used by user mode (the new 0075 * pt_regs doesn't have all registers as the kernel 0076 * doesn't use the extra segment registers) 0077 */ 0078 struct user_regs_struct { 0079 unsigned long bx; 0080 unsigned long cx; 0081 unsigned long dx; 0082 unsigned long si; 0083 unsigned long di; 0084 unsigned long bp; 0085 unsigned long ax; 0086 unsigned long ds; 0087 unsigned long es; 0088 unsigned long fs; 0089 unsigned long gs; 0090 unsigned long orig_ax; 0091 unsigned long ip; 0092 unsigned long cs; 0093 unsigned long flags; 0094 unsigned long sp; 0095 unsigned long ss; 0096 }; 0097 0098 /* When the kernel dumps core, it starts by dumping the user struct - 0099 this will be used by gdb to figure out where the data and stack segments 0100 are within the file, and what virtual addresses to use. */ 0101 struct user{ 0102 /* We start with the registers, to mimic the way that "memory" is returned 0103 from the ptrace(3,...) function. */ 0104 struct user_regs_struct regs; /* Where the registers are actually stored */ 0105 /* ptrace does not yet supply these. Someday.... */ 0106 int u_fpvalid; /* True if math co-processor being used. */ 0107 /* for this mess. Not yet used. */ 0108 struct user_i387_struct i387; /* Math Co-processor registers. */ 0109 /* The rest of this junk is to help gdb figure out what goes where */ 0110 unsigned long int u_tsize; /* Text segment size (pages). */ 0111 unsigned long int u_dsize; /* Data segment size (pages). */ 0112 unsigned long int u_ssize; /* Stack segment size (pages). */ 0113 unsigned long start_code; /* Starting virtual address of text. */ 0114 unsigned long start_stack; /* Starting virtual address of stack area. 0115 This is actually the bottom of the stack, 0116 the top of the stack is always found in the 0117 esp register. */ 0118 long int signal; /* Signal that caused the core dump. */ 0119 int reserved; /* No longer used */ 0120 unsigned long u_ar0; /* Used by gdb to help find the values for */ 0121 /* the registers. */ 0122 struct user_i387_struct *u_fpstate; /* Math Co-processor pointer. */ 0123 unsigned long magic; /* To uniquely identify a core file */ 0124 char u_comm[32]; /* User command that was responsible */ 0125 int u_debugreg[8]; 0126 }; 0127 0128 #endif /* _ASM_X86_USER_32_H */
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.1.0 LXR engine. The LXR team |
![]() ![]() |