FreeRTOS: Fix current thread ID when no threads are active
authorFrank Dischner <frank.dischner@gmail.com>
Mon, 18 Apr 2022 02:12:39 +0000 (21:12 -0500)
committerTomas Vanek <vanekt@fbl.cz>
Mon, 8 Aug 2022 20:47:52 +0000 (20:47 +0000)
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>
src/rtos/FreeRTOS.c

index 499759ab3e687913aa0f37c83d0c3124e157c69b..5f779ef70cf30636f27c48db5ab51f8abb669cc9 100644 (file)
@@ -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));