aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/report/linux.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2022-07-11 13:26:59 +0000
committerAleksandr Nogikh <wp32pw@gmail.com>2022-07-12 15:59:14 +0200
commitdb33b3dda2268ab83d456651df956500b1caea5f (patch)
treeb4c347443bdb7b9f1a70eb2858c5bb4733c9c80e /pkg/report/linux.go
parentda3d6955d5ab2888e1d0a86d6401d2aaf48406f3 (diff)
pkg/report: don't decompile opcodes for hanged reports
It doesn't bring any extra value and only makes the reports bigger. Don't do such decompilation for hang-related reports. Refactor the opcode tests to rely more on the more generic NewReporter constructor.
Diffstat (limited to 'pkg/report/linux.go')
-rw-r--r--pkg/report/linux.go21
1 files changed, 13 insertions, 8 deletions
diff --git a/pkg/report/linux.go b/pkg/report/linux.go
index d69370dcd..cff8b7d5f 100644
--- a/pkg/report/linux.go
+++ b/pkg/report/linux.go
@@ -367,7 +367,7 @@ func (ctx *linux) Symbolize(rep *Report) error {
}
}
- rep.Report = ctx.decompileReportOpcodes(rep.Report)
+ rep.Report = ctx.decompileOpcodes(rep.Report, rep)
// We still do this even if we did not symbolize,
// because tests pass in already symbolized input.
@@ -623,14 +623,19 @@ func (ctx *linux) parseOpcodes(codeSlice string) (parsedOpcodes, error) {
}, nil
}
-// decompileReportOpcodes detects the most meaningful "Code: " lines from the report, decompiles
+// decompileOpcodes detects the most meaningful "Code: " lines from the report, decompiles
// them and appends a human-readable listing to the end of the report.
-func (ctx *linux) decompileReportOpcodes(report []byte) []byte {
+func (ctx *linux) decompileOpcodes(text []byte, report *Report) []byte {
+ if report.Type == Hang {
+ // Even though Hang reports do contain the Code: section, there's no point in
+ // decompiling that. So just return the text.
+ return text
+ }
// Iterate over all "Code: " lines and pick the first that could be decompiled
// that might be of interest to the user.
var decompiled *decompiledOpcodes
var prevLine []byte
- for s := bufio.NewScanner(bytes.NewReader(report)); s.Scan(); prevLine = append([]byte{}, s.Bytes()...) {
+ for s := bufio.NewScanner(bytes.NewReader(text)); s.Scan(); prevLine = append([]byte{}, s.Bytes()...) {
// We want to avoid decompiling code from user-space as it is not of big interest during
// debugging kernel problems.
// For now this check only works for x86/amd64, but Linux on other architectures supported
@@ -651,7 +656,7 @@ func (ctx *linux) decompileReportOpcodes(report []byte) []byte {
}
if decompiled == nil {
- return report
+ return text
}
skipInfo := ""
@@ -664,7 +669,7 @@ func (ctx *linux) decompileReportOpcodes(report []byte) []byte {
// the most important information at the top of the report, so that it is visible from
// the syzbot dashboard without scrolling.
headLine := fmt.Sprintf("----------------\nCode disassembly (best guess)%v:\n", skipInfo)
- report = append(report, headLine...)
+ text = append(text, headLine...)
for idx, opcode := range decompiled.opcodes {
line := opcode.FullDescription
@@ -673,9 +678,9 @@ func (ctx *linux) decompileReportOpcodes(report []byte) []byte {
} else {
line += "\n"
}
- report = append(report, line...)
+ text = append(text, line...)
}
- return report
+ return text
}
func (ctx *linux) extractGuiltyFile(rep *Report) string {