mirror of https://github.com/golang/go.git
[dev.link] cmd/link: read symbol type only when necessary in elfreloc1
Slightly speeds up Asmb2. Linking cmd/compile with external linking: Asmb2 190ms ± 2% 182ms ± 2% -4.14% (p=0.000 n=10+9) Change-Id: I55511d0e7b0511b60f8d02390076f8566bc7d135 Reviewed-on: https://go-review.googlesource.com/c/go/+/240397 Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Than McIntosh <thanm@google.com>
This commit is contained in:
parent
92051a989b
commit
b473a1f8da
|
|
@ -389,7 +389,6 @@ func elfreloc1(ctxt *ld.Link, ldr *loader.Loader, s loader.Sym, r loader.ExtRelo
|
|||
|
||||
elfsym := ld.ElfSymForReloc(ctxt, r.Xsym)
|
||||
siz := r.Siz()
|
||||
xst := ldr.SymType(r.Xsym)
|
||||
switch r.Type() {
|
||||
default:
|
||||
return false
|
||||
|
|
@ -415,7 +414,7 @@ func elfreloc1(ctxt *ld.Link, ldr *loader.Loader, s loader.Sym, r loader.ExtRelo
|
|||
}
|
||||
case objabi.R_CALL:
|
||||
if siz == 4 {
|
||||
if xst == sym.SDYNIMPORT {
|
||||
if ldr.SymType(r.Xsym) == sym.SDYNIMPORT {
|
||||
if ctxt.DynlinkingGo() {
|
||||
ctxt.Out.Write64(uint64(elf.R_X86_64_PLT32) | uint64(elfsym)<<32)
|
||||
} else {
|
||||
|
|
@ -429,7 +428,7 @@ func elfreloc1(ctxt *ld.Link, ldr *loader.Loader, s loader.Sym, r loader.ExtRelo
|
|||
}
|
||||
case objabi.R_PCREL:
|
||||
if siz == 4 {
|
||||
if xst == sym.SDYNIMPORT && ldr.SymElfType(r.Xsym) == elf.STT_FUNC {
|
||||
if ldr.SymType(r.Xsym) == sym.SDYNIMPORT && ldr.SymElfType(r.Xsym) == elf.STT_FUNC {
|
||||
ctxt.Out.Write64(uint64(elf.R_X86_64_PLT32) | uint64(elfsym)<<32)
|
||||
} else {
|
||||
ctxt.Out.Write64(uint64(elf.R_X86_64_PC32) | uint64(elfsym)<<32)
|
||||
|
|
|
|||
|
|
@ -224,7 +224,6 @@ func elfreloc1(ctxt *ld.Link, ldr *loader.Loader, s loader.Sym, r loader.ExtRelo
|
|||
|
||||
elfsym := ld.ElfSymForReloc(ctxt, r.Xsym)
|
||||
siz := r.Siz()
|
||||
xst := ldr.SymType(r.Xsym)
|
||||
switch r.Type() {
|
||||
default:
|
||||
return false
|
||||
|
|
@ -271,7 +270,7 @@ func elfreloc1(ctxt *ld.Link, ldr *loader.Loader, s loader.Sym, r loader.ExtRelo
|
|||
case objabi.R_PCRELDBL, objabi.R_CALL:
|
||||
isdbl = true
|
||||
}
|
||||
if xst == sym.SDYNIMPORT && (ldr.SymElfType(r.Xsym) == elf.STT_FUNC || r.Type() == objabi.R_CALL) {
|
||||
if ldr.SymType(r.Xsym) == sym.SDYNIMPORT && (ldr.SymElfType(r.Xsym) == elf.STT_FUNC || r.Type() == objabi.R_CALL) {
|
||||
if isdbl {
|
||||
switch siz {
|
||||
case 2:
|
||||
|
|
|
|||
Loading…
Reference in New Issue