From 0a3ee5fc25ca3ee6345c6ed53b3c491176d2b5d3 Mon Sep 17 00:00:00 2001 From: chenli Date: Tue, 9 Apr 2024 15:20:27 +0800 Subject: [PATCH] LoongArch: Backport patches from release/18.x Sync to 9b3edb592deb except for CALL36 relative patches which need to be consistent with GCC. --- ...er-msan-VarArgHelper-for-loongarch64.patch | 35 ++++++ 0002-CFI-Allow-LoongArch-67314.patch | 101 ++++++++++++++++ ...-Mark-several-tests-as-UNSUPPORTED-o.patch | 70 +++++++++++ ...-for-linux-loongarch64-in-lib-tsan-g.patch | 107 +++++++++++++++++ ...n-Refine-fstat-64-interceptors-86625.patch | 113 ++++++++++++++++++ compiler-rt.spec | 12 +- 6 files changed, 437 insertions(+), 1 deletion(-) create mode 100644 0001-sanitizer-msan-VarArgHelper-for-loongarch64.patch create mode 100644 0002-CFI-Allow-LoongArch-67314.patch create mode 100644 0003-test-compiler-rt-Mark-several-tests-as-UNSUPPORTED-o.patch create mode 100644 0004-tsan-Add-support-for-linux-loongarch64-in-lib-tsan-g.patch create mode 100644 0005-tsan-Refine-fstat-64-interceptors-86625.patch diff --git a/0001-sanitizer-msan-VarArgHelper-for-loongarch64.patch b/0001-sanitizer-msan-VarArgHelper-for-loongarch64.patch new file mode 100644 index 0000000..b98ea8a --- /dev/null +++ b/0001-sanitizer-msan-VarArgHelper-for-loongarch64.patch @@ -0,0 +1,35 @@ +From 857dc000141b237da73a43d59e22672750501559 Mon Sep 17 00:00:00 2001 +From: zhanglimin +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) +Change-Id: I8dbd46aa86ddc847538bc70fc556424dc9a8e23b +--- + 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 + #include + #include +-- +2.20.1 + diff --git a/0002-CFI-Allow-LoongArch-67314.patch b/0002-CFI-Allow-LoongArch-67314.patch new file mode 100644 index 0000000..1a3f4e1 --- /dev/null +++ b/0002-CFI-Allow-LoongArch-67314.patch @@ -0,0 +1,101 @@ +From 9e977e153a4b7d69fe9e2d6b6defa7f3bb518b75 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) +Change-Id: Ic074cca26885d7529fc659a50e5abbe7969991e4 +--- + 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 + diff --git a/0003-test-compiler-rt-Mark-several-tests-as-UNSUPPORTED-o.patch b/0003-test-compiler-rt-Mark-several-tests-as-UNSUPPORTED-o.patch new file mode 100644 index 0000000..126a18c --- /dev/null +++ b/0003-test-compiler-rt-Mark-several-tests-as-UNSUPPORTED-o.patch @@ -0,0 +1,70 @@ +From b26071a4f4be011b6b3707025e9a5147b33683bf Mon Sep 17 00:00:00 2001 +From: Ami-zhang +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) +Change-Id: Ic02e8afed0ed91d62a8f2b4d0058e3fb6742c1ea +--- + 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 + #include +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 + diff --git a/0004-tsan-Add-support-for-linux-loongarch64-in-lib-tsan-g.patch b/0004-tsan-Add-support-for-linux-loongarch64-in-lib-tsan-g.patch new file mode 100644 index 0000000..41fd67a --- /dev/null +++ b/0004-tsan-Add-support-for-linux-loongarch64-in-lib-tsan-g.patch @@ -0,0 +1,107 @@ +From 4021d30c75ac6af5e57bf0b77ef1d8e8dea00160 Mon Sep 17 00:00:00 2001 +From: abner chenc +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 +(cherry picked from commit 9d3fbf97bef3f19da4e0a047f017b8142f59b3fd) +Change-Id: I2adc6314373337f3d87d3bffbb2357c991e95cf2 +--- + 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(arg); + # elif defined(__aarch64__) + return Func::template Apply(arg); ++# elif defined(__loongarch_lp64) ++ return Func::template Apply(arg); + # elif SANITIZER_WINDOWS + return Func::template Apply(arg); + # else +@@ -692,6 +723,7 @@ void ForEachMapping() { + Func::template Apply(); + Func::template Apply(); + Func::template Apply(); ++ Func::template Apply(); + Func::template Apply(); + Func::template Apply(); + } +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 + diff --git a/0005-tsan-Refine-fstat-64-interceptors-86625.patch b/0005-tsan-Refine-fstat-64-interceptors-86625.patch new file mode 100644 index 0000000..48fc92b --- /dev/null +++ b/0005-tsan-Refine-fstat-64-interceptors-86625.patch @@ -0,0 +1,113 @@ +From 1313f6d8bf7ba44ce712e638f98f72c7dbb4e457 Mon Sep 17 00:00:00 2001 +From: Fangrui Song +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) +Change-Id: Icf805b4795870414d77b221f7f514769d296f8aa +--- + .../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 + diff --git a/compiler-rt.spec b/compiler-rt.spec index d32832d..f010ab8 100644 --- a/compiler-rt.spec +++ b/compiler-rt.spec @@ -1,4 +1,4 @@ -%define anolis_release 2 +%define anolis_release 3 %global toolchain clang %undefine _include_frame_pointers @@ -27,6 +27,13 @@ URL: http://llvm.org Source0: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{compiler_rt_version}/%{crt_srcdir}.tar.xz Source3: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{compiler_rt_version}/%{cmake_srcdir}.tar.xz +# Patches for LoongArch +Patch1: 0001-sanitizer-msan-VarArgHelper-for-loongarch64.patch +Patch2: 0002-CFI-Allow-LoongArch-67314.patch +Patch3: 0003-test-compiler-rt-Mark-several-tests-as-UNSUPPORTED-o.patch +Patch4: 0004-tsan-Add-support-for-linux-loongarch64-in-lib-tsan-g.patch +Patch5: 0005-tsan-Refine-fstat-64-interceptors-86625.patch + BuildRequires: clang BuildRequires: cmake BuildRequires: ninja-build @@ -107,6 +114,9 @@ popd %doc README.txt CODE_OWNERS.TXT docs/TestingGuide.rst %changelog +* Tue Apr 9 2024 Chen Li - 17.0.6-3 +- LoongArch Backport: Improve support and fix some bugs for compiler-rt + * Mon Apr 1 2024 Wenlong Zhang - 17.0.6-2 - build for loongarch64 -- Gitee