]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/dist: fix build failure of misc/cgo/test on arm64
authorxd <xiangdong.ji@gmail.com>
Wed, 14 Oct 2020 18:02:49 +0000 (11:02 -0700)
committerCherry Zhang <cherryyz@google.com>
Tue, 27 Oct 2020 15:42:41 +0000 (15:42 +0000)
misc/cgo/test fails in 'dist test' on arm64 if the C compiler is of GCC-9.4 or
above and its 'outline atomics' feature is enabled, since the internal linking
hasn't yet supported "__attribute__((constructor))" and also mis-handles hidden
visibility.

This change addresses the problem by skipping the internal linking cases of
misc/cgo/test on linux/arm64. It fixes 'dist test' failure only, user is expected to
pass a GCC option '-mno-outline-atomics' via CGO_CFLAGS if running into the same
problem when building cgo programs using internal linking.

Updates #39466

Change-Id: I57f9e85fca881e5fd2dae6c1b4446bce9e0c1975
Reviewed-on: https://go-review.googlesource.com/c/go/+/262357
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Emmanuel Odeke <emmanuel@orijtech.com>

src/cmd/dist/test.go

index 622d0cee8342c0375579df51be37b28201e9b797..3cf49dc8ad2e7870928de42520514089e336954c 100644 (file)
@@ -1081,7 +1081,12 @@ func (t *tester) cgoTest(dt *distTest) error {
        cmd := t.addCmd(dt, "misc/cgo/test", t.goTest())
        cmd.Env = append(os.Environ(), "GOFLAGS=-ldflags=-linkmode=auto")
 
-       if t.internalLink() {
+       // Skip internal linking cases on arm64 to support GCC-9.4 and above,
+       // only for linux, conservatively.
+       // See issue #39466.
+       skipInternalLink := goarch == "arm64" && goos == "linux"
+
+       if t.internalLink() && !skipInternalLink {
                cmd := t.addCmd(dt, "misc/cgo/test", t.goTest(), "-tags=internal")
                cmd.Env = append(os.Environ(), "GOFLAGS=-ldflags=-linkmode=internal")
        }
@@ -1157,7 +1162,7 @@ func (t *tester) cgoTest(dt *distTest) error {
 
                        if t.supportedBuildmode("pie") {
                                t.addCmd(dt, "misc/cgo/test", t.goTest(), "-buildmode=pie")
-                               if t.internalLink() && t.internalLinkPIE() {
+                               if t.internalLink() && t.internalLinkPIE() && !skipInternalLink {
                                        t.addCmd(dt, "misc/cgo/test", t.goTest(), "-buildmode=pie", "-ldflags=-linkmode=internal", "-tags=internal,internal_pie")
                                }
                                t.addCmd(dt, "misc/cgo/testtls", t.goTest(), "-buildmode=pie")