Commit 1068bcab authored by Austin Clements's avatar Austin Clements

Make stop causes pointers so users outside the package can

type switch on them despite their private fields.  Add some
tracing stuff.

R=rsc
APPROVED=rsc
DELTA=18  (7 added, 0 deleted, 11 changed)
OCL=33678
CL=33683
parent 8bbe748b
...@@ -179,11 +179,11 @@ type ThreadCreate struct { ...@@ -179,11 +179,11 @@ type ThreadCreate struct {
thread Thread; thread Thread;
} }
func (c ThreadCreate) NewThread() Thread { func (c *ThreadCreate) NewThread() Thread {
return c.thread; return c.thread;
} }
func (c ThreadCreate) String() string { func (c *ThreadCreate) String() string {
return "thread create"; return "thread create";
} }
...@@ -197,28 +197,28 @@ type ThreadExit struct { ...@@ -197,28 +197,28 @@ type ThreadExit struct {
} }
// Exited returns true if the thread exited normally. // Exited returns true if the thread exited normally.
func (c ThreadExit) Exited() bool { func (c *ThreadExit) Exited() bool {
return c.exitStatus != -1; return c.exitStatus != -1;
} }
// ExitStatus returns the exit status of the thread if it exited // ExitStatus returns the exit status of the thread if it exited
// normally or -1 otherwise. // normally or -1 otherwise.
func (c ThreadExit) ExitStatus() int { func (c *ThreadExit) ExitStatus() int {
return c.exitStatus; return c.exitStatus;
} }
// Signaled returns true if the thread was terminated by a signal. // Signaled returns true if the thread was terminated by a signal.
func (c ThreadExit) Signaled() bool { func (c *ThreadExit) Signaled() bool {
return c.exitStatus == -1; return c.exitStatus == -1;
} }
// StopSignal returns the signal that terminated the thread, or "" if // StopSignal returns the signal that terminated the thread, or "" if
// it was not terminated by a signal. // it was not terminated by a signal.
func (c ThreadExit) StopSignal() string { func (c *ThreadExit) StopSignal() string {
return c.signal; return c.signal;
} }
func (c ThreadExit) String() string { func (c *ThreadExit) String() string {
res := "thread exited "; res := "thread exited ";
switch { switch {
case c.Exited(): case c.Exited():
......
...@@ -33,8 +33,9 @@ import ( ...@@ -33,8 +33,9 @@ import (
// as well as experimentation and examination of gdb's behavior. // as well as experimentation and examination of gdb's behavior.
const ( const (
trace = true; trace = false;
traceIP = false; traceIP = false;
traceMem = false;
) )
/* /*
...@@ -215,11 +216,17 @@ func (e *newThreadError) String() string { ...@@ -215,11 +216,17 @@ func (e *newThreadError) String() string {
func (t *thread) ptracePeekText(addr uintptr, out []byte) (int, os.Error) { func (t *thread) ptracePeekText(addr uintptr, out []byte) (int, os.Error) {
c, err := syscall.PtracePeekText(t.tid, addr, out); c, err := syscall.PtracePeekText(t.tid, addr, out);
if traceMem {
fmt.Printf("peek(%#x) => %v, %v\n", addr, out, err);
}
return c, os.NewSyscallError("ptrace(PEEKTEXT)", err); return c, os.NewSyscallError("ptrace(PEEKTEXT)", err);
} }
func (t *thread) ptracePokeText(addr uintptr, out []byte) (int, os.Error) { func (t *thread) ptracePokeText(addr uintptr, out []byte) (int, os.Error) {
c, err := syscall.PtracePokeText(t.tid, addr, out); c, err := syscall.PtracePokeText(t.tid, addr, out);
if traceMem {
fmt.Printf("poke(%#x, %v) => %v\n", addr, out, err);
}
return c, os.NewSyscallError("ptrace(POKETEXT)", err); return c, os.NewSyscallError("ptrace(POKETEXT)", err);
} }
...@@ -889,13 +896,13 @@ func (t *thread) Stopped() (Cause, os.Error) { ...@@ -889,13 +896,13 @@ func (t *thread) Stopped() (Cause, os.Error) {
c = Signal(sigName(t.signal)); c = Signal(sigName(t.signal));
case stoppedThreadCreate: case stoppedThreadCreate:
c = ThreadCreate{t.newThread}; c = &ThreadCreate{t.newThread};
case stoppedExiting, exiting, exited: case stoppedExiting, exiting, exited:
if t.signal == -1 { if t.signal == -1 {
c = ThreadExit{t.exitStatus, ""}; c = &ThreadExit{t.exitStatus, ""};
} else { } else {
c = ThreadExit{t.exitStatus, sigName(t.signal)}; c = &ThreadExit{t.exitStatus, sigName(t.signal)};
} }
default: default:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment