// Copyright 2016 syzkaller project authors. All rights reserved.
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
package main
import (
"flag"
"fmt"
"io/ioutil"
"os"
"runtime"
"github.com/google/syzkaller/pkg/mgrconfig"
"github.com/google/syzkaller/pkg/report"
)
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")
)
func main() {
flag.Parse()
if len(flag.Args()) != 1 {
fmt.Fprintf(os.Stderr, "usage: syz-symbolize [flags] kernel_log_file\n")
flag.PrintDefaults()
os.Exit(1)
}
cfg := &mgrconfig.Config{
TargetOS: *flagOS,
KernelObj: *flagKernelObj,
KernelSrc: *flagKernelSrc,
}
reporter, err := report.NewReporter(cfg)
if err != nil {
fmt.Fprintf(os.Stderr, "failed to create reporter: %v\n", err)
os.Exit(1)
}
text, err := ioutil.ReadFile(flag.Args()[0])
if err != nil {
fmt.Fprintf(os.Stderr, "failed to open input file: %v\n", err)
os.Exit(1)
}
rep := reporter.Parse(text)
if rep == nil {
rep = &report.Report{Report: text}
}
if err := reporter.Symbolize(rep); err != nil {
fmt.Fprintf(os.Stderr, "failed to symbolize report: %v\n", err)
os.Exit(1)
}
fmt.Printf("TITLE: %v\n", rep.Title)
fmt.Printf("CORRUPTED: %v (%v)\n", rep.Corrupted, rep.CorruptedReason)
fmt.Printf("\n")
os.Stdout.Write(rep.Report)
}