summaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-09-26 13:48:30 -0400
committerRuss Cox <rsc@golang.org>2014-09-26 13:48:30 -0400
commit282f3609f529697b65643b2c72235a21ce318707 (patch)
tree3e84b285d92f0a09df672636be24872d53ad9646 /src/cmd
parent2d475eb2623625e3a6f3c6c46545a692371b4e1f (diff)
downloadgo-282f3609f529697b65643b2c72235a21ce318707.tar.gz
cmd/go: display program name when reporting crash
Fix by atom (from CL 89190044), comment and test by me. Fixes issue 6823. LGTM=crawshaw R=golang-codereviews, crawshaw CC=0xe2.0x9a.0x9b, adg, golang-codereviews, iant, r https://codereview.appspot.com/148180043
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/go/build.go8
-rwxr-xr-xsrc/cmd/go/test.bash11
-rw-r--r--src/cmd/ld/pobj.c9
3 files changed, 28 insertions, 0 deletions
diff --git a/src/cmd/go/build.go b/src/cmd/go/build.go
index c72631ae9..e2e17fd03 100644
--- a/src/cmd/go/build.go
+++ b/src/cmd/go/build.go
@@ -1469,6 +1469,14 @@ func (b *builder) runOut(dir string, desc string, env []string, cmdargs ...inter
continue
}
+ // err can be something like 'exit status 1'.
+ // Add information about what program was running.
+ // Note that if buf.Bytes() is non-empty, the caller usually
+ // shows buf.Bytes() and does not print err at all, so the
+ // prefix here does not make most output any more verbose.
+ if err != nil {
+ err = errors.New(cmdline[0] + ": " + err.Error())
+ }
return buf.Bytes(), err
}
}
diff --git a/src/cmd/go/test.bash b/src/cmd/go/test.bash
index 243467ba9..80af61ae0 100755
--- a/src/cmd/go/test.bash
+++ b/src/cmd/go/test.bash
@@ -60,6 +60,17 @@ if ! grep -q "^$fn:" $d/err.out; then
fi
rm -r $d
+TEST 'program name in crash messages'
+linker=$(./testgo env GOCHAR)l
+d=$(TMPDIR=/var/tmp mktemp -d -t testgoXXX)
+./testgo build -ldflags -crash_for_testing $(./testgo env GOROOT)/test/helloworld.go 2>$d/err.out || true
+if ! grep -q "/tool/.*/$linker" $d/err.out; then
+ echo "missing linker name in error message"
+ cat $d/err.out
+ ok=false
+fi
+rm -r $d
+
# Test local (./) imports.
testlocal() {
local="$1"
diff --git a/src/cmd/ld/pobj.c b/src/cmd/ld/pobj.c
index 54c5ef247..63460df30 100644
--- a/src/cmd/ld/pobj.c
+++ b/src/cmd/ld/pobj.c
@@ -45,6 +45,8 @@ char* paramspace = "FP";
void
main(int argc, char *argv[])
{
+ int i;
+
linkarchinit();
ctxt = linknew(thelinkarch);
ctxt->thechar = thechar;
@@ -64,6 +66,13 @@ main(int argc, char *argv[])
INITENTRY = 0;
linkmode = LinkAuto;
+ // For testing behavior of go command when tools crash.
+ // Undocumented, not in standard flag parser to avoid
+ // exposing in usage message.
+ for(i=1; i<argc; i++)
+ if(strcmp(argv[i], "-crash_for_testing") == 0)
+ *(volatile int*)0 = 0;
+
if(thechar == '5' && ctxt->goarm == 5)
debug['F'] = 1;