Hi Tim,

You can check Espressif’s forked repo for multi core, SMP usage 
https://github.com/espressif/openocd-esp32

On 24 Feb 2021, at 00:09, Tim Newsome <[email protected]<mailto:[email protected]>> 
wrote:


[External: This email originated outside Espressif]

Ah, for future reference:
1. in update_threads(), the RTOS should update rtos->current_thread.
2. rtos_get_gdb_reg_list() returns an error if rtos->current_thread != 
target->rtos->current_threadid
3. gdb_get_registers_packet() (and various others), will ask the target for the 
register list instead if rtos_get_gdb_reg_list() returns an error

My problem was that step 1 wasn't happening correctly.

(Is there any chance of all this working when a target has multiple cores, 
configured as SMP?)

Tim

On Tue, Feb 23, 2021 at 11:45 AM Tim Newsome 
<[email protected]<mailto:[email protected]>> wrote:
When using `-rtos freertos` I put a breakpoint inside a FreeRTOS task. I run to 
this breakpoint, and gdb is shown the list of tasks with their names. When gdb 
asks for the registers for each task, freertos.c reads the register values from 
memory, through the task control block. That is correct for tasks that are not 
currently active, because the registers are saved in memory when context 
switching. However, it is not correct for the currently running task. Its 
register values are the ones actually on the target.

I don't see this happening anywhere in the code, but at the same time I don't 
see ARM FreeRTOS users complaining about this behavior. What am I missing? How 
is this supposed to work?

Thank you,
Tim
_______________________________________________
OpenOCD-devel mailing list
[email protected]<mailto:[email protected]>
https://lists.sourceforge.net/lists/listinfo/openocd-devel

_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to