[PATCH] Minor cleanup for GNU TLS support

Eric Christopher echristo at gmail.com
Mon Oct 7 09:54:28 PDT 2013


Seems reasonable. And I thought David had added a few tls testcases so
I figured they'd go through this path...

-eric

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
> .
>
>
> 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
>>>>>
>>>>> 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
>>>>>
>>>>>
>>>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> 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



More information about the llvm-commits mailing list