Skip to content

Commit dfcddd7

Browse files
committed
cleanup(symbolizer): Ditch fast mode
The symbols are now heavily cached making the fast mode obsolete.
1 parent a84c1a1 commit dfcddd7

File tree

1 file changed

+8
-38
lines changed

1 file changed

+8
-38
lines changed

pkg/symbolize/symbolizer.go

Lines changed: 8 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -318,16 +318,6 @@ func (s *Symbolizer) processCallstack(e *kevent.Kevent) error {
318318
s.mu.Lock()
319319
defer s.mu.Unlock()
320320

321-
if e.IsCreateFile() && e.IsOpenDisposition() {
322-
// for high-volume events decorating
323-
// the frames with symbol information
324-
// is not viable. For this reason, the
325-
// frames are decorated in fast mode.
326-
// In this mode, symbolization is skipped
327-
s.pushFrames(addrs, e, true, false)
328-
return nil
329-
}
330-
331321
if e.PS != nil {
332322
var (
333323
addr va.Address
@@ -398,7 +388,7 @@ func (s *Symbolizer) processCallstack(e *kevent.Kevent) error {
398388

399389
// try to resolve addresses from process
400390
// state and PE export directory data
401-
s.pushFrames(addrs, e, false, true)
391+
s.pushFrames(addrs, e)
402392

403393
return nil
404394
}
@@ -407,22 +397,21 @@ func (s *Symbolizer) processCallstack(e *kevent.Kevent) error {
407397
if !ok {
408398
handle, err := windows.OpenProcess(windows.SYNCHRONIZE|windows.PROCESS_QUERY_INFORMATION, false, e.PID)
409399
if err != nil {
410-
s.pushFrames(addrs, e, true, true)
400+
s.pushFrames(addrs, e)
411401
return err
412402
}
413403
// initialize symbol handler
414404
opts := uint32(sys.SymUndname | sys.SymCaseInsensitive | sys.SymAutoPublics | sys.SymOmapFindNearest | sys.SymDeferredLoads)
415405
err = s.r.Initialize(handle, opts)
416406
if err != nil {
417-
s.pushFrames(addrs, e, true, true)
407+
s.pushFrames(addrs, e)
418408
return ErrSymInitialize(e.PID)
419409
}
420410
proc = &process{e.PID, handle, time.Now(), 1}
421411
s.procs[e.PID] = proc
422412
}
423413

424-
// perform full symbolization
425-
s.pushFrames(addrs, e, false, true)
414+
s.pushFrames(addrs, e)
426415

427416
proc.keepalive()
428417

@@ -434,24 +423,20 @@ func (s *Symbolizer) processCallstack(e *kevent.Kevent) error {
434423
// addresses where the first element is the
435424
// most recent kernel return address that is
436425
// pushed last into the event callstack.
437-
func (s *Symbolizer) pushFrames(addrs []va.Address, e *kevent.Kevent, fast, lookupExport bool) {
426+
func (s *Symbolizer) pushFrames(addrs []va.Address, e *kevent.Kevent) {
438427
for i := len(addrs) - 1; i >= 0; i-- {
439-
e.Callstack.PushFrame(s.produceFrame(addrs[i], e, fast, lookupExport))
428+
e.Callstack.PushFrame(s.produceFrame(addrs[i], e))
440429
}
441430
}
442431

443432
// produceFrame fabrics a decorated stack frame.
444433
// For return addresses residing in the kernel
445434
// address space, the symbolization is always
446-
// performed. For userspace address range, if
447-
// fast mode is enabled, the frame is solely
448-
// decorated with the module name by iterating
449-
// through modules contained in the process
450-
// state. All symbols are resolved from the
435+
// performed. All symbols are resolved from the
451436
// PE export directory entries. If either the
452437
// symbol or module are not resolved, then we
453438
// fall back to Debug API.
454-
func (s *Symbolizer) produceFrame(addr va.Address, e *kevent.Kevent, fast, lookupExport bool) kevent.Frame {
439+
func (s *Symbolizer) produceFrame(addr va.Address, e *kevent.Kevent) kevent.Frame {
455440
frame := kevent.Frame{PID: e.PID, Addr: addr}
456441
if addr.InSystemRange() {
457442
if s.config.SymbolizeKernelAddresses {
@@ -470,21 +455,6 @@ func (s *Symbolizer) produceFrame(addr va.Address, e *kevent.Kevent, fast, looku
470455
}
471456
}
472457

473-
if fast {
474-
if e.PS != nil {
475-
mod := e.PS.FindModuleByVa(addr)
476-
if mod != nil {
477-
frame.Module = mod.Name
478-
frame.ModuleAddress = mod.BaseAddress
479-
}
480-
if lookupExport {
481-
frame.Symbol = s.resolveSymbolFromExportDirectory(addr, mod)
482-
}
483-
return frame
484-
}
485-
return frame
486-
}
487-
488458
if e.PS != nil {
489459
mod := e.PS.FindModuleByVa(addr)
490460
// perform lookup against parent modules

0 commit comments

Comments
 (0)