From: Josh Bleecher Snyder Date: Thu, 13 Apr 2017 15:00:09 +0000 (-0700) Subject: cmd/internal/obj: cache dwarfSym X-Git-Tag: go1.9beta1~703 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=7b5f94e76c2d2adc0bc380aa50dfd7b5227cb958;p=gostls13.git cmd/internal/obj: cache dwarfSym Follow-up to review feedback from mdempsky on CL 40507. Reduces mutex contention by about 1%. Change-Id: I540ea6772925f4a59e58f55a3458eff15880c328 Reviewed-on: https://go-review.googlesource.com/40575 Run-TryBot: Josh Bleecher Snyder Reviewed-by: Brad Fitzpatrick --- diff --git a/src/cmd/internal/obj/link.go b/src/cmd/internal/obj/link.go index fc0305344f..893ccf674a 100644 --- a/src/cmd/internal/obj/link.go +++ b/src/cmd/internal/obj/link.go @@ -324,11 +324,12 @@ type LSym struct { // A FuncInfo contains extra fields for STEXT symbols. type FuncInfo struct { - Args int32 - Locals int32 - Text *Prog - Autom []*Auto - Pcln Pcln + Args int32 + Locals int32 + Text *Prog + Autom []*Auto + Pcln Pcln + dwarfSym *LSym } // Attribute is a set of symbol attributes. diff --git a/src/cmd/internal/obj/objfile.go b/src/cmd/internal/obj/objfile.go index a4a9091bb9..518aab18da 100644 --- a/src/cmd/internal/obj/objfile.go +++ b/src/cmd/internal/obj/objfile.go @@ -560,7 +560,10 @@ func (ctxt *Link) dwarfSym(s *LSym) *LSym { if s.Type != STEXT { ctxt.Diag("dwarfSym of non-TEXT %v", s) } - return ctxt.Lookup(dwarf.InfoPrefix+s.Name, int(s.Version)) + if s.FuncInfo.dwarfSym == nil { + s.FuncInfo.dwarfSym = ctxt.Lookup(dwarf.InfoPrefix+s.Name, int(s.Version)) + } + return s.FuncInfo.dwarfSym } // populateDWARF fills in the DWARF Debugging Information Entry for TEXT symbol s.