mirror of
https://github.com/golang/go
synced 2024-11-23 18:30:06 -07:00
cmd/go: fix spurious rebuild of binaries using cgo on OS X
The text segment starts farther into the binary when using external linking on the mac. Test and fix. Fixes #12173. Change-Id: I1f0c81814bf70cd9decfceac3022784f4608eeef Reviewed-on: https://go-review.googlesource.com/13672 Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Rob Pike <r@golang.org> Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
3f016215a8
commit
d2cf46dedf
@ -6,6 +6,7 @@ package main_test
|
||||
|
||||
import (
|
||||
"cmd/go"
|
||||
"runtime"
|
||||
"testing"
|
||||
)
|
||||
|
||||
@ -22,4 +23,20 @@ func TestNoteReading(t *testing.T) {
|
||||
if id != buildID {
|
||||
t.Fatalf("buildID in hello binary = %q, want %q", id, buildID)
|
||||
}
|
||||
|
||||
switch runtime.GOOS {
|
||||
case "plan9":
|
||||
// no external linking
|
||||
t.Logf("no external linking - skipping linkmode=external test")
|
||||
|
||||
default:
|
||||
tg.run("build", "-ldflags", "-buildid="+buildID+" -linkmode=external", "-o", tg.path("hello.exe"), tg.path("hello.go"))
|
||||
id, err := main.ReadBuildIDFromBinary(tg.path("hello.exe"))
|
||||
if err != nil {
|
||||
t.Fatalf("reading build ID from hello binary (linkmode=external): %v", err)
|
||||
}
|
||||
if id != buildID {
|
||||
t.Fatalf("buildID in hello binary = %q, want %q (linkmode=external)", id, buildID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1796,10 +1796,10 @@ func ReadBuildIDFromBinary(filename string) (id string, err error) {
|
||||
return "", &os.PathError{Op: "parse", Path: filename, Err: errBuildIDUnknown}
|
||||
}
|
||||
|
||||
// Read the first 8 kB of the binary file.
|
||||
// Read the first 16 kB of the binary file.
|
||||
// That should be enough to find the build ID.
|
||||
// In ELF files, the build ID is in the leading headers,
|
||||
// which are typically less than 4 kB, not to mention 8 kB.
|
||||
// which are typically less than 4 kB, not to mention 16 kB.
|
||||
// On other systems, we're trying to read enough that
|
||||
// we get the beginning of the text segment in the read.
|
||||
// The offset where the text segment begins in a hello
|
||||
@ -1807,7 +1807,7 @@ func ReadBuildIDFromBinary(filename string) (id string, err error) {
|
||||
//
|
||||
// Plan 9: 0x20
|
||||
// Windows: 0x600
|
||||
// Mach-O: 0x1000
|
||||
// Mach-O: 0x2000
|
||||
//
|
||||
f, err := os.Open(filename)
|
||||
if err != nil {
|
||||
@ -1815,7 +1815,7 @@ func ReadBuildIDFromBinary(filename string) (id string, err error) {
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
data := make([]byte, 8192)
|
||||
data := make([]byte, 16*1024)
|
||||
_, err = io.ReadFull(f, data)
|
||||
if err == io.ErrUnexpectedEOF {
|
||||
err = nil
|
||||
|
Loading…
Reference in New Issue
Block a user