riscv通用寄存器
riscv通用寄存器
寄存器 | 调用名字 | 用途 |
---|---|---|
x0 | zero | 常数 0 |
x1 | ra | 返回地址 |
x2 | sp | 栈指针 |
x3 | gp | 全局指针 |
x4 | tp | 线程指针 |
x5-x7 | t0-t2 | 临时存储 |
x8 | s0/fp | 保存用寄存器/帧指针(配合栈指针界定一个函数的栈) |
x9 | s1 | 保存用寄存器 |
x10-x11 | a0-a1 | 函数参数/返回值 |
x12-x17 | a2-a7 | 函数参数 |
x18-x27 | s2-s11 | 保存用寄存器 |
x28-x31 | t3-t6 | 临时存储 |
f0-f7 | ft0-ft7 | 浮点临时存储 |
f8-f9 | fs0-fs1 | 浮点保存用寄存器 |
f10-f11 | fa0-fa1 | 浮点函数参数/返回值 |
f12-f17 | fa2-fa7 | 浮点函数参数 |
f18-f27 | fs2-fs11 | 浮点保存用寄存器 |
f28-f31 | ft8-ft11 | 浮点临时存储 |
kernel中相关结构体
下面这个结构体是栈内存有寄存器值的结构体
//linux-5.10/arch/riscv/include/asm/ptrace.h
struct pt_regs {
unsigned long epc;
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/Machine CSRs */
unsigned long status;
unsigned long badaddr;
unsigned long cause;
/* a0 value before the syscall */
unsigned long orig_a0;
};