summaryrefslogtreecommitdiff
path: root/src/target/arm_simulator.c
diff options
context:
space:
mode:
authorntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-01-11 20:38:43 +0000
committerntfreak <ntfreak@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-01-11 20:38:43 +0000
commit13eac429e1b2b6b9061a58c05dc7e67415d5ad0e (patch)
tree5425742318acae7903dd454fb3d3d8b56e69081a /src/target/arm_simulator.c
parent5e9a5c0f28c7a61ee3c2af51ccb1ee9e2c4f89b3 (diff)
downloadopenocd+libswd-13eac429e1b2b6b9061a58c05dc7e67415d5ad0e.tar.gz
openocd+libswd-13eac429e1b2b6b9061a58c05dc7e67415d5ad0e.tar.bz2
openocd+libswd-13eac429e1b2b6b9061a58c05dc7e67415d5ad0e.tar.xz
openocd+libswd-13eac429e1b2b6b9061a58c05dc7e67415d5ad0e.zip
- debug handler file not closed - (thanks to oyvind harboe for the patch)
- arm_simulate_step called incorrect arm_evaluate_opcode when in thumb mode git-svn-id: svn://svn.berlios.de/openocd/trunk@254 b42882b7-edfa-0310-969c-e2dbd0fdcd60
Diffstat (limited to 'src/target/arm_simulator.c')
-rw-r--r--src/target/arm_simulator.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/target/arm_simulator.c b/src/target/arm_simulator.c
index 561b14f8..4ed05586 100644
--- a/src/target/arm_simulator.c
+++ b/src/target/arm_simulator.c
@@ -269,13 +269,14 @@ int thumb_pass_branch_condition(u32 cpsr, u16 opcode)
int arm_simulate_step(target_t *target, u32 *dry_run_pc)
{
armv4_5_common_t *armv4_5 = target->arch_info;
- u32 opcode;
u32 current_pc = buf_get_u32(armv4_5->core_cache->reg_list[15].value, 0, 32);
arm_instruction_t instruction;
int instruction_size;
if (armv4_5->core_state == ARMV4_5_STATE_ARM)
{
+ u32 opcode;
+
/* get current instruction, and identify it */
target_read_u32(target, current_pc, &opcode);
arm_evaluate_opcode(opcode, current_pc, &instruction);
@@ -298,8 +299,10 @@ int arm_simulate_step(target_t *target, u32 *dry_run_pc)
}
else
{
- target_read_u32(target, current_pc, &opcode);
- arm_evaluate_opcode(opcode, current_pc, &instruction);
+ u16 opcode;
+
+ target_read_u16(target, current_pc, &opcode);
+ thumb_evaluate_opcode(opcode, current_pc, &instruction);
instruction_size = 2;
/* check condition code (only for branch instructions) */