armv4_5_target->core_state = ARMV4_5_STATE_ARM;
}
}
+
+ if (armv4_5_target->core_mode != (value & 0x1f))
+ {
+ DEBUG("changing ARM core mode to '%s'", armv4_5_mode_strings[armv4_5_mode_to_number(value & 0x1f)]);
+ armv4_5_target->core_mode = value & 0x1f;
+ armv4_5_target->write_core_reg(target, 16, ARMV4_5_MODE_ANY, value);
+ }
}
buf_set_u32(reg->value, 0, 32, value);
int num_regs = 37;
reg_cache_t *cache = malloc(sizeof(reg_cache_t));
reg_t *reg_list = malloc(sizeof(reg_t) * num_regs);
- armv4_5_core_reg_t *arch_info = malloc(sizeof(reg_t) * num_regs);
+ armv4_5_core_reg_t *arch_info = malloc(sizeof(armv4_5_core_reg_t) * num_regs);
int i;
cache->name = "arm v4/5 registers";
for (i = 0; i < count; i++)
{
target_read_u32(target, address, &opcode);
- evaluate_opcode(opcode, address, &cur_instruction);
+ arm_evaluate_opcode(opcode, address, &cur_instruction);
command_print(cmd_ctx, "%s", cur_instruction.text);
address += (thumb) ? 2 : 4;
}
}
}
+ if ((retval != ERROR_TARGET_TIMEOUT) &&
+ (buf_get_u32(armv4_5->core_cache->reg_list[15].value, 0, 32) != exit_point))
+ {
+ WARNING("target reentered debug state, but not at the desired exit point: 0x%4.4x",
+ buf_get_u32(armv4_5->core_cache->reg_list[15].value, 0, 32));
+ }
+
breakpoint_remove(target, exit_point);
for (i = 0; i < num_mem_params; i++)
for (i = 0; i <= 16; i++)
{
- DEBUG("restoring register %s with value 0x%8.8x", ARMV4_5_CORE_REG_MODE(armv4_5->core_cache, armv4_5_algorithm_info->core_mode, i).name, buf_get_u32(ARMV4_5_CORE_REG_MODE(armv4_5->core_cache, armv4_5_algorithm_info->core_mode, i).value, 0, 32));
+ DEBUG("restoring register %s with value 0x%8.8x", ARMV4_5_CORE_REG_MODE(armv4_5->core_cache, armv4_5_algorithm_info->core_mode, i).name, context[i]);
buf_set_u32(ARMV4_5_CORE_REG_MODE(armv4_5->core_cache, armv4_5_algorithm_info->core_mode, i).value, 0, 32, context[i]);
ARMV4_5_CORE_REG_MODE(armv4_5->core_cache, armv4_5_algorithm_info->core_mode, i).valid = 1;
ARMV4_5_CORE_REG_MODE(armv4_5->core_cache, armv4_5_algorithm_info->core_mode, i).dirty = 1;