[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>
diff --git a/src/cmd/link/internal/amd64/asm.go b/src/cmd/link/internal/amd64/asm.go
index 659c03e..e07321f 100644
--- a/src/cmd/link/internal/amd64/asm.go
+++ b/src/cmd/link/internal/amd64/asm.go
@@ -389,7 +389,6 @@
elfsym := ld.ElfSymForReloc(ctxt, r.Xsym)
siz := r.Siz()
- xst := ldr.SymType(r.Xsym)
switch r.Type() {
default:
return false
@@ -415,7 +414,7 @@
}
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 @@
}
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)
diff --git a/src/cmd/link/internal/s390x/asm.go b/src/cmd/link/internal/s390x/asm.go
index 11406ee..f9bb12b 100644
--- a/src/cmd/link/internal/s390x/asm.go
+++ b/src/cmd/link/internal/s390x/asm.go
@@ -224,7 +224,6 @@
elfsym := ld.ElfSymForReloc(ctxt, r.Xsym)
siz := r.Siz()
- xst := ldr.SymType(r.Xsym)
switch r.Type() {
default:
return false
@@ -271,7 +270,7 @@
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: