This is an automated email from Gerrit.

"Ian Thompson <ia...@cadence.com>" just uploaded a new patch set to Gerrit, 
which you can find at https://review.openocd.org/c/openocd/+/7103

-- gerrit

commit d23fdefab4952b33fafd57e35958fbe0780e8a43
Author: Ian Thompson <ia...@cadence.com>
Date:   Mon Aug 1 15:47:52 2022 -0700

    server: support sparse register maps
    
    Add additional error handling for targets where gaps may exist in reg_list[]
    
    Signed-off-by: Ian Thompson <ia...@cadence.com>
    Change-Id: I65232429e2de08f5d54eeca53aea0db8ce2b58af

diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c
index 2e6c7304dd..3e8f96e237 100644
--- a/src/server/gdb_server.c
+++ b/src/server/gdb_server.c
@@ -1323,6 +1323,8 @@ static int gdb_set_registers_packet(struct connection 
*connection,
        packet_p = packet;
        for (i = 0; i < reg_list_size; i++) {
                uint8_t *bin_buf;
+               if (!reg_list[i] || !reg_list[i]->exist)
+                       continue;
                int chars = (DIV_ROUND_UP(reg_list[i]->size, 8) * 2);
 
                if (packet_p + chars > packet + packet_size)
@@ -1375,7 +1377,7 @@ static int gdb_get_register_packet(struct connection 
*connection,
        if (retval != ERROR_OK)
                return gdb_error(connection, retval);
 
-       if (reg_list_size <= reg_num) {
+       if ((reg_list_size <= reg_num) || !reg_list[reg_num]) {
                LOG_ERROR("gdb requested a non-existing register (reg_num=%d)", 
reg_num);
                return ERROR_SERVER_REMOTE_CLOSED;
        }
@@ -1437,7 +1439,7 @@ static int gdb_set_register_packet(struct connection 
*connection,
                return gdb_error(connection, retval);
        }
 
-       if (reg_list_size <= reg_num) {
+       if ((reg_list_size <= reg_num) || !reg_list[reg_num]) {
                LOG_ERROR("gdb requested a non-existing register (reg_num=%d)", 
reg_num);
                free(bin_buf);
                free(reg_list);

-- 

Reply via email to