blob: 4c9359477ded6d9e23278844d1bf7afa1f8ee333 [file] [log] [blame]
Vineet Gupta3be80aa2013-01-18 15:12:17 +05301/*
2 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * Amit Bhor, Sameer Dhavale: Codito Technologies 2004
9 */
10
11#ifndef __ASM_ARC_PTRACE_H
12#define __ASM_ARC_PTRACE_H
13
14#ifdef __KERNEL__
15
16#ifndef __ASSEMBLY__
17
18/* THE pt_regs: Defines how regs are saved during entry into kernel */
19
20struct pt_regs {
21 /*
22 * 1 word gutter after reg-file has been saved
23 * Technically not needed, Since SP always points to a "full" location
24 * (vs. "empty"). But pt_regs is shared with tools....
25 */
26 long res;
27
28 /* Real registers */
29 long bta; /* bta_l1, bta_l2, erbta */
30 long lp_start;
31 long lp_end;
32 long lp_count;
33 long status32; /* status32_l1, status32_l2, erstatus */
34 long ret; /* ilink1, ilink2 or eret */
35 long blink;
36 long fp;
37 long r26; /* gp */
38 long r12;
39 long r11;
40 long r10;
41 long r9;
42 long r8;
43 long r7;
44 long r6;
45 long r5;
46 long r4;
47 long r3;
48 long r2;
49 long r1;
50 long r0;
51 long sp; /* user/kernel sp depending on where we came from */
52 long orig_r0;
53 long orig_r8; /*to distinguish bet excp, sys call, int1 or int2 */
54};
55
56/* Callee saved registers - need to be saved only when you are scheduled out */
57
58struct callee_regs {
59 long res; /* Again this is not needed */
60 long r25;
61 long r24;
62 long r23;
63 long r22;
64 long r21;
65 long r20;
66 long r19;
67 long r18;
68 long r17;
69 long r16;
70 long r15;
71 long r14;
72 long r13;
73};
74
75#define instruction_pointer(regs) ((regs)->ret)
76#define profile_pc(regs) instruction_pointer(regs)
77
78/* return 1 if user mode or 0 if kernel mode */
79#define user_mode(regs) (regs->status32 & STATUS_U_MASK)
80
81#define user_stack_pointer(regs)\
82({ unsigned int sp; \
83 if (user_mode(regs)) \
84 sp = (regs)->sp;\
85 else \
86 sp = -1; \
87 sp; \
88})
Vineet Gupta4adeefe2013-01-18 15:12:18 +053089
90/* return 1 if in syscall, 0 if Intr or Exception */
91#define in_syscall(regs) (((regs->orig_r8) >= 0 && \
92 (regs->orig_r8 <= NR_syscalls)) ? 1 : 0)
93
Vineet Gupta3be80aa2013-01-18 15:12:17 +053094#endif /* !__ASSEMBLY__ */
95
96#endif /* __KERNEL__ */
97
98#ifndef __ASSEMBLY__
99/*
100 * Userspace ABI: Register state needed by
101 * -ptrace (gdbserver)
102 * -sigcontext (SA_SIGNINFO signal frame)
103 *
104 * This is to decouple pt_regs from user-space ABI, to be able to change it
105 * w/o affecting the ABI.
106 * Although the layout (initial padding) is similar to pt_regs to have some
107 * optimizations when copying pt_regs to/from user_regs_struct.
108 *
109 * Also, sigcontext only care about the scratch regs as that is what we really
110 * save/restore for signal handling.
111*/
112struct user_regs_struct {
113
114 struct scratch {
115 long pad;
116 long bta, lp_start, lp_end, lp_count;
117 long status32, ret, blink, fp, gp;
118 long r12, r11, r10, r9, r8, r7, r6, r5, r4, r3, r2, r1, r0;
119 long sp;
120 } scratch;
121 struct callee {
122 long pad;
123 long r25, r24, r23, r22, r21, r20;
124 long r19, r18, r17, r16, r15, r14, r13;
125 } callee;
126 long efa; /* break pt addr, for break points in delay slots */
127 long stop_pc; /* give dbg stop_pc directly after checking orig_r8 */
128};
129#endif /* !__ASSEMBLY__ */
130
131#endif /* __ASM_PTRACE_H */