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-----