/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ /* * Author: Hanlu Li * Huacai Chen * * Copyright (C) 2020-2022 Loongson Technology Corporation Limited */ #ifndef _UAPI_ASM_PTRACE_H #define _UAPI_ASM_PTRACE_H #include /* * For PTRACE_{POKE,PEEK}USR. 0 - 31 are GPRs, * 32 is syscall's original ARG0, 33 is PC, 34 is BADVADDR. */ #define GPR_BASE 0 #define GPR_NUM 32 #define GPR_END (GPR_BASE + GPR_NUM - 1) #define ARG0 (GPR_END + 1) #define PC (GPR_END + 2) #define BADVADDR (GPR_END + 3) #define NUM_FPU_REGS 32 struct user_pt_regs { /* Main processor registers. */ unsigned long regs[32]; /* Original syscall arg0. */ unsigned long orig_a0; /* Special CSR registers. */ unsigned long csr_era; unsigned long csr_badv; unsigned long reserved[10]; } __attribute__((aligned(8))); struct user_fp_state { __u64 fpr[32]; __u64 fcc; __u32 fcsr; }; struct user_lsx_state { /* 32 registers, 128 bits width per register. */ __u64 vregs[32*2]; }; struct user_lasx_state { /* 32 registers, 256 bits width per register. */ __u64 vregs[32*4]; }; struct user_lbt_state { __u64 scr[4]; __u32 eflags; __u32 ftop; }; struct user_watch_state { __u64 dbg_info; struct { __u64 addr; __u64 mask; __u32 ctrl; __u32 pad; } dbg_regs[8]; }; struct user_watch_state_v2 { __u64 dbg_info; struct { __u64 addr; __u64 mask; __u32 ctrl; __u32 pad; } dbg_regs[14]; }; #define PTRACE_SYSEMU 0x1f #define PTRACE_SYSEMU_SINGLESTEP 0x20 #endif /* _UAPI_ASM_PTRACE_H */