From 7b5f94e76c2d2adc0bc380aa50dfd7b5227cb958 Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Thu, 13 Apr 2017 08:00:09 -0700 Subject: [PATCH] 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 --- src/cmd/internal/obj/link.go | 11 ++++++----- src/cmd/internal/obj/objfile.go | 5 ++++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/cmd/internal/obj/link.go b/src/cmd/internal/obj/link.go index fc0305344f0..893ccf674a7 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 a4a9091bb91..518aab18dae 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.