//===-- dsymutil.cpp - Debug info dumping utility for llvm ----------------===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This program is a utility that aims to be a dropin replacement for // Darwin's dsymutil. // //===----------------------------------------------------------------------===// #include "DebugMap.h" #include "dsymutil.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/Options.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/Signals.h" #include "llvm/Support/raw_ostream.h" #include using namespace llvm::dsymutil; namespace { using namespace llvm::cl; static opt InputFile(Positional, desc(""), init("a.out")); static opt OsoPrependPath("oso-prepend-path", desc("Specify a directory to prepend " "to the paths of object files."), value_desc("path")); static opt Verbose("v", desc("Verbosity level"), init(false)); static opt ParseOnly("parse-only", desc("Only parse the debug map, do not actaully link " "the DWARF."), init(false)); } int main(int argc, char **argv) { llvm::sys::PrintStackTraceOnErrorSignal(); llvm::PrettyStackTraceProgram StackPrinter(argc, argv); llvm::llvm_shutdown_obj Shutdown; llvm::cl::ParseCommandLineOptions(argc, argv, "llvm dsymutil\n"); auto DebugMapPtrOrErr = parseDebugMap(InputFile, OsoPrependPath, Verbose); if (auto EC = DebugMapPtrOrErr.getError()) { llvm::errs() << "error: cannot parse the debug map for \"" << InputFile << "\": " << EC.message() << '\n'; return 1; } if (Verbose) (*DebugMapPtrOrErr)->print(llvm::outs()); if (ParseOnly) return 0; std::string OutputBasename(InputFile); if (OutputBasename == "-") OutputBasename = "a.out"; return !linkDwarf(OutputBasename + ".dwarf", **DebugMapPtrOrErr, Verbose); }