forked from OSchip/llvm-project
![]() The `DIEExpr` is used in debug information entries for either TLS variables or call sites. For now the last case is unsupported for targets with delay slots, for MIPS in particular. The `DIEExpr::EmitValue` method calls a virtual `EmitDebugThreadLocal` routine which, in case of MIPS, always emits either `.dtprelword` or `.dtpreldword` directives. That is okay for "main" code, but in unit tests `DIEExpr` instances can be created not for TLS variables only even on MIPS hosts. That is a reason of the `TestDWARF32Version5Addr8AllForms` failure because handling of the `R_MIPS_TLS_DTPREL` relocation writes incorrect value into dwarf structures. And anyway unconditional emitting of `.dtprelword` directives will be incorrect when/if debug information entries for call sites become supported on MIPS. The patch solves the problem by wrapping expression created in the `MipsTargetObjectFile::getDebugThreadLocalSymbol` method in to the `MipsMCExpr` expression with a new `MEK_DTPREL` tag. This tag is recognized in the `MipsAsmPrinter::EmitDebugThreadLocal` method and `.dtprelword` directives created in this case only. In other cases the expression saved as a regular data. Differential Revision: http://reviews.llvm.org/D54937 llvm-svn: 348194 |
||
---|---|---|
.. | ||
CMakeLists.txt | ||
LLVMBuild.txt | ||
MipsABIFlagsSection.cpp | ||
MipsABIFlagsSection.h | ||
MipsABIInfo.cpp | ||
MipsABIInfo.h | ||
MipsAsmBackend.cpp | ||
MipsAsmBackend.h | ||
MipsBaseInfo.h | ||
MipsELFObjectWriter.cpp | ||
MipsELFStreamer.cpp | ||
MipsELFStreamer.h | ||
MipsFixupKinds.h | ||
MipsMCAsmInfo.cpp | ||
MipsMCAsmInfo.h | ||
MipsMCCodeEmitter.cpp | ||
MipsMCCodeEmitter.h | ||
MipsMCExpr.cpp | ||
MipsMCExpr.h | ||
MipsMCNaCl.h | ||
MipsMCTargetDesc.cpp | ||
MipsMCTargetDesc.h | ||
MipsNaClELFStreamer.cpp | ||
MipsOptionRecord.cpp | ||
MipsTargetStreamer.cpp |