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
This commit is contained in:
parent
d6fae6fe02
commit
ba379aa80e
|
@ -243,11 +243,19 @@ int arm7_9_unset_breakpoint(struct target_s *target, breakpoint_t *breakpoint)
|
||||||
/* restore original instruction (kept in target endianness) */
|
/* restore original instruction (kept in target endianness) */
|
||||||
if (breakpoint->length == 4)
|
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*)¤t_instr);
|
||||||
|
if (current_instr==arm7_9->arm_bkpt)
|
||||||
|
target->type->write_memory(target, breakpoint->address, 4, 1, breakpoint->orig_instr);
|
||||||
}
|
}
|
||||||
else
|
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*)¤t_instr);
|
||||||
|
if (current_instr==arm7_9->thumb_bkpt)
|
||||||
|
target->type->write_memory(target, breakpoint->address, 2, 1, breakpoint->orig_instr);
|
||||||
}
|
}
|
||||||
breakpoint->set = 0;
|
breakpoint->set = 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue