From 2ed5d19baccfb388a441f27da8a33d8a5e0db466 Mon Sep 17 00:00:00 2001 From: Eric Date: Thu, 20 Mar 2025 15:02:12 +0800 Subject: [PATCH] [Compier-RT][HWASAN] use weak symbol of add_special_signal_handler Signed-off-by: Eric --- .../sanitizer_posix_libcdep.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp index 6c2a288d6a84..903b08ba829c 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cpp @@ -36,12 +36,6 @@ #include #include -// OHOS_LOCAL begin -#if SANITIZER_OHOS -#include -#endif -// OHOS_LOCAL end - #if SANITIZER_FREEBSD // The MAP_NORESERVE define has been removed in FreeBSD 11.x, and even before // that, it was never implemented. So just define it to zero. @@ -197,6 +191,15 @@ void UnsetAlternateSignalStack() { UnmapOrDie(oldstack.ss_sp, oldstack.ss_size); } +#if SANITIZER_OHOS +struct signal_chain_action { + bool (*sca_sigaction)(int, siginfo_t*, void*); + sigset_t sca_mask; + int sca_flags; +}; +extern "C" SANITIZER_WEAK_ATTRIBUTE +void add_special_signal_handler(int signo, struct signal_chain_action* sa); +#endif static void MaybeInstallSigaction(int signum, SignalHandlerType handler) { #if !SANITIZER_OHOS @@ -216,7 +219,7 @@ static void MaybeInstallSigaction(int signum, HandleSignalMode mode = GetHandleSignalMode(signum); if (mode == kHandleSignalNo) return; - if (mode == kHandleSignalYes) { + if (mode == kHandleSignalYes || !(&add_special_signal_handler)) { struct sigaction sigact; internal_memset(&sigact, 0, sizeof(sigact)); sigact.sa_sigaction = (sa_sigaction_t)handler; -- Gitee