aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/report
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2025-02-28 13:57:50 +0100
committerTaras Madan <tarasmadan@google.com>2025-03-07 10:23:01 +0000
commit7e3bd60dd6c8f783f5a418c64aa75f6818236dc4 (patch)
tree24dce56dc037521e340e73f45ba41c8b6c264af2 /pkg/report
parent831e3629115be4f5e68e6e0df3a5b07eed26daa4 (diff)
pkg/symbolizer: introduce Symbolizer interface
To simplify interface Read*Symbols were moved out from symbolizer.Symbolizer.
Diffstat (limited to 'pkg/report')
-rw-r--r--pkg/report/bsd.go7
-rw-r--r--pkg/report/bsd_test.go54
-rw-r--r--pkg/report/fuchsia.go4
-rw-r--r--pkg/report/linux.go7
4 files changed, 36 insertions, 36 deletions
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)