// 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)
}
