[dev.link] cmd/internal/dwarf: revise Abbrevs() signature

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>
This commit is contained in:
Than McIntosh 2020-05-01 12:24:03 -04:00
parent 24814e2147
commit 6ea7a196d0

View 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