diff options
Diffstat (limited to 'include/asm-xtensa/ptrace.h')
-rw-r--r-- | include/asm-xtensa/ptrace.h | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/include/asm-xtensa/ptrace.h b/include/asm-xtensa/ptrace.h new file mode 100644 index 000000000000..2848a5ff8349 --- /dev/null +++ b/include/asm-xtensa/ptrace.h | |||
@@ -0,0 +1,135 @@ | |||
1 | /* | ||
2 | * include/asm-xtensa/ptrace.h | ||
3 | * | ||
4 | * This file is subject to the terms and conditions of the GNU General Public | ||
5 | * License. See the file "COPYING" in the main directory of this archive | ||
6 | * for more details. | ||
7 | * | ||
8 | * Copyright (C) 2001 - 2005 Tensilica Inc. | ||
9 | */ | ||
10 | |||
11 | #ifndef _XTENSA_PTRACE_H | ||
12 | #define _XTENSA_PTRACE_H | ||
13 | |||
14 | #include <xtensa/config/core.h> | ||
15 | |||
16 | /* | ||
17 | * Kernel stack | ||
18 | * | ||
19 | * +-----------------------+ -------- STACK_SIZE | ||
20 | * | register file | | | ||
21 | * +-----------------------+ | | ||
22 | * | struct pt_regs | | | ||
23 | * +-----------------------+ | ------ PT_REGS_OFFSET | ||
24 | * double : 16 bytes spill area : | ^ | ||
25 | * excetion :- - - - - - - - - - - -: | | | ||
26 | * frame : struct pt_regs : | | | ||
27 | * :- - - - - - - - - - - -: | | | ||
28 | * | | | | | ||
29 | * | memory stack | | | | ||
30 | * | | | | | ||
31 | * ~ ~ ~ ~ | ||
32 | * ~ ~ ~ ~ | ||
33 | * | | | | | ||
34 | * | | | | | ||
35 | * +-----------------------+ | | --- STACK_BIAS | ||
36 | * | struct task_struct | | | ^ | ||
37 | * current --> +-----------------------+ | | | | ||
38 | * | struct thread_info | | | | | ||
39 | * +-----------------------+ -------- | ||
40 | */ | ||
41 | |||
42 | #define KERNEL_STACK_SIZE (2 * PAGE_SIZE) | ||
43 | |||
44 | /* Offsets for exception_handlers[] (3 x 64-entries x 4-byte tables). */ | ||
45 | |||
46 | #define EXC_TABLE_KSTK 0x004 /* Kernel Stack */ | ||
47 | #define EXC_TABLE_DOUBLE_SAVE 0x008 /* Double exception save area for a0 */ | ||
48 | #define EXC_TABLE_FIXUP 0x00c /* Fixup handler */ | ||
49 | #define EXC_TABLE_PARAM 0x010 /* For passing a parameter to fixup */ | ||
50 | #define EXC_TABLE_SYSCALL_SAVE 0x014 /* For fast syscall handler */ | ||
51 | #define EXC_TABLE_FAST_USER 0x100 /* Fast user exception handler */ | ||
52 | #define EXC_TABLE_FAST_KERNEL 0x200 /* Fast kernel exception handler */ | ||
53 | #define EXC_TABLE_DEFAULT 0x300 /* Default C-Handler */ | ||
54 | #define EXC_TABLE_SIZE 0x400 | ||
55 | |||
56 | /* Registers used by strace */ | ||
57 | |||
58 | #define REG_A_BASE 0xfc000000 | ||
59 | #define REG_AR_BASE 0x04000000 | ||
60 | #define REG_PC 0x14000000 | ||
61 | #define REG_PS 0x080000e6 | ||
62 | #define REG_WB 0x08000048 | ||
63 | #define REG_WS 0x08000049 | ||
64 | #define REG_LBEG 0x08000000 | ||
65 | #define REG_LEND 0x08000001 | ||
66 | #define REG_LCOUNT 0x08000002 | ||
67 | #define REG_SAR 0x08000003 | ||
68 | #define REG_DEPC 0x080000c0 | ||
69 | #define REG_EXCCAUSE 0x080000e8 | ||
70 | #define REG_EXCVADDR 0x080000ee | ||
71 | #define SYSCALL_NR 0x1 | ||
72 | |||
73 | #define AR_REGNO_TO_A_REGNO(ar, wb) (ar - wb*4) & ~(XCHAL_NUM_AREGS - 1) | ||
74 | |||
75 | /* Other PTRACE_ values defined in <linux/ptrace.h> using values 0-9,16,17,24 */ | ||
76 | |||
77 | #define PTRACE_GETREGS 12 | ||
78 | #define PTRACE_SETREGS 13 | ||
79 | #define PTRACE_GETFPREGS 14 | ||
80 | #define PTRACE_SETFPREGS 15 | ||
81 | #define PTRACE_GETFPREGSIZE 18 | ||
82 | |||
83 | #ifndef __ASSEMBLY__ | ||
84 | |||
85 | /* | ||
86 | * This struct defines the way the registers are stored on the | ||
87 | * kernel stack during a system call or other kernel entry. | ||
88 | */ | ||
89 | struct pt_regs { | ||
90 | unsigned long pc; /* 4 */ | ||
91 | unsigned long ps; /* 8 */ | ||
92 | unsigned long depc; /* 12 */ | ||
93 | unsigned long exccause; /* 16 */ | ||
94 | unsigned long excvaddr; /* 20 */ | ||
95 | unsigned long debugcause; /* 24 */ | ||
96 | unsigned long wmask; /* 28 */ | ||
97 | unsigned long lbeg; /* 32 */ | ||
98 | unsigned long lend; /* 36 */ | ||
99 | unsigned long lcount; /* 40 */ | ||
100 | unsigned long sar; /* 44 */ | ||
101 | unsigned long windowbase; /* 48 */ | ||
102 | unsigned long windowstart; /* 52 */ | ||
103 | unsigned long syscall; /* 56 */ | ||
104 | int reserved[2]; /* 64 */ | ||
105 | |||
106 | /* Make sure the areg field is 16 bytes aligned. */ | ||
107 | int align[0] __attribute__ ((aligned(16))); | ||
108 | |||
109 | /* current register frame. | ||
110 | * Note: The ESF for kernel exceptions ends after 16 registers! | ||
111 | */ | ||
112 | unsigned long areg[16]; /* 128 (64) */ | ||
113 | }; | ||
114 | |||
115 | #ifdef __KERNEL__ | ||
116 | # define xtensa_pt_regs(tsk) ((struct pt_regs*) \ | ||
117 | (((long)(tsk)->thread_info + KERNEL_STACK_SIZE - (XCHAL_NUM_AREGS-16)*4)) - 1) | ||
118 | # define user_mode(regs) (((regs)->ps & 0x00000020)!=0) | ||
119 | # define instruction_pointer(regs) ((regs)->pc) | ||
120 | extern void show_regs(struct pt_regs *); | ||
121 | |||
122 | # ifndef CONFIG_SMP | ||
123 | # define profile_pc(regs) instruction_pointer(regs) | ||
124 | # endif | ||
125 | #endif /* __KERNEL__ */ | ||
126 | |||
127 | #else /* __ASSEMBLY__ */ | ||
128 | |||
129 | #ifdef __KERNEL__ | ||
130 | # include <asm/offsets.h> | ||
131 | #define PT_REGS_OFFSET (KERNEL_STACK_SIZE - PT_USER_SIZE) | ||
132 | #endif | ||
133 | |||
134 | #endif /* !__ASSEMBLY__ */ | ||
135 | #endif /* _XTENSA_PTRACE_H */ | ||