我正在调试多核RISCV复合系统。我已经通过OpenOCD将GDB附加到目标,并且每个核心/ HART都表示为一个线程。我正在尝试在Hart 2上调试一个小程序。最初,我想将hart 2上的$ pc设置为0x4000006a的新位置。在下面的日志中,您可以看到我从线程1(Hart 0)开始,然后切换到线程2(Hart 1)。
我使用线程套用2 p / x $ pc来获取当前程序计数器的位置,但是随后我尝试线程套用2 set $ pc = 0x4000006a,并且由于某种原因,它将线程1(Hart 0)设置为0x4000006a。 / p>
在多线程环境中使用GDB设置程序计数器的正确方法是什么?
0x0000000000000000 in ?? ()
(gdb) info threads
Id Target Id Frame
* 1 Thread 1 (Name: riscv.cpu0, state: debug-request) 0x0000000000000000 in ?? ()
2 Thread 2 (Name: riscv.cpu1, state: debug-request) 0x0000000040000068 in ?? ()
3 Thread 3 (Name: riscv.cpu2, state: debug-request) 0x0000000000000000 in ?? ()
4 Thread 4 (Name: riscv.cpu3, state: debug-request) 0x0000000000000000 in ?? ()
5 Thread 5 (Name: riscv.cpu4, state: debug-request) 0x0000000000000000 in ?? ()
(gdb) thread apply 2 symbol-file gaj-hello.elf
Thread 2 (Thread 2):
Reading symbols from gaj-hello.elf...
(gdb) info threads
Id Target Id Frame
* 1 Thread 1 (Name: riscv.cpu0, state: debug-request) 0x0000000000000000 in ?? ()
2 Thread 2 (Name: riscv.cpu1, state: debug-request) _start ()
at /opt/SiFive/freedom-e-sdk/freedom-metal/gloss/crt0.S:57
3 Thread 3 (Name: riscv.cpu2, state: debug-request) 0x0000000000000000 in ?? ()
4 Thread 4 (Name: riscv.cpu3, state: debug-request) 0x0000000000000000 in ?? ()
5 Thread 5 (Name: riscv.cpu4, state: debug-request) 0x0000000000000000 in ?? ()
(gdb) p /x $pc
$1 = 0x0
(gdb) thread apply 2 p /x $pc
Thread 2 (Thread 2):
$2 = 0x40000068
(gdb) thread 2
[Switching to thread 2 (Thread 2)]
#0 _start () at /opt/SiFive/freedom-e-sdk/freedom-metal/gloss/crt0.S:57
57 bnez a0, 1b
(gdb) p /x $pc
$3 = 0x40000068
(gdb) thread apply 2 set $pc=0x4000006a
Thread 2 (Thread 2):
(gdb) p /x $pc
$4 = 0x40000068
(gdb) info threads
Id Target Id Frame
1 Thread 1 (Name: riscv.cpu0, state: debug-request) _start ()
at /opt/SiFive/freedom-e-sdk/freedom-metal/gloss/crt0.S:66
* 2 Thread 2 (Name: riscv.cpu1, state: debug-request) _start ()
at /opt/SiFive/freedom-e-sdk/freedom-metal/gloss/crt0.S:57
3 Thread 3 (Name: riscv.cpu2, state: debug-request) 0x0000000000000000 in ?? ()
4 Thread 4 (Name: riscv.cpu3, state: debug-request) 0x0000000000000000 in ?? ()
5 Thread 5 (Name: riscv.cpu4, state: debug-request) 0x0000000000000000 in ?? ()
(gdb)