diff options
Diffstat (limited to 'tools/llvm-mc/llvm-mc.cpp')
| -rw-r--r-- | tools/llvm-mc/llvm-mc.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/tools/llvm-mc/llvm-mc.cpp b/tools/llvm-mc/llvm-mc.cpp index 280a1bb..4281259 100644 --- a/tools/llvm-mc/llvm-mc.cpp +++ b/tools/llvm-mc/llvm-mc.cpp @@ -152,6 +152,10 @@ NoInitialTextSection("n", cl::desc("Don't assume assembly file starts " static cl::opt<bool> SaveTempLabels("L", cl::desc("Don't discard temporary labels")); +static cl::opt<bool> +GenDwarfForAssembly("g", cl::desc("Generate dwarf debugging info for assembly " + "source files")); + enum ActionType { AC_AsLex, AC_Assemble, @@ -175,7 +179,7 @@ Action(cl::desc("Action to perform:"), static const Target *GetTarget(const char *ProgName) { // Figure out the target triple. if (TripleName.empty()) - TripleName = sys::getHostTriple(); + TripleName = sys::getDefaultTargetTriple(); Triple TheTriple(Triple::normalize(TripleName)); const Target *TheTarget = 0; @@ -230,6 +234,17 @@ static tool_output_file *GetOutputStream() { return Out; } +static std::string DwarfDebugFlags; +static void setDwarfDebugFlags(int argc, char **argv) { + if (!getenv("RC_DEBUG_OPTIONS")) + return; + for (int i = 0; i < argc; i++) { + DwarfDebugFlags += argv[i]; + if (i + 1 < argc) + DwarfDebugFlags += " "; + } +} + static int AsLexInput(const char *ProgName) { OwningPtr<MemoryBuffer> BufferPtr; if (error_code ec = MemoryBuffer::getFileOrSTDIN(InputFilename, BufferPtr)) { @@ -377,6 +392,10 @@ static int AssembleInput(const char *ProgName) { if (SaveTempLabels) Ctx.setAllowTemporaryLabels(false); + Ctx.setGenDwarfForAssembly(GenDwarfForAssembly); + if (!DwarfDebugFlags.empty()) + Ctx.setDwarfDebugFlags(StringRef(DwarfDebugFlags)); + // Package up features to be passed to target/subtarget std::string FeaturesStr; if (MAttrs.size()) { @@ -412,7 +431,7 @@ static int AssembleInput(const char *ProgName) { /*useCFI*/ true, /*useDwarfDirectory*/ true, IP, CE, MAB, ShowInst)); - + } else if (FileType == OFT_Null) { Str.reset(createNullStreamer(Ctx)); } else { @@ -502,6 +521,7 @@ int main(int argc, char **argv) { cl::ParseCommandLineOptions(argc, argv, "llvm machine code playground\n"); TripleName = Triple::normalize(TripleName); + setDwarfDebugFlags(argc, argv); switch (Action) { default: |
