]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.link] cmd/internal/dwarf: revise Abbrevs() signature
authorThan McIntosh <thanm@google.com>
Fri, 1 May 2020 16:24:03 +0000 (12:24 -0400)
committerThan McIntosh <thanm@google.com>
Mon, 4 May 2020 10:55:04 +0000 (10:55 +0000)
The function Abbrevs() was returning an array of structures by value,
which is not very efficient (this was showing up in a kubernetes
kubelet linker profile). Switch the function to return a slice
instead.

Improves linker DwarfGenerateDebugSyms running time when
linking the compiler in compilebench:

DwarfGenerateDebugSyms   29.2ms ±144%  23.9ms ±125%  -17.89%  (p=0.000 n=99+99)

Change-Id: I1132816563f208c63eb82a7932d9f2bcb2455324
Reviewed-on: https://go-review.googlesource.com/c/go/+/231558
Run-TryBot: Than McIntosh <thanm@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/cmd/internal/dwarf/dwarf.go

index a17b574cdd8d97dd47c6d06e9aaebe3ff6102986..db013999da75abf9db71a5f98fb2cd2f3dd1b121 100644 (file)
@@ -398,9 +398,9 @@ func expandPseudoForm(form uint8) uint8 {
 
 // Abbrevs() returns the finalized abbrev array for the platform,
 // expanding any DW_FORM pseudo-ops to real values.
-func Abbrevs() [DW_NABRV]dwAbbrev {
+func Abbrevs() []dwAbbrev {
        if abbrevsFinalized {
-               return abbrevs
+               return abbrevs[:]
        }
        for i := 1; i < DW_NABRV; i++ {
                for j := 0; j < len(abbrevs[i].attr); j++ {
@@ -408,7 +408,7 @@ func Abbrevs() [DW_NABRV]dwAbbrev {
                }
        }
        abbrevsFinalized = true
-       return abbrevs
+       return abbrevs[:]
 }
 
 // abbrevs is a raw table of abbrev entries; it needs to be post-processed