aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorfanzha02 <fannie.zhang@arm.com>2019-08-08 01:21:46 +0000
committerIan Lance Taylor <iant@golang.org>2019-09-11 14:29:18 +0000
commit23f7398671280c7f2493796f9b22d7bf70fb38d2 (patch)
tree18a04fb29181729807c47593bc7d6e0548d8a92d /src
parentf6c691e0e1b1434a02301c39e6d66e21699a98a8 (diff)
downloadgo-23f7398671280c7f2493796f9b22d7bf70fb38d2.tar.xz
cmd/go/internal/work: use pie link mode when using MSAN on arm64
Currently, when running the "CC=clang go run -msan misc/cgo/ testsanitizers/testdata/msan.go" command on arm64, it will report an error and the error is reported by llvm/compiler-rt/ lib/msan and it is "Make sure to compile with -fPIE and to link with -pie". This CL fixes this issue, using PIE link mode when using MSAN on arm64. This CL also updates the related document and go build help message. Fixes #33712 Change-Id: I0cc9d95f3fa264d6c042c27a40ccbb82826922fb Reviewed-on: https://go-review.googlesource.com/c/go/+/190482 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
Diffstat (limited to 'src')
-rw-r--r--src/cmd/go/alldocs.go4
-rw-r--r--src/cmd/go/internal/work/build.go4
-rw-r--r--src/cmd/go/internal/work/init.go5
3 files changed, 11 insertions, 2 deletions
diff --git a/src/cmd/go/alldocs.go b/src/cmd/go/alldocs.go
index ebbead5d31..2caa8e78f4 100644
--- a/src/cmd/go/alldocs.go
+++ b/src/cmd/go/alldocs.go
@@ -110,11 +110,13 @@
// The default is the number of CPUs available.
// -race
// enable data race detection.
-// Supported only on linux/amd64, freebsd/amd64, darwin/amd64 and windows/amd64.
+// Supported only on linux/amd64, freebsd/amd64, darwin/amd64, windows/amd64,
+// linux/ppc64le and linux/arm64 (only for 48-bit VMA).
// -msan
// enable interoperation with memory sanitizer.
// Supported only on linux/amd64, linux/arm64
// and only with Clang/LLVM as the host C compiler.
+// On linux/arm64, pie build mode will be used.
// -v
// print the names of packages as they are compiled.
// -work
diff --git a/src/cmd/go/internal/work/build.go b/src/cmd/go/internal/work/build.go
index 9305b2d859..9d6fa0c25b 100644
--- a/src/cmd/go/internal/work/build.go
+++ b/src/cmd/go/internal/work/build.go
@@ -62,11 +62,13 @@ and test commands:
The default is the number of CPUs available.
-race
enable data race detection.
- Supported only on linux/amd64, freebsd/amd64, darwin/amd64 and windows/amd64.
+ Supported only on linux/amd64, freebsd/amd64, darwin/amd64, windows/amd64,
+ linux/ppc64le and linux/arm64 (only for 48-bit VMA).
-msan
enable interoperation with memory sanitizer.
Supported only on linux/amd64, linux/arm64
and only with Clang/LLVM as the host C compiler.
+ On linux/arm64, pie build mode will be used.
-v
print the names of packages as they are compiled.
-work
diff --git a/src/cmd/go/internal/work/init.go b/src/cmd/go/internal/work/init.go
index c220d87123..548e73515f 100644
--- a/src/cmd/go/internal/work/init.go
+++ b/src/cmd/go/internal/work/init.go
@@ -60,6 +60,11 @@ func instrumentInit() {
mode := "race"
if cfg.BuildMSan {
mode = "msan"
+ // MSAN does not support non-PIE binaries on ARM64.
+ // See issue #33712 for details.
+ if cfg.Goos == "linux" && cfg.Goarch == "arm64" && cfg.BuildBuildmode == "default" {
+ cfg.BuildBuildmode = "pie"
+ }
}
modeFlag := "-" + mode