aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCherry Zhang <cherryyz@google.com>2020-03-25 12:06:59 -0400
committerCherry Zhang <cherryyz@google.com>2020-03-30 13:52:55 +0000
commit3e6ff18247f340794419258c49badfd9a7aa6842 (patch)
tree5198aaf6b2ba9f60ee6f50e11d5a6544de5fa6e7
parent7716d7fc1b025049b6377f5e7ce184d8e6671678 (diff)
downloadgo-3e6ff18247f340794419258c49badfd9a7aa6842.tar.gz
go-3e6ff18247f340794419258c49badfd9a7aa6842.zip
[dev.link] cmd/link, cmd/oldlink: detect object file format mismatch
When using the new(old) linker but an old(new) object file is found, give a better error message. Change-Id: I94786f1a4b527c15c4f5b00457eab60d215a72a0 Reviewed-on: https://go-review.googlesource.com/c/go/+/225457 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: Than McIntosh <thanm@google.com>
-rw-r--r--src/cmd/link/internal/loader/loader.go3
-rw-r--r--src/cmd/oldlink/internal/objfile/objfile.go4
2 files changed, 7 insertions, 0 deletions
diff --git a/src/cmd/link/internal/loader/loader.go b/src/cmd/link/internal/loader/loader.go
index 3b77a4bff3..c04cc03b3e 100644
--- a/src/cmd/link/internal/loader/loader.go
+++ b/src/cmd/link/internal/loader/loader.go
@@ -1667,6 +1667,9 @@ func (l *Loader) Preload(syms *sym.Symbols, f *bio.Reader, lib *sym.Library, uni
}
r := goobj2.NewReaderFromBytes(roObject, readonly)
if r == nil {
+ if len(roObject) >= 8 && bytes.Equal(roObject[:8], []byte("\x00go114ld")) {
+ log.Fatalf("found object file %s in old format, but -go115newobj is true\nset -go115newobj consistently in all -gcflags, -asmflags, and -ldflags", f.File().Name())
+ }
panic("cannot read object file")
}
localSymVersion := syms.IncVersion()
diff --git a/src/cmd/oldlink/internal/objfile/objfile.go b/src/cmd/oldlink/internal/objfile/objfile.go
index 83b931ddef..7be433ad40 100644
--- a/src/cmd/oldlink/internal/objfile/objfile.go
+++ b/src/cmd/oldlink/internal/objfile/objfile.go
@@ -13,6 +13,7 @@ import (
"bytes"
"cmd/internal/bio"
"cmd/internal/dwarf"
+ "cmd/internal/goobj2"
"cmd/internal/obj"
"cmd/internal/objabi"
"cmd/internal/sys"
@@ -117,6 +118,9 @@ func (r *objReader) loadObjFile() {
var buf [8]uint8
r.readFull(buf[:])
if string(buf[:]) != startmagic {
+ if string(buf[:]) == goobj2.Magic {
+ log.Fatalf("found object file %s in new format, but -go115newobj is false\nset -go115newobj consistently in all -gcflags, -asmflags, and -ldflags", r.pn)
+ }
log.Fatalf("%s: invalid file start %x %x %x %x %x %x %x %x", r.pn, buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7])
}