[PATCH] Minor cleanup for GNU TLS support

Richard Mitton richard at codersnotes.com
Sat Oct 5 17:45:44 PDT 2013


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



More information about the llvm-commits mailing list