Bootstrap

RISC-V通用寄存器

riscv通用寄存器

寄存器调用名字用途
x0zero常数 0
x1ra返回地址
x2sp栈指针
x3gp全局指针
x4tp线程指针
x5-x7t0-t2临时存储
x8s0/fp保存用寄存器/帧指针(配合栈指针界定一个函数的栈)
x9s1保存用寄存器
x10-x11a0-a1函数参数/返回值
x12-x17a2-a7函数参数
x18-x27s2-s11保存用寄存器
x28-x31t3-t6临时存储
f0-f7ft0-ft7浮点临时存储
f8-f9fs0-fs1浮点保存用寄存器
f10-f11fa0-fa1浮点函数参数/返回值
f12-f17fa2-fa7浮点函数参数
f18-f27fs2-fs11浮点保存用寄存器
f28-f31ft8-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;
};
;