426 lines
16 KiB
Diff
426 lines
16 KiB
Diff
|
|
From 0bce68310dc0ff6a09ec2cf5c3ae32400c631324 Mon Sep 17 00:00:00 2001
|
||
|
|
From: zhanglimin <zhanglimin@loongson.cn>
|
||
|
|
Date: Tue, 12 Sep 2023 09:51:16 +0800
|
||
|
|
Subject: [PATCH 1/5] [sanitizer][msan] VarArgHelper for loongarch64
|
||
|
|
|
||
|
|
This patch adds support for variadic argument for loongarch64,
|
||
|
|
which is based on MIPS64. And `check-msan` all pass.
|
||
|
|
|
||
|
|
Reviewed By: vitalybuka
|
||
|
|
|
||
|
|
Differential Revision: https://reviews.llvm.org/D158587
|
||
|
|
|
||
|
|
(cherry picked from commit ec42c78cc43ac1e8364e5a0941aa5fc91b813dd3)
|
||
|
|
---
|
||
|
|
compiler-rt/test/msan/signal_stress_test.cpp | 3 ---
|
||
|
|
1 file changed, 3 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/compiler-rt/test/msan/signal_stress_test.cpp b/compiler-rt/test/msan/signal_stress_test.cpp
|
||
|
|
index aade0f1f4051..043393fce6de 100644
|
||
|
|
--- a/compiler-rt/test/msan/signal_stress_test.cpp
|
||
|
|
+++ b/compiler-rt/test/msan/signal_stress_test.cpp
|
||
|
|
@@ -5,9 +5,6 @@
|
||
|
|
// Reported deadly signal due to stack-overflow
|
||
|
|
// XFAIL: target={{.*netbsd.*}}
|
||
|
|
|
||
|
|
-// VarArg implementation on LoongArch isn't supported yet.
|
||
|
|
-// UNSUPPORTED: target=loongarch{{.*}}
|
||
|
|
-
|
||
|
|
#include <signal.h>
|
||
|
|
#include <stdarg.h>
|
||
|
|
#include <sanitizer/msan_interface.h>
|
||
|
|
--
|
||
|
|
2.20.1
|
||
|
|
|
||
|
|
|
||
|
|
From faa4482d1f713331a4ac4b0a58ea9804f6c32371 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Ami-zhang <96056515+Ami-zhang@users.noreply.github.com>
|
||
|
|
Date: Thu, 28 Sep 2023 15:40:42 +0800
|
||
|
|
Subject: [PATCH 2/5] [CFI] Allow LoongArch (#67314)
|
||
|
|
|
||
|
|
Enable icall tests on loongarch64 and `check-cfi` all pass.
|
||
|
|
|
||
|
|
(cherry picked from commit adb555ea369a3a989a9db619c784aa76cccdb823)
|
||
|
|
---
|
||
|
|
compiler-rt/cmake/Modules/AllSupportedArchDefs.cmake | 2 +-
|
||
|
|
compiler-rt/lib/cfi/cfi.cpp | 4 ++++
|
||
|
|
compiler-rt/test/cfi/cross-dso/icall/dlopen.cpp | 11 +++++++++--
|
||
|
|
compiler-rt/test/cfi/cross-dso/icall/lit.local.cfg.py | 2 +-
|
||
|
|
compiler-rt/test/cfi/icall/lit.local.cfg.py | 2 +-
|
||
|
|
5 files changed, 16 insertions(+), 5 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/compiler-rt/cmake/Modules/AllSupportedArchDefs.cmake b/compiler-rt/cmake/Modules/AllSupportedArchDefs.cmake
|
||
|
|
index d14745ef9d13..9b0a4655cd65 100644
|
||
|
|
--- a/compiler-rt/cmake/Modules/AllSupportedArchDefs.cmake
|
||
|
|
+++ b/compiler-rt/cmake/Modules/AllSupportedArchDefs.cmake
|
||
|
|
@@ -73,7 +73,7 @@ set(ALL_UBSAN_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} ${RISCV64}
|
||
|
|
set(ALL_SAFESTACK_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM64} ${MIPS32} ${MIPS64}
|
||
|
|
${HEXAGON} ${LOONGARCH64})
|
||
|
|
set(ALL_CFI_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} ${MIPS64}
|
||
|
|
- ${HEXAGON})
|
||
|
|
+ ${HEXAGON} ${LOONGARCH64})
|
||
|
|
set(ALL_SCUDO_STANDALONE_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64}
|
||
|
|
${MIPS32} ${MIPS64} ${PPC64} ${HEXAGON} ${LOONGARCH64} ${RISCV64})
|
||
|
|
if(APPLE)
|
||
|
|
diff --git a/compiler-rt/lib/cfi/cfi.cpp b/compiler-rt/lib/cfi/cfi.cpp
|
||
|
|
index 22f0b175dd87..ad1c91623514 100644
|
||
|
|
--- a/compiler-rt/lib/cfi/cfi.cpp
|
||
|
|
+++ b/compiler-rt/lib/cfi/cfi.cpp
|
||
|
|
@@ -51,7 +51,11 @@ using namespace __sanitizer;
|
||
|
|
|
||
|
|
namespace __cfi {
|
||
|
|
|
||
|
|
+#if SANITIZER_LOONGARCH64
|
||
|
|
+#define kCfiShadowLimitsStorageSize 16384 // 16KiB on loongarch64 per page
|
||
|
|
+#else
|
||
|
|
#define kCfiShadowLimitsStorageSize 4096 // 1 page
|
||
|
|
+#endif
|
||
|
|
// Lets hope that the data segment is mapped with 4K pages.
|
||
|
|
// The pointer to the cfi shadow region is stored at the start of this page.
|
||
|
|
// The rest of the page is unused and re-mapped read-only.
|
||
|
|
diff --git a/compiler-rt/test/cfi/cross-dso/icall/dlopen.cpp b/compiler-rt/test/cfi/cross-dso/icall/dlopen.cpp
|
||
|
|
index c9674c3fb412..d04f7ba5dd0e 100644
|
||
|
|
--- a/compiler-rt/test/cfi/cross-dso/icall/dlopen.cpp
|
||
|
|
+++ b/compiler-rt/test/cfi/cross-dso/icall/dlopen.cpp
|
||
|
|
@@ -53,6 +53,13 @@ struct A {
|
||
|
|
virtual void f();
|
||
|
|
};
|
||
|
|
|
||
|
|
+// The page size of LoongArch is 16KiB, aligned to the memory page size.
|
||
|
|
+#ifdef __loongarch__
|
||
|
|
+# define PAGESIZE 16384
|
||
|
|
+#else
|
||
|
|
+# define PAGESIZE 4096
|
||
|
|
+#endif
|
||
|
|
+
|
||
|
|
#ifdef SHARED_LIB
|
||
|
|
|
||
|
|
#include "../../utils.h"
|
||
|
|
@@ -66,13 +73,13 @@ extern "C" void *create_B() {
|
||
|
|
return (void *)(new B());
|
||
|
|
}
|
||
|
|
|
||
|
|
-extern "C" __attribute__((aligned(4096))) void do_nothing() {}
|
||
|
|
+extern "C" __attribute__((aligned(PAGESIZE))) void do_nothing() {}
|
||
|
|
|
||
|
|
#else
|
||
|
|
|
||
|
|
void A::f() {}
|
||
|
|
|
||
|
|
-static const int kCodeAlign = 4096;
|
||
|
|
+static const int kCodeAlign = PAGESIZE;
|
||
|
|
static const int kCodeSize = 4096;
|
||
|
|
static char saved_code[kCodeSize];
|
||
|
|
static char *real_start;
|
||
|
|
diff --git a/compiler-rt/test/cfi/cross-dso/icall/lit.local.cfg.py b/compiler-rt/test/cfi/cross-dso/icall/lit.local.cfg.py
|
||
|
|
index 749c265bbf1c..6e64199ed5c5 100644
|
||
|
|
--- a/compiler-rt/test/cfi/cross-dso/icall/lit.local.cfg.py
|
||
|
|
+++ b/compiler-rt/test/cfi/cross-dso/icall/lit.local.cfg.py
|
||
|
|
@@ -1,3 +1,3 @@
|
||
|
|
# The cfi-icall checker is only supported on x86 and x86_64 for now.
|
||
|
|
-if config.root.host_arch not in ["x86", "x86_64"]:
|
||
|
|
+if config.root.host_arch not in ["x86", "x86_64", "loongarch64"]:
|
||
|
|
config.unsupported = True
|
||
|
|
diff --git a/compiler-rt/test/cfi/icall/lit.local.cfg.py b/compiler-rt/test/cfi/icall/lit.local.cfg.py
|
||
|
|
index 749c265bbf1c..6e64199ed5c5 100644
|
||
|
|
--- a/compiler-rt/test/cfi/icall/lit.local.cfg.py
|
||
|
|
+++ b/compiler-rt/test/cfi/icall/lit.local.cfg.py
|
||
|
|
@@ -1,3 +1,3 @@
|
||
|
|
# The cfi-icall checker is only supported on x86 and x86_64 for now.
|
||
|
|
-if config.root.host_arch not in ["x86", "x86_64"]:
|
||
|
|
+if config.root.host_arch not in ["x86", "x86_64", "loongarch64"]:
|
||
|
|
config.unsupported = True
|
||
|
|
--
|
||
|
|
2.20.1
|
||
|
|
|
||
|
|
|
||
|
|
From c1b7fb975564f8d372b7af81e90519c47935d1b7 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Ami-zhang <zhanglimin@loongson.cn>
|
||
|
|
Date: Fri, 27 Oct 2023 16:52:10 +0800
|
||
|
|
Subject: [PATCH 3/5] [test][compiler-rt] Mark several tests as UNSUPPORTED on
|
||
|
|
LoongArch (#69699)
|
||
|
|
|
||
|
|
(cherry picked from commit 75b0a99668cef7abaf36e09c41bb1eb91234bbf3)
|
||
|
|
---
|
||
|
|
compiler-rt/test/fuzzer/exit_on_src_pos.test | 2 ++
|
||
|
|
.../test/sanitizer_common/TestCases/Linux/odd_stack_size.cpp | 2 ++
|
||
|
|
.../sanitizer_common/TestCases/Linux/release_to_os_test.cpp | 2 +-
|
||
|
|
compiler-rt/test/xray/TestCases/Posix/fdr-mode.cpp | 2 ++
|
||
|
|
4 files changed, 7 insertions(+), 1 deletion(-)
|
||
|
|
|
||
|
|
diff --git a/compiler-rt/test/fuzzer/exit_on_src_pos.test b/compiler-rt/test/fuzzer/exit_on_src_pos.test
|
||
|
|
index 541e0c4c6e42..020424e2d9fd 100644
|
||
|
|
--- a/compiler-rt/test/fuzzer/exit_on_src_pos.test
|
||
|
|
+++ b/compiler-rt/test/fuzzer/exit_on_src_pos.test
|
||
|
|
@@ -6,6 +6,8 @@
|
||
|
|
|
||
|
|
# Test does not complete on Armv7 Thumb build bot
|
||
|
|
UNSUPPORTED: target=thumb{{.*}}
|
||
|
|
+# Timeout on loongarch64 machine
|
||
|
|
+UNSUPPORTED: target=loongarch64{{.*}}
|
||
|
|
|
||
|
|
RUN: %cpp_compiler -O0 %S/SimpleTest.cpp -o %t-SimpleTest.exe -mllvm -use-unknown-locations=Disable
|
||
|
|
RUN: %cpp_compiler -O0 %S/ShrinkControlFlowTest.cpp -o %t-ShrinkControlFlowTest.exe
|
||
|
|
diff --git a/compiler-rt/test/sanitizer_common/TestCases/Linux/odd_stack_size.cpp b/compiler-rt/test/sanitizer_common/TestCases/Linux/odd_stack_size.cpp
|
||
|
|
index fc31212b7f18..9d7d46b462a8 100644
|
||
|
|
--- a/compiler-rt/test/sanitizer_common/TestCases/Linux/odd_stack_size.cpp
|
||
|
|
+++ b/compiler-rt/test/sanitizer_common/TestCases/Linux/odd_stack_size.cpp
|
||
|
|
@@ -5,6 +5,8 @@
|
||
|
|
// AddressSanitizer: CHECK failed: asan_thread.cpp:315 "((AddrIsInStack((uptr)&local))) != (0)"
|
||
|
|
// https://lab.llvm.org/buildbot/#/builders/18/builds/8162
|
||
|
|
// UNSUPPORTED: target=powerpc64{{.*}}
|
||
|
|
+/// Occasionally fail on loongarch64 machine
|
||
|
|
+// UNSUPPORTED: target=loongarch64{{.*}}
|
||
|
|
|
||
|
|
#include <assert.h>
|
||
|
|
#include <stdlib.h>
|
||
|
|
diff --git a/compiler-rt/test/sanitizer_common/TestCases/Linux/release_to_os_test.cpp b/compiler-rt/test/sanitizer_common/TestCases/Linux/release_to_os_test.cpp
|
||
|
|
index 67351a916441..0fa77200bf1c 100644
|
||
|
|
--- a/compiler-rt/test/sanitizer_common/TestCases/Linux/release_to_os_test.cpp
|
||
|
|
+++ b/compiler-rt/test/sanitizer_common/TestCases/Linux/release_to_os_test.cpp
|
||
|
|
@@ -3,7 +3,7 @@
|
||
|
|
|
||
|
|
// Temporarily disable test
|
||
|
|
// UNSUPPORTED: tsan
|
||
|
|
-// UNSUPPORTED: target=powerpc64{{.*}}
|
||
|
|
+// UNSUPPORTED: target={{(powerpc64|loongarch64).*}}
|
||
|
|
|
||
|
|
// Not needed, no allocator.
|
||
|
|
// UNSUPPORTED: ubsan
|
||
|
|
diff --git a/compiler-rt/test/xray/TestCases/Posix/fdr-mode.cpp b/compiler-rt/test/xray/TestCases/Posix/fdr-mode.cpp
|
||
|
|
index 3065981a2c9a..0ee8aaa755d5 100644
|
||
|
|
--- a/compiler-rt/test/xray/TestCases/Posix/fdr-mode.cpp
|
||
|
|
+++ b/compiler-rt/test/xray/TestCases/Posix/fdr-mode.cpp
|
||
|
|
@@ -19,6 +19,8 @@
|
||
|
|
// RUN: rm fdr-logging-test-*
|
||
|
|
// RUN: rm fdr-unwrite-test-*
|
||
|
|
// UNSUPPORTED: target=powerpc64le-{{.*}}
|
||
|
|
+/// TODO: FDR logging arg1 handler(__xray_ArgLoggerEntry) hasn't implemented yet on LoongArch
|
||
|
|
+// UNSUPPORTED: target=loongarch64{{.*}}
|
||
|
|
// REQUIRES: built-in-llvm-tree
|
||
|
|
|
||
|
|
#include "xray/xray_log_interface.h"
|
||
|
|
--
|
||
|
|
2.20.1
|
||
|
|
|
||
|
|
|
||
|
|
From 6ff7bf14a7bbb438f58fc20dd56a2adf157022f3 Mon Sep 17 00:00:00 2001
|
||
|
|
From: abner chenc <chenguoqi@loongson.cn>
|
||
|
|
Date: Thu, 28 Dec 2023 18:54:35 +0800
|
||
|
|
Subject: [PATCH 4/5] [tsan] Add support for linux/loongarch64 in
|
||
|
|
lib/tsan/go/buildgo.sh (#72819)
|
||
|
|
|
||
|
|
Co-authored-by: Xiaolin Zhao <zhaoxiaolin@loongson.cn>
|
||
|
|
(cherry picked from commit 9d3fbf97bef3f19da4e0a047f017b8142f59b3fd)
|
||
|
|
---
|
||
|
|
compiler-rt/lib/tsan/go/buildgo.sh | 2 ++
|
||
|
|
compiler-rt/lib/tsan/rtl/tsan_platform.h | 32 +++++++++++++++++++
|
||
|
|
.../lib/tsan/rtl/tsan_platform_linux.cpp | 8 ++++-
|
||
|
|
3 files changed, 41 insertions(+), 1 deletion(-)
|
||
|
|
|
||
|
|
diff --git a/compiler-rt/lib/tsan/go/buildgo.sh b/compiler-rt/lib/tsan/go/buildgo.sh
|
||
|
|
index 0bd59368cc46..78ba41a0bdc6 100755
|
||
|
|
--- a/compiler-rt/lib/tsan/go/buildgo.sh
|
||
|
|
+++ b/compiler-rt/lib/tsan/go/buildgo.sh
|
||
|
|
@@ -10,6 +10,8 @@ if [ "`uname -a | grep Linux`" != "" ]; then
|
||
|
|
HOST_GOARCH="amd64"
|
||
|
|
elif [ "`uname -a | grep aarch64`" != "" ]; then
|
||
|
|
HOST_GOARCH="arm64"
|
||
|
|
+ elif [ "`uname -a | grep loongarch64`" != "" ]; then
|
||
|
|
+ HOST_GOARCH="loong64"
|
||
|
|
elif [ "`uname -a | grep -i mips64`" != "" ]; then
|
||
|
|
if [ "`lscpu | grep -i Little`" != "" ]; then
|
||
|
|
HOST_GOARCH="mips64le"
|
||
|
|
diff --git a/compiler-rt/lib/tsan/rtl/tsan_platform.h b/compiler-rt/lib/tsan/rtl/tsan_platform.h
|
||
|
|
index f0cdaf48eaa3..48dd56d15751 100644
|
||
|
|
--- a/compiler-rt/lib/tsan/rtl/tsan_platform.h
|
||
|
|
+++ b/compiler-rt/lib/tsan/rtl/tsan_platform.h
|
||
|
|
@@ -558,6 +558,35 @@ struct MappingGoAarch64 {
|
||
|
|
static const uptr kShadowAdd = 0x200000000000ull;
|
||
|
|
};
|
||
|
|
|
||
|
|
+/* Go on linux/loongarch64 (47-bit VMA)
|
||
|
|
+0000 0000 1000 - 0000 1000 0000: executable
|
||
|
|
+0000 1000 0000 - 00c0 0000 0000: -
|
||
|
|
+00c0 0000 0000 - 00e0 0000 0000: heap
|
||
|
|
+00e0 0000 0000 - 2000 0000 0000: -
|
||
|
|
+2000 0000 0000 - 2800 0000 0000: shadow
|
||
|
|
+2800 0000 0000 - 3000 0000 0000: -
|
||
|
|
+3000 0000 0000 - 3200 0000 0000: metainfo (memory blocks and sync objects)
|
||
|
|
+3200 0000 0000 - 8000 0000 0000: -
|
||
|
|
+*/
|
||
|
|
+struct MappingGoLoongArch64_47 {
|
||
|
|
+ static const uptr kMetaShadowBeg = 0x300000000000ull;
|
||
|
|
+ static const uptr kMetaShadowEnd = 0x320000000000ull;
|
||
|
|
+ static const uptr kShadowBeg = 0x200000000000ull;
|
||
|
|
+ static const uptr kShadowEnd = 0x280000000000ull;
|
||
|
|
+ static const uptr kLoAppMemBeg = 0x000000001000ull;
|
||
|
|
+ static const uptr kLoAppMemEnd = 0x00e000000000ull;
|
||
|
|
+ static const uptr kMidAppMemBeg = 0;
|
||
|
|
+ static const uptr kMidAppMemEnd = 0;
|
||
|
|
+ static const uptr kHiAppMemBeg = 0;
|
||
|
|
+ static const uptr kHiAppMemEnd = 0;
|
||
|
|
+ static const uptr kHeapMemBeg = 0;
|
||
|
|
+ static const uptr kHeapMemEnd = 0;
|
||
|
|
+ static const uptr kVdsoBeg = 0;
|
||
|
|
+ static const uptr kShadowMsk = 0;
|
||
|
|
+ static const uptr kShadowXor = 0;
|
||
|
|
+ static const uptr kShadowAdd = 0x200000000000ull;
|
||
|
|
+};
|
||
|
|
+
|
||
|
|
/*
|
||
|
|
Go on linux/mips64 (47-bit VMA)
|
||
|
|
0000 0000 1000 - 0000 1000 0000: executable
|
||
|
|
@@ -633,6 +662,8 @@ ALWAYS_INLINE auto SelectMapping(Arg arg) {
|
||
|
|
return Func::template Apply<MappingGoS390x>(arg);
|
||
|
|
# elif defined(__aarch64__)
|
||
|
|
return Func::template Apply<MappingGoAarch64>(arg);
|
||
|
|
+# elif defined(__loongarch_lp64)
|
||
|
|
+ return Func::template Apply<MappingGoLoongArch64_47>(arg);
|
||
|
|
# elif SANITIZER_WINDOWS
|
||
|
|
return Func::template Apply<MappingGoWindows>(arg);
|
||
|
|
# else
|
||
|
|
@@ -692,6 +723,7 @@ void ForEachMapping() {
|
||
|
|
Func::template Apply<MappingGoPPC64_46>();
|
||
|
|
Func::template Apply<MappingGoPPC64_47>();
|
||
|
|
Func::template Apply<MappingGoAarch64>();
|
||
|
|
+ Func::template Apply<MappingGoLoongArch64_47>();
|
||
|
|
Func::template Apply<MappingGoMips64_47>();
|
||
|
|
Func::template Apply<MappingGoS390x>();
|
||
|
|
}
|
||
|
|
diff --git a/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cpp b/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cpp
|
||
|
|
index 384a443c16b0..3f4a3760794f 100644
|
||
|
|
--- a/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cpp
|
||
|
|
+++ b/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cpp
|
||
|
|
@@ -238,7 +238,13 @@ void InitializePlatformEarly() {
|
||
|
|
Printf("FATAL: Found %zd - Supported 47\n", vmaSize);
|
||
|
|
Die();
|
||
|
|
}
|
||
|
|
-# endif
|
||
|
|
+# else
|
||
|
|
+ if (vmaSize != 47) {
|
||
|
|
+ Printf("FATAL: ThreadSanitizer: unsupported VMA range\n");
|
||
|
|
+ Printf("FATAL: Found %zd - Supported 47\n", vmaSize);
|
||
|
|
+ Die();
|
||
|
|
+ }
|
||
|
|
+# endif
|
||
|
|
#elif defined(__powerpc64__)
|
||
|
|
# if !SANITIZER_GO
|
||
|
|
if (vmaSize != 44 && vmaSize != 46 && vmaSize != 47) {
|
||
|
|
--
|
||
|
|
2.20.1
|
||
|
|
|
||
|
|
|
||
|
|
From ffa86e49836d567aa6b817563d1e4b99dc5f21c7 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Fangrui Song <i@maskray.me>
|
||
|
|
Date: Tue, 26 Mar 2024 14:09:39 -0700
|
||
|
|
Subject: [PATCH 5/5] [tsan] Refine fstat{,64} interceptors (#86625)
|
||
|
|
|
||
|
|
In glibc versions before 2.33. `libc_nonshared.a` defines
|
||
|
|
`__fxstat/__fxstat64` but there is no `fstat/fstat64`. glibc 2.33 added
|
||
|
|
`fstat/fstat64` and obsoleted `__fxstat/__fxstat64`. Ports added after
|
||
|
|
2.33 do not provide `__fxstat/__fxstat64`, so our `fstat/fstat64`
|
||
|
|
interceptors using `__fxstat/__fxstat64` interceptors would lead to
|
||
|
|
runtime failures on such ports (LoongArch and certain RISC-V ports).
|
||
|
|
|
||
|
|
Similar to https://reviews.llvm.org/D118423, refine the conditions that
|
||
|
|
we define fstat{,64} interceptors. `fstat` is supported by musl/*BSD
|
||
|
|
while `fstat64` is glibc only.
|
||
|
|
|
||
|
|
(cherry picked from commit d5224b73ccd09a6759759791f58426b6acd4a2e2)
|
||
|
|
---
|
||
|
|
.../lib/tsan/rtl/tsan_interceptors_posix.cpp | 43 ++++++++-----------
|
||
|
|
1 file changed, 18 insertions(+), 25 deletions(-)
|
||
|
|
|
||
|
|
diff --git a/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp b/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp
|
||
|
|
index 177e338bf282..622afc90a577 100644
|
||
|
|
--- a/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp
|
||
|
|
+++ b/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp
|
||
|
|
@@ -14,6 +14,7 @@
|
||
|
|
|
||
|
|
#include "sanitizer_common/sanitizer_atomic.h"
|
||
|
|
#include "sanitizer_common/sanitizer_errno.h"
|
||
|
|
+#include "sanitizer_common/sanitizer_glibc_version.h"
|
||
|
|
#include "sanitizer_common/sanitizer_libc.h"
|
||
|
|
#include "sanitizer_common/sanitizer_linux.h"
|
||
|
|
#include "sanitizer_common/sanitizer_platform_limits_netbsd.h"
|
||
|
|
@@ -1595,47 +1596,40 @@ TSAN_INTERCEPTOR(int, __fxstat, int version, int fd, void *buf) {
|
||
|
|
FdAccess(thr, pc, fd);
|
||
|
|
return REAL(__fxstat)(version, fd, buf);
|
||
|
|
}
|
||
|
|
-#define TSAN_MAYBE_INTERCEPT___FXSTAT TSAN_INTERCEPT(__fxstat)
|
||
|
|
+
|
||
|
|
+TSAN_INTERCEPTOR(int, __fxstat64, int version, int fd, void *buf) {
|
||
|
|
+ SCOPED_TSAN_INTERCEPTOR(__fxstat64, version, fd, buf);
|
||
|
|
+ if (fd > 0)
|
||
|
|
+ FdAccess(thr, pc, fd);
|
||
|
|
+ return REAL(__fxstat64)(version, fd, buf);
|
||
|
|
+}
|
||
|
|
+#define TSAN_MAYBE_INTERCEPT___FXSTAT TSAN_INTERCEPT(__fxstat); TSAN_INTERCEPT(__fxstat64)
|
||
|
|
#else
|
||
|
|
#define TSAN_MAYBE_INTERCEPT___FXSTAT
|
||
|
|
#endif
|
||
|
|
|
||
|
|
+#if !SANITIZER_GLIBC || __GLIBC_PREREQ(2, 33)
|
||
|
|
TSAN_INTERCEPTOR(int, fstat, int fd, void *buf) {
|
||
|
|
-#if SANITIZER_GLIBC
|
||
|
|
- SCOPED_TSAN_INTERCEPTOR(__fxstat, 0, fd, buf);
|
||
|
|
- if (fd > 0)
|
||
|
|
- FdAccess(thr, pc, fd);
|
||
|
|
- return REAL(__fxstat)(0, fd, buf);
|
||
|
|
-#else
|
||
|
|
SCOPED_TSAN_INTERCEPTOR(fstat, fd, buf);
|
||
|
|
if (fd > 0)
|
||
|
|
FdAccess(thr, pc, fd);
|
||
|
|
return REAL(fstat)(fd, buf);
|
||
|
|
-#endif
|
||
|
|
-}
|
||
|
|
-
|
||
|
|
-#if SANITIZER_GLIBC
|
||
|
|
-TSAN_INTERCEPTOR(int, __fxstat64, int version, int fd, void *buf) {
|
||
|
|
- SCOPED_TSAN_INTERCEPTOR(__fxstat64, version, fd, buf);
|
||
|
|
- if (fd > 0)
|
||
|
|
- FdAccess(thr, pc, fd);
|
||
|
|
- return REAL(__fxstat64)(version, fd, buf);
|
||
|
|
}
|
||
|
|
-#define TSAN_MAYBE_INTERCEPT___FXSTAT64 TSAN_INTERCEPT(__fxstat64)
|
||
|
|
+# define TSAN_MAYBE_INTERCEPT_FSTAT TSAN_INTERCEPT(fstat)
|
||
|
|
#else
|
||
|
|
-#define TSAN_MAYBE_INTERCEPT___FXSTAT64
|
||
|
|
+# define TSAN_MAYBE_INTERCEPT_FSTAT
|
||
|
|
#endif
|
||
|
|
|
||
|
|
-#if SANITIZER_GLIBC
|
||
|
|
+#if __GLIBC_PREREQ(2, 33)
|
||
|
|
TSAN_INTERCEPTOR(int, fstat64, int fd, void *buf) {
|
||
|
|
- SCOPED_TSAN_INTERCEPTOR(__fxstat64, 0, fd, buf);
|
||
|
|
+ SCOPED_TSAN_INTERCEPTOR(fstat64, fd, buf);
|
||
|
|
if (fd > 0)
|
||
|
|
FdAccess(thr, pc, fd);
|
||
|
|
- return REAL(__fxstat64)(0, fd, buf);
|
||
|
|
+ return REAL(fstat64)(fd, buf);
|
||
|
|
}
|
||
|
|
-#define TSAN_MAYBE_INTERCEPT_FSTAT64 TSAN_INTERCEPT(fstat64)
|
||
|
|
+# define TSAN_MAYBE_INTERCEPT_FSTAT64 TSAN_INTERCEPT(fstat64)
|
||
|
|
#else
|
||
|
|
-#define TSAN_MAYBE_INTERCEPT_FSTAT64
|
||
|
|
+# define TSAN_MAYBE_INTERCEPT_FSTAT64
|
||
|
|
#endif
|
||
|
|
|
||
|
|
TSAN_INTERCEPTOR(int, open, const char *name, int oflag, ...) {
|
||
|
|
@@ -2929,10 +2923,9 @@ void InitializeInterceptors() {
|
||
|
|
|
||
|
|
TSAN_INTERCEPT(pthread_once);
|
||
|
|
|
||
|
|
- TSAN_INTERCEPT(fstat);
|
||
|
|
TSAN_MAYBE_INTERCEPT___FXSTAT;
|
||
|
|
+ TSAN_MAYBE_INTERCEPT_FSTAT;
|
||
|
|
TSAN_MAYBE_INTERCEPT_FSTAT64;
|
||
|
|
- TSAN_MAYBE_INTERCEPT___FXSTAT64;
|
||
|
|
TSAN_INTERCEPT(open);
|
||
|
|
TSAN_MAYBE_INTERCEPT_OPEN64;
|
||
|
|
TSAN_INTERCEPT(creat);
|
||
|
|
--
|
||
|
|
2.20.1
|
||
|
|
|