[llvm] r207739 - Record the DWARF version in MCContext

Eric Christopher echristo at gmail.com
Wed Jun 18 22:16:39 PDT 2014


Yeah. I was working that up :)

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. :\

-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