From 7e3bd60dd6c8f783f5a418c64aa75f6818236dc4 Mon Sep 17 00:00:00 2001 From: Taras Madan Date: Fri, 28 Feb 2025 13:57:50 +0100 Subject: pkg/symbolizer: introduce Symbolizer interface To simplify interface Read*Symbols were moved out from symbolizer.Symbolizer. --- pkg/report/bsd.go | 7 +++---- pkg/report/bsd_test.go | 54 ++++++++++++++++++++++++++------------------------ pkg/report/fuchsia.go | 4 ++-- pkg/report/linux.go | 7 +++---- 4 files changed, 36 insertions(+), 36 deletions(-) (limited to 'pkg/report') diff --git a/pkg/report/bsd.go b/pkg/report/bsd.go index 75cfa3426..05ae5a4cf 100644 --- a/pkg/report/bsd.go +++ b/pkg/report/bsd.go @@ -28,8 +28,7 @@ func ctorBSD(cfg *config, oopses []*oops, symbolizeRes []*regexp.Regexp) (report if cfg.kernelObj != "" { kernelObject = filepath.Join(cfg.kernelObj, cfg.target.KernelObject) var err error - symb := symbolizer.NewSymbolizer(cfg.target) - symbols, err = symb.ReadTextSymbols(kernelObject) + symbols, err = symbolizer.ReadTextSymbols(kernelObject) if err != nil { return nil, err } @@ -53,7 +52,7 @@ func (ctx *bsd) Parse(output []byte) *Report { } func (ctx *bsd) Symbolize(rep *Report) error { - symb := symbolizer.NewSymbolizer(ctx.config.target) + symb := symbolizer.Make(ctx.config.target) defer symb.Close() var symbolized []byte prefix := rep.reportPrefixLen @@ -70,7 +69,7 @@ func (ctx *bsd) Symbolize(rep *Report) error { return nil } -func (ctx *bsd) symbolizeLine(symbFunc func(bin string, pc uint64) ([]symbolizer.Frame, error), +func (ctx *bsd) symbolizeLine(symbFunc func(string, ...uint64) ([]symbolizer.Frame, error), line []byte) []byte { var match []int // Check whether the line corresponds to the any of the parts that require symbolization. diff --git a/pkg/report/bsd_test.go b/pkg/report/bsd_test.go index 1fd721d3f..f3a1bf31d 100644 --- a/pkg/report/bsd_test.go +++ b/pkg/report/bsd_test.go @@ -24,37 +24,39 @@ func testSymbolizeLine(t *testing.T, ctor fn, tests []symbolizeLineTest) { {Addr: 0x81237520, Size: 0x173}, }, } - symb := func(bin string, pc uint64) ([]symbolizer.Frame, error) { - if bin != "bsd.gdb" { - return nil, fmt.Errorf("unknown pc 0x%x", pc) - } + symb := func(bin string, pcs ...uint64) ([]symbolizer.Frame, error) { + var res []symbolizer.Frame + for _, pc := range pcs { + if bin != "bsd.gdb" { + return nil, fmt.Errorf("unknown pc 0x%x", pc) + } - switch pc & 0xffffffff { - case 0x8150894f: - return []symbolizer.Frame{ - { + switch pc & 0xffffffff { + case 0x8150894f: + res = append(res, symbolizer.Frame{ Func: "closef", File: "/bsd/src/kern_descrip.c", Line: 1241, - }, - }, nil - case 0x81237542: - return []symbolizer.Frame{ - { - Func: "sleep_finish_timeout", - File: "/bsd/src/kern_synch.c", - Line: 336, - Inline: true, - }, - { - Func: "sleep_finish_all", - File: "/bsd/src/kern_synch.c", - Line: 157, - }, - }, nil - default: - return nil, fmt.Errorf("unknown pc 0x%x", pc) + }) + case 0x81237542: + res = append(res, + symbolizer.Frame{ + Func: "sleep_finish_timeout", + File: "/bsd/src/kern_synch.c", + Line: 336, + Inline: true, + }, + symbolizer.Frame{ + Func: "sleep_finish_all", + File: "/bsd/src/kern_synch.c", + Line: 157, + }, + ) + default: + return nil, fmt.Errorf("unknown pc 0x%x", pc) + } } + return res, nil } reporter, _, err := ctor(&config{ kernelSrc: "/bsd/src2", diff --git a/pkg/report/fuchsia.go b/pkg/report/fuchsia.go index 51d200251..8d66365f7 100644 --- a/pkg/report/fuchsia.go +++ b/pkg/report/fuchsia.go @@ -134,7 +134,7 @@ func (ctx *fuchsia) shortenReport(report []byte) []byte { } func (ctx *fuchsia) symbolize(output []byte) []byte { - symb := symbolizer.NewSymbolizer(ctx.config.target) + symb := symbolizer.Make(ctx.config.target) defer symb.Close() out := new(bytes.Buffer) @@ -167,7 +167,7 @@ func (ctx *fuchsia) symbolize(output []byte) []byte { return out.Bytes() } -func (ctx *fuchsia) processPC(out *bytes.Buffer, symb *symbolizer.Symbolizer, +func (ctx *fuchsia) processPC(out *bytes.Buffer, symb symbolizer.Symbolizer, line []byte, match []int, call bool) bool { prefix := line[match[0]:match[1]] pcStart := match[2] - match[0] diff --git a/pkg/report/linux.go b/pkg/report/linux.go index cbe4a44be..a275236e0 100644 --- a/pkg/report/linux.go +++ b/pkg/report/linux.go @@ -42,8 +42,7 @@ func ctorLinux(cfg *config) (reporterImpl, []string, error) { if cfg.kernelObj != "" { vmlinux = filepath.Join(cfg.kernelObj, cfg.target.KernelObject) var err error - symb := symbolizer.NewSymbolizer(cfg.target) - symbols[""], err = symb.ReadTextSymbols(vmlinux) + symbols[""], err = symbolizer.ReadTextSymbols(vmlinux) if err != nil { return nil, nil, err } @@ -51,7 +50,7 @@ func ctorLinux(cfg *config) (reporterImpl, []string, error) { if mod.Name == "" { continue } - ss, err := symb.ReadTextSymbols(mod.Path) + ss, err := symbolizer.ReadTextSymbols(mod.Path) if err != nil { continue } @@ -408,7 +407,7 @@ func (ctx *linux) Symbolize(rep *Report) error { } func (ctx *linux) symbolize(rep *Report) error { - symb := symbolizer.NewSymbolizer(ctx.config.target) + symb := symbolizer.Make(ctx.config.target) defer symb.Close() symbFunc := func(bin string, pc uint64) ([]symbolizer.Frame, error) { return ctx.symbolizerCache.Symbolize(symb.Symbolize, bin, pc) -- cgit mrf-deployment