delve/proctl/threads_linux.go

48 lines
939 B
Go
Raw Normal View History

2015-01-14 02:37:10 +00:00
package proctl
import (
"fmt"
sys "golang.org/x/sys/unix"
)
// Not actually used, but necessary
// to be defined.
type OSSpecificDetails interface{}
func (t *ThreadContext) Halt() error {
if stopped(t.Id) {
return nil
}
err := sys.Tgkill(t.Process.Pid, t.Id, sys.SIGSTOP)
if err != nil {
return fmt.Errorf("Halt err %s %d", err, pid)
}
pid, _, err := wait(th.Id, sys.WNOHANG)
if err != nil {
return fmt.Errorf("wait err %s %d", err, pid)
}
return nil
}
func (t *ThreadContext) cont() error {
return PtraceCont(thread.Id, 0)
}
func (t *ThreadContext) singleStep() error {
err := sys.PtraceSingleStep(t.Id)
if err != nill {
return err
}
_, _, err = wait(thread.Id, 0)
return err
}
func writeMemory(tid int, addr uintptr, data []byte) (int, error) {
return sys.PtracePokeData(tid, addr, data)
}
func readMemory(tid int, addr uintptr, data []byte) (int, error) {
return sys.PtracePeekData(tid, addr, data)
}