]> git.sur5r.net Git - openocd/blobdiff - src/target/mips32.c
cortex_m3: use register_commands()
[openocd] / src / target / mips32.c
index 6432a9034353f64a9fc25b056019cf267f626c0c..0b8ebb4a1fd2b768abd9805781f3057e6d06579d 100644 (file)
@@ -27,6 +27,7 @@
 #endif
 
 #include "mips32.h"
+#include "register.h"
 
 
 char* mips32_core_reg_list[] =
@@ -96,11 +97,8 @@ struct reg mips32_gdb_dummy_fp_reg =
        .valid = 1,
        .size = 32,
        .arch_info = NULL,
-       .arch_type = 0,
 };
 
-int mips32_core_reg_arch_type = -1;
-
 int mips32_get_core_reg(struct reg *reg)
 {
        int retval;
@@ -177,21 +175,6 @@ int mips32_write_core_reg(struct target *target, int num)
        return ERROR_OK;
 }
 
-int mips32_invalidate_core_regs(struct target *target)
-{
-       /* get pointers to arch-specific information */
-       struct mips32_common *mips32 = target->arch_info;
-       int i;
-
-       for (i = 0; i < mips32->core_cache->num_regs; i++)
-       {
-               mips32->core_cache->reg_list[i].valid = 0;
-               mips32->core_cache->reg_list[i].dirty = 0;
-       }
-
-       return ERROR_OK;
-}
-
 int mips32_get_gdb_reg_list(struct target *target, struct reg **reg_list[], int *reg_list_size)
 {
        /* get pointers to arch-specific information */
@@ -267,7 +250,7 @@ int mips32_arch_state(struct target *target)
        if (mips32->common_magic != MIPS32_COMMON_MAGIC)
        {
                LOG_ERROR("BUG: called for a non-MIPS32 target");
-               exit(-1);
+               return ERROR_FAIL;
        }
 
        LOG_USER("target halted due to %s, pc: 0x%8.8" PRIx32 "",
@@ -277,6 +260,11 @@ int mips32_arch_state(struct target *target)
        return ERROR_OK;
 }
 
+static const struct reg_arch_type mips32_reg_type = {
+       .get = mips32_get_core_reg,
+       .set = mips32_set_core_reg,
+};
+
 struct reg_cache *mips32_build_reg_cache(struct target *target)
 {
        /* get pointers to arch-specific information */
@@ -289,9 +277,6 @@ struct reg_cache *mips32_build_reg_cache(struct target *target)
        struct mips32_core_reg *arch_info = malloc(sizeof(struct mips32_core_reg) * num_regs);
        int i;
 
-       if (mips32_core_reg_arch_type == -1)
-               mips32_core_reg_arch_type = register_reg_arch_type(mips32_get_core_reg, mips32_set_core_reg);
-
        register_init_dummy(&mips32_gdb_dummy_fp_reg);
 
        /* Build the process context cache */
@@ -312,7 +297,7 @@ struct reg_cache *mips32_build_reg_cache(struct target *target)
                reg_list[i].value = calloc(1, 4);
                reg_list[i].dirty = 0;
                reg_list[i].valid = 0;
-               reg_list[i].arch_type = mips32_core_reg_arch_type;
+               reg_list[i].type = &mips32_reg_type;
                reg_list[i].arch_info = &arch_info[i];
        }