[compiler-rt] 31e541e - [sanitizer] Temporarily switch ppc64 to the _dl_get_tls_static_info implementation
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 26 23:21:56 PDT 2021
Author: Fangrui Song
Date: 2021-03-26T23:21:47-07:00
New Revision: 31e541e37587100a5b21378380f54c028fda2d04
URL: https://github.com/llvm/llvm-project/commit/31e541e37587100a5b21378380f54c028fda2d04
DIFF: https://github.com/llvm/llvm-project/commit/31e541e37587100a5b21378380f54c028fda2d04.diff
LOG: [sanitizer] Temporarily switch ppc64 to the _dl_get_tls_static_info implementation
sanitizer-ppc64le-linux is good while clang-ppc64le-linux has test
failures due to GetStaticTlsRange(addr, size) set *addr is 0.
Added:
Modified:
compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp
Removed:
################################################################################
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp
index 1177a1ceb14f5..9dfdaf963f572 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp
@@ -420,7 +420,15 @@ static void GetTls(uptr *addr, uptr *size) {
#else
if (SANITIZER_GLIBC)
*size += 1664;
-#if defined(__mips__) || defined(__powerpc64__) || SANITIZER_RISCV64
+#if defined(__powerpc64__)
+ // TODO Figure out why *addr may be zero and use TlsPreTcbSize.
+ void *ptr = dlsym(RTLD_NEXT, "_dl_get_tls_static_info");
+ uptr tls_size, tls_align;
+ ((void (*)(size_t *, size_t *))ptr)(&tls_size, &tls_align);
+ asm("addi %0,13,-0x7000" : "=r"(*addr));
+ *addr -= TlsPreTcbSize();
+ *size = RoundUpTo(tls_size + TlsPreTcbSize(), 16);
+#elif defined(__mips__) || SANITIZER_RISCV64
const uptr pre_tcb_size = TlsPreTcbSize();
*addr -= pre_tcb_size;
*size += pre_tcb_size;
More information about the llvm-commits
mailing list