]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libsanitizer: cherry-pick commit b226894d475b from upstream
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 5 May 2022 20:59:16 +0000 (13:59 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 6 May 2022 14:38:35 +0000 (07:38 -0700)
cherry-pick:

b226894d475b [sanitizer] [sanitizer] Correct GetTls for x32

(cherry picked from commit a48be2e513d9ddb2fa8800a158f18502a0923aec)

libsanitizer/sanitizer_common/sanitizer_linux_libcdep.cpp

index 0c260b6b516a906abc14be459f71e574fdd534ad..4f22c78a1834fd3659d9f27de234630d274c04bf 100644 (file)
@@ -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();