[PATCH] Minor cleanup for GNU TLS support

David Blaikie dblaikie at gmail.com
Sat Oct 5 18:07:11 PDT 2013


On Sat, Oct 5, 2013 at 5:45 PM, Richard Mitton <richard at codersnotes.com>wrote:

> It's better without the *user in the switch, as the code that calls it
> will then just print 'invalid opcode %x' or whatever, as opposed to right
> now, where it knows about DW_OP_lo_user+0, but not any other user OPs
> (DW_OP_lo_user+N), which is silly.
>
> I don't think there's anything that really uses this much already, but
> I'll see if I can figure something out to test it with and the update the
> patch
>

When we print assembly (rather than the usual debug info of emitting an
object file and then using llvm-dwarfdump) we annotate the assembly with
comments - but thinking about it, I don't think we annotate DWARF
expressions/operators/etc, so this probably isn't visible. I wonder if we
call the OperationEncodingString at all.


> .
>
>
> Eric Christopher wrote:
>
>> Should dump differently I'd have thought. Also don't want to delete
>> the DW_OP_*_user text I'd think.
>>
>> -eric
>>
>> On Sat, Oct 5, 2013 at 2:33 PM, Richard Mitton<richard at codersnotes.com**>
>>  wrote:
>>
>>
>>> No functionality change.
>>>>
>>>>
>>> Nothing to test! :)
>>>
>>>
>>>
>>> Eric Christopher wrote:
>>>
>>>
>>>> Testcase? :)
>>>>
>>>> -eric
>>>>
>>>> On Sat, Oct 5, 2013 at 11:19 AM, Richard Mitton<richard at codersnotes.com
>>>> **>
>>>> wrote:
>>>>
>>>>
>>>>
>>>>> Formally added an explicit enum for DWARF TLS support. No functionality
>>>>> change.
>>>>>
>>>>>
>>>>> http://llvm-reviews.chandlerc.**com/D1845<http://llvm-reviews.chandlerc.com/D1845>
>>>>>
>>>>> Files:
>>>>>     include/llvm/Support/Dwarf.h
>>>>>     lib/CodeGen/AsmPrinter/**DwarfCompileUnit.cpp
>>>>>     lib/Support/Dwarf.cpp
>>>>>
>>>>> Index: include/llvm/Support/Dwarf.h
>>>>> ==============================**==============================**
>>>>> =======
>>>>> --- include/llvm/Support/Dwarf.h
>>>>> +++ include/llvm/Support/Dwarf.h
>>>>> @@ -486,6 +486,9 @@
>>>>>      DW_OP_lo_user = 0xe0,
>>>>>      DW_OP_hi_user = 0xff,
>>>>>
>>>>> +  // Extensions for GNU-style thread-local storage.
>>>>> +  DW_OP_GNU_push_tls_address = 0xe0,
>>>>> +
>>>>>      // Extensions for Fission proposal.
>>>>>      DW_OP_GNU_addr_index = 0xfb,
>>>>>      DW_OP_GNU_const_index = 0xfc,
>>>>> Index: lib/CodeGen/AsmPrinter/**DwarfCompileUnit.cpp
>>>>> ==============================**==============================**
>>>>> =======
>>>>> --- lib/CodeGen/AsmPrinter/**DwarfCompileUnit.cpp
>>>>> +++ lib/CodeGen/AsmPrinter/**DwarfCompileUnit.cpp
>>>>> @@ -1513,14 +1513,15 @@
>>>>>            // 1) Start with a constNu of the appropriate pointer size
>>>>>            addUInt(Block, 0, dwarf::DW_FORM_data1,
>>>>>                    PointerSize == 4 ? dwarf::DW_OP_const4u :
>>>>> dwarf::DW_OP_const8u);
>>>>> -        // 2) containing the (relocated) address of the TLS variable
>>>>> +        // 2) containing the (relocated) offset of the TLS variable
>>>>> +        //    within the module's TLS block.
>>>>>            addExpr(Block, 0, dwarf::DW_FORM_udata, Expr);
>>>>>          } else {
>>>>>            addUInt(Block, 0, dwarf::DW_FORM_data1,
>>>>> dwarf::DW_OP_GNU_const_index);
>>>>>            addUInt(Block, 0, dwarf::DW_FORM_udata,
>>>>> DU->getAddrPoolIndex(Expr));
>>>>>          }
>>>>> -      // 3) followed by a custom OP to tell the debugger about TLS
>>>>> (presumably)
>>>>> -      addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_lo_user);
>>>>> +      // 3) followed by a custom OP to make the debugger do a TLS
>>>>> lookup.
>>>>> +      addUInt(Block, 0, dwarf::DW_FORM_data1,
>>>>> dwarf::DW_OP_GNU_push_tls_**address);
>>>>>        } else
>>>>>          addOpAddress(Block, Sym);
>>>>>        // Do not create specification DIE if context is either compile
>>>>> unit
>>>>> Index: lib/Support/Dwarf.cpp
>>>>> ==============================**==============================**
>>>>> =======
>>>>> --- lib/Support/Dwarf.cpp
>>>>> +++ lib/Support/Dwarf.cpp
>>>>> @@ -456,10 +456,11 @@
>>>>>      case DW_OP_bit_piece:                  return "DW_OP_bit_piece";
>>>>>      case DW_OP_implicit_value:             return
>>>>> "DW_OP_implicit_value";
>>>>>      case DW_OP_stack_value:                return "DW_OP_stack_value";
>>>>> -  case DW_OP_lo_user:                    return "DW_OP_lo_user";
>>>>> -  case DW_OP_hi_user:                    return "DW_OP_hi_user";
>>>>>
>>>>> -    // DWARF5 Fission Proposal Op Extensions
>>>>> +  // GNU thread-local storage
>>>>> +  case DW_OP_GNU_push_tls_address:       return
>>>>> "DW_OP_GNU_push_tls_address";
>>>>> +
>>>>> +  // DWARF5 Fission Proposal Op Extensions
>>>>>      case DW_OP_GNU_addr_index:             return
>>>>> "DW_OP_GNU_addr_index";
>>>>>      case DW_OP_GNU_const_index:            return
>>>>> "DW_OP_GNU_const_index";
>>>>>      }
>>>>>
>>>>> ______________________________**_________________
>>>>> llvm-commits mailing list
>>>>> llvm-commits at cs.uiuc.edu
>>>>> http://lists.cs.uiuc.edu/**mailman/listinfo/llvm-commits<http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits>
>>>>>
>>>>>
>>>>>
>>>>>
>>>> ______________________________**_________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/**mailman/listinfo/llvm-commits<http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits>
>>>
>>>
>> ______________________________**_________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/**mailman/listinfo/llvm-commits<http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131005/a151ef9a/attachment.html>


More information about the llvm-commits mailing list