Formally added an explicit enum for DWARF TLS support. No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192118 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Richard Mitton 2013-10-07 18:39:18 +00:00
parent c4a8c07f64
commit 379f76e873
3 changed files with 11 additions and 6 deletions

View File

@ -486,6 +486,9 @@ enum Constants {
DW_OP_lo_user = 0xe0, DW_OP_lo_user = 0xe0,
DW_OP_hi_user = 0xff, DW_OP_hi_user = 0xff,
// Extensions for GNU-style thread-local storage.
DW_OP_GNU_push_tls_address = 0xe0,
// Extensions for Fission proposal. // Extensions for Fission proposal.
DW_OP_GNU_addr_index = 0xfb, DW_OP_GNU_addr_index = 0xfb,
DW_OP_GNU_const_index = 0xfc, DW_OP_GNU_const_index = 0xfc,

View File

@ -1505,14 +1505,15 @@ void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
// 1) Start with a constNu of the appropriate pointer size // 1) Start with a constNu of the appropriate pointer size
addUInt(Block, 0, dwarf::DW_FORM_data1, addUInt(Block, 0, dwarf::DW_FORM_data1,
PointerSize == 4 ? dwarf::DW_OP_const4u : dwarf::DW_OP_const8u); 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); addExpr(Block, 0, dwarf::DW_FORM_udata, Expr);
} else { } else {
addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_const_index); addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_const_index);
addUInt(Block, 0, dwarf::DW_FORM_udata, DU->getAddrPoolIndex(Expr)); addUInt(Block, 0, dwarf::DW_FORM_udata, DU->getAddrPoolIndex(Expr));
} }
// 3) followed by a custom OP to tell the debugger about TLS (presumably) // 3) followed by a custom OP to make the debugger do a TLS lookup.
addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_lo_user); addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_push_tls_address);
} else } else
addOpAddress(Block, Sym); addOpAddress(Block, Sym);
// Do not create specification DIE if context is either compile unit // Do not create specification DIE if context is either compile unit

View File

@ -456,10 +456,11 @@ const char *llvm::dwarf::OperationEncodingString(unsigned Encoding) {
case DW_OP_bit_piece: return "DW_OP_bit_piece"; case DW_OP_bit_piece: return "DW_OP_bit_piece";
case DW_OP_implicit_value: return "DW_OP_implicit_value"; case DW_OP_implicit_value: return "DW_OP_implicit_value";
case DW_OP_stack_value: return "DW_OP_stack_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_addr_index: return "DW_OP_GNU_addr_index";
case DW_OP_GNU_const_index: return "DW_OP_GNU_const_index"; case DW_OP_GNU_const_index: return "DW_OP_GNU_const_index";
} }