mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
Similar to the recent change to expand "LP" to "branch landing pad", let's expand "SS" in the ptrace uapi macros to "shadow stack" as well. This aligns with the existing prctl() arguments, which use the expanded "shadow stack" names, rather than just the abbreviation. Link: https://lore.kernel.org/linux-riscv/CAHk-=whhSLGZAx3N5jJpb4GLFDqH_QvS07D+6BnkPWmCEzTAgw@mail.gmail.com/ Cc: Deepak Gupta <debug@rivosinc.com> Signed-off-by: Paul Walmsley <pjw@kernel.org>
170 lines
4.0 KiB
C
170 lines
4.0 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
|
|
/*
|
|
* Copyright (C) 2012 Regents of the University of California
|
|
*/
|
|
|
|
#ifndef _UAPI_ASM_RISCV_PTRACE_H
|
|
#define _UAPI_ASM_RISCV_PTRACE_H
|
|
|
|
#ifndef __ASSEMBLER__
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/const.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)
|
|
|
|
struct __sc_riscv_cfi_state {
|
|
unsigned long ss_ptr; /* shadow stack pointer */
|
|
};
|
|
|
|
#define PTRACE_CFI_BRANCH_LANDING_PAD_EN_BIT 0
|
|
#define PTRACE_CFI_BRANCH_LANDING_PAD_LOCK_BIT 1
|
|
#define PTRACE_CFI_BRANCH_EXPECTED_LANDING_PAD_BIT 2
|
|
#define PTRACE_CFI_SHADOW_STACK_EN_BIT 3
|
|
#define PTRACE_CFI_SHADOW_STACK_LOCK_BIT 4
|
|
#define PTRACE_CFI_SHADOW_STACK_PTR_BIT 5
|
|
|
|
#define PTRACE_CFI_BRANCH_LANDING_PAD_EN_STATE _BITUL(PTRACE_CFI_BRANCH_LANDING_PAD_EN_BIT)
|
|
#define PTRACE_CFI_BRANCH_LANDING_PAD_LOCK_STATE \
|
|
_BITUL(PTRACE_CFI_BRANCH_LANDING_PAD_LOCK_BIT)
|
|
#define PTRACE_CFI_BRANCH_EXPECTED_LANDING_PAD_STATE \
|
|
_BITUL(PTRACE_CFI_BRANCH_EXPECTED_LANDING_PAD_BIT)
|
|
#define PTRACE_CFI_SHADOW_STACK_EN_STATE _BITUL(PTRACE_CFI_SHADOW_STACK_EN_BIT)
|
|
#define PTRACE_CFI_SHADOW_STACK_LOCK_STATE _BITUL(PTRACE_CFI_SHADOW_STACK_LOCK_BIT)
|
|
#define PTRACE_CFI_SHADOW_STACK_PTR_STATE _BITUL(PTRACE_CFI_SHADOW_STACK_PTR_BIT)
|
|
|
|
#define PTRACE_CFI_STATE_INVALID_MASK ~(PTRACE_CFI_BRANCH_LANDING_PAD_EN_STATE | \
|
|
PTRACE_CFI_BRANCH_LANDING_PAD_LOCK_STATE | \
|
|
PTRACE_CFI_BRANCH_EXPECTED_LANDING_PAD_STATE | \
|
|
PTRACE_CFI_SHADOW_STACK_EN_STATE | \
|
|
PTRACE_CFI_SHADOW_STACK_LOCK_STATE | \
|
|
PTRACE_CFI_SHADOW_STACK_PTR_STATE)
|
|
|
|
struct __cfi_status {
|
|
__u64 cfi_state;
|
|
};
|
|
|
|
struct user_cfi_state {
|
|
struct __cfi_status cfi_status;
|
|
__u64 shstk_ptr;
|
|
};
|
|
|
|
#endif /* __ASSEMBLER__ */
|
|
|
|
#endif /* _UAPI_ASM_RISCV_PTRACE_H */
|