| /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ | 
 | /* | 
 |  * Copyright (C) 2012 Regents of the University of California | 
 |  */ | 
 |  | 
 | #ifndef _ASM_RISCV_PTRACE_H | 
 | #define _ASM_RISCV_PTRACE_H | 
 |  | 
 | #ifndef __ASSEMBLY__ | 
 |  | 
 | #include <linux/types.h> | 
 |  | 
 | #define PTRACE_GETFDPIC		33 | 
 |  | 
 | #define PTRACE_GETFDPIC_EXEC	0 | 
 | #define PTRACE_GETFDPIC_INTERP	1 | 
 |  | 
 | /* | 
 |  * User-mode register state for core dumps, ptrace, sigcontext | 
 |  * | 
 |  * This decouples struct pt_regs from the userspace ABI. | 
 |  * struct user_regs_struct must form a prefix of struct pt_regs. | 
 |  */ | 
 | struct user_regs_struct { | 
 | 	unsigned long pc; | 
 | 	unsigned long ra; | 
 | 	unsigned long sp; | 
 | 	unsigned long gp; | 
 | 	unsigned long tp; | 
 | 	unsigned long t0; | 
 | 	unsigned long t1; | 
 | 	unsigned long t2; | 
 | 	unsigned long s0; | 
 | 	unsigned long s1; | 
 | 	unsigned long a0; | 
 | 	unsigned long a1; | 
 | 	unsigned long a2; | 
 | 	unsigned long a3; | 
 | 	unsigned long a4; | 
 | 	unsigned long a5; | 
 | 	unsigned long a6; | 
 | 	unsigned long a7; | 
 | 	unsigned long s2; | 
 | 	unsigned long s3; | 
 | 	unsigned long s4; | 
 | 	unsigned long s5; | 
 | 	unsigned long s6; | 
 | 	unsigned long s7; | 
 | 	unsigned long s8; | 
 | 	unsigned long s9; | 
 | 	unsigned long s10; | 
 | 	unsigned long s11; | 
 | 	unsigned long t3; | 
 | 	unsigned long t4; | 
 | 	unsigned long t5; | 
 | 	unsigned long t6; | 
 | }; | 
 |  | 
 | struct __riscv_f_ext_state { | 
 | 	__u32 f[32]; | 
 | 	__u32 fcsr; | 
 | }; | 
 |  | 
 | struct __riscv_d_ext_state { | 
 | 	__u64 f[32]; | 
 | 	__u32 fcsr; | 
 | }; | 
 |  | 
 | struct __riscv_q_ext_state { | 
 | 	__u64 f[64] __attribute__((aligned(16))); | 
 | 	__u32 fcsr; | 
 | 	/* | 
 | 	 * Reserved for expansion of sigcontext structure.  Currently zeroed | 
 | 	 * upon signal, and must be zero upon sigreturn. | 
 | 	 */ | 
 | 	__u32 reserved[3]; | 
 | }; | 
 |  | 
 | struct __riscv_ctx_hdr { | 
 | 	__u32 magic; | 
 | 	__u32 size; | 
 | }; | 
 |  | 
 | struct __riscv_extra_ext_header { | 
 | 	__u32 __padding[129] __attribute__((aligned(16))); | 
 | 	/* | 
 | 	 * Reserved for expansion of sigcontext structure.  Currently zeroed | 
 | 	 * upon signal, and must be zero upon sigreturn. | 
 | 	 */ | 
 | 	__u32 reserved; | 
 | 	struct __riscv_ctx_hdr hdr; | 
 | }; | 
 |  | 
 | union __riscv_fp_state { | 
 | 	struct __riscv_f_ext_state f; | 
 | 	struct __riscv_d_ext_state d; | 
 | 	struct __riscv_q_ext_state q; | 
 | }; | 
 |  | 
 | struct __riscv_v_ext_state { | 
 | 	unsigned long vstart; | 
 | 	unsigned long vl; | 
 | 	unsigned long vtype; | 
 | 	unsigned long vcsr; | 
 | 	unsigned long vlenb; | 
 | 	void *datap; | 
 | 	/* | 
 | 	 * In signal handler, datap will be set a correct user stack offset | 
 | 	 * and vector registers will be copied to the address of datap | 
 | 	 * pointer. | 
 | 	 */ | 
 | }; | 
 |  | 
 | struct __riscv_v_regset_state { | 
 | 	unsigned long vstart; | 
 | 	unsigned long vl; | 
 | 	unsigned long vtype; | 
 | 	unsigned long vcsr; | 
 | 	unsigned long vlenb; | 
 | 	char vreg[]; | 
 | }; | 
 |  | 
 | /* | 
 |  * According to spec: The number of bits in a single vector register, | 
 |  * VLEN >= ELEN, which must be a power of 2, and must be no greater than | 
 |  * 2^16 = 65536bits = 8192bytes | 
 |  */ | 
 | #define RISCV_MAX_VLENB (8192) | 
 |  | 
 | #endif /* __ASSEMBLY__ */ | 
 |  | 
 | #endif /* _ASM_RISCV_PTRACE_H */ |