diff --git a/src/pkg/runtime/print.c b/src/pkg/runtime/print.c index 4a358a8116f..15cffdfd407 100644 --- a/src/pkg/runtime/print.c +++ b/src/pkg/runtime/print.c @@ -26,7 +26,7 @@ dump(byte *p, int32 n) void prints(int8 *s) { - write(1, s, findnull((byte*)s)); + write(fd, s, findnull((byte*)s)); } // Very simple printf. Only for debugging prints. @@ -45,7 +45,7 @@ printf(int8 *s, ...) if(*p != '%') continue; if(p > lp) - write(1, lp, p-lp); + write(fd, lp, p-lp); p++; narg = nil; switch(*p) { @@ -98,7 +98,7 @@ printf(int8 *s, ...) lp = p+1; } if(p > lp) - write(1, lp, p-lp); + write(fd, lp, p-lp); // unlock(&debuglock); } @@ -115,10 +115,10 @@ void sys·printbool(bool v) { if(v) { - write(1, (byte*)"true", 4); + write(fd, (byte*)"true", 4); return; } - write(1, (byte*)"false", 5); + write(fd, (byte*)"false", 5); } void @@ -129,15 +129,15 @@ sys·printfloat(float64 v) float64 h; if(isNaN(v)) { - write(1, "NaN", 3); + write(fd, "NaN", 3); return; } if(isInf(v, 0)) { - write(1, "+Inf", 4); + write(fd, "+Inf", 4); return; } if(isInf(v, -1)) { - write(1, "+Inf", 4); + write(fd, "+Inf", 4); return; } @@ -196,7 +196,7 @@ sys·printfloat(float64 v) buf[n+4] = (e/100) + '0'; buf[n+5] = (e/10)%10 + '0'; buf[n+6] = (e%10) + '0'; - write(1, buf, n+7); + write(fd, buf, n+7); } void @@ -211,14 +211,14 @@ sys·printuint(uint64 v) break; v = v/10; } - write(1, buf+i, nelem(buf)-i); + write(fd, buf+i, nelem(buf)-i); } void sys·printint(int64 v) { if(v < 0) { - write(1, "-", 1); + write(fd, "-", 1); v = -v; } sys·printuint(v); @@ -238,7 +238,7 @@ sys·printhex(uint64 v) buf[--i] = '0'; buf[--i] = 'x'; buf[--i] = '0'; - write(1, buf+i, nelem(buf)-i); + write(fd, buf+i, nelem(buf)-i); } void @@ -253,21 +253,21 @@ sys·printstring(String v) extern int32 maxstring; if(v.len > maxstring) { - write(1, "[invalid string]", 16); + write(fd, "[invalid string]", 16); return; } if(v.len > 0) - write(1, v.str, v.len); + write(fd, v.str, v.len); } void sys·printsp(void) { - write(1, " ", 1); + write(fd, " ", 1); } void sys·printnl(void) { - write(1, "\n", 1); + write(fd, "\n", 1); } diff --git a/src/pkg/runtime/runtime.c b/src/pkg/runtime/runtime.c index 6f359e18467..4dcd3da1501 100644 --- a/src/pkg/runtime/runtime.c +++ b/src/pkg/runtime/runtime.c @@ -6,6 +6,7 @@ int32 panicking = 0; int32 maxround = sizeof(uintptr); +int32 fd = 1; int32 gotraceback(void) @@ -23,6 +24,7 @@ sys·panicl(int32 lno) { uint8 *sp; + fd = 2; if(panicking) { printf("double panic\n"); exit(3); @@ -66,6 +68,7 @@ sys·throwinit(void) void throw(int8 *s) { + fd = 2; printf("throw: %s\n", s); sys·panicl(-1); *(int32*)0 = 0; // not reached diff --git a/src/pkg/runtime/runtime.h b/src/pkg/runtime/runtime.h index b560d68f98c..fe3194d543b 100644 --- a/src/pkg/runtime/runtime.h +++ b/src/pkg/runtime/runtime.h @@ -312,6 +312,7 @@ int32 goidgen; extern int32 gomaxprocs; extern int32 panicking; extern int32 maxround; +extern int32 fd; // usually 1; set to 2 when panicking int8* goos; /* @@ -412,7 +413,8 @@ void lock(Lock*); void unlock(Lock*); /* - * sleep and wakeup on one-time events. + * sleep and wakeup on one-time events, like + * Notification (but shorter to type). * before any calls to notesleep or notewakeup, * must call noteclear to initialize the Note. * then, any number of threads can call notesleep diff --git a/test/ken/complit.go b/test/ken/complit.go index f54da7b4276..3132cf99361 100644 --- a/test/ken/complit.go +++ b/test/ken/complit.go @@ -1,3 +1,5 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out + // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. diff --git a/test/run b/test/run index a86ce4977eb..8b3bc4149c7 100755 --- a/test/run +++ b/test/run @@ -36,7 +36,6 @@ PATH=/bin:/usr/bin:/usr/local/bin:${GOBIN:-$HOME/bin}:`pwd` RUNFILE=/tmp/gorun-$$-$USER TMP1FILE=/tmp/gotest1-$$-$USER TMP2FILE=/tmp/gotest2-$$-$USER -TMP3FILE=/tmp/gotest3-$$-$USER # don't run the machine out of memory: limit individual processes to 4GB. # on thresher, 3GB suffices to run the tests; with 2GB, peano fails. @@ -53,26 +52,24 @@ do export F=$(basename $i .go) export D=$dir sed '/^\/\//!q' $i | sed 's@//@@; $d' |sed 's|./\$A.out|$E &|' >$RUNFILE - if ! /usr/bin/time -p sh -c "sh $RUNFILE >$TMP1FILE 2>$TMP2FILE" 2>$TMP3FILE + if ! /usr/bin/time -p sh -c "sh $RUNFILE >$TMP1FILE 2>&1" 2>$TMP2FILE then echo echo "===========" $i cat $TMP1FILE - cat $TMP2FILE echo >&2 fail: $i - elif test -s $TMP1FILE || test -s $TMP2FILE + elif test -s $TMP1FILE then echo echo "===========" $i cat $TMP1FILE - cat $TMP2FILE elif [ $dir = "bugs" ] then echo $i succeeded with no output. else echo $i >>pass.out fi - echo $(awk 'NR==1{print $2}' $TMP3FILE) $D/$F >>times.out + echo $(awk 'NR==1{print $2}' $TMP2FILE) $D/$F >>times.out done done | # clean up some stack noise egrep -v '^(r[0-9a-z]+|[cfg]s) +0x' | @@ -90,7 +87,7 @@ case $failed in 1) echo FAIL esac -rm -f $RUNFILE $TMP1FILE $TMP2FILE $TMP3FILE *.$A $A.out +rm -f $RUNFILE $TMP1FILE $TMP2FILE *.$A $A.out diffmsg="" if ! diff run.out golden.out then