[llvm] r207739 - Record the DWARF version in MCContext

Alp Toker alp at nuanti.com
Thu Jun 19 00:40:38 PDT 2014


On 19/06/2014 09:32, Eric Christopher wrote:
> 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

Nice! This got things working sufficiently to land the CommandLine fix, 
r211260.

So with some luck we'll hear from the build bots if conflicting option 
handlers get defined in future.

Thanks
Alp.

>
> 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
>>>>>

-- 
http://www.nuanti.com
the browser experts




More information about the llvm-commits mailing list