mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/link: move Plt, Got fields in sym.Symbol to cold section
The sym.Symbol 'Plt' and 'Got' field are used only with cgo and/or external linking and are not needed for most symbols. Relocate them to sym.AuxSymbol so as to shrink the main Symbol struct. Updates #26186 Change-Id: I170d628a760be300a0c1f738f0998970e91ce3d6 Reviewed-on: https://go-review.googlesource.com/125478 Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
2975914a1a
commit
f78cc1324a
10 changed files with 100 additions and 68 deletions
|
|
@ -197,7 +197,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
|
|||
if targ.Type == sym.SDYNIMPORT {
|
||||
addpltsym(ctxt, targ)
|
||||
r.Sym = ctxt.Syms.Lookup(".plt", 0)
|
||||
r.Add += int64(targ.Plt)
|
||||
r.Add += int64(targ.Plt())
|
||||
}
|
||||
|
||||
return true
|
||||
|
|
@ -230,7 +230,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
|
|||
addgotsym(ctxt, targ)
|
||||
r.Type = objabi.R_CONST // write r->add during relocsym
|
||||
r.Sym = nil
|
||||
r.Add += int64(targ.Got)
|
||||
r.Add += int64(targ.Got())
|
||||
return true
|
||||
|
||||
case 256 + objabi.RelocType(elf.R_386_GOTOFF):
|
||||
|
|
@ -261,7 +261,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
|
|||
if targ.Type == sym.SDYNIMPORT {
|
||||
addpltsym(ctxt, targ)
|
||||
r.Sym = ctxt.Syms.Lookup(".plt", 0)
|
||||
r.Add = int64(targ.Plt)
|
||||
r.Add = int64(targ.Plt())
|
||||
r.Type = objabi.R_PCREL
|
||||
return true
|
||||
}
|
||||
|
|
@ -285,7 +285,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
|
|||
|
||||
addgotsym(ctxt, targ)
|
||||
r.Sym = ctxt.Syms.Lookup(".got", 0)
|
||||
r.Add += int64(targ.Got)
|
||||
r.Add += int64(targ.Got())
|
||||
r.Type = objabi.R_PCREL
|
||||
return true
|
||||
}
|
||||
|
|
@ -303,7 +303,7 @@ func adddynrel(ctxt *ld.Link, s *sym.Symbol, r *sym.Reloc) bool {
|
|||
}
|
||||
addpltsym(ctxt, targ)
|
||||
r.Sym = ctxt.Syms.Lookup(".plt", 0)
|
||||
r.Add = int64(targ.Plt)
|
||||
r.Add = int64(targ.Plt())
|
||||
return true
|
||||
|
||||
case objabi.R_ADDR:
|
||||
|
|
@ -538,7 +538,7 @@ func elfsetupplt(ctxt *ld.Link) {
|
|||
}
|
||||
|
||||
func addpltsym(ctxt *ld.Link, s *sym.Symbol) {
|
||||
if s.Plt >= 0 {
|
||||
if s.Plt() >= 0 {
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -576,7 +576,7 @@ func addpltsym(ctxt *ld.Link, s *sym.Symbol) {
|
|||
|
||||
rel.AddUint32(ctxt.Arch, ld.ELF32_R_INFO(uint32(s.Dynid), uint32(elf.R_386_JMP_SLOT)))
|
||||
|
||||
s.Plt = int32(plt.Size - 16)
|
||||
s.SetPlt(int32(plt.Size - 16))
|
||||
} else if ctxt.HeadType == objabi.Hdarwin {
|
||||
// Same laziness as in 6l.
|
||||
|
||||
|
|
@ -587,29 +587,29 @@ func addpltsym(ctxt *ld.Link, s *sym.Symbol) {
|
|||
ctxt.Syms.Lookup(".linkedit.plt", 0).AddUint32(ctxt.Arch, uint32(s.Dynid))
|
||||
|
||||
// jmpq *got+size(IP)
|
||||
s.Plt = int32(plt.Size)
|
||||
s.SetPlt(int32(plt.Size))
|
||||
|
||||
plt.AddUint8(0xff)
|
||||
plt.AddUint8(0x25)
|
||||
plt.AddAddrPlus(ctxt.Arch, ctxt.Syms.Lookup(".got", 0), int64(s.Got))
|
||||
plt.AddAddrPlus(ctxt.Arch, ctxt.Syms.Lookup(".got", 0), int64(s.Got()))
|
||||
} else {
|
||||
ld.Errorf(s, "addpltsym: unsupported binary format")
|
||||
}
|
||||
}
|
||||
|
||||
func addgotsym(ctxt *ld.Link, s *sym.Symbol) {
|
||||
if s.Got >= 0 {
|
||||
if s.Got() >= 0 {
|
||||
return
|
||||
}
|
||||
|
||||
ld.Adddynsym(ctxt, s)
|
||||
got := ctxt.Syms.Lookup(".got", 0)
|
||||
s.Got = int32(got.Size)
|
||||
s.SetGot(int32(got.Size))
|
||||
got.AddUint32(ctxt.Arch, 0)
|
||||
|
||||
if ctxt.IsELF {
|
||||
rel := ctxt.Syms.Lookup(".rel", 0)
|
||||
rel.AddAddrPlus(ctxt.Arch, got, int64(s.Got))
|
||||
rel.AddAddrPlus(ctxt.Arch, got, int64(s.Got()))
|
||||
rel.AddUint32(ctxt.Arch, ld.ELF32_R_INFO(uint32(s.Dynid), uint32(elf.R_386_GLOB_DAT)))
|
||||
} else if ctxt.HeadType == objabi.Hdarwin {
|
||||
ctxt.Syms.Lookup(".linkedit.got", 0).AddUint32(ctxt.Arch, uint32(s.Dynid))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue