diff options
Diffstat (limited to 'src/cmd/link/internal/objfile/objfile.go')
-rw-r--r-- | src/cmd/link/internal/objfile/objfile.go | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/cmd/link/internal/objfile/objfile.go b/src/cmd/link/internal/objfile/objfile.go index 3a8923b073..77c3a7f914 100644 --- a/src/cmd/link/internal/objfile/objfile.go +++ b/src/cmd/link/internal/objfile/objfile.go @@ -13,6 +13,7 @@ import ( "bytes" "cmd/internal/bio" "cmd/internal/dwarf" + "cmd/internal/obj" "cmd/internal/objabi" "cmd/internal/sys" "cmd/link/internal/sym" @@ -23,8 +24,8 @@ import ( ) const ( - startmagic = "\x00\x00go19ld" - endmagic = "\xff\xffgo19ld" + startmagic = "\x00go112ld" + endmagic = "\xffgo112ld" ) var emptyPkg = []byte(`"".`) @@ -382,17 +383,20 @@ func (r *objReader) readRef() { log.Fatalf("readSym out of sync") } name := r.readSymName() - v := r.readInt() - if v != 0 && v != 1 { - log.Fatalf("invalid symbol version for %q: %d", name, v) - } - if v == 1 { + var v int + if abi := r.readInt(); abi == -1 { + // Static v = r.localSymVersion + } else if abiver := sym.ABIToVersion(obj.ABI(abi)); abiver != -1 { + // Note that data symbols are "ABI0", which maps to version 0. + v = abiver + } else { + log.Fatalf("invalid symbol ABI for %q: %d", name, abi) } s := r.syms.Lookup(name, v) r.refs = append(r.refs, s) - if s == nil || v != 0 { + if s == nil || v == r.localSymVersion { return } if s.Name[0] == '$' && len(s.Name) > 5 && s.Type == 0 && len(s.P) == 0 { |