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