]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: move FlagLinkshared global to ctxt
authorDavid Crawshaw <crawshaw@golang.org>
Sat, 7 Oct 2017 17:28:51 +0000 (13:28 -0400)
committerDavid Crawshaw <crawshaw@golang.org>
Fri, 20 Oct 2017 23:40:56 +0000 (23:40 +0000)
For #22095

Change-Id: Ica6b3391541fe5a0355620d7c4a5107cf53eee82
Reviewed-on: https://go-review.googlesource.com/70833
Run-TryBot: David Crawshaw <crawshaw@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/link/internal/ld/config.go
src/cmd/link/internal/ld/data.go
src/cmd/link/internal/ld/deadcode.go
src/cmd/link/internal/ld/elf.go
src/cmd/link/internal/ld/ld.go
src/cmd/link/internal/ld/lib.go
src/cmd/link/internal/ld/link.go
src/cmd/link/internal/ld/main.go

index 4d3873547c20683c6de37bdd6a1130db32909d7f..2f2f2b07b57fb3c4fbc5f3039ffd935d34854896 100644 (file)
@@ -208,7 +208,7 @@ func mustLinkExternal(ctxt *Link) (res bool, reason string) {
        case BuildModeShared:
                return true, "buildmode=shared"
        }
-       if *FlagLinkshared {
+       if ctxt.linkShared {
                return true, "dynamically linking with a shared library"
        }
 
index 84e073c42b8cc8bc1cf3df613b68ad3b3f46a9fa..3851aa77a0c26c084582967076d936ee8eba808f 100644 (file)
@@ -1206,7 +1206,7 @@ func (ctxt *Link) dodata() {
        checkdatsize(ctxt, datsize, sym.SNOPTRDATA)
        sect.Length = uint64(datsize) - sect.Vaddr
 
-       hasinitarr := *FlagLinkshared
+       hasinitarr := ctxt.linkShared
 
        /* shared library initializer */
        switch ctxt.BuildMode {
index ad518adc3fc0deb78b9b9ca5a28d6f6497fde850..99e7789ad58b67adc8e778d84e035efc5df80a6b 100644 (file)
@@ -217,7 +217,7 @@ func (d *deadcodepass) init() {
                // In a normal binary, start at main.main and the init
                // functions and mark what is reachable from there.
 
-               if *FlagLinkshared && (d.ctxt.BuildMode == BuildModeExe || d.ctxt.BuildMode == BuildModePIE) {
+               if d.ctxt.linkShared && (d.ctxt.BuildMode == BuildModeExe || d.ctxt.BuildMode == BuildModePIE) {
                        names = append(names, "main.main", "main.init")
                } else {
                        // The external linker refers main symbol directly.
index dc6cb7af6c1f1d81a7fa040b3f3aca2e9010dc63..470eadf7a0671f7db7d19cc96b07064882e2bfed 100644 (file)
@@ -1502,7 +1502,7 @@ func (ctxt *Link) doelf() {
                }
        }
 
-       hasinitarr := *FlagLinkshared
+       hasinitarr := ctxt.linkShared
 
        /* shared library initializer */
        switch ctxt.BuildMode {
index d8939febfb530d14d0da802ca663f6b1e900e159..b260ef28c8e423133e6efb32dabb59dba340e84f 100644 (file)
@@ -103,7 +103,7 @@ func findlib(ctxt *Link, lib string) (string, bool) {
        var pname string
        isshlib := false
 
-       if *FlagLinkshared && ctxt.PackageShlib[name] != "" {
+       if ctxt.linkShared && ctxt.PackageShlib[name] != "" {
                pname = ctxt.PackageShlib[name]
                isshlib = true
        } else if ctxt.PackageFile != nil {
@@ -129,7 +129,7 @@ func findlib(ctxt *Link, lib string) (string, bool) {
                        }
                        // try dot, -L "libdir", and then goroot.
                        for _, dir := range ctxt.Libdir {
-                               if *FlagLinkshared {
+                               if ctxt.linkShared {
                                        pname = dir + "/" + pkg + ".shlibname"
                                        if _, err := os.Stat(pname); err == nil {
                                                isshlib = true
index 5d123396b221afa5982e193d0224f5e611555073..53e53c7e91a76fa12a395714284f88ef4cbef826 100644 (file)
@@ -141,7 +141,7 @@ func (ctxt *Link) DynlinkingGo() bool {
        if !ctxt.Loaded {
                panic("DynlinkingGo called before all symbols loaded")
        }
-       return ctxt.BuildMode == BuildModeShared || *FlagLinkshared || ctxt.BuildMode == BuildModePlugin || ctxt.CanUsePlugins()
+       return ctxt.BuildMode == BuildModeShared || ctxt.linkShared || ctxt.BuildMode == BuildModePlugin || ctxt.CanUsePlugins()
 }
 
 // CanUsePlugins returns whether a plugins can be used
@@ -156,7 +156,7 @@ func (ctxt *Link) UseRelro() bool {
        case BuildModeCArchive, BuildModeCShared, BuildModeShared, BuildModePIE, BuildModePlugin:
                return Iself
        default:
-               return *FlagLinkshared
+               return ctxt.linkShared
        }
 }
 
@@ -270,7 +270,7 @@ func errorexit() {
 }
 
 func loadinternal(ctxt *Link, name string) *sym.Library {
-       if *FlagLinkshared && ctxt.PackageShlib != nil {
+       if ctxt.linkShared && ctxt.PackageShlib != nil {
                if shlib := ctxt.PackageShlib[name]; shlib != "" {
                        return addlibpath(ctxt, "internal", "internal", "", name, shlib)
                }
@@ -284,7 +284,7 @@ func loadinternal(ctxt *Link, name string) *sym.Library {
        }
 
        for i := 0; i < len(ctxt.Libdir); i++ {
-               if *FlagLinkshared {
+               if ctxt.linkShared {
                        shlibname := filepath.Join(ctxt.Libdir[i], name+".shlibname")
                        if ctxt.Debugvlog != 0 {
                                ctxt.Logf("searching for %s.a in %s\n", name, shlibname)
@@ -404,7 +404,7 @@ func (ctxt *Link) loadlib() {
                        if lib.Shlib != "" {
                                ldshlibsyms(ctxt, lib.Shlib)
                        } else {
-                               if ctxt.BuildMode == BuildModeShared || *FlagLinkshared {
+                               if ctxt.BuildMode == BuildModeShared || ctxt.linkShared {
                                        Exitf("cannot implicitly include runtime/cgo in a shared library")
                                }
                                loadobjfile(ctxt, lib)
@@ -655,7 +655,7 @@ func (ctxt *Link) loadlib() {
 // those programs loaded dynamically in multiple parts need these
 // symbols to have entries in the symbol table.
 func typeSymbolMangling(ctxt *Link) bool {
-       return ctxt.BuildMode == BuildModeShared || *FlagLinkshared || ctxt.BuildMode == BuildModePlugin || ctxt.Syms.ROLookup("plugin.Open", 0) != nil
+       return ctxt.BuildMode == BuildModeShared || ctxt.linkShared || ctxt.BuildMode == BuildModePlugin || ctxt.Syms.ROLookup("plugin.Open", 0) != nil
 }
 
 // typeSymbolMangle mangles the given symbol name into something shorter.
@@ -1218,7 +1218,7 @@ func (ctxt *Link) hostlink() {
        argv = append(argv, filepath.Join(*flagTmpdir, "go.o"))
        argv = append(argv, hostobjCopy()...)
 
-       if *FlagLinkshared {
+       if ctxt.linkShared {
                seenDirs := make(map[string]bool)
                seenLibs := make(map[string]bool)
                addshlib := func(path string) {
index 5847099df7b47926ff69ce5a23fda67e5f99d14f..ea8dba363f3397012d982cd6c07efd34073413bc 100644 (file)
@@ -60,8 +60,9 @@ type Link struct {
 
        Loaded bool // set after all inputs have been loaded as symbols
 
-       LinkMode  LinkMode
-       BuildMode BuildMode
+       linkShared bool // link against installed Go shared libraries
+       LinkMode   LinkMode
+       BuildMode  BuildMode
 
        Tlsg         *sym.Symbol
        Libdir       []string
index 12f39e446592c89e37d5c421f1e0b94e6721743d..4a1e27e38242710683220ff47a7bbed6379e16f2 100644 (file)
@@ -57,7 +57,6 @@ var (
 
        flagOutfile    = flag.String("o", "", "write output to `file`")
        flagPluginPath = flag.String("pluginpath", "", "full path name for plugin")
-       FlagLinkshared = flag.Bool("linkshared", false, "link against installed Go shared libraries")
 
        flagInstallSuffix = flag.String("installsuffix", "", "set package directory `suffix`")
        flagDumpDep       = flag.Bool("dumpdep", false, "dump symbol dependency graph")
@@ -116,6 +115,7 @@ func Main(arch *sys.Arch, theArch Arch) {
        if ctxt.Arch.Family == sys.AMD64 && objabi.GOOS == "plan9" {
                flag.BoolVar(&Flag8, "8", false, "use 64-bit addresses in symbol table")
        }
+       flag.BoolVar(&ctxt.linkShared, "linkshared", false, "link against installed Go shared libraries")
        flag.Var(&ctxt.LinkMode, "linkmode", "set link `mode`")
        flag.Var(&ctxt.BuildMode, "buildmode", "set build `mode`")
        objabi.Flagfn1("B", "add an ELF NT_GNU_BUILD_ID `note` when using ELF", addbuildinfo)
@@ -166,7 +166,7 @@ func Main(arch *sys.Arch, theArch Arch) {
        ctxt.computeTLSOffset()
        Thearch.Archinit(ctxt)
 
-       if *FlagLinkshared && !Iself {
+       if ctxt.linkShared && !Iself {
                Exitf("-linkshared can only be used on elf systems")
        }