Browse Source

Do not overwrite code when removing software breakpoint if it no longer contains bkpt instruction.

(thanks to oyvind harboe for bug report and test)


git-svn-id: svn://svn.berlios.de/openocd/trunk@214 b42882b7-edfa-0310-969c-e2dbd0fdcd60
tags/v0.1.0
vpalatin 16 years ago
parent
commit
ba379aa80e
1 changed files with 10 additions and 2 deletions
  1. +10
    -2
      src/target/arm7_9_common.c

+ 10
- 2
src/target/arm7_9_common.c View File

@@ -243,11 +243,19 @@ int arm7_9_unset_breakpoint(struct target_s *target, breakpoint_t *breakpoint)
/* restore original instruction (kept in target endianness) */
if (breakpoint->length == 4)
{
target->type->write_memory(target, breakpoint->address, 4, 1, breakpoint->orig_instr);
u32 current_instr;
/* check that user program as not modified breakpoint instruction */
target->type->read_memory(target, breakpoint->address, 4, 1, (u8*)&current_instr);
if (current_instr==arm7_9->arm_bkpt)
target->type->write_memory(target, breakpoint->address, 4, 1, breakpoint->orig_instr);
}
else
{
target->type->write_memory(target, breakpoint->address, 2, 1, breakpoint->orig_instr);
u16 current_instr;
/* check that user program as not modified breakpoint instruction */
target->type->read_memory(target, breakpoint->address, 2, 1, (u8*)&current_instr);
if (current_instr==arm7_9->thumb_bkpt)
target->type->write_memory(target, breakpoint->address, 2, 1, breakpoint->orig_instr);
}
breakpoint->set = 0;
}


Loading…
Cancel
Save