上下文处理
上下文
// kern/trap/trap.h
#ifndef __KERN_TRAP_TRAP_H__
#define __KERN_TRAP_TRAP_H__
#include <defs.h>
struct pushregs {
uintptr_t zero; // Hard-wired zero
uintptr_t ra; // Return address
uintptr_t sp; // Stack pointer
uintptr_t gp; // Global pointer
uintptr_t tp; // Thread pointer
uintptr_t t0; // Temporary
uintptr_t t1; // Temporary
uintptr_t t2; // Temporary
uintptr_t s0; // Saved register/frame pointer
uintptr_t s1; // Saved register
uintptr_t a0; // Function argument/return value
uintptr_t a1; // Function argument/return value
uintptr_t a2; // Function argument
uintptr_t a3; // Function argument
uintptr_t a4; // Function argument
uintptr_t a5; // Function argument
uintptr_t a6; // Function argument
uintptr_t a7; // Function argument
uintptr_t s2; // Saved register
uintptr_t s3; // Saved register
uintptr_t s4; // Saved register
uintptr_t s5; // Saved register
uintptr_t s6; // Saved register
uintptr_t s7; // Saved register
uintptr_t s8; // Saved register
uintptr_t s9; // Saved register
uintptr_t s10; // Saved register
uintptr_t s11; // Saved register
uintptr_t t3; // Temporary
uintptr_t t4; // Temporary
uintptr_t t5; // Temporary
uintptr_t t6; // Temporary
};
struct trapframe {
struct pushregs gpr;
uintptr_t status; //sstatus
uintptr_t epc; //sepc
uintptr_t badvaddr; //sbadvaddr
uintptr_t cause; //scause
};
void trap(struct trapframe *tf);保存上下文
恢复上下文
中断入口
最后更新于