Fix bug in stepping after hitting BP

This commit is contained in:
Derek Parker 2014-05-29 09:34:37 -05:00
parent bf0d67a9e0
commit fb904cc1aa
2 changed files with 11 additions and 7 deletions

@ -149,13 +149,16 @@ func (dbp *DebuggedProcess) Step() error {
return err
}
bp, ok := dbp.PCtoBP(regs.PC())
bp, ok := dbp.PCtoBP(regs.PC() - 1)
if ok {
err = dbp.restoreInstruction(bp.Addr, bp.OriginalData)
_, err = dbp.Clear(bp.Addr)
if err != nil {
return err
}
// Reset instruction pointer to our restored instruction.
regs.Rip -= 1
syscall.PtraceSetRegs(dbp.Pid, regs)
}
err = dbp.handleResult(syscall.PtraceSingleStep(dbp.Pid))

@ -124,11 +124,12 @@ func TestBreakPoint(t *testing.T) {
sleepytimefunc := p.GoSymTable.LookupFunc("main.sleepytime")
sleepyaddr := sleepytimefunc.Entry
_, err = p.Break(uintptr(sleepyaddr))
bp, err := p.Break(uintptr(sleepyaddr))
if err != nil {
t.Fatal("Break():", err)
}
breakpc := bp.Addr + 1
err = p.Continue()
if err != nil {
t.Fatal("Continue():", err)
@ -140,8 +141,8 @@ func TestBreakPoint(t *testing.T) {
}
pc := regs.PC()
if pc != sleepyaddr+1 {
t.Fatalf("Break not respected:\nPC:%d\nFN:%d\n", pc, sleepyaddr)
if pc != breakpc {
t.Fatalf("Break not respected:\nPC:%d\nFN:%d\n", pc, breakpc)
}
err = p.Step()
@ -155,8 +156,8 @@ func TestBreakPoint(t *testing.T) {
}
pc = regs.PC()
if pc == sleepyaddr {
t.Fatalf("Step not respected:\nPC:%d\nFN:%d\n", pc, sleepyaddr)
if pc == breakpc {
t.Fatalf("Step not respected:\nPC:%d\nFN:%d\n", pc, breakpc)
}
cmd.Process.Kill()