[llvm] r207739 - Record the DWARF version in MCContext
Eric Christopher
echristo at gmail.com
Wed Jun 18 23:32:13 PDT 2014
On Wed, Jun 18, 2014 at 10:16 PM, Eric Christopher <echristo at gmail.com> wrote:
> Yeah. I was working that up :)
>
OK, I worked this up in:
M include/llvm/MC/MCTargetOptions.h
M include/llvm/MC/MCTargetOptionsCommandFlags.h
M lib/CodeGen/AsmPrinter/DwarfDebug.cpp
M lib/MC/MCTargetOptions.cpp
M tools/llvm-mc/llvm-mc.cpp
Committed r211257
I'm not altogether happy with the complexity here so I might muck with
it a bit more. Maybe pull it off the context now that it's an MC level
option... depending on the clang side.
> I'm also not seeing the problem though. Also trying to figure out the
> dependency chain that has all of codegen and transforms being linked
> in. :\
>
I'm guessing this is in all-targets, but I couldn't piece it out from
looking at it :\ Maybe I'll look at the CMake files and see if those
are any more enlightening.
-eric
> -eric
>
> On Wed, Jun 18, 2014 at 10:01 PM, David Blaikie <dblaikie at gmail.com> wrote:
>> Can we have one seeing and share it? Dwarf debug could query the mc context?
>>
>> Not sure if this would work. Just tossing it out there.
>>
>> On Jun 18, 2014 8:31 PM, "Eric Christopher" <echristo at gmail.com> wrote:
>>>
>>> Heh. Nice catch. Probably a rename to mc-dwarf-version would be
>>> best/easiest.
>>>
>>> On Jun 18, 2014 8:25 PM, "Alp Toker" <alp at nuanti.com> wrote:
>>>>
>>>>
>>>> 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