diff options
author | Marcin Koscielnicki <koriakin@0x04.net> | 2016-06-17 20:24:35 +0000 |
---|---|---|
committer | Marcin Koscielnicki <koriakin@0x04.net> | 2016-06-17 20:24:35 +0000 |
commit | 463897f1a958fe01f75a4a3065f0bea8b284e185 (patch) | |
tree | bcbb38ad9374209632a2da365aaac8c4ae9e06cb /llvm/lib/Transforms/InstCombine | |
parent | 655db0fd3a827ac19237e39c316e8850e1afac54 (diff) | |
download | bcm5719-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