1 /* SPDX-License-Identifier: GPL-2.0 */ 2 // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd. 3 4 #ifndef _CSKY_PTRACE_H 5 #define _CSKY_PTRACE_H 6 7 #ifndef __ASSEMBLY__ 8 9 struct pt_regs { 10 unsigned long tls; 11 unsigned long lr; 12 unsigned long pc; 13 unsigned long sr; 14 unsigned long usp; 15 16 /* 17 * a0, a1, a2, a3: 18 * abiv1: r2, r3, r4, r5 19 * abiv2: r0, r1, r2, r3 20 */ 21 unsigned long orig_a0; 22 unsigned long a0; 23 unsigned long a1; 24 unsigned long a2; 25 unsigned long a3; 26 27 /* 28 * ABIV2: r4 ~ r13 29 * ABIV1: r6 ~ r14, r1 30 */ 31 unsigned long regs[10]; 32 33 #if defined(__CSKYABIV2__) 34 /* r16 ~ r30 */ 35 unsigned long exregs[15]; 36 37 unsigned long rhi; 38 unsigned long rlo; 39 unsigned long pad; /* reserved */ 40 #endif 41 }; 42 43 struct user_fp { 44 unsigned long vr[96]; 45 unsigned long fcr; 46 unsigned long fesr; 47 unsigned long fid; 48 unsigned long reserved; 49 }; 50 51 /* 52 * Switch stack for switch_to after push pt_regs. 53 * 54 * ABI_CSKYV2: r4 ~ r11, r15 ~ r17, r26 ~ r30; 55 * ABI_CSKYV1: r8 ~ r14, r15; 56 */ 57 struct switch_stack { 58 #if defined(__CSKYABIV2__) 59 unsigned long r4; 60 unsigned long r5; 61 unsigned long r6; 62 unsigned long r7; 63 unsigned long r8; 64 unsigned long r9; 65 unsigned long r10; 66 unsigned long r11; 67 #else 68 unsigned long r8; 69 unsigned long r9; 70 unsigned long r10; 71 unsigned long r11; 72 unsigned long r12; 73 unsigned long r13; 74 unsigned long r14; 75 #endif 76 unsigned long r15; 77 #if defined(__CSKYABIV2__) 78 unsigned long r16; 79 unsigned long r17; 80 unsigned long r26; 81 unsigned long r27; 82 unsigned long r28; 83 unsigned long r29; 84 unsigned long r30; 85 #endif 86 }; 87 88 #ifdef __KERNEL__ 89 90 #define PS_S 0x80000000 /* Supervisor Mode */ 91 92 #define arch_has_single_step() (1) 93 #define current_pt_regs() \ 94 ({ (struct pt_regs *)((char *)current_thread_info() + THREAD_SIZE) - 1; }) 95 96 #define user_stack_pointer(regs) ((regs)->usp) 97 98 #define user_mode(regs) (!((regs)->sr & PS_S)) 99 #define instruction_pointer(regs) ((regs)->pc) 100 #define profile_pc(regs) instruction_pointer(regs) 101 102 #endif /* __KERNEL__ */ 103 #endif /* __ASSEMBLY__ */ 104 #endif /* _CSKY_PTRACE_H */ 105