Commit 13a2c1ca authored by Russ Cox's avatar Russ Cox

cmd/go: display program name when reporting crash

Fix by atom (from CL 89190044), comment and test by me.

Fixes #6823.

LGTM=crawshaw
R=golang-codereviews, crawshaw
CC=0xe2.0x9a.0x9b, adg, golang-codereviews, iant, r
https://golang.org/cl/148180043
parent b86105e8
...@@ -1469,6 +1469,14 @@ func (b *builder) runOut(dir string, desc string, env []string, cmdargs ...inter ...@@ -1469,6 +1469,14 @@ func (b *builder) runOut(dir string, desc string, env []string, cmdargs ...inter
continue 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 return buf.Bytes(), err
} }
} }
......
...@@ -60,6 +60,17 @@ if ! grep -q "^$fn:" $d/err.out; then ...@@ -60,6 +60,17 @@ if ! grep -q "^$fn:" $d/err.out; then
fi fi
rm -r $d 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. # Test local (./) imports.
testlocal() { testlocal() {
local="$1" local="$1"
......
...@@ -45,6 +45,8 @@ char* paramspace = "FP"; ...@@ -45,6 +45,8 @@ char* paramspace = "FP";
void void
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
int i;
linkarchinit(); linkarchinit();
ctxt = linknew(thelinkarch); ctxt = linknew(thelinkarch);
ctxt->thechar = thechar; ctxt->thechar = thechar;
...@@ -64,6 +66,13 @@ main(int argc, char *argv[]) ...@@ -64,6 +66,13 @@ main(int argc, char *argv[])
INITENTRY = 0; INITENTRY = 0;
linkmode = LinkAuto; 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) if(thechar == '5' && ctxt->goarm == 5)
debug['F'] = 1; debug['F'] = 1;
......
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