]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.link] cmd/link: read symbol type only when necessary in elfreloc1
authorCherry Zhang <cherryyz@google.com>
Fri, 26 Jun 2020 18:06:41 +0000 (14:06 -0400)
committerCherry Zhang <cherryyz@google.com>
Tue, 30 Jun 2020 15:55:36 +0000 (15:55 +0000)
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>
src/cmd/link/internal/amd64/asm.go
src/cmd/link/internal/s390x/asm.go

index 659c03e5dc02130e0635f93a3f553b6d891f25c7..e07321f855162bebf698f5a0160f151b09281489 100644 (file)
@@ -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)
index 11406ee51eb8fee95e3d05040fa5309db1db874f..f9bb12bb19d93af570f8a0255c0b56690f2e81f1 100644 (file)
@@ -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: