summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/InstCombine
diff options
context:
space:
mode:
authorMarcin Koscielnicki <koriakin@0x04.net>2016-06-17 20:24:35 +0000
committerMarcin Koscielnicki <koriakin@0x04.net>2016-06-17 20:24:35 +0000
commit463897f1a958fe01f75a4a3065f0bea8b284e185 (patch)
treebcbb38ad9374209632a2da365aaac8c4ae9e06cb /llvm/lib/Transforms/InstCombine
parent655db0fd3a827ac19237e39c316e8850e1afac54 (diff)
downloadbcm5719-llvm-463897f1a958fe01f75a4a3065f0bea8b284e185.tar.gz
bcm5719-llvm-463897f1a958fe01f75a4a3065f0bea8b284e185.zip
[sanitizers] [SystemZ] Add __tls_get_offset interceptor.
s390 is special again - instead of __tls_get_addr, it has __tls_get_offset with special calling conventions: the result is TP relative, and the argument is GOT-relative. Since we need to get address of the caller's GOT, which is in %r12, we have to use assembly like glibc does. Aside of __tls_get_offset, glibc also implements a slightly saner __tls_get_addr_internal, which takes a pointer as argument, but still returns a TP-relative offset. It is used for dlsym() called on TLS symbols, so we have to intercept it was well. Our __tls_get_offset is also implemented by delegating to it. Differential Revision: http://reviews.llvm.org/D19778 llvm-svn: 273041
Diffstat (limited to 'llvm/lib/Transforms/InstCombine')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud