Centralize error handling for buggy register handling
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Mon, 6 Oct 2008 12:09:27 +0000 (12:09 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Mon, 6 Oct 2008 12:09:27 +0000 (12:09 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@1019 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/server/gdb_server.c
src/target/register.c
src/target/target.c

index b5a35f58ac875fd19e08fdeeed6013217041cddb..851777a9c4f3a0b937cb43906a8080b34b0c2c62 100644 (file)
@@ -936,11 +936,7 @@ int gdb_set_registers_packet(connection_t *connection, target_t *target, char *p
 
                /* get register arch_type, and call set method */
                arch_type = register_get_arch_type(reg_list[i]->arch_type);
-               if (arch_type == NULL)
-               {
-                       LOG_ERROR("BUG: encountered unregistered arch type");
-                       exit(-1);
-               }
+
                arch_type->set(reg_list[i], bin_buf);
 
                /* advance packet pointer */
@@ -1033,11 +1029,6 @@ int gdb_set_register_packet(connection_t *connection, target_t *target, char *pa
 
        /* get register arch_type, and call set method */
        arch_type = register_get_arch_type(reg_list[reg_num]->arch_type);
-       if (arch_type == NULL)
-       {
-               LOG_ERROR("BUG: encountered unregistered arch type");
-               exit(-1);
-       }
        arch_type->set(reg_list[reg_num], bin_buf);
 
        gdb_put_packet(connection, "OK", 2);
index 2adf73e7590e601f0c6d47cbf62c94f3a05be20c..1a8f6ddd3a038ce49cfdd08ca13a85c46cc82065 100644 (file)
@@ -35,7 +35,7 @@ reg_t* register_get_by_name(reg_cache_t *first, char *name, int search_all)
 {
        int i;
        reg_cache_t *cache = first;
-       
+
        while (cache)
        {
                for (i = 0; i < cache->num_regs; i++)
@@ -43,26 +43,26 @@ reg_t* register_get_by_name(reg_cache_t *first, char *name, int search_all)
                        if (strcmp(cache->reg_list[i].name, name) == 0)
                                return &(cache->reg_list[i]);
                }
-               
+
                if (search_all)
                        cache = cache->next;
                else
                        break;
        }
-       
+
        return NULL;
 }
 
 reg_cache_t** register_get_last_cache_p(reg_cache_t **first)
 {
        reg_cache_t **cache_p = first;
-       
+
        if (*cache_p)
                while (*cache_p)
                        cache_p = &((*cache_p)->next);
        else
                return first;
-       
+
        return cache_p;
 }
 
@@ -70,7 +70,7 @@ int register_reg_arch_type(int (*get)(reg_t *reg), int (*set)(reg_t *reg, u8 *bu
 {
        reg_arch_type_t** arch_type_p = &reg_arch_types;
        int id = 0;
-       
+
        if (*arch_type_p)
        {
                while (*arch_type_p)
@@ -79,26 +79,27 @@ int register_reg_arch_type(int (*get)(reg_t *reg), int (*set)(reg_t *reg, u8 *bu
                        arch_type_p = &((*arch_type_p)->next);
                }
        }
-       
+
        (*arch_type_p) = malloc(sizeof(reg_arch_type_t));
        (*arch_type_p)->id = id + 1;
        (*arch_type_p)->set = set;
        (*arch_type_p)->get = get;
        (*arch_type_p)->next = NULL;
-                       
+
        return id + 1;
 }
 
 reg_arch_type_t* register_get_arch_type(int id)
 {
        reg_arch_type_t *arch_type = reg_arch_types;
-       
+
        while (arch_type)
        {
                if (arch_type->id == id)
                        return arch_type;
                arch_type = arch_type->next;
        }
-       
+       LOG_ERROR("BUG: encountered unregistered arch type 0x%08x", id);
+       exit(-1);
        return NULL;
 }
index 3426b23e4761086d5fae8f170afe25cfae2adb57..f530eb31334877a4c333db8b67bdcc2d79946232 100644 (file)
@@ -1212,7 +1212,7 @@ int target_checksum_memory(struct target_s *target, u32 address, u32 size, u32*
        }
 
        if ((retval = target->type->checksum_memory(target, address,
-               size, &checksum)) == ERROR_TARGET_RESOURCE_NOT_AVAILABLE)
+               size, &checksum)) != ERROR_OK)
        {
                buffer = malloc(size);
                if (buffer == NULL)
@@ -1625,11 +1625,6 @@ int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char **args
                if (reg->valid == 0)
                {
                        reg_arch_type_t *arch_type = register_get_arch_type(reg->arch_type);
-                       if (arch_type == NULL)
-                       {
-                               LOG_ERROR("BUG: encountered unregistered arch type");
-                               return ERROR_OK;
-                       }
                        arch_type->get(reg);
                }
                value = buf_to_str(reg->value, reg->size, 16);
@@ -1645,12 +1640,6 @@ int handle_reg_command(struct command_context_s *cmd_ctx, char *cmd, char **args
                str_to_buf(args[1], strlen(args[1]), buf, reg->size, 0);
 
                reg_arch_type_t *arch_type = register_get_arch_type(reg->arch_type);
-               if (arch_type == NULL)
-               {
-                       LOG_ERROR("BUG: encountered unregistered arch type");
-                       return ERROR_OK;
-               }
-
                arch_type->set(reg, buf);
 
                value = buf_to_str(reg->value, reg->size, 16);

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)