aboutsummaryrefslogtreecommitdiff
path: root/src/run.bash
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-11-19 15:25:33 -0500
committerRuss Cox <rsc@golang.org>2014-11-19 15:25:33 -0500
commit378c2515aeec0e23662631dc6ba63148594ad92b (patch)
tree7f9bbc58d02f09548b8596ce94019d1dec54d023 /src/run.bash
parent2d53d6b5d5b5f10c072549607a221c13e5cdb7e3 (diff)
downloadgo-378c2515aeec0e23662631dc6ba63148594ad92b.tar.gz
go-378c2515aeec0e23662631dc6ba63148594ad92b.zip
runtime: remove assumption that noptrdata data bss noptrbss are ordered and contiguous
The assumption can be violated by external linkers reordering them or inserting non-Go sections in between them. I looked briefly at trying to write out the _go_.o in external linking mode in a way that forced the ordering, but no matter what there's no way to force Go's data and Go's bss to be next to each other. If there is any data or bss from non-Go objects, it's very likely to get stuck in between them. Instead, rewrite the two places we know about that make the assumption. I grepped for noptrdata to look for more and didn't find any. The added race test (os/exec in external linking mode) fails without the changes in the runtime. It crashes with an invalid pointer dereference. Fixes #9133. LGTM=dneil R=dneil CC=dvyukov, golang-codereviews, iant https://golang.org/cl/179980043
Diffstat (limited to 'src/run.bash')
-rwxr-xr-xsrc/run.bash5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/run.bash b/src/run.bash
index 3c9430c87e..9a0e1cb0f2 100755
--- a/src/run.bash
+++ b/src/run.bash
@@ -70,9 +70,10 @@ case "$GOHOSTOS-$GOOS-$GOARCH-$CGO_ENABLED" in
linux-linux-amd64-1 | freebsd-freebsd-amd64-1 | darwin-darwin-amd64-1)
echo
echo '# Testing race detector.'
- go test -race -i runtime/race flag
+ go test -race -i runtime/race flag os/exec
go test -race -run=Output runtime/race
- go test -race -short flag
+ go test -race -short flag os/exec
+ go test -race -short -ldflags=-linkmode=external flag os/exec
esac
xcd() {