Я отлаживаю многоядерный RISCV комплекс. Я подключил GDB к цели через OpenOCD, и каждое ядро / HART представлено в виде потока. Я пытаюсь отладить небольшую программу на Hart 2. Изначально я хочу установить $ pc на HART 2 на новое место, которое находится в 0x4000006a. В журнале ниже вы можете видеть, что я начинаю с темы 1 (Hart 0), а затем переключаюсь на тему 2 (Hart 1).
Я использую thread apply 2 p / x $ pc, чтобы получить текущее положение счетчика программы, но затем я пытаюсь применить поток, используя 2 set $ pc = 0x4000006a, и по любой причине он устанавливает thread1 (Hart 0) в 0x4000006a.
Как правильно установить счетчик программ с использованием 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)