Skip to content

Commit

Permalink
cmd/go: display program name when reporting crash
Browse files Browse the repository at this point in the history
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
  • Loading branch information
rsc committed Sep 26, 2014
1 parent b86105e commit 13a2c1c
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/cmd/go/build.go
Expand Up @@ -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
}
}
Expand Down
11 changes: 11 additions & 0 deletions src/cmd/go/test.bash
Expand Up @@ -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"
Expand Down
9 changes: 9 additions & 0 deletions src/cmd/ld/pobj.c
Expand Up @@ -45,6 +45,8 @@ char* paramspace = "FP";
void
main(int argc, char *argv[])
{
int i;

linkarchinit();
ctxt = linknew(thelinkarch);
ctxt->thechar = thechar;
Expand All @@ -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;

Expand Down

0 comments on commit 13a2c1c

Please sign in to comment.