re PR go/68255 (cgo-generated constructor not being called)
authorIan Lance Taylor <ian@gcc.gnu.org>
Tue, 10 Nov 2015 20:31:11 +0000 (20:31 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Tue, 10 Nov 2015 20:31:11 +0000 (20:31 +0000)
PR go/68255
    cmd/go: always use --whole-archive for gccgo packages

    This is a backport of https://golang.org/cl/16775.

    This is, in effect, what the gc toolchain does.  It fixes cases where Go
    code refers to a C global variable; without this, if the global variable
    was the only thing visible in the C code, the generated cgo file might
    not get pulled in from the archive, leaving the Go variable
    uninitialized.

    This was reported against gccgo as https://gcc.gnu.org/PR68255 .

    Reviewed-on: https://go-review.googlesource.com/16778

From-SVN: r230120

gcc/go/gofrontend/MERGE
libgo/go/cmd/go/build.go

index f325bb33ecbfb73330f187a674cff8858ffbf0f2..dd23a8fdd8d0245a805f9c8321752e5dbab9f85c 100644 (file)
@@ -1,4 +1,4 @@
-012ab5cb2ef1c26e8023ce90d3a2bba174da7b30
+0c07751d139ef90a43ef7f299f925622a8792a9f
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 3afac2ee062b9a2c9c2a08b72326fff087d63643..865871c5314a7e82860c8fa95c2da1c602f6c6d3 100644 (file)
@@ -2555,17 +2555,9 @@ func (tools gccgoToolchain) ld(b *builder, root *action, out string, allactions
                }
        }
 
-       switch ldBuildmode {
-       case "c-archive", "c-shared":
-               ldflags = append(ldflags, "-Wl,--whole-archive")
-       }
-
+       ldflags = append(ldflags, "-Wl,--whole-archive")
        ldflags = append(ldflags, afiles...)
-
-       switch ldBuildmode {
-       case "c-archive", "c-shared":
-               ldflags = append(ldflags, "-Wl,--no-whole-archive")
-       }
+       ldflags = append(ldflags, "-Wl,--no-whole-archive")
 
        ldflags = append(ldflags, cgoldflags...)
        ldflags = append(ldflags, envList("CGO_LDFLAGS", "")...)