[llvm-commits] [llvm] r172630 - in /llvm/trunk: include/llvm/MC/MCContext.h lib/MC/MCDwarf.cpp test/MC/MachO/gen-dwarf-producer.s tools/llvm-mc/llvm-mc.cpp

David Blaikie dblaikie at gmail.com
Wed Jan 16 10:34:54 PST 2013


On Wed, Jan 16, 2013 at 9:46 AM, Kevin Enderby <enderby at apple.com> wrote:
> Author: enderby
> Date: Wed Jan 16 11:46:23 2013
> New Revision: 172630
>
> URL: http://llvm.org/viewvc/llvm-project?rev=172630&view=rev
> Log:
> We want the dwarf AT_producer for assembly source files to match clang's
> 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
>
> Added:
>     llvm/trunk/test/MC/MachO/gen-dwarf-producer.s
> Modified:
>     llvm/trunk/include/llvm/MC/MCContext.h
>     llvm/trunk/lib/MC/MCDwarf.cpp
>     llvm/trunk/tools/llvm-mc/llvm-mc.cpp
>
> Modified: llvm/trunk/include/llvm/MC/MCContext.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCContext.h?rev=172630&r1=172629&r2=172630&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCContext.h (original)
> +++ llvm/trunk/include/llvm/MC/MCContext.h Wed Jan 16 11:46:23 2013
> @@ -129,6 +129,10 @@
>      /// 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).
> @@ -346,6 +350,9 @@
>      void setDwarfDebugFlags(StringRef S) { DwarfDebugFlags = S; }
>      StringRef getDwarfDebugFlags() { return DwarfDebugFlags; }
>
> +    void setDwarfDebugProducer(StringRef S) { DwarfDebugProducer = S; }
> +    StringRef getDwarfDebugProducer() { return DwarfDebugProducer; }
> +
>      /// @}
>
>      char *getSecureLogFile() { return SecureLogFile; }
>
> Modified: llvm/trunk/lib/MC/MCDwarf.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDwarf.cpp?rev=172630&r1=172629&r2=172630&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCDwarf.cpp (original)
> +++ llvm/trunk/lib/MC/MCDwarf.cpp Wed Jan 16 11:46:23 2013
> @@ -638,9 +638,15 @@
>    }
>
>    // 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
>
> Added: llvm/trunk/test/MC/MachO/gen-dwarf-producer.s
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/MachO/gen-dwarf-producer.s?rev=172630&view=auto
> ==============================================================================
> --- llvm/trunk/test/MC/MachO/gen-dwarf-producer.s (added)
> +++ llvm/trunk/test/MC/MachO/gen-dwarf-producer.s Wed Jan 16 11:46:23 2013
> @@ -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")
>
> Modified: llvm/trunk/tools/llvm-mc/llvm-mc.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-mc/llvm-mc.cpp?rev=172630&r1=172629&r2=172630&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-mc/llvm-mc.cpp (original)
> +++ llvm/trunk/tools/llvm-mc/llvm-mc.cpp Wed Jan 16 11:46:23 2013
> @@ -236,6 +236,13 @@
>    }
>  }
>
> +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);
> @@ -353,6 +360,8 @@
>    TripleName = Triple::normalize(TripleName);
>    setDwarfDebugFlags(argc, argv);
>
> +  setDwarfDebugProducer();
> +
>    const char *ProgName = argv[0];
>    const Target *TheTarget = GetTarget(ProgName);
>    if (!TheTarget)
> @@ -393,6 +402,8 @@
>    Ctx.setGenDwarfForAssembly(GenDwarfForAssembly);
>    if (!DwarfDebugFlags.empty())
>      Ctx.setDwarfDebugFlags(StringRef(DwarfDebugFlags));
> +  if (!DwarfDebugProducer.empty())
> +    Ctx.setDwarfDebugProducer(StringRef(DwarfDebugProducer));

You shouldn't need this explicit StringRef() here, should you? (maybe
cargo-culted in from the above which also doesn't need it, if I'm not
mistaken)

>    if (!DebugCompilationDir.empty())
>      Ctx.setCompilationDir(DebugCompilationDir);
>    if (!MainFileName.empty())
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list