This patch changes the Go tool to always use --whole-archive when
linking gccgo packages.  This fixes cases where a Go package uses cgo
to call C code in which the only referenced symbol is a C global
variable.  This is a backport of https://golang.org/cl/16775 in the
master Go sources.  This fixes GC PR 68255.  Bootstrapped and ran Go
testsuite on x86_64-pc-linux-gnu.  Committed to mainline.

Ian
Index: gcc/go/gofrontend/MERGE
===================================================================
--- gcc/go/gofrontend/MERGE     (revision 230064)
+++ gcc/go/gofrontend/MERGE     (working copy)
@@ -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: libgo/go/cmd/go/build.go
===================================================================
--- libgo/go/cmd/go/build.go    (revision 230064)
+++ libgo/go/cmd/go/build.go    (working copy)
@@ -2555,17 +2555,9 @@ func (tools gccgoToolchain) ld(b *builde
                }
        }
 
-       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", "")...)

Reply via email to