From f7632eb5b03dc5e203ccc862da77005bb9b54c1f Mon Sep 17 00:00:00 2001 From: Derek Parker Date: Thu, 30 Apr 2015 19:52:28 -0500 Subject: [PATCH] Restore stack after curG function call --- proctl/threads.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/proctl/threads.go b/proctl/threads.go index d8f326b2..080f36ca 100644 --- a/proctl/threads.go +++ b/proctl/threads.go @@ -93,6 +93,18 @@ func (thread *ThreadContext) CallFn(name string, fn func() error) error { if err = thread.saveRegisters(); err != nil { return err } + + regs, err := thread.Registers() + if err != nil { + return err + } + previousFrame := make([]byte, f.FrameSize) + frameSize := uintptr(regs.SP() + uint64(f.FrameSize)) + if _, err := readMemory(thread, frameSize, previousFrame); err != nil { + return err + } + defer func() { writeMemory(thread, frameSize, previousFrame) }() + if err = thread.SetPC(f.Entry); err != nil { return err }