mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-21 18:29:46 +00:00
This class is responsible for getting the linked data to the disk in the appropriate form. Today it it an empty shell that just instantiates an MC layer. As we do not put anything in the resulting file yet, we just check it has the right architecture (and check that -o does the right thing). To be able to create all the components, this commit adds a few dependencies to llvm-dsymutil, namely all-targets, MC and AsmPrinter. Also add a -no-output option, so that tests that do not need the binary result can continue to run even if they do not have the required target linked in. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230824 91177308-0d34-0410-b5e6-96231b3b80d8
96 lines
3.0 KiB
C++
96 lines
3.0 KiB
C++
//===-- 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 "llvm/Support/TargetSelect.h"
|
|
#include <string>
|
|
|
|
using namespace llvm::dsymutil;
|
|
|
|
namespace {
|
|
using namespace llvm::cl;
|
|
|
|
static opt<std::string> InputFile(Positional, desc("<input file>"),
|
|
init("a.out"));
|
|
|
|
static opt<std::string> OutputFileOpt("o", desc("Specify the output file."
|
|
" default: <input file>.dwarf"),
|
|
value_desc("filename"));
|
|
|
|
static opt<std::string> OsoPrependPath("oso-prepend-path",
|
|
desc("Specify a directory to prepend "
|
|
"to the paths of object files."),
|
|
value_desc("path"));
|
|
|
|
static opt<bool> Verbose("v", desc("Verbosity level"), init(false));
|
|
|
|
static opt<bool> NoOutput("no-output", desc("Do the link in memory, but do "
|
|
"not emit the result file."),
|
|
init(false));
|
|
|
|
static opt<bool>
|
|
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;
|
|
LinkOptions Options;
|
|
|
|
llvm::cl::ParseCommandLineOptions(argc, argv, "llvm dsymutil\n");
|
|
auto DebugMapPtrOrErr = parseDebugMap(InputFile, OsoPrependPath, Verbose);
|
|
|
|
Options.Verbose = Verbose;
|
|
Options.NoOutput = NoOutput;
|
|
|
|
llvm::InitializeAllTargetInfos();
|
|
llvm::InitializeAllTargetMCs();
|
|
llvm::InitializeAllTargets();
|
|
llvm::InitializeAllAsmPrinters();
|
|
|
|
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 OutputFile;
|
|
if (OutputFileOpt.empty()) {
|
|
if (InputFile == "-")
|
|
OutputFile = "a.out.dwarf";
|
|
else
|
|
OutputFile = InputFile + ".dwarf";
|
|
} else {
|
|
OutputFile = OutputFileOpt;
|
|
}
|
|
|
|
return !linkDwarf(OutputFile, **DebugMapPtrOrErr, Options);
|
|
}
|