mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-23 20:57:21 +00:00
[DebugInfo] Allow getDebugThreadLocalSymbol to return MCExpr
This allows getDebugThreadLocalSymbol to return a generic MCExpr instead of just a MCSymbolRefExpr. This is in preparation for supporting debug info for TLS variables on PowerPC, where we need to describe the variable location using a more complex expression than just MCSymbolRefExpr. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185460 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
18dbe5029f
commit
716a94f0c9
@ -140,7 +140,7 @@ public:
|
||||
|
||||
/// \brief Create a symbol reference to describe the given TLS variable when
|
||||
/// emitting the address in debug info.
|
||||
virtual const MCSymbolRefExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const;
|
||||
virtual const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const;
|
||||
|
||||
protected:
|
||||
virtual const MCSection *
|
||||
|
@ -1358,7 +1358,7 @@ void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
|
||||
unsigned PointerSize = Asm->getDataLayout().getPointerSize();
|
||||
assert((PointerSize == 4 || PointerSize == 8) &&
|
||||
"Add support for other sizes if necessary");
|
||||
const MCSymbolRefExpr *Ref =
|
||||
const MCExpr *Expr =
|
||||
Asm->getObjFileLowering().getDebugThreadLocalSymbol(Sym);
|
||||
// Based on GCC's support for TLS:
|
||||
if (!DD->useSplitDwarf()) {
|
||||
@ -1366,10 +1366,10 @@ void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
|
||||
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
|
||||
addExpr(Block, 0, dwarf::DW_FORM_udata, Ref);
|
||||
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(Ref));
|
||||
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);
|
||||
|
@ -318,7 +318,7 @@ getTTypeReference(const MCSymbolRefExpr *Sym, unsigned Encoding,
|
||||
}
|
||||
}
|
||||
|
||||
const MCSymbolRefExpr *TargetLoweringObjectFile::getDebugThreadLocalSymbol(const MCSymbol *Sym) const {
|
||||
const MCExpr *TargetLoweringObjectFile::getDebugThreadLocalSymbol(const MCSymbol *Sym) const {
|
||||
// FIXME: It's not clear what, if any, default this should have - perhaps a
|
||||
// null return could mean 'no location' & we should just do that here.
|
||||
return MCSymbolRefExpr::Create(Sym, *Ctx);
|
||||
|
@ -48,7 +48,7 @@ X86LinuxTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM) {
|
||||
InitializeELF(TM.Options.UseInitArray);
|
||||
}
|
||||
|
||||
const MCSymbolRefExpr *
|
||||
const MCExpr *
|
||||
X86LinuxTargetObjectFile::getDebugThreadLocalSymbol(
|
||||
const MCSymbol *Sym) const {
|
||||
return MCSymbolRefExpr::Create(Sym, MCSymbolRefExpr::VK_DTPOFF, getContext());
|
||||
|
@ -38,7 +38,7 @@ namespace llvm {
|
||||
virtual void Initialize(MCContext &Ctx, const TargetMachine &TM);
|
||||
|
||||
/// \brief Describe a TLS variable address within debug info.
|
||||
virtual const MCSymbolRefExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const;
|
||||
virtual const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const;
|
||||
};
|
||||
|
||||
} // end namespace llvm
|
||||
|
Loading…
x
Reference in New Issue
Block a user