|
From: openocd-gerrit <ope...@us...> - 2022-12-03 09:26:44
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Main OpenOCD repository".
The branch, master has been updated
via 4fe3997294e24d9a7bb41290088d6410f7ba1eca (commit)
via a9d74285358b2e2c8adc822b6151e9e548920c64 (commit)
from 3ea1bfce4faf656d0506c194084807f1e498abff (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 4fe3997294e24d9a7bb41290088d6410f7ba1eca
Author: Koudai Iwahori <ko...@go...>
Date: Fri Nov 18 06:18:17 2022 -0800
hwthread: Restore current_threadid in hwthread_update_threads
When OpenOCD receives a step-execution command from GDB and the target
is configured as rtos=hwthread, OpenOCD reconstructs the thread-info.
However, OpenOCD does not restore the thread id which is currently
selected by GDB. Due to this issue, OpenOCD sends the information of
wrong thread to GDB after the step execution.
This commit fixes the above issue by adding a code to save/restore the
thread id selected by GDB.
Signed-off-by: Koudai Iwahori <ko...@go...>
Change-Id: I761a1141c04d48f1290e4f09baa7c7024f86f36a
Reviewed-on: https://review.openocd.org/c/openocd/+/7358
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/src/rtos/hwthread.c b/src/rtos/hwthread.c
index 1540168c3..03c4d8550 100644
--- a/src/rtos/hwthread.c
+++ b/src/rtos/hwthread.c
@@ -82,6 +82,7 @@ static int hwthread_update_threads(struct rtos *rtos)
struct target_list *head;
struct target *target;
int64_t current_thread = 0;
+ int64_t current_threadid = rtos->current_threadid; /* thread selected by GDB */
enum target_debug_reason current_reason = DBG_REASON_UNDEFINED;
if (!rtos)
@@ -105,6 +106,15 @@ static int hwthread_update_threads(struct rtos *rtos)
} else
thread_list_size = 1;
+ /* restore the threadid which is currently selected by GDB
+ * because rtos_free_threadlist() wipes out it
+ * (GDB thread id is 1-based indexing) */
+ if (current_threadid <= thread_list_size)
+ rtos->current_threadid = current_threadid;
+ else
+ LOG_WARNING("SMP node change, disconnect GDB from core/thread %" PRId64,
+ current_threadid);
+
/* create space for new thread details */
rtos->thread_details = malloc(sizeof(struct thread_detail) * thread_list_size);
commit a9d74285358b2e2c8adc822b6151e9e548920c64
Author: Koudai Iwahori <ko...@go...>
Date: Fri Nov 18 01:23:43 2022 -0800
hwthread: Add register validity check in get_thread_reg_list
When OpenOCD receives 'g' packet (read general registers) from GDB and
target is configured as rtos=hwthread, hwthread_get_thread_reg_list is
called. However, it does not check if the register valid or not. Due to
this issue, OpenOCD returns invalid register values to GDB.
This commit adds a validity check to hwthread_get_thread_reg_list. If
the register is not valid, it tries to read the register from the
target.
Signed-off-by: Koudai Iwahori <ko...@go...>
Change-Id: Iad6424b62124271ec411b1dfc044b57dfc460280
Reviewed-on: https://review.openocd.org/c/openocd/+/7357
Tested-by: jenkins
Reviewed-by: Antonio Borneo <bor...@gm...>
diff --git a/src/rtos/hwthread.c b/src/rtos/hwthread.c
index 50e7bae51..1540168c3 100644
--- a/src/rtos/hwthread.c
+++ b/src/rtos/hwthread.c
@@ -255,6 +255,15 @@ static int hwthread_get_thread_reg_list(struct rtos *rtos, int64_t thread_id,
for (int i = 0; i < reg_list_size; i++) {
if (!reg_list[i] || reg_list[i]->exist == false || reg_list[i]->hidden)
continue;
+ if (!reg_list[i]->valid) {
+ retval = reg_list[i]->type->get(reg_list[i]);
+ if (retval != ERROR_OK) {
+ LOG_ERROR("Couldn't get register %s.", reg_list[i]->name);
+ free(reg_list);
+ free(*rtos_reg_list);
+ return retval;
+ }
+ }
(*rtos_reg_list)[j].number = reg_list[i]->number;
(*rtos_reg_list)[j].size = reg_list[i]->size;
memcpy((*rtos_reg_list)[j].value, reg_list[i]->value,
-----------------------------------------------------------------------
Summary of changes:
src/rtos/hwthread.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
hooks/post-receive
--
Main OpenOCD repository
|