]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: correct runtime/cgo detection for -linkshared
authorHiroshi Ioka <hirochachacha@gmail.com>
Wed, 16 Aug 2017 22:26:07 +0000 (07:26 +0900)
committerIan Lance Taylor <iant@golang.org>
Thu, 17 Aug 2017 01:12:30 +0000 (01:12 +0000)
Current code detect runtime/cgo iff the package or sub packages imports
runtime/cgo directly. However, when we are using linkshared, imported
shared libraries might have already included runtime/cgo.
This CL handles later case by looking an actual runtime/cgo symbol.

Change-Id: I35e7dfdb5e1a939eafc95a0259ee1af9782bc864
Reviewed-on: https://go-review.googlesource.com/56310
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/link/internal/ld/lib.go

index d906893218cc60be0da316be3675fa2c66bfb327..c7f14b3e04b4c6078781449dcff83eafafde36b2 100644 (file)
@@ -421,7 +421,6 @@ func (ctxt *Link) loadlib() {
 
        var i int
        for i = 0; i < len(ctxt.Library); i++ {
-               iscgo = iscgo || ctxt.Library[i].Pkg == "runtime/cgo"
                if ctxt.Library[i].Shlib == "" {
                        if ctxt.Debugvlog > 1 {
                                ctxt.Logf("%5.2f autolib: %s (from %s)\n", Cputime(), ctxt.Library[i].File, ctxt.Library[i].Objref)
@@ -439,6 +438,8 @@ func (ctxt *Link) loadlib() {
                }
        }
 
+       iscgo = ctxt.Syms.ROLookup("x_cgo_init", 0) != nil
+
        // We now have enough information to determine the link mode.
        determineLinkMode(ctxt)