]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: refactor addlib
authorHiroshi Ioka <hirochachacha@gmail.com>
Mon, 28 Aug 2017 06:10:25 +0000 (15:10 +0900)
committerIan Lance Taylor <iant@golang.org>
Tue, 29 Aug 2017 23:28:32 +0000 (23:28 +0000)
* extract pkgname() and findlib() from the function for #18190.
* rename const pkgname to const pkgdef to avoid confliction.

Change-Id: Ie62509bfbddcf19cf92b5b12b598679a069e6e74
Reviewed-on: https://go-review.googlesource.com/59417
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/ld.go
src/cmd/link/internal/ld/lib.go

index fc4137213f160728289befd4f7548529410f737a..9bbc94faa61d9f555f3ec6b226f3965823bc0a75 100644 (file)
@@ -86,19 +86,18 @@ func (ctxt *Link) readImportCfg(file string) {
        }
 }
 
-func addlib(ctxt *Link, src string, obj string, pathname string) *Library {
-       name := path.Clean(pathname)
-
+func pkgname(lib string) string {
+       name := path.Clean(lib)
        // runtime.a -> runtime, runtime.6 -> runtime
        pkg := name
        if len(pkg) >= 2 && pkg[len(pkg)-2] == '.' {
                pkg = pkg[:len(pkg)-2]
        }
+       return pkg
+}
 
-       // already loaded?
-       if l := ctxt.LibraryByPkg[pkg]; l != nil {
-               return l
-       }
+func findlib(ctxt *Link, lib string) (string, bool) {
+       name := path.Clean(lib)
 
        var pname string
        isshlib := false
@@ -110,12 +109,13 @@ func addlib(ctxt *Link, src string, obj string, pathname string) *Library {
                pname = ctxt.PackageFile[name]
                if pname == "" {
                        ctxt.Logf("cannot find package %s (using -importcfg)\n", name)
-                       return nil
+                       return "", false
                }
        } else {
                if filepath.IsAbs(name) {
                        pname = name
                } else {
+                       pkg := pkgname(lib)
                        // try dot, -L "libdir", and then goroot.
                        for _, dir := range ctxt.Libdir {
                                if *FlagLinkshared {
@@ -134,6 +134,19 @@ func addlib(ctxt *Link, src string, obj string, pathname string) *Library {
                pname = path.Clean(pname)
        }
 
+       return pname, isshlib
+}
+
+func addlib(ctxt *Link, src string, obj string, lib string) *Library {
+       pkg := pkgname(lib)
+
+       // already loaded?
+       if l := ctxt.LibraryByPkg[pkg]; l != nil {
+               return l
+       }
+
+       pname, isshlib := findlib(ctxt, lib)
+
        if ctxt.Debugvlog > 1 {
                ctxt.Logf("%5.2f addlib: %s %s pulls in %s isshlib %v\n", elapsed(), obj, src, pname, isshlib)
        }
index 1977ea51736ced4880701d0432c7f8c3b79b9659..d9034a65272959755488a5cdef9585b112fe7ba2 100644 (file)
@@ -242,7 +242,7 @@ func (w *outBuf) Offset() int64 {
 
 var coutbuf outBuf
 
-const pkgname = "__.PKGDEF"
+const pkgdef = "__.PKGDEF"
 
 var (
        // Set if we see an object compiled by the host compiler that is not
@@ -811,7 +811,7 @@ func objfile(ctxt *Link, lib *Library) {
                goto out
        }
 
-       if !strings.HasPrefix(arhdr.name, pkgname) {
+       if !strings.HasPrefix(arhdr.name, pkgdef) {
                Errorf(nil, "%s: cannot find package header", lib.File)
                goto out
        }