| 1 |
|
| 2 | #ifndef _ARM_USER_H
|
| 3 | #define _ARM_USER_H
|
| 4 |
|
| 5 | #include <asm/page.h>
|
| 6 | #include <asm/ptrace.h>
|
| 7 | |
| 8 | can understand it and provide useful information to the user (under
|
| 9 | linux we use the 'trad-core' bfd). There are quite a number of
|
| 10 | obstacles to being able to view the contents of the floating point
|
| 11 | registers, and until these are solved you will not be able to view the
|
| 12 | contents of them. Actually, you can read in the core file and look at
|
| 13 | the contents of the user struct to find out what the floating point
|
| 14 | registers contain.
|
| 15 | The actual file contents are as follows:
|
| 16 | UPAGE: 1 page consisting of a user struct that tells gdb what is present
|
| 17 | in the file. Directly after this is a copy of the task_struct, which
|
| 18 | is currently not used by gdb, but it may come in useful at some point.
|
| 19 | All of the registers are stored as part of the upage. The upage should
|
| 20 | always be only one page.
|
| 21 | DATA: The data area is stored. We use current->end_text to
|
| 22 | current->brk to pick up all of the user variables, plus any memory
|
| 23 | that may have been malloced. No attempt is made to determine if a page
|
| 24 | is demand-zero or if a page is totally unused, we just cover the entire
|
| 25 | range. All of the addresses are rounded in such a way that an integral
|
| 26 | number of pages is written.
|
| 27 | STACK: We need the stack information in order to get a meaningful
|
| 28 | backtrace. We need to write the data from (esp) to
|
| 29 | current->start_stack, so we round each of these off in order to be able
|
| 30 | to write an integer number of pages.
|
| 31 | The minimum core file size is 3 pages, or 12288 bytes.
|
| 32 |
|
| 33 |
|
| 34 | struct user_fp {
|
| 35 | struct fp_reg {
|
| 36 | unsigned int sign1:1;
|
| 37 | unsigned int unused:15;
|
| 38 | unsigned int sign2:1;
|
| 39 | unsigned int exponent:14;
|
| 40 | unsigned int j:1;
|
| 41 | unsigned int mantissa1:31;
|
| 42 | unsigned int mantissa0:32;
|
| 43 | } fpregs[8];
|
| 44 | unsigned int fpsr:32;
|
| 45 | unsigned int fpcr:32;
|
| 46 | unsigned char ftype[8];
|
| 47 | unsigned int init_flag;
|
| 48 | };
|
| 49 |
|
| 50 | |
| 51 | this will be used by gdb to figure out where the data and stack segments
|
| 52 | are within the file, and what virtual addresses to use.
|
| 53 | struct user{
|
| 54 | |
| 55 | from the ptrace(3,...) function.
|
| 56 | struct pt_regs regs;
|
| 57 |
|
| 58 | int u_fpvalid;
|
| 59 |
|
| 60 |
|
| 61 | unsigned long int u_tsize;
|
| 62 | unsigned long int u_dsize;
|
| 63 | unsigned long int u_ssize;
|
| 64 | unsigned long start_code;
|
| 65 | unsigned long start_stack; |
| 66 | This is actually the bottom of the stack,
|
| 67 | the top of the stack is always found in the
|
| 68 | esp register.
|
| 69 | long int signal;
|
| 70 | int reserved;
|
| 71 | unsigned long u_ar0;
|
| 72 |
|
| 73 | unsigned long magic;
|
| 74 | char u_comm[32];
|
| 75 | int u_debugreg[8];
|
| 76 | struct user_fp u_fp;
|
| 77 | struct user_fp_struct * u_fp0;
|
| 78 |
|
| 79 | };
|
| 80 |
|
| 81 | |
| 82 | * User specific VFP registers. If only VFPv2 is present, registers 16 to 31
|
| 83 | * are ignored by the ptrace system call and the signal handler.
|
| 84 |
|
| 85 | struct user_vfp {
|
| 86 | unsigned long long fpregs[32];
|
| 87 | unsigned long fpscr;
|
| 88 | };
|
| 89 |
|
| 90 | |
| 91 | * VFP exception registers exposed to user space during signal delivery.
|
| 92 | * Fields not relavant to the current VFP architecture are ignored.
|
| 93 |
|
| 94 | struct user_vfp_exc {
|
| 95 | unsigned long fpexc;
|
| 96 | unsigned long fpinst;
|
| 97 | unsigned long fpinst2;
|
| 98 | };
|
| 99 |
|
| 100 | #endif
|