diff options
| author | Matthew Dempsky <mdempsky@google.com> | 2022-03-23 12:22:50 -0700 |
|---|---|---|
| committer | Matthew Dempsky <mdempsky@google.com> | 2022-03-25 21:58:03 +0000 |
| commit | 3dac99ad4cdc7014343bcbddf01aca2d9e7a4e96 (patch) | |
| tree | d75c5beabef6f1eeb4b88f57af5dec3fefdc3ed8 /src/cmd | |
| parent | 3dac914b772f7c99bb749839946ca68878a65f35 (diff) | |
| download | go-3dac99ad4cdc7014343bcbddf01aca2d9e7a4e96.tar.xz | |
cmd/compile: simplify fingerprint logic
Historically, we sometimes recorded imports based on either package
path ("net/http") or object file path ("net/http.a"). But modern Go
build systems always use package path, and the extra ".a" suffix
doesn't mean anything anyway.
Change-Id: I6060ef8bafa324168710d152a353f4d8db062133
Reviewed-on: https://go-review.googlesource.com/c/go/+/395254
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Diffstat (limited to 'src/cmd')
| -rw-r--r-- | src/cmd/compile/internal/noder/import.go | 10 | ||||
| -rw-r--r-- | src/cmd/link/internal/ld/ld.go | 53 |
2 files changed, 17 insertions, 46 deletions
diff --git a/src/cmd/compile/internal/noder/import.go b/src/cmd/compile/internal/noder/import.go index 0898a298eb..7ba1b23d12 100644 --- a/src/cmd/compile/internal/noder/import.go +++ b/src/cmd/compile/internal/noder/import.go @@ -369,16 +369,8 @@ func addFingerprint(path string, f *os.File, end int64) error { } copy(fingerprint[:], buf[:]) + base.Ctxt.AddImport(path, fingerprint) - // assume files move (get installed) so don't record the full path - if base.Flag.Cfg.PackageFile != nil { - // If using a packageFile map, assume path_ can be recorded directly. - base.Ctxt.AddImport(path, fingerprint) - } else { - // For file "/Users/foo/go/pkg/darwin_amd64/math.a" record "math.a". - file := f.Name() - base.Ctxt.AddImport(file[len(file)-len(path)-len(".a"):], fingerprint) - } return nil } diff --git a/src/cmd/link/internal/ld/ld.go b/src/cmd/link/internal/ld/ld.go index 954921844c..aaad152e6f 100644 --- a/src/cmd/link/internal/ld/ld.go +++ b/src/cmd/link/internal/ld/ld.go @@ -96,19 +96,7 @@ func (ctxt *Link) readImportCfg(file string) { } func pkgname(ctxt *Link, lib string) string { - name := path.Clean(lib) - - // When using importcfg, we have the final package name. - if ctxt.PackageFile != nil { - return name - } - - // runtime.a -> runtime, runtime.6 -> runtime - pkg := name - if len(pkg) >= 2 && pkg[len(pkg)-2] == '.' { - pkg = pkg[:len(pkg)-2] - } - return pkg + return path.Clean(lib) } func findlib(ctxt *Link, lib string) (string, bool) { @@ -127,34 +115,25 @@ func findlib(ctxt *Link, lib string) (string, bool) { return "", false } } else { - if filepath.IsAbs(name) { - pname = name - } else { - pkg := pkgname(ctxt, lib) - // Add .a if needed; the new -importcfg modes - // do not put .a into the package name anymore. - // This only matters when people try to mix - // compiles using -importcfg with links not using -importcfg, - // such as when running quick things like - // 'go tool compile x.go && go tool link x.o' - // by hand against a standard library built using -importcfg. - if !strings.HasSuffix(name, ".a") && !strings.HasSuffix(name, ".o") { - name += ".a" - } - // try dot, -L "libdir", and then goroot. - for _, dir := range ctxt.Libdir { - if ctxt.linkShared { - pname = filepath.Join(dir, pkg+".shlibname") - if _, err := os.Stat(pname); err == nil { - isshlib = true - break - } - } - pname = filepath.Join(dir, name) + pkg := pkgname(ctxt, lib) + + // search -L "libdir" directories + for _, dir := range ctxt.Libdir { + if ctxt.linkShared { + pname = filepath.Join(dir, pkg+".shlibname") if _, err := os.Stat(pname); err == nil { + isshlib = true break } } + pname = filepath.Join(dir, name+".a") + if _, err := os.Stat(pname); err == nil { + break + } + pname = filepath.Join(dir, name+".o") + if _, err := os.Stat(pname); err == nil { + break + } } pname = filepath.Clean(pname) } |
