From 29b0fd90e6ac720fb21cc98ae89acfa6704b35bc Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Wed, 29 Nov 2017 17:53:07 +0100 Subject: pkg/report: include Maintainers into report Currently getting a complete report requires a complex, multi-step dance (including getting information that external users are not interested in -- guilty file). Simplify interface down to 2 functions: Parse and Symbolize. Parse does what it did before, Symbolize symbolizes report and fills in maintainers. This simplifies both implementations of Reporter interface and all users of the interface. Potentially we could get this down to 1 function Parse that does everything. However, (1) Symbolize can fail, while Parse cannot, (2) usually we want to ignore (log) Symbolize errors, but otherwise proceed with the report, (3) repro does not need symbolization for all but the last report. --- tools/syz-symbolize/symbolize.go | 45 ++++++++-------------------------------- 1 file changed, 9 insertions(+), 36 deletions(-) (limited to 'tools') diff --git a/tools/syz-symbolize/symbolize.go b/tools/syz-symbolize/symbolize.go index d8a77691c..6ad2de8bc 100644 --- a/tools/syz-symbolize/symbolize.go +++ b/tools/syz-symbolize/symbolize.go @@ -17,7 +17,6 @@ var ( flagOS = flag.String("os", runtime.GOOS, "target os") flagKernelSrc = flag.String("kernel_src", "", "path to kernel sources") flagKernelObj = flag.String("kernel_obj", "", "path to kernel build/obj dir") - flagReport = flag.Bool("report", false, "extract report from the log") ) func main() { @@ -37,40 +36,14 @@ func main() { fmt.Fprintf(os.Stderr, "failed to open input file: %v\n", err) os.Exit(1) } - if *flagReport { - rep := reporter.Parse(text) - if rep == nil { - fmt.Fprintf(os.Stderr, "no crash found\n") - os.Exit(1) - } - text = rep.Report - text, err = reporter.Symbolize(text) - if err != nil { - fmt.Fprintf(os.Stderr, "failed to symbolize: %v\n", err) - os.Exit(1) - } - guiltyFile := reporter.ExtractGuiltyFile(text) - fmt.Printf("%v\n\n", rep.Title) - os.Stdout.Write(text) - fmt.Printf("\n") - fmt.Printf("guilty file: %v\n", guiltyFile) - if guiltyFile != "" { - maintainers, err := reporter.GetMaintainers(guiltyFile) - if err != nil { - fmt.Fprintf(os.Stderr, "failed to get maintainers: %v\n", err) - os.Exit(1) - } - fmt.Printf("maintainers: %v\n", maintainers) - } - } else { - if console := reporter.ExtractConsoleOutput(text); len(console) != 0 { - text = console - } - text, err = reporter.Symbolize(text) - if err != nil { - fmt.Fprintf(os.Stderr, "failed to symbolize: %v\n", err) - os.Exit(1) - } - os.Stdout.Write(text) + rep := reporter.Parse(text) + if rep == nil { + fmt.Fprintf(os.Stderr, "no crash found\n") + os.Exit(1) + } + if err := reporter.Symbolize(rep); err != nil { + fmt.Fprintf(os.Stderr, "failed to symbolize report: %v\n", err) + os.Exit(1) } + os.Stdout.Write(rep.Report) } -- cgit mrf-deployment