FreeRTOS: Fix current thread ID when no threads are active

When there are no rtos threads or none are active, a fake thread with
ID 1 is created for the current execution, but the current thread ID was
never set to this new fake ID. This would lead to an incorrect attempt to
read stacked registers for this fake thread. Explicitly setting the
current thread ID to the fake ID ensures that the registers are read from
the core instead of calling freertos_get_thread_reg_list.

Signed-off-by: Frank Dischner <frank.dischner@gmail.com>
Change-Id: I694509a0e01df089429b20ff1b879fc0592b532d
Reviewed-on: https://review.openocd.org/c/openocd/+/6934
Tested-by: jenkins
Reviewed-by: Asier Llano <asierllano@gmail.com>
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
This commit is contained in:
Frank Dischner 2022-04-17 21:12:39 -05:00 committed by Tomas Vanek
parent b5dd6faf8d
commit 3865c411ee
1 changed files with 2 additions and 1 deletions

View File

@ -207,7 +207,8 @@ static int freertos_update_threads(struct rtos *rtos)
LOG_ERROR("Error allocating memory for %d threads", thread_list_size); LOG_ERROR("Error allocating memory for %d threads", thread_list_size);
return ERROR_FAIL; return ERROR_FAIL;
} }
rtos->thread_details->threadid = 1; rtos->current_thread = 1;
rtos->thread_details->threadid = rtos->current_thread;
rtos->thread_details->exists = true; rtos->thread_details->exists = true;
rtos->thread_details->extra_info_str = NULL; rtos->thread_details->extra_info_str = NULL;
rtos->thread_details->thread_name_str = malloc(sizeof(tmp_str)); rtos->thread_details->thread_name_str = malloc(sizeof(tmp_str));