This is an automated email from Gerrit.

"Koudai Iwahori <kou...@google.com>" just uploaded a new patch set to Gerrit, 
which you can find at https://review.openocd.org/c/openocd/+/7357

-- gerrit

commit 8b1a6a67535241397e1b52cfbff948131f99ed02
Author: Koudai Iwahori <kou...@google.com>
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 <kou...@google.com>
    Change-Id: Iad6424b62124271ec411b1dfc044b57dfc460280

diff --git a/src/rtos/hwthread.c b/src/rtos/hwthread.c
index 50e7bae51b..1540168c30 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,

-- 

Reply via email to