blob: 9ab9cce3b20669793fe8fc6ab4cde5fe25cf48d6 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package main
import (
"context"
"flag"
"fmt"
"os"
"sort"
"go.fuchsia.dev/fuchsia/tools/debug/elflib"
"go.fuchsia.dev/fuchsia/tools/lib/color"
"go.fuchsia.dev/fuchsia/tools/lib/logger"
)
var (
colors color.EnableColor
level logger.LogLevel
)
func usage() {
fmt.Printf(`srcls [binary]
Prints each DWARF-determined source of a given binary.
`)
}
func init() {
colors = color.ColorAuto
level = logger.InfoLevel
flag.Var(&colors, "color", "can be never, auto, always")
flag.Var(&level, "level", "can be fatal, error, warning, info, debug or trace")
flag.Usage = usage
}
func execute() error {
if flag.NArg() != 1 {
return fmt.Errorf("binary expected as a single positional argument")
}
bin := flag.Arg(0)
srcs, err := elflib.ListSources(bin)
if err != nil {
return err
}
sort.Strings(srcs)
for _, src := range srcs {
fmt.Println(src)
}
return nil
}
func main() {
flag.Parse()
log := logger.NewLogger(level, color.NewColor(colors), os.Stdout, os.Stderr, "")
ctx := logger.WithLogger(context.Background(), log)
if err := execute(); err != nil {
logger.Fatalf(ctx, "%v", err)
}
}