[sanitizer] Use newfstatat for x32
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 4 May 2022 21:53:05 +0000 (14:53 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 4 May 2022 22:54:42 +0000 (15:54 -0700)
Since newfstatat is supported on x32, use it for x32.

Differential Revision: https://reviews.llvm.org/D124968

compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp

index 8e144a4..e2c32d6 100644 (file)
@@ -343,7 +343,7 @@ uptr internal_stat(const char *path, void *buf) {
 #if SANITIZER_FREEBSD
   return internal_syscall(SYSCALL(fstatat), AT_FDCWD, (uptr)path, (uptr)buf, 0);
 #    elif SANITIZER_LINUX
-#      if SANITIZER_WORDSIZE == 64
+#      if SANITIZER_WORDSIZE == 64 || SANITIZER_X32
   return internal_syscall(SYSCALL(newfstatat), AT_FDCWD, (uptr)path, (uptr)buf,
                           0);
 #      else
@@ -366,7 +366,7 @@ uptr internal_lstat(const char *path, void *buf) {
   return internal_syscall(SYSCALL(fstatat), AT_FDCWD, (uptr)path, (uptr)buf,
                           AT_SYMLINK_NOFOLLOW);
 #    elif SANITIZER_LINUX
-#      if defined(_LP64)
+#      if defined(_LP64) || SANITIZER_X32
   return internal_syscall(SYSCALL(newfstatat), AT_FDCWD, (uptr)path, (uptr)buf,
                           AT_SYMLINK_NOFOLLOW);
 #      else