Skip to content

Commit

Permalink
We want the dwarf AT_producer for assembly source files to match clang's
Browse files Browse the repository at this point in the history
AT_producer.  Which includes clang's version information so we can tell
which version of the compiler was used.

This is the first of two steps to allow us to do that.  This is the llvm-mc
change to provide a method to set the AT_producer string.  The second step,
coming soon to a clang near you, will have the clang driver pass the value
of getClangFullVersion() via an flag when invoking the integrated assembler
on assembly source files.

rdar://12955296


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172630 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
enderby committed Jan 16, 2013
1 parent fbb662f commit 75c9b93
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 3 deletions.
7 changes: 7 additions & 0 deletions include/llvm/MC/MCContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,10 @@ namespace llvm {
/// non-empty.
StringRef DwarfDebugFlags;

/// The string to embed in as the dwarf AT_producer for the compile unit, if
/// non-empty.
StringRef DwarfDebugProducer;

/// Honor temporary labels, this is useful for debugging semantic
/// differences between temporary and non-temporary labels (primarily on
/// Darwin).
Expand Down Expand Up @@ -346,6 +350,9 @@ namespace llvm {
void setDwarfDebugFlags(StringRef S) { DwarfDebugFlags = S; }
StringRef getDwarfDebugFlags() { return DwarfDebugFlags; }

void setDwarfDebugProducer(StringRef S) { DwarfDebugProducer = S; }
StringRef getDwarfDebugProducer() { return DwarfDebugProducer; }

/// @}

char *getSecureLogFile() { return SecureLogFile; }
Expand Down
12 changes: 9 additions & 3 deletions lib/MC/MCDwarf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -638,9 +638,15 @@ static void EmitGenDwarfInfo(MCStreamer *MCOS,
}

// AT_producer, the version of the assembler tool.
MCOS->EmitBytes(StringRef("llvm-mc (based on LLVM "));
MCOS->EmitBytes(StringRef(PACKAGE_VERSION));
MCOS->EmitBytes(StringRef(")"));
StringRef DwarfDebugProducer = context.getDwarfDebugProducer();
if (!DwarfDebugProducer.empty()){
MCOS->EmitBytes(DwarfDebugProducer);
}
else {
MCOS->EmitBytes(StringRef("llvm-mc (based on LLVM "));
MCOS->EmitBytes(StringRef(PACKAGE_VERSION));
MCOS->EmitBytes(StringRef(")"));
}
MCOS->EmitIntValue(0, 1); // NULL byte to terminate the string.

// AT_language, a 4 byte value. We use DW_LANG_Mips_Assembler as the dwarf2
Expand Down
8 changes: 8 additions & 0 deletions test/MC/MachO/gen-dwarf-producer.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// RUN: env DEBUG_PRODUCER="my producer" llvm-mc -g -triple i386-apple-darwin10 %s -filetype=obj -o %t
// RUN: llvm-dwarfdump %t | FileCheck %s

.globl _bar
_bar:
ret

// CHECK: DW_AT_producer [DW_FORM_string] ("my producer")
11 changes: 11 additions & 0 deletions tools/llvm-mc/llvm-mc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,13 @@ static void setDwarfDebugFlags(int argc, char **argv) {
}
}

static std::string DwarfDebugProducer;
static void setDwarfDebugProducer(void) {
if(!getenv("DEBUG_PRODUCER"))
return;
DwarfDebugProducer += getenv("DEBUG_PRODUCER");
}

static int AsLexInput(SourceMgr &SrcMgr, MCAsmInfo &MAI, tool_output_file *Out) {

AsmLexer Lexer(MAI);
Expand Down Expand Up @@ -353,6 +360,8 @@ int main(int argc, char **argv) {
TripleName = Triple::normalize(TripleName);
setDwarfDebugFlags(argc, argv);

setDwarfDebugProducer();

const char *ProgName = argv[0];
const Target *TheTarget = GetTarget(ProgName);
if (!TheTarget)
Expand Down Expand Up @@ -393,6 +402,8 @@ int main(int argc, char **argv) {
Ctx.setGenDwarfForAssembly(GenDwarfForAssembly);
if (!DwarfDebugFlags.empty())
Ctx.setDwarfDebugFlags(StringRef(DwarfDebugFlags));
if (!DwarfDebugProducer.empty())
Ctx.setDwarfDebugProducer(StringRef(DwarfDebugProducer));
if (!DebugCompilationDir.empty())
Ctx.setCompilationDir(DebugCompilationDir);
if (!MainFileName.empty())
Expand Down

0 comments on commit 75c9b93

Please sign in to comment.