Skip to content

Commit

Permalink
cmd/compile: simplify fingerprint logic
Browse files Browse the repository at this point in the history
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 <[email protected]>
Run-TryBot: Matthew Dempsky <[email protected]>
TryBot-Result: Gopher Robot <[email protected]>
Reviewed-by: Cherry Mui <[email protected]>
  • Loading branch information
mdempsky committed Mar 25, 2022
1 parent 3dac914 commit 3dac99a
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 51 deletions.
10 changes: 1 addition & 9 deletions src/cmd/compile/internal/noder/import.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down
53 changes: 16 additions & 37 deletions src/cmd/link/internal/ld/ld.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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)
}
Expand Down
12 changes: 7 additions & 5 deletions test/fixedbugs/bug369.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// +build !nacl,!js,!windows,gc
// +build !nacl,!js,gc
// run

// Copyright 2011 The Go Authors. All rights reserved.
Expand Down Expand Up @@ -29,10 +29,12 @@ func main() {
return filepath.Join(tmpDir, name)
}

run("go", "tool", "compile", "-p=pkg", "-N", "-o", tmp("slow.o"), "pkg.go")
run("go", "tool", "compile", "-p=pkg", "-o", tmp("fast.o"), "pkg.go")
run("go", "tool", "compile", "-p=main", "-D", tmpDir, "-o", tmp("main.o"), "main.go")
run("go", "tool", "link", "-o", tmp("a.exe"), tmp("main.o"))
check(os.Mkdir(tmp("test"), 0777))

run("go", "tool", "compile", "-p=test/slow", "-N", "-o", tmp("test/slow.o"), "pkg.go")
run("go", "tool", "compile", "-p=test/fast", "-o", tmp("test/fast.o"), "pkg.go")
run("go", "tool", "compile", "-p=main", "-D", "test", "-I", tmpDir, "-o", tmp("main.o"), "main.go")
run("go", "tool", "link", "-L", tmpDir, "-o", tmp("a.exe"), tmp("main.o"))
run(tmp("a.exe"))
}

Expand Down

0 comments on commit 3dac99a

Please sign in to comment.