1  /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2  #ifndef _UAPI_ASMAXP_PTRACE_H
3  #define _UAPI_ASMAXP_PTRACE_H
4  
5  
6  /*
7   * This struct defines the way the registers are stored on the
8   * kernel stack during a system call or other kernel entry
9   *
10   * NOTE! I want to minimize the overhead of system calls, so this
11   * struct has as little information as possible. It does not have
12   *
13   *  - floating point regs: the kernel doesn't change those
14   *  - r9-15: saved by the C compiler
15   *
16   * This makes "fork()" and "exec()" a bit more complex, but should
17   * give us low system call latency.
18   */
19  
20  struct pt_regs {
21  	unsigned long r0;
22  	unsigned long r1;
23  	unsigned long r2;
24  	unsigned long r3;
25  	unsigned long r4;
26  	unsigned long r5;
27  	unsigned long r6;
28  	unsigned long r7;
29  	unsigned long r8;
30  	unsigned long r19;
31  	unsigned long r20;
32  	unsigned long r21;
33  	unsigned long r22;
34  	unsigned long r23;
35  	unsigned long r24;
36  	unsigned long r25;
37  	unsigned long r26;
38  	unsigned long r27;
39  	unsigned long r28;
40  	unsigned long hae;
41  /* JRP - These are the values provided to a0-a2 by PALcode */
42  	unsigned long trap_a0;
43  	unsigned long trap_a1;
44  	unsigned long trap_a2;
45  /* These are saved by PAL-code: */
46  	unsigned long ps;
47  	unsigned long pc;
48  	unsigned long gp;
49  	unsigned long r16;
50  	unsigned long r17;
51  	unsigned long r18;
52  };
53  
54  /*
55   * This is the extended stack used by signal handlers and the context
56   * switcher: it's pushed after the normal "struct pt_regs".
57   */
58  struct switch_stack {
59  	unsigned long r9;
60  	unsigned long r10;
61  	unsigned long r11;
62  	unsigned long r12;
63  	unsigned long r13;
64  	unsigned long r14;
65  	unsigned long r15;
66  	unsigned long r26;
67  #ifndef __KERNEL__
68  	unsigned long fp[32];	/* fp[31] is fpcr */
69  #endif
70  };
71  
72  
73  #endif /* _UAPI_ASMAXP_PTRACE_H */
74