X-Git-Url: https://review.openocd.org/gitweb?a=blobdiff_plain;f=src%2Ftarget%2Farmv4_5.c;h=e546e404d46c0a0e9422240ac32f0f1d5e9f931f;hb=e2b6de3d66bae70cb08fea17f5b66ee875dbb636;hp=cb5f875813206a62f307b3d46be300ee7bf4be43;hpb=ee793f0fcbd2d7e4ad08e61d242ba178e8909b45;p=openocd.git diff --git a/src/target/armv4_5.c b/src/target/armv4_5.c index cb5f875813..e546e404d4 100644 --- a/src/target/armv4_5.c +++ b/src/target/armv4_5.c @@ -70,11 +70,14 @@ char* armv4_5_core_reg_list[] = "cpsr", "spsr_fiq", "spsr_irq", "spsr_svc", "spsr_abt", "spsr_und" }; -char* armv4_5_mode_strings[] = +char * armv4_5_mode_strings_list[] = { - "User", "FIQ", "IRQ", "Supervisor", "Abort", "Undefined", "System" + "Illegal mode value", "User", "FIQ", "IRQ", "Supervisor", "Abort", "Undefined", "System" }; +/* Hack! Yuk! allow -1 index, which simplifies codepaths elsewhere in the code */ +char** armv4_5_mode_strings = armv4_5_mode_strings_list+1; + char* armv4_5_state_strings[] = { "ARM", "Thumb", "Jazelle" @@ -326,6 +329,9 @@ int handle_armv4_5_reg_command(struct command_context_s *cmd_ctx, char *cmd, cha return ERROR_OK; } + if (armv4_5_mode_to_number(armv4_5->core_mode)==-1) + return ERROR_FAIL; + for (num = 0; num <= 15; num++) { output_len = 0; @@ -438,6 +444,9 @@ int armv4_5_get_gdb_reg_list(target_t *target, reg_t **reg_list[], int *reg_list armv4_5_common_t *armv4_5 = target->arch_info; int i; + if (armv4_5_mode_to_number(armv4_5->core_mode)==-1) + return ERROR_FAIL; + *reg_list_size = 26; *reg_list = malloc(sizeof(reg_t*) * (*reg_list_size)); @@ -482,6 +491,9 @@ int armv4_5_run_algorithm(struct target_s *target, int num_mem_params, mem_param return ERROR_TARGET_NOT_HALTED; } + if (armv4_5_mode_to_number(armv4_5->core_mode)==-1) + return ERROR_FAIL; + for (i = 0; i <= 16; i++) { if (!ARMV4_5_CORE_REG_MODE(armv4_5->core_cache, armv4_5_algorithm_info->core_mode, i).valid)