发现Lec06 Isolation & system call entry/exit (Robert)中使用gdb-multiarch只在ecall处打断点不会进入trampoline.S中的uservec,需要在手动在下一条中打断点
解决方法:
(gdb) b *0xe08
Breakpoint 1 at 0xe08
(gdb) c
Continuing.
Thread 1 hit Breakpoint 1, 0x0000000000000e08 in ?? ()
=> 0x0000000000000e08: 73 00 00 00 ecall
(gdb) b *$stvec
Breakpoint 2 at 0x3ffffff000
(gdb) si
Thread 1 hit Breakpoint 2, 0x0000003ffffff000 in ?? ()
=> 0x0000003ffffff000: 73 10 05 14 csrw sscratch,a0
为什么在这里打断点?去回顾以下ecall指令会做的事🤣
(gdb) b *$stvec效果同下
(gdb) p/x $stvec
$1 = 0x3ffffff000
(gdb) b *0x3ffffff000
Breakpoint 3 at 0x3ffffff000