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
diff --git a/src/runtime/rt1_amd64_darwin.c b/src/runtime/rt1_amd64_darwin.c
index cf4f3bc..02f03cd 100644
--- a/src/runtime/rt1_amd64_darwin.c
+++ b/src/runtime/rt1_amd64_darwin.c
@@ -150,9 +150,11 @@
 	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 c62db5c..98a53f1 100644
--- a/src/runtime/rt1_amd64_linux.c
+++ b/src/runtime/rt1_amd64_linux.c
@@ -140,7 +140,7 @@
 	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 @@
 		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 2cbebda..5fde296 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·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 04f1737..3d439ca 100644
--- a/src/runtime/runtime.h
+++ b/src/runtime/runtime.h
@@ -212,6 +212,7 @@
 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, ...);