[llvm] r207739 - Record the DWARF version in MCContext
Alp Toker
alp at nuanti.com
Wed Jun 18 20:25:44 PDT 2014
On 01/05/2014 11:46, Oliver Stannard wrote:
> Author: olista01
> Date: Thu May 1 03:46:02 2014
> New Revision: 207739
>
> URL: http://llvm.org/viewvc/llvm-project?rev=207739&view=rev
> Log:
> Record the DWARF version in MCContext
>
> Record the DWARF version in MCContext, and use it when
> emitting the dwarf version into the debug info.
>
>
> Modified:
> llvm/trunk/include/llvm/MC/MCContext.h
> llvm/trunk/lib/MC/MCDwarf.cpp
> llvm/trunk/test/MC/ELF/gen-dwarf.s
> 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=207739&r1=207738&r2=207739&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCContext.h (original)
> +++ llvm/trunk/include/llvm/MC/MCContext.h Thu May 1 03:46:02 2014
> @@ -147,6 +147,9 @@ namespace llvm {
> /// non-empty.
> StringRef DwarfDebugProducer;
>
> + /// The maximum version of dwarf that we should emit.
> + uint16_t DwarfVersion;
> +
> /// Honor temporary labels, this is useful for debugging semantic
> /// differences between temporary and non-temporary labels (primarily on
> /// Darwin).
> @@ -396,6 +399,9 @@ namespace llvm {
> void setDwarfDebugProducer(StringRef S) { DwarfDebugProducer = S; }
> StringRef getDwarfDebugProducer() { return DwarfDebugProducer; }
>
> + void setDwarfVersion(uint16_t v) { DwarfVersion = v; }
> + uint16_t getDwarfVersion() const { return DwarfVersion; }
> +
> /// @}
>
> 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=207739&r1=207738&r2=207739&view=diff
> ==============================================================================
> --- llvm/trunk/lib/MC/MCDwarf.cpp (original)
> +++ llvm/trunk/lib/MC/MCDwarf.cpp Thu May 1 03:46:02 2014
> @@ -645,8 +645,8 @@ static void EmitGenDwarfInfo(MCStreamer
> const MCExpr *Length = MakeStartMinusEndExpr(*MCOS, *InfoStart, *InfoEnd, 4);
> MCOS->EmitAbsValue(Length, 4);
>
> - // The 2 byte DWARF version, which is 2.
> - MCOS->EmitIntValue(2, 2);
> + // The 2 byte DWARF version.
> + MCOS->EmitIntValue(context.getDwarfVersion(), 2);
>
> // The 4 byte offset to the debug abbrevs from the start of the .debug_abbrev,
> // it is at the start of that section so this is zero.
>
> Modified: llvm/trunk/test/MC/ELF/gen-dwarf.s
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/gen-dwarf.s?rev=207739&r1=207738&r2=207739&view=diff
> ==============================================================================
> --- llvm/trunk/test/MC/ELF/gen-dwarf.s (original)
> +++ llvm/trunk/test/MC/ELF/gen-dwarf.s Thu May 1 03:46:02 2014
> @@ -1,5 +1,9 @@
> -// RUN: llvm-mc -g -triple i686-pc-linux-gnu %s -filetype=obj -o - | llvm-readobj -r | FileCheck %s
> -// RUN: llvm-mc -g -triple i686-pc-linux-gnu %s -filetype=asm -o - | FileCheck --check-prefix=ASM %s
> +// RUN: llvm-mc -g -dwarf-version 2 -triple i686-pc-linux-gnu %s -filetype=obj -o - | llvm-readobj -r | FileCheck %s
> +// RUN: not llvm-mc -g -dwarf-version 1 -triple i686-pc-linux-gnu %s -filetype=asm -o - 2>&1 | FileCheck --check-prefix=DWARF1 %s
> +// RUN: llvm-mc -g -dwarf-version 2 -triple i686-pc-linux-gnu %s -filetype=asm -o - | FileCheck --check-prefix=ASM --check-prefix=DWARF2 %s
> +// RUN: llvm-mc -g -dwarf-version 3 -triple i686-pc-linux-gnu %s -filetype=asm -o - | FileCheck --check-prefix=ASM --check-prefix=DWARF3 %s
> +// RUN: llvm-mc -g -triple i686-pc-linux-gnu %s -filetype=asm -o - | FileCheck --check-prefix=ASM --check-prefix=DWARF4 %s
> +// RUN: not llvm-mc -g -dwarf-version 5 -triple i686-pc-linux-gnu %s -filetype=asm -o - 2>&1 | FileCheck --check-prefix=DWARF5 %s
>
>
> // Test that on ELF:
> @@ -35,7 +39,9 @@ foo:
> // Second instance of the section has the CU
> // ASM: .section .debug_info
> // Dwarf version
> -// ASM: .short 2
> +// DWARF2: .short 2
> +// DWARF3: .short 3
> +// DWARF4: .short 4
> // ASM-NEXT: .long [[ABBREV_LABEL]]
> // First .byte 1 is the abbreviation number for the compile_unit abbrev
> // ASM: .byte 1
> @@ -44,3 +50,5 @@ foo:
> // ASM: .section .debug_line
> // ASM-NEXT: [[LINE_LABEL]]
>
> +// DWARF1: Dwarf version 1 is not supported.
> +// DWARF5: Dwarf version 5 is not supported.
>
> 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=207739&r1=207738&r2=207739&view=diff
> ==============================================================================
> --- llvm/trunk/tools/llvm-mc/llvm-mc.cpp (original)
> +++ llvm/trunk/tools/llvm-mc/llvm-mc.cpp Thu May 1 03:46:02 2014
> @@ -154,6 +154,9 @@ static cl::opt<bool>
> GenDwarfForAssembly("g", cl::desc("Generate dwarf debugging info for assembly "
> "source files"));
>
> +static cl::opt<int>
> +DwarfVersion("dwarf-version", cl::desc("Dwarf version"), cl::init(4));
> +
Hi Oliver,
It looks like this "dwarf-version" option introduced to llvm-mc.cpp
conflicts with an existing one in lib/CodeGen/AsmPrinter/DwarfDebug.cpp:
$ bin/llvm-mc
<premain>: CommandLine Error: Argument 'dwarf-version' defined more than
once!
Due to a bug in CommandLine registration the errors got reported on
stderr but didn't trigger any test failures so the issue went unnoticed.
Could you coordinate with DwarfDebug.cpp to either share a single option
definition, rename one of the two flags, or adjust link dependencies to
eliminate the conflict?
Once that's done I'll land the necessary CommandLine checks to make sure
conflicting registrations get detected in future.
Alp.
> static cl::opt<std::string>
> DebugCompilationDir("fdebug-compilation-dir",
> cl::desc("Specifies the debug info's compilation dir"));
> @@ -406,6 +409,12 @@ int main(int argc, char **argv) {
> Ctx.setAllowTemporaryLabels(false);
>
> Ctx.setGenDwarfForAssembly(GenDwarfForAssembly);
> + if (DwarfVersion < 2 || DwarfVersion > 4) {
> + errs() << ProgName << ": Dwarf version " << DwarfVersion
> + << " is not supported." << '\n';
> + return 1;
> + }
> + Ctx.setDwarfVersion(DwarfVersion);
> if (!DwarfDebugFlags.empty())
> Ctx.setDwarfDebugFlags(StringRef(DwarfDebugFlags));
> if (!DwarfDebugProducer.empty())
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
--
http://www.nuanti.com
the browser experts
More information about the llvm-commits
mailing list