summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2008-09-22 13:47:53 -0700
committerRuss Cox <rsc@golang.org>2008-09-22 13:47:53 -0700
commiteb12d6641dfb8c8091b7b11e9ec9d42b978427f0 (patch)
tree16f93a9986c6fac7718d41bba86a8f804655457d
parent658ed932d8befb1e2a67c862d78c760194c9b541 (diff)
downloadgo-eb12d6641dfb8c8091b7b11e9ec9d42b978427f0.tar.gz
test cleanup
- do not print tracebacks if $GOTRACEBACK=0 - set GOTRACEBACK=0 during tests - filter out pc numbers in errors R=r DELTA=70 (22 added, 30 deleted, 18 changed) OCL=15618 CL=15642
-rw-r--r--src/runtime/rt1_amd64_darwin.c8
-rw-r--r--src/runtime/rt1_amd64_linux.c16
-rw-r--r--src/runtime/runtime.c17
-rw-r--r--src/runtime/runtime.h1
-rw-r--r--test/golden.out40
-rwxr-xr-xtest/run4
6 files changed, 39 insertions, 47 deletions
diff --git a/src/runtime/rt1_amd64_darwin.c b/src/runtime/rt1_amd64_darwin.c
index cf4f3bcda..02f03cdf7 100644
--- a/src/runtime/rt1_amd64_darwin.c
+++ b/src/runtime/rt1_amd64_darwin.c
@@ -150,9 +150,11 @@ sighandler(int32 sig, siginfo *info, void *context)
prints("\npc: 0x"); sys·printpointer((void *)ss->__rip);
prints("\n\n");
- traceback((void *)ss->__rip, (void *)ss->__rsp, (void*)ss->__r15);
- tracebackothers((void*)ss->__r15);
- print_thread_state(ss);
+ if(gotraceback()){
+ traceback((void *)ss->__rip, (void *)ss->__rsp, (void*)ss->__r15);
+ tracebackothers((void*)ss->__r15);
+ print_thread_state(ss);
+ }
sys·exit(2);
}
diff --git a/src/runtime/rt1_amd64_linux.c b/src/runtime/rt1_amd64_linux.c
index c62db5ce9..98a53f18e 100644
--- a/src/runtime/rt1_amd64_linux.c
+++ b/src/runtime/rt1_amd64_linux.c
@@ -140,7 +140,7 @@ sighandler(int32 sig, siginfo* info, void** context)
if(panicking) // traceback already printed
sys·exit(2);
- struct sigcontext *sc = &(((struct ucontext *)context)->uc_mcontext);
+ struct sigcontext *sc = &(((struct ucontext *)context)->uc_mcontext);
if(sig < 0 || sig >= NSIG){
prints("Signal ");
@@ -149,13 +149,15 @@ sighandler(int32 sig, siginfo* info, void** context)
prints(sigtab[sig].name);
}
- prints("\nFaulting address: 0x"); sys·printpointer(info->si_addr);
- prints("\npc: 0x"); sys·printpointer((void *)sc->rip);
- prints("\n\n");
+ prints("\nFaulting address: 0x"); sys·printpointer(info->si_addr);
+ prints("\npc: 0x"); sys·printpointer((void *)sc->rip);
+ prints("\n\n");
- traceback((void *)sc->rip, (void *)sc->rsp, (void *)sc->r15);
- tracebackothers((void*)sc->r15);
- print_sigcontext(sc);
+ if(gotraceback()){
+ traceback((void *)sc->rip, (void *)sc->rsp, (void *)sc->r15);
+ tracebackothers((void*)sc->r15);
+ print_sigcontext(sc);
+ }
sys·breakpoint();
sys·exit(2);
diff --git a/src/runtime/runtime.c b/src/runtime/runtime.c
index 2cbebda21..5fde29670 100644
--- a/src/runtime/runtime.c
+++ b/src/runtime/runtime.c
@@ -6,6 +6,17 @@
int32 panicking = 0;
+int32
+gotraceback(void)
+{
+ byte *p;
+
+ p = getenv("GOTRACEBACK");
+ if(p == nil || p[0] == '\0')
+ return 1; // default is on
+ return atoi(p);
+}
+
void
sys·panicl(int32 lno)
{
@@ -17,8 +28,10 @@ sys·panicl(int32 lno)
sys·printpc(&lno);
prints("\n");
sp = (uint8*)&lno;
- traceback(sys·getcallerpc(&lno), sp, g);
- tracebackothers(g);
+ if(gotraceback()){
+ traceback(sys·getcallerpc(&lno), sp, g);
+ tracebackothers(g);
+ }
panicking = 1;
sys·breakpoint(); // so we can grab it in a debugger
sys·exit(2);
diff --git a/src/runtime/runtime.h b/src/runtime/runtime.h
index 04f1737dd..3d439ca45 100644
--- a/src/runtime/runtime.h
+++ b/src/runtime/runtime.h
@@ -212,6 +212,7 @@ void mcpy(byte*, byte*, uint32);
void* mal(uint32);
uint32 cmpstring(string, string);
void initsig(void);
+int32 gotraceback(void);
void traceback(uint8 *pc, uint8 *sp, G* gp);
void tracebackothers(G*);
int32 open(byte*, int32, ...);
diff --git a/test/golden.out b/test/golden.out
index 758e5b595..ceac2404f 100644
--- a/test/golden.out
+++ b/test/golden.out
@@ -128,17 +128,7 @@ BUG: compilation succeeds incorrectly
throw: ifaces2i: nil pointer
SIGSEGV: segmentation violation
Faulting address: 0x0
-pc: 0x1c11
-
-0x1c11?zi
- throw(30465, 0, 0, ...)
- throw(0x7701, 0x0, 0x0, ...)
-0x2113?zi
- sys·ifaces2i(31496, 0, 31536, ...)
- sys·ifaces2i(0x7b08, 0x7b30, 0x0, ...)
-0x136f?zi
- main·main(1, 0, 1606414952, ...)
- main·main(0x1, 0x7fff5fbff268, 0x0, ...)
+pc: xxx
BUG: fails incorrectly
@@ -152,18 +142,12 @@ BUG: fails incorrectly
=========== bugs/bug095.go
found 2, expected 1
-panic on line 352 PC=0x139e
-0x139e?zi
- main·main(1, 0, 1606414952, ...)
- main·main(0x1, 0x7fff5fbff268, 0x0, ...)
+panic on line 352 PC=xxx
BUG wrong result
=========== bugs/bug097.go
-panic on line 354 PC=0x13bc
-0x13bc?zi
- main·main(1, 0, 1606414952, ...)
- main·main(0x1, 0x7fff5fbff268, 0x0, ...)
+panic on line 354 PC=xxx
BUG wrong result
=========== bugs/bug098.go
@@ -176,28 +160,14 @@ BUG should compile
done1
SIGSEGV: segmentation violation
Faulting address: 0x0
-pc: 0x0
-
-0x0?zi
- panic(5070, 0, 45192, ...)
- panic(0x13ce, 0xb088, 0xb088, ...)
+pc: xxx
=========== bugs/bug102.go
throw: index out of range
SIGSEGV: segmentation violation
Faulting address: 0x0
-pc: 0x2615
-
-0x2615?zi
- throw(31052, 0, 0, ...)
- throw(0x794c, 0x0, 0x1315, ...)
-0x2569?zi
- sys·throwindex(45096, 0, 0, ...)
- sys·throwindex(0xb028, 0x0, 0x0, ...)
-0x1315?zi
- main·main(1, 0, 1606414952, ...)
- main·main(0x1, 0x7fff5fbff268, 0x0, ...)
+pc: xxx
=========== fixedbugs/bug016.go
diff --git a/test/run b/test/run
index dc429dd67..3617301c2 100755
--- a/test/run
+++ b/test/run
@@ -15,6 +15,7 @@ esac
export G=${A}g
export L=${A}l
+export GOTRACEBACK=0
failed=0
@@ -55,6 +56,9 @@ done | # clean up some stack noise
egrep -v '^(r[0-9a-z]+|[cfg]s) +0x' |
sed '/tmp.*Bus error/s/.*Bus/Bus/; /tmp.*Trace.BPT/s/.*Trace/Trace/
s!'$RUNFILE'!$RUNFILE!g
+ s/ PC=0x[0-9a-f]*/ PC=xxx/
+ s/^pc: 0x[0-9a-f]*/pc: xxx/
+ /^Trace\/breakpoint trap/d
/RUNFILE/ s/line 1: *[0-9]*/line 1: PID/' > run.out
case $failed in