diff options
| author | Cherry Zhang <cherryyz@google.com> | 2019-12-03 10:38:43 -0500 |
|---|---|---|
| committer | Cherry Zhang <cherryyz@google.com> | 2019-12-03 10:38:43 -0500 |
| commit | f7672d39ca9eeb05d0605348290335698da98ae8 (patch) | |
| tree | 7f5bfe50f6f913ad60c983ad73936dfc8d808567 /src/cmd/link/internal/loadelf | |
| parent | 27c0aeee3fc7ed35f9b2eac4725b9147902537da (diff) | |
| parent | 2ac1ca9160f52907ce1cd04738c80b1c055b5ba6 (diff) | |
| download | go-f7672d39ca9eeb05d0605348290335698da98ae8.tar.xz | |
[dev.link] all: merge branch 'master' into dev.link
Bring in Than's fix of #35779.
The only merge conflict is cmd/link/internal/loadelf/ldelf.go,
with a modification-deletion conflict.
Change-Id: Id2fcfd2094a31120966a6ea9c462b4ec76646b10
Diffstat (limited to 'src/cmd/link/internal/loadelf')
| -rw-r--r-- | src/cmd/link/internal/loadelf/ldelf.go | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/cmd/link/internal/loadelf/ldelf.go b/src/cmd/link/internal/loadelf/ldelf.go index c32f32c32b..8bcba8b2f9 100644 --- a/src/cmd/link/internal/loadelf/ldelf.go +++ b/src/cmd/link/internal/loadelf/ldelf.go @@ -462,6 +462,9 @@ func parseArmAttributes(e binary.ByteOrder, data []byte) (found bool, ehdrFlags // TODO: find a better place for this logic. func Load(l *loader.Loader, arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pkg string, length int64, pn string, initEhdrFlags uint32) (textp []*sym.Symbol, ehdrFlags uint32, err error) { localSymVersion := syms.IncVersion() + newSym := func(name string, version int) *sym.Symbol { + return l.Create(name, syms) + } lookup := func(name string, version int) *sym.Symbol { return l.LookupOrCreate(name, version, syms) } @@ -758,7 +761,7 @@ func Load(l *loader.Loader, arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pk for i := 1; i < elfobj.nsymtab; i++ { var elfsym ElfSym - if err := readelfsym(lookup, arch, elfobj, i, &elfsym, 1, localSymVersion); err != nil { + if err := readelfsym(newSym, lookup, arch, elfobj, i, &elfsym, 1, localSymVersion); err != nil { return errorf("%s: malformed elf file: %v", pn, err) } symbols[i] = elfsym.sym @@ -929,7 +932,7 @@ func Load(l *loader.Loader, arch *sys.Arch, syms *sym.Symbols, f *bio.Reader, pk rp.Sym = nil } else { var elfsym ElfSym - if err := readelfsym(lookup, arch, elfobj, int(info>>32), &elfsym, 0, 0); err != nil { + if err := readelfsym(newSym, lookup, arch, elfobj, int(info>>32), &elfsym, 0, 0); err != nil { return errorf("malformed elf file: %v", err) } elfsym.sym = symbols[info>>32] @@ -1006,7 +1009,7 @@ func elfmap(elfobj *ElfObj, sect *ElfSect) (err error) { return nil } -func readelfsym(lookup func(string, int) *sym.Symbol, arch *sys.Arch, elfobj *ElfObj, i int, elfsym *ElfSym, needSym int, localSymVersion int) (err error) { +func readelfsym(newSym, lookup func(string, int) *sym.Symbol, arch *sys.Arch, elfobj *ElfObj, i int, elfsym *ElfSym, needSym int, localSymVersion int) (err error) { if i >= elfobj.nsymtab || i < 0 { err = fmt.Errorf("invalid elf symbol index") return err @@ -1092,7 +1095,10 @@ func readelfsym(lookup func(string, int) *sym.Symbol, arch *sys.Arch, elfobj *El // local names and hidden global names are unique // and should only be referenced by their index, not name, so we // don't bother to add them into the hash table - s = lookup(elfsym.name, localSymVersion) + // FIXME: pass empty string here for name? This would + // reduce mem use, but also (possibly) make it harder + // to debug problems. + s = newSym(elfsym.name, localSymVersion) s.Attr |= sym.AttrVisibilityHidden } |
