/* SPDX-License-Identifier: GPL-2.0 */ // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd. #ifndef _CSKY_PTRACE_H #define _CSKY_PTRACE_H #ifndef __ASSEMBLY__ struct pt_regs { unsigned long tls; unsigned long lr; unsigned long pc; unsigned long sr; unsigned long usp; /* * a0, a1, a2, a3: * abiv1: r2, r3, r4, r5 * abiv2: r0, r1, r2, r3 */ unsigned long orig_a0; unsigned long a0; unsigned long a1; unsigned long a2; unsigned long a3; /* * ABIV2: r4 ~ r13 * ABIV1: r6 ~ r14, r1 */ unsigned long regs[10]; #if defined(__CSKYABIV2__) /* r16 ~ r30 */ unsigned long exregs[15]; unsigned long rhi; unsigned long rlo; unsigned long pad; /* reserved */ #endif }; struct user_fp { unsigned long vr[96]; unsigned long fcr; unsigned long fesr; unsigned long fid; unsigned long reserved; }; /* * Switch stack for switch_to after push pt_regs. * * ABI_CSKYV2: r4 ~ r11, r15 ~ r17, r26 ~ r30; * ABI_CSKYV1: r8 ~ r14, r15; */ struct switch_stack { #if defined(__CSKYABIV2__) unsigned long r4; unsigned long r5; unsigned long r6; unsigned long r7; unsigned long r8; unsigned long r9; unsigned long r10; unsigned long r11; #else unsigned long r8; unsigned long r9; unsigned long r10; unsigned long r11; unsigned long r12; unsigned long r13; unsigned long r14; #endif unsigned long r15; #if defined(__CSKYABIV2__) unsigned long r16; unsigned long r17; unsigned long r26; unsigned long r27; unsigned long r28; unsigned long r29; unsigned long r30; #endif }; #ifdef __KERNEL__ #define PS_S 0x80000000 /* Supervisor Mode */ #define arch_has_single_step() (1) #define current_pt_regs() \ ({ (struct pt_regs *)((char *)current_thread_info() + THREAD_SIZE) - 1; }) #define user_stack_pointer(regs) ((regs)->usp) #define user_mode(regs) (!((regs)->sr & PS_S)) #define instruction_pointer(regs) ((regs)->pc) #define profile_pc(regs) instruction_pointer(regs) #endif /* __KERNEL__ */ #endif /* __ASSEMBLY__ */ #endif /* _CSKY_PTRACE_H */