mstatus.mpp
字段切换到主管模式,调用时收到非法指令异常
mret
.我正在测试这个
qemu-system-riscv64
riscv64-softmmu
系统
我最近从QEMU 5.0升级到了6.1。在此升级之前,我的代码工作正常。我在变更日志中看不到任何相关内容。我假设我的代码中存在一个新版本无法容忍的问题。
下面是一个程序集片段,它显示了正在发生的事情(删除了不相关的启动代码):
.setup_hart:
csrw satp, zero # Disable address translation.
li t0, (1 << 11) # Supervisor mode.
csrw mstatus, t0
csrw mie, zero # Disable interrupts.
la sp, __stack_top # Setup stack pointer.
la t0, asm_trap_vector
csrw mtvec, t0
la t0, kernel_main # Jump to kernel_main on trap return.
csrw mepc, t0
la ra, cpu_halt # If we return from main, halt.
mret
如果我设定
姆斯塔特斯。mpp
字段到
0b11
kernel_main
没有任何问题。
riscv_cpu_do_interrupt: hart:0, async:0, cause:0000000000000002, epc:0x000000008000006c, tval:0x0000000000000000, desc=illegal_instruction
mepc
指向
mret
姆斯塔特斯。mpp
我有什么明显的遗漏吗?我的代码似乎与我能在网上找到的几个示例非常相似,例如
https://osblog.stephenmarz.com/ch3.2.html
.任何帮助都将不胜感激。