]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.link] cmd/link: avoid allsyms loop in initarray setup
authorThan McIntosh <thanm@google.com>
Wed, 4 Dec 2019 14:47:22 +0000 (09:47 -0500)
committerThan McIntosh <thanm@google.com>
Wed, 4 Dec 2019 18:39:51 +0000 (18:39 +0000)
In the linker's symtab() function, avoid looping over the context's
Syms.Allsyms array to locate the entry symbol when setting up the init
array section; do an explicit ABI0 symbol lookup instead. This is a
minor efficiency tweak / code cleanup.

Fixes #20205.

Change-Id: I2ebc17a3cb2cd63e9f5052bc80f1b0ac72c960e3
Reviewed-on: https://go-review.googlesource.com/c/go/+/209838
Run-TryBot: Than McIntosh <thanm@google.com>
Reviewed-by: Jeremy Faller <jeremy@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/link/internal/ld/symtab.go

index bba623eb488ec31b8072c11b2c5102603676dd7a..b6734f69cceae43cdc3799fa6c0ef0e2f4b1780d 100644 (file)
@@ -326,12 +326,11 @@ func textsectionmap(ctxt *Link) uint32 {
 }
 
 func (ctxt *Link) symtab() {
-       switch ctxt.BuildMode {
-       case BuildModeCArchive, BuildModeCShared:
-               for _, s := range ctxt.Syms.Allsym {
-                       // Create a new entry in the .init_array section that points to the
-                       // library initializer function.
-                       if s.Name == *flagEntrySymbol && ctxt.HeadType != objabi.Haix {
+       if ctxt.HeadType != objabi.Haix {
+               switch ctxt.BuildMode {
+               case BuildModeCArchive, BuildModeCShared:
+                       s := ctxt.Syms.ROLookup(*flagEntrySymbol, sym.SymVerABI0)
+                       if s != nil {
                                addinitarrdata(ctxt, s)
                        }
                }