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 /* This makes the stack 16-byte aligned as GCC expects */ 46 unsigned long __pad0; 47 /* These are saved by PAL-code: */ 48 unsigned long ps; 49 unsigned long pc; 50 unsigned long gp; 51 unsigned long r16; 52 unsigned long r17; 53 unsigned long r18; 54 }; 55 56 /* 57 * This is the extended stack used by signal handlers and the context 58 * switcher: it's pushed after the normal "struct pt_regs". 59 */ 60 struct switch_stack { 61 unsigned long r9; 62 unsigned long r10; 63 unsigned long r11; 64 unsigned long r12; 65 unsigned long r13; 66 unsigned long r14; 67 unsigned long r15; 68 unsigned long r26; 69 #ifndef __KERNEL__ 70 unsigned long fp[32]; /* fp[31] is fpcr */ 71 #endif 72 }; 73 74 75 #endif /* _UAPI_ASMAXP_PTRACE_H */ 76