diff options
author | Simon Atanasyan <simon@atanasyan.com> | 2018-12-03 21:54:43 +0000 |
---|---|---|
committer | Simon Atanasyan <simon@atanasyan.com> | 2018-12-03 21:54:43 +0000 |
commit | f76884b0d3b96a151d1c631685f9770d45630173 (patch) | |
tree | 249e806d4c0bf78150cf452968e8832b05c6e86a /lldb/packages/Python/lldbsuite/test/expression_command/call-function/main.cpp | |
parent | a45a55fc6735fd7f44fec46c49717e8a687738c9 (diff) | |
download | bcm5719-llvm-f76884b0d3b96a151d1c631685f9770d45630173.tar.gz bcm5719-llvm-f76884b0d3b96a151d1c631685f9770d45630173.zip |
[mips] Fix TestDWARF32Version5Addr8AllForms test failure on MIPS hosts
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
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/expression_command/call-function/main.cpp')
0 files changed, 0 insertions, 0 deletions