|
|
1.1 root 1: #include <sys/ptrace.h>
2: /* Core file format: The core file is written in such a way that gdb
3: can understand it and provide useful information to the user (under
4: linux we use the 'trad-core' bfd). There are quite a number of
5: obstacles to being able to view the contents of the floating point
6: registers, and until these are solved you will not be able to view the
7: contents of them. Actually, you can read in the core file and look at
8: the contents of the user struct to find out what the floating point
9: registers contain.
10: The actual file contents are as follows:
11: UPAGE: 1 page consisting of a user struct that tells gdb what is present
12: in the file. Directly after this is a copy of the task_struct, which
13: is currently not used by gdb, but it may come in useful at some point.
14: All of the registers are stored as part of the upage. The upage should
15: always be only one page.
16: DATA: The data area is stored. We use current->end_text to
17: current->brk to pick up all of the user variables, plus any memory
18: that may have been malloced. No attempt is made to determine if a page
19: is demand-zero or if a page is totally unused, we just cover the entire
20: range. All of the addresses are rounded in such a way that an integral
21: number of pages is written.
22: STACK: We need the stack information in order to get a meaningful
23: backtrace. We need to write the data from (esp) to
24: current->start_stack, so we round each of these off in order to be able
25: to write an integer number of pages.
26: The minimum core file size is 3 pages, or 12288 bytes.
27: */
28:
29: struct user_i387_struct {
30: long cwd;
31: long swd;
32: long twd;
33: long fip;
34: long fcs;
35: long foo;
36: long fos;
37: long st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */
38: };
39:
40: /* When the kernel dumps core, it starts by dumping the user struct -
41: this will be used by gdb to figure out where the data and stack segments
42: are within the file, and what virtual addresses to use. */
43: struct user{
44: /* We start with the registers, to mimic the way that "memory" is returned
45: from the ptrace(3,...) function. */
46: struct pt_regs regs; /* Where the registers are actually stored */
47: /* ptrace does not yet supply these. Someday.... */
48: int u_fpvalid; /* True if math co-processor being used. */
49: /* for this mess. Not yet used. */
50: struct user_i387_struct i387; /* Math Co-processor registers. */
51: /* The rest of this junk is to help gdb figure out what goes where */
52: unsigned long int u_tsize; /* Text segment size (pages). */
53: unsigned long int u_dsize; /* Data segment size (pages). */
54: unsigned long int u_ssize; /* Stack segment size (pages). */
55: unsigned long start_code; /* Starting virtual address of text. */
56: unsigned long start_stack; /* Starting virtual address of stack area.
57: This is actually the bottom of the stack,
58: the top of the stack is always found in the
59: esp register. */
60: long int signal; /* Signal that caused the core dump. */
61: char * u_comm; /* User command that was responsible */
62: struct pt_regs * u_ar0; /* Used by gdb to help find the values for */
63: /* the registers. */
64: struct user_i387_struct* u_fpstate; /* Math Co-processor pointer. */
65: };
66: #define NBPG 4096
67: #define UPAGES 1
68: #define HOST_TEXT_START_ADDR (u.start_code)
69: #define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.