diff --git a/0001-compiler-rt-Fix-FLOAT16-feature-detection.patch b/0001-compiler-rt-Fix-FLOAT16-feature-detection.patch new file mode 100644 index 0000000000000000000000000000000000000000..8228ddc40d49656b5d4a165d5077d70f4698e1f8 --- /dev/null +++ b/0001-compiler-rt-Fix-FLOAT16-feature-detection.patch @@ -0,0 +1,36 @@ +From ce15f52198639e9195b8833ed60dc1a49c293956 Mon Sep 17 00:00:00 2001 +From: Tom Stellard <tstellar@redhat.com> +Date: Tue, 29 Aug 2023 15:49:55 -0700 +Subject: [PATCH] compiler-rt: Fix FLOAT16 feature detection + +CMAKE_TRY_COMPILE_TARGET_TYPE defaults to EXECUTABLE, which causes +any feature detection code snippet without a main function to fail, +so we need to make sure it gets explicitly set to STATIC_LIBRARY. +--- + compiler-rt/lib/builtins/CMakeLists.txt | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/compiler-rt/lib/builtins/CMakeLists.txt b/compiler-rt/lib/builtins/CMakeLists.txt +index 2fc70522895f..e83a1ecea50b 100644 +--- a/compiler-rt/lib/builtins/CMakeLists.txt ++++ b/compiler-rt/lib/builtins/CMakeLists.txt +@@ -5,7 +5,6 @@ + if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) + cmake_minimum_required(VERSION 3.20.0) + +- set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + project(CompilerRTBuiltins C ASM) + set(COMPILER_RT_STANDALONE_BUILD TRUE) + set(COMPILER_RT_BUILTINS_STANDALONE_BUILD TRUE) +@@ -50,6 +49,8 @@ if (COMPILER_RT_STANDALONE_BUILD) + ON) + endif() + ++set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) ++ + include(builtin-config-ix) + include(CMakeDependentOption) + include(CMakePushCheckState) +-- +2.41.0 + diff --git a/0001-sanitizer-msan-VarArgHelper-for-loongarch64.patch b/0001-sanitizer-msan-VarArgHelper-for-loongarch64.patch deleted file mode 100644 index b98ea8adc04cdefb03cbf1f09b061247c74a8751..0000000000000000000000000000000000000000 --- a/0001-sanitizer-msan-VarArgHelper-for-loongarch64.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 857dc000141b237da73a43d59e22672750501559 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) -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 <signal.h> - #include <stdarg.h> - #include <sanitizer/msan_interface.h> --- -2.20.1 - diff --git a/0002-CFI-Allow-LoongArch-67314.patch b/0002-CFI-Allow-LoongArch-67314.patch deleted file mode 100644 index 1a3f4e12a0fcc5ab7cb26350f98f456fc4dbec8a..0000000000000000000000000000000000000000 --- a/0002-CFI-Allow-LoongArch-67314.patch +++ /dev/null @@ -1,101 +0,0 @@ -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 deleted file mode 100644 index 126a18cba6d1b776969f494a4922227335ed0ae0..0000000000000000000000000000000000000000 --- a/0003-test-compiler-rt-Mark-several-tests-as-UNSUPPORTED-o.patch +++ /dev/null @@ -1,70 +0,0 @@ -From b26071a4f4be011b6b3707025e9a5147b33683bf 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) -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 <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 - 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 deleted file mode 100644 index 41fd67ac181bb3af59df8a99b8a28a93461d436e..0000000000000000000000000000000000000000 --- a/0004-tsan-Add-support-for-linux-loongarch64-in-lib-tsan-g.patch +++ /dev/null @@ -1,107 +0,0 @@ -From 4021d30c75ac6af5e57bf0b77ef1d8e8dea00160 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) -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<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 - diff --git a/0005-tsan-Refine-fstat-64-interceptors-86625.patch b/0005-tsan-Refine-fstat-64-interceptors-86625.patch deleted file mode 100644 index 48fc92b598db9570cfcc92e08b517480bcdabea9..0000000000000000000000000000000000000000 --- a/0005-tsan-Refine-fstat-64-interceptors-86625.patch +++ /dev/null @@ -1,113 +0,0 @@ -From 1313f6d8bf7ba44ce712e638f98f72c7dbb4e457 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) -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/95796.patch b/95796.patch new file mode 100644 index 0000000000000000000000000000000000000000..25185e2c2e26dd24204c2d6f8040380d2771a977 --- /dev/null +++ b/95796.patch @@ -0,0 +1,55 @@ +From 1df9fd71f76a7731f198a174da19deaab50f10bb Mon Sep 17 00:00:00 2001 +From: Tulio Magno Quites Machado Filho <tuliom@redhat.com> +Date: Mon, 17 Jun 2024 11:25:36 -0300 +Subject: [PATCH] [hwasan][aarch64] Fix missing DT_AARCH64_BTI_PLT flag + +When building hwasan on aarch64, the DT_AARCH64_BTI_PLT flag is missing +from libclang_rt.hwasan.so because some object files without +DT_AARCH64_BTI_PLT are linked in the final DSO. +These files are specific to riscv64 and x86_64, ending up with no +aarch64 code in them. + +Avoid building and linking architecture-specific files unless the +architecture is listed in HWASAN_SUPPORTED_ARCH. +--- + compiler-rt/lib/hwasan/CMakeLists.txt | 22 +++++++++++++++++----- + 1 file changed, 17 insertions(+), 5 deletions(-) + +diff --git a/compiler-rt/lib/hwasan/CMakeLists.txt b/compiler-rt/lib/hwasan/CMakeLists.txt +index 6f75baa7e354f..086079c7536e5 100644 +--- a/compiler-rt/lib/hwasan/CMakeLists.txt ++++ b/compiler-rt/lib/hwasan/CMakeLists.txt +@@ -15,16 +15,28 @@ set(HWASAN_RTL_SOURCES + hwasan_memintrinsics.cpp + hwasan_poisoning.cpp + hwasan_report.cpp +- hwasan_setjmp_aarch64.S +- hwasan_setjmp_riscv64.S +- hwasan_setjmp_x86_64.S +- hwasan_tag_mismatch_aarch64.S +- hwasan_tag_mismatch_riscv64.S + hwasan_thread.cpp + hwasan_thread_list.cpp + hwasan_type_test.cpp + ) + ++foreach(arch ${HWASAN_SUPPORTED_ARCH}) ++ if(${arch} MATCHES "aarch64") ++ list(APPEND HWASAN_RTL_SOURCES ++ hwasan_setjmp_aarch64.S ++ hwasan_tag_mismatch_aarch64.S) ++ endif() ++ if(${arch} MATCHES "riscv64") ++ list(APPEND HWASAN_RTL_SOURCES ++ hwasan_setjmp_riscv64.S ++ hwasan_tag_mismatch_riscv64.S) ++ endif() ++ if(${arch} MATCHES "x86_64") ++ list(APPEND HWASAN_RTL_SOURCES ++ hwasan_setjmp_x86_64.S) ++ endif() ++endforeach() ++ + set(HWASAN_RTL_CXX_SOURCES + hwasan_new_delete.cpp + ) diff --git a/95839.patch b/95839.patch new file mode 100644 index 0000000000000000000000000000000000000000..134855d7d70dbd8c10f8278f3617d8d13074ef3e --- /dev/null +++ b/95839.patch @@ -0,0 +1,66 @@ +From 723a13c41dca89e37f3e02120c9385b33ee73439 Mon Sep 17 00:00:00 2001 +From: Tulio Magno Quites Machado Filho <tuliom@redhat.com> +Date: Mon, 17 Jun 2024 16:47:04 -0300 +Subject: [PATCH] [tsan][aarch64] Fix branch protection in interceptors + +Start functions with BTI in order to identify the function as a valid +branch target. +Also add the BTI marker to tsan_rtl_aarch64.S. + +With this patch, libclang_rt.tsan.so can now be generated with +DT_AARCH64_BTI_PLT when built with -mbranch-protection=standard. +--- + compiler-rt/lib/tsan/rtl/tsan_rtl_aarch64.S | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/compiler-rt/lib/tsan/rtl/tsan_rtl_aarch64.S b/compiler-rt/lib/tsan/rtl/tsan_rtl_aarch64.S +index c6162659b8766..7d920bee4a2db 100644 +--- a/compiler-rt/lib/tsan/rtl/tsan_rtl_aarch64.S ++++ b/compiler-rt/lib/tsan/rtl/tsan_rtl_aarch64.S +@@ -2,6 +2,7 @@ + #if defined(__aarch64__) + + #include "sanitizer_common/sanitizer_asm.h" ++#include "builtins/assembly.h" + + #if !defined(__APPLE__) + .section .text +@@ -16,6 +17,7 @@ ASM_HIDDEN(__tsan_setjmp) + ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(setjmp)) + ASM_SYMBOL_INTERCEPTOR(setjmp): + CFI_STARTPROC ++ BTI_C + + // Save frame/link register + stp x29, x30, [sp, -32]! +@@ -66,6 +68,7 @@ ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(setjmp)) + ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(_setjmp)) + ASM_SYMBOL_INTERCEPTOR(_setjmp): + CFI_STARTPROC ++ BTI_C + + // Save frame/link register + stp x29, x30, [sp, -32]! +@@ -116,6 +119,7 @@ ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(_setjmp)) + ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(sigsetjmp)) + ASM_SYMBOL_INTERCEPTOR(sigsetjmp): + CFI_STARTPROC ++ BTI_C + + // Save frame/link register + stp x29, x30, [sp, -32]! +@@ -168,6 +172,7 @@ ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(sigsetjmp)) + ASM_TYPE_FUNCTION(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)) + ASM_SYMBOL_INTERCEPTOR(__sigsetjmp): + CFI_STARTPROC ++ BTI_C + + // Save frame/link register + stp x29, x30, [sp, -32]! +@@ -217,4 +222,6 @@ ASM_SIZE(ASM_SYMBOL_INTERCEPTOR(__sigsetjmp)) + + NO_EXEC_STACK_DIRECTIVE + ++GNU_PROPERTY_BTI_PAC ++ + #endif diff --git a/cmake-17.0.6.src.tar.xz b/cmake-17.0.6.src.tar.xz deleted file mode 100644 index aeec995a7c0ddaa99a8549223bb1cb8ddab8ab32..0000000000000000000000000000000000000000 Binary files a/cmake-17.0.6.src.tar.xz and /dev/null differ diff --git a/compiler-rt-17.0.6.src.tar.xz b/compiler-rt-17.0.6.src.tar.xz deleted file mode 100644 index 3a0df8ab060750bf22fff63841addf793ed4375d..0000000000000000000000000000000000000000 Binary files a/compiler-rt-17.0.6.src.tar.xz and /dev/null differ diff --git a/compiler-rt-18.1.8.src.tar.xz b/compiler-rt-18.1.8.src.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..7d53f90cb842624f80060650312ecac506c1c23a Binary files /dev/null and b/compiler-rt-18.1.8.src.tar.xz differ diff --git a/compiler-rt-18.1.8.src.tar.xz.sig b/compiler-rt-18.1.8.src.tar.xz.sig new file mode 100644 index 0000000000000000000000000000000000000000..8de17eba5f1a9769ac47ad03bb5a4c4c5daef5d1 Binary files /dev/null and b/compiler-rt-18.1.8.src.tar.xz.sig differ diff --git a/compiler-rt.spec b/compiler-rt.spec index f010ab8698de57fc6a4e83a54d7e0ee47dc623cf..9839843f14d4b38e2c79fbb0ad04fe927e0b8ac4 100644 --- a/compiler-rt.spec +++ b/compiler-rt.spec @@ -1,15 +1,37 @@ -%define anolis_release 3 +%define anolis_release 1 +%bcond_with snapshot_build + +%if %{with snapshot_build} +# Unlock LLVM Snapshot LUA functions +%{llvm_sb_verbose} +%{llvm_sb} +%endif + %global toolchain clang %undefine _include_frame_pointers -%global maj_ver 17 -%global min_ver 0 -%global patch_ver 6 +%bcond_with compat_build + +%global maj_ver 18 +%global min_ver 1 +%global patch_ver 8 +#global rc_ver 4 +%if %{with snapshot_build} +%global maj_ver %{llvm_snapshot_version_major} +%global min_ver %{llvm_snapshot_version_minor} +%global patch_ver %{llvm_snapshot_version_patch} +%undefine rc_ver +%endif %global compiler_rt_version %{maj_ver}.%{min_ver}.%{patch_ver} -%global crt_srcdir compiler-rt-%{compiler_rt_version}.src -%global cmake_srcdir cmake-%{compiler_rt_version}.src +%global crt_srcdir compiler-rt-%{compiler_rt_version}%{?rc_ver:rc%{rc_ver}}.src + +%if %{with compat_build} +%global pkg_name compiler-rt%{maj_ver} +%else +%global pkg_name compiler-rt +%endif # see https://sourceware.org/bugzilla/show_bug.cgi?id=25271 %global optflags %(echo %{optflags} -D_DEFAULT_SOURCE) @@ -17,34 +39,45 @@ # see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93615 %global optflags %(echo %{optflags} -Dasm=__asm__) -Name: compiler-rt -Version: %{compiler_rt_version} +Name: %{pkg_name} +Version: %{compiler_rt_version}%{?rc_ver:~rc%{rc_ver}}%{?llvm_snapshot_version_suffix:~%{llvm_snapshot_version_suffix}} Release: %{anolis_release}%{?dist} Summary: LLVM "compiler-rt" runtime libraries License: Apache-2.0 WITH LLVM-exception OR NCSA OR MIT 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 +%if %{with snapshot_build} +Source0: %{llvm_snapshot_source_prefix}compiler-rt-%{llvm_snapshot_yyyymmdd}.src.tar.xz +%{llvm_snapshot_extra_source_tags} +%else +Source0: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{compiler_rt_version}%{?rc_ver:-rc%{rc_ver}}/%{crt_srcdir}.tar.xz +Source1: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{compiler_rt_version}%{?rc_ver:-rc%{rc_ver}}/%{crt_srcdir}.tar.xz.sig +Source2: release-keys.asc +%endif -# 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 +Patch0: 0001-compiler-rt-Fix-FLOAT16-feature-detection.patch +# The following 2 patches fix issues reported by annocheck. +# They're backports from: +# https://github.com/llvm/llvm-project/pull/95796 +# https://github.com/llvm/llvm-project/pull/95839 +Patch1: 95796.patch +Patch2: 95839.patch BuildRequires: clang BuildRequires: cmake BuildRequires: ninja-build BuildRequires: python3 +# We need python3-devel for %%py3_shebang_fix BuildRequires: python3-devel -BuildRequires: llvm-devel -BuildRequires: zlib-devel +BuildRequires: llvm-devel = %{version} +BuildRequires: llvm-cmake-utils = %{version} +BuildRequires: zlib-devel -BuildRequires: llvm-googletest +# For gpg source verification +BuildRequires: gnupg2 -Requires: clang-resource-filesystem +Requires: clang-resource-filesystem%{?isa} = %{version} +Provides: %{name}(major) = %{maj_ver} %description The compiler-rt project is a part of the LLVM project. It provides @@ -52,68 +85,59 @@ implementation of the low-level target-specific hooks required by code generation, sanitizer runtimes and profiling library for code instrumentation, and Blocks C language extension. -%package doc -Summary: Documentation for %{name} -Requires: %{name} = %{version}-%{release} -BuildArch: noarch - -%description doc -The %{name}-doc package contains documentations for %{name} - %prep -%setup -T -q -b 3 -n %{cmake_srcdir} -cd .. -mv %{cmake_srcdir} cmake +%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}' %autosetup -n %{crt_srcdir} -p2 +# compiler-rt does not allow configuring LLVM_COMMON_CMAKE_UTILS. +ln -s %{_datadir}/llvm/cmake ../cmake + %py3_shebang_fix lib/hwasan/scripts/hwasan_symbolize %build +# Copy CFLAGS into ASMFLAGS, so -fcf-protection is used when compiling assembly files. export ASMFLAGS=$CFLAGS %cmake -GNinja \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_MODULE_PATH=%{_libdir}/cmake/llvm \ -DCMAKE_SKIP_RPATH:BOOL=ON \ + -DCOMPILER_RT_INSTALL_PATH=%{_prefix}/lib/clang/%{maj_ver} \ + -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=ON \ + \ +%if %{with snapshot_build} + -DLLVM_VERSION_SUFFIX="%{llvm_snapshot_version_suffix}" \ +%endif \ +%if 0%{?__isa_bits} == 64 -DLLVM_LIBDIR_SUFFIX=64 \ - -DCOMPILER_RT_INCLUDE_TESTS:BOOL=OFF +%else + -DLLVM_LIBDIR_SUFFIX= \ +%endif + -DCOMPILER_RT_INCLUDE_TESTS:BOOL=OFF # could be on? %cmake_build %install -%cmake_install -# move blacklist/abilist files to where clang expect them -mkdir -p %{buildroot}%{_libdir}/clang/%{maj_ver}/share -mv -v %{buildroot}%{_datadir}/*list.txt %{buildroot}%{_libdir}/clang/%{maj_ver}/share/ - -# move sanitizer libs to better place -%global libclang_rt_installdir lib/linux -mkdir -p %{buildroot}%{_libdir}/clang/%{maj_ver}/lib -mv -v %{buildroot}%{_prefix}/%{libclang_rt_installdir}/*_rt* %{buildroot}%{_libdir}/clang/%{maj_ver}/lib -mkdir -p %{buildroot}%{_libdir}/clang/%{maj_ver}/lib/linux/ -pushd %{buildroot}%{_libdir}/clang/%{maj_ver}/lib -for i in *.a *.so -do - ln -s ../$i linux/$i -done +%cmake_install -popd +%check +#%%cmake_build --target check-compiler-rt %files %license LICENSE.TXT -%{_includedir}/* -%{_libdir}/clang/%{maj_ver}/lib/* -%{_libdir}/clang/%{maj_ver}/share/* -%ifnarch loongarch64 -%{_bindir}/hwasan_symbolize +%ifarch x86_64 aarch64 riscv64 +%{_prefix}/lib/clang/%{maj_ver}/bin/* %endif - -%files doc -%doc README.txt CODE_OWNERS.TXT docs/TestingGuide.rst +%{_prefix}/lib/clang/%{maj_ver}/include/* +%{_prefix}/lib/clang/%{maj_ver}/lib/* +%{_prefix}/lib/clang/%{maj_ver}/share/* %changelog +* Fri Feb 28 2025 Zhao Hang <wb-zh951434@alibaba-inc.com> - 18.1.8-1 +- Refer to CentOS Stream compiler-rt-18.1.8-1 (tuliom@redhat.com) + * Tue Apr 9 2024 Chen Li <chenli@loongson.cn> - 17.0.6-3 - LoongArch Backport: Improve support and fix some bugs for compiler-rt diff --git a/release-keys.asc b/release-keys.asc new file mode 100644 index 0000000000000000000000000000000000000000..0d3789a750fd492c63a97ecb5c42d2d8e003be8b --- /dev/null +++ b/release-keys.asc @@ -0,0 +1,104 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +9RmlwZlOTFGcWBYl/cfRONn9qi9a6w== +=Lvw+ +-----END PGP PUBLIC KEY BLOCK----- +-----BEGIN PGP PUBLIC KEY BLOCK----- + +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 +=tMzl +-----END PGP PUBLIC KEY BLOCK-----