[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