This is an automated email from Gerrit.

"Antonio Borneo <borneo.anto...@gmail.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/6853

-- gerrit

commit 7b81bf1e1616b6b164a792e42640d35225f81efe
Author: Antonio Borneo <borneo.anto...@gmail.com>
Date:   Sat Feb 19 16:56:42 2022 +0100

    gdb_server: check target examined while combining reg list
    
    Commit 6541233aa78d ("Combine register lists of smp targets.")
    assumes that all the targets in the SMP cluster are already
    examined and unconditionally call target_get_gdb_reg_list_noread()
    that will in turn return error if the target is not examined yet.
    
    Skip targets not examined yet.
    Add an additional check in case the register list cannot be built,
    e.g. because no target in the SMP cluster is examined. This should
    never happen, but it's better to play safe.
    
    Change-Id: I8609815c3d5144790fb05a870cb0c931540aef8a
    Fixes: 6541233aa78d ("Combine register lists of smp targets.")
    Reported-by: Michele Bisogno <michele.bisogno...@renesas.com>
    Signed-off-by: Antonio Borneo <borneo.anto...@gmail.com>

diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c
index f8a1aac83..4dee7e864 100644
--- a/src/server/gdb_server.c
+++ b/src/server/gdb_server.c
@@ -2281,6 +2281,9 @@ static int smp_reg_list_noread(struct target *target,
 
        struct target_list *head;
        foreach_smp_target(head, target->smp_targets) {
+               if (!target_was_examined(head->target))
+                       continue;
+
                struct reg **reg_list = NULL;
                int reg_list_size;
                int result = target_get_gdb_reg_list_noread(head->target, 
&reg_list,
@@ -2329,8 +2332,17 @@ static int smp_reg_list_noread(struct target *target,
                free(reg_list);
        }
 
+       if (local_list_size == 0) {
+               LOG_ERROR("Unable to get register list");
+               free(local_list);
+               return ERROR_FAIL;
+       }
+
        /* Now warn the user about any registers that weren't found in every 
target. */
        foreach_smp_target(head, target->smp_targets) {
+               if (!target_was_examined(head->target))
+                       continue;
+
                struct reg **reg_list = NULL;
                int reg_list_size;
                int result = target_get_gdb_reg_list_noread(head->target, 
&reg_list,

-- 

Reply via email to