gdb_server: check target examined while combining reg list
[fw/openocd] / src / server / gdb_server.c
index f8a1aac83ac2a9af4bfd35c4040b0a551e5a1de8..4dee7e8642d7fff719c72ec717de5ea277dcef4a 100644 (file)
@@ -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,