[compiler-rt] d4aacc1 - [sanitizer] Don't use newfstatat for Linux on SPARC
Evgenii Stepanov via llvm-commits
llvm-commits at lists.llvm.org
Mon May 16 12:22:31 PDT 2022
Author: John Paul Adrian Glaubitz
Date: 2022-05-16T12:21:55-07:00
New Revision: d4aacc1a013e9de4011adb051cdcae1ae6fc9baf
URL: https://github.com/llvm/llvm-project/commit/d4aacc1a013e9de4011adb051cdcae1ae6fc9baf
DIFF: https://github.com/llvm/llvm-project/commit/d4aacc1a013e9de4011adb051cdcae1ae6fc9baf.diff
LOG: [sanitizer] Don't use newfstatat for Linux on SPARC
Linux on SPARC uses fstatat64 instead.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D125572
Added:
Modified:
compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
compiler-rt/lib/sanitizer_common/sanitizer_platform.h
Removed:
################################################################################
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
index e2c32d679ad8d..6c6f40a4c05ac 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
@@ -270,7 +270,7 @@ uptr internal_ftruncate(fd_t fd, uptr size) {
return res;
}
-#if !SANITIZER_LINUX_USES_64BIT_SYSCALLS && SANITIZER_LINUX
+#if (!SANITIZER_LINUX_USES_64BIT_SYSCALLS || SANITIZER_SPARC) && SANITIZER_LINUX
static void stat64_to_stat(struct stat64 *in, struct stat *out) {
internal_memset(out, 0, sizeof(*out));
out->st_dev = in->st_dev;
@@ -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 || SANITIZER_X32
+# if (SANITIZER_WORDSIZE == 64 || SANITIZER_X32) && !SANITIZER_SPARC
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) || SANITIZER_X32
+# if (defined(_LP64) || SANITIZER_X32) && !SANITIZER_SPARC
return internal_syscall(SYSCALL(newfstatat), AT_FDCWD, (uptr)path, (uptr)buf,
AT_SYMLINK_NOFOLLOW);
# else
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h
index 8fe0d8314312c..adc52be5e3cd6 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h
@@ -187,6 +187,21 @@
# define SANITIZER_S390_64 0
#endif
+#if defined(__sparc__)
+# define SANITIZER_SPARC 1
+# if defined(__arch64__)
+# define SANITIZER_SPARC32 0
+# define SANITIZER_SPARC64 1
+# else
+# define SANITIZER_SPARC32 1
+# define SANITIZER_SPARC64 0
+# endif
+#else
+# define SANITIZER_SPARC 0
+# define SANITIZER_SPARC32 0
+# define SANITIZER_SPARC64 0
+#endif
+
#if defined(__powerpc__)
# define SANITIZER_PPC 1
# if defined(__powerpc64__)
More information about the llvm-commits
mailing list