From 3865c411eebf01192ee347a1bd5c201c97ed23a6 Mon Sep 17 00:00:00 2001 From: Frank Dischner Date: Sun, 17 Apr 2022 21:12:39 -0500 Subject: [PATCH] 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 Change-Id: I694509a0e01df089429b20ff1b879fc0592b532d Reviewed-on: https://review.openocd.org/c/openocd/+/6934 Tested-by: jenkins Reviewed-by: Asier Llano Reviewed-by: Tomas Vanek --- src/rtos/FreeRTOS.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rtos/FreeRTOS.c b/src/rtos/FreeRTOS.c index 499759ab3..5f779ef70 100644 --- a/src/rtos/FreeRTOS.c +++ b/src/rtos/FreeRTOS.c @@ -207,7 +207,8 @@ static int freertos_update_threads(struct rtos *rtos) LOG_ERROR("Error allocating memory for %d threads", thread_list_size); 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->extra_info_str = NULL; rtos->thread_details->thread_name_str = malloc(sizeof(tmp_str));