From: H.J. Lu Date: Thu, 5 May 2022 20:59:16 +0000 (-0700) Subject: libsanitizer: cherry-pick commit b226894d475b from upstream X-Git-Tag: releases/gcc-12.2.0~346 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c3b582a444ef15c7142117667b00e467961b6416;p=thirdparty%2Fgcc.git libsanitizer: cherry-pick commit b226894d475b from upstream cherry-pick: b226894d475b [sanitizer] [sanitizer] Correct GetTls for x32 (cherry picked from commit a48be2e513d9ddb2fa8800a158f18502a0923aec) --- diff --git a/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp b/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp index 0c260b6b516a..4f22c78a1834 100644 --- a/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp +++ b/libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp @@ -463,7 +463,11 @@ static void GetTls(uptr *addr, uptr *size) { #elif SANITIZER_GLIBC && defined(__x86_64__) // For aarch64 and x86-64, use an O(1) approach which requires relatively // precise ThreadDescriptorSize. g_tls_size was initialized in InitTlsSize. +# if SANITIZER_X32 + asm("mov %%fs:8,%0" : "=r"(*addr)); +# else asm("mov %%fs:16,%0" : "=r"(*addr)); +# endif *size = g_tls_size; *addr -= *size; *addr += ThreadDescriptorSize();