Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | /* * Copyright (C) 2012 Regents of the University of California * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, version 2. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef _ASM_RISCV_PTRACE_H #define _ASM_RISCV_PTRACE_H #include <uapi/asm/ptrace.h> #include <asm/csr.h> #ifndef __ASSEMBLY__ struct pt_regs { unsigned long sepc; 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; /* Supervisor CSRs */ unsigned long sstatus; unsigned long sbadaddr; unsigned long scause; /* a0 value before the syscall */ unsigned long orig_a0; }; #ifdef CONFIG_64BIT #define REG_FMT "%016lx" #else #define REG_FMT "%08lx" #endif #define user_mode(regs) (((regs)->sstatus & SR_SPP) == 0) /* Helpers for working with the instruction pointer */ #define GET_IP(regs) ((regs)->sepc) #define SET_IP(regs, val) (GET_IP(regs) = (val)) static inline unsigned long instruction_pointer(struct pt_regs *regs) { return GET_IP(regs); } static inline void instruction_pointer_set(struct pt_regs *regs, unsigned long val) { SET_IP(regs, val); } #define profile_pc(regs) instruction_pointer(regs) /* Helpers for working with the user stack pointer */ #define GET_USP(regs) ((regs)->sp) #define SET_USP(regs, val) (GET_USP(regs) = (val)) static inline unsigned long user_stack_pointer(struct pt_regs *regs) { return GET_USP(regs); } static inline void user_stack_pointer_set(struct pt_regs *regs, unsigned long val) { SET_USP(regs, val); } /* Helpers for working with the frame pointer */ #define GET_FP(regs) ((regs)->s0) #define SET_FP(regs, val) (GET_FP(regs) = (val)) static inline unsigned long frame_pointer(struct pt_regs *regs) { return GET_FP(regs); } static inline void frame_pointer_set(struct pt_regs *regs, unsigned long val) { SET_FP(regs, val); } #endif /* __ASSEMBLY__ */ #endif /* _ASM_RISCV_PTRACE_H */ |