From 652618f019bd8a31ece3df70ce85a95091d32ac2 Mon Sep 17 00:00:00 2001 From: cs1111 Date: Tue, 24 Jun 2025 22:38:22 +0800 Subject: [PATCH] fix:musl and faultloggerd decoupling Signed-off-by: cs1111 Change-Id: Ib5309a66f8e3c56d5623068eb1e310802267d19b --- .../backtrace/include/backtrace_local.h | 3 +- interfaces/innerkits/signal_handler/BUILD.gn | 97 +------------------ .../signal_handler/dfx_signal_handler.c | 18 ---- .../signal_handler/libdfx_signalhandler.map | 7 ++ test/moduletest/BUILD.gn | 2 +- test/systemtest/BUILD.gn | 4 +- test/unittest/local_handler/BUILD.gn | 2 +- tools/dump_catcher/BUILD.gn | 2 +- tools/process_dump/BUILD.gn | 2 +- 9 files changed, 17 insertions(+), 120 deletions(-) diff --git a/interfaces/innerkits/backtrace/include/backtrace_local.h b/interfaces/innerkits/backtrace/include/backtrace_local.h index 4dda464ea..436117b60 100644 --- a/interfaces/innerkits/backtrace/include/backtrace_local.h +++ b/interfaces/innerkits/backtrace/include/backtrace_local.h @@ -20,10 +20,9 @@ #include #include -#include "dfx_define.h" - namespace OHOS { namespace HiviewDFX { +static const int DEFAULT_MAX_FRAME_NUM = 256; /** * @brief Get a thread of backtrace string by specify tid * diff --git a/interfaces/innerkits/signal_handler/BUILD.gn b/interfaces/innerkits/signal_handler/BUILD.gn index 408db3a0f..221d3785e 100644 --- a/interfaces/innerkits/signal_handler/BUILD.gn +++ b/interfaces/innerkits/signal_handler/BUILD.gn @@ -13,38 +13,6 @@ import("//base/hiviewdfx/faultloggerd/faultloggerd.gni") -declare_args() { - dfxsignalhandler_use_flto = false -} - -template("lib_dfxsignalhandler_template") { - __use_flto = invoker.dfxsignalhandler_use_flto - __inherited_configs = invoker.dfxsignalhandler_inherited_config - if (defined(invoker.configs)) { - __static_sighandler_config = invoker.configs - } else { - __static_sighandler_config = [] - } - if (!defined(ohos_lite)) { - static_library(target_name) { - cflags = [ "-DDFX_SIGNAL_LIBC" ] - if (!__use_flto) { - cflags_c = [ "-fno-lto" ] - } - - sources = [ - "$faultloggerd_path/common/cutil/dfx_cutil.c", - "dfx_signal_handler.c", - "dfx_signalhandler_exception.c", - "musl_log.c", - ] - configs -= __inherited_configs - configs += __static_sighandler_config - configs += [ "//build/config/compiler:compiler" ] - } - } -} - if (defined(ohos_lite)) { shared_library("dfx_signalhandler") { defines = [ @@ -76,25 +44,6 @@ if (defined(ohos_lite)) { ] } } else { - inherited_configs = [ - "//build/config/compiler:afdo", - "//build/config/compiler:afdo_optimize_size", - "//build/config/compiler:compiler", - "//build/config/compiler:compiler_arm_fpu", - "//build/config/compiler:compiler_arm_thumb", - "//build/config/compiler:chromium_code", - "//build/config/compiler:default_include_dirs", - "//build/config/compiler:default_optimization", - "//build/config/compiler:default_stack_frames", - "//build/config/compiler:default_symbols", - "//build/config/compiler:export_dynamic", - "//build/config/compiler:no_exceptions", - "//build/config/compiler:no_rtti", - "//build/config/compiler:runtime_library", - "//build/config/compiler:thin_archive", - "//build/config/sanitizers:default_sanitizer_flags", - ] - config("dfx_signal_handler_config") { visibility = [ "*:*" ] include_dirs = [ @@ -103,38 +52,6 @@ if (defined(ohos_lite)) { ] } - config("static_sighandler_config") { - include_dirs = [ - "include", - "$faultloggerd_common_path/cutil", - "$faultloggerd_common_path/dfxlog", - "$faultloggerd_interfaces_path/common", - ] - - defines = [] - configs = [] - if (is_posix) { - configs += [ "//build/config/posix:runtime_library" ] - } - - cflags_cc = [] - libs = [] - - defines = [ - "__GNU_SOURCE=1", # Necessary for clone(). - "CHROMIUM_CXX_TWEAK_INLINES", # Saves binary size. - ] - - defines += [ - "__MUSL__", - "_LIBCPP_HAS_MUSL_LIBC", - "__BUILD_LINUX_WITH_CLANG", - "ENABLE_SIGHAND_MUSL_LOG", - ] - - ldflags = [ "-nostdlib" ] - } - ohos_shared_library("dfx_signalhandler") { branch_protector_ret = "pac_ret" public_configs = [ @@ -142,13 +59,16 @@ if (defined(ohos_lite)) { "$faultloggerd_common_path/build:coverage_flags", ] include_dirs = [ + "include", "$faultloggerd_common_path/cutil", "$faultloggerd_common_path/dfxlog", + "$faultloggerd_interfaces_path/common", ] defines = [ "DFX_LOG_HILOG_BASE" ] version_script = "libdfx_signalhandler.map" sources = [ "dfx_dumprequest.c", + "dfx_signal_handler.c", "dfx_signalhandler_exception.c", ] @@ -176,15 +96,4 @@ if (defined(ohos_lite)) { subsystem_name = "hiviewdfx" kernel_permission_path = "./encaps.json" } - - lib_dfxsignalhandler_template("dfxsignalhandler") { - dfxsignalhandler_use_flto = true - dfxsignalhandler_inherited_config = inherited_configs - configs = [ ":static_sighandler_config" ] - } - lib_dfxsignalhandler_template("dfxsignalhandler_noflto") { - dfxsignalhandler_use_flto = false - dfxsignalhandler_inherited_config = inherited_configs - configs = [ ":static_sighandler_config" ] - } } diff --git a/interfaces/innerkits/signal_handler/dfx_signal_handler.c b/interfaces/innerkits/signal_handler/dfx_signal_handler.c index ed6c2f237..838b8c9d9 100644 --- a/interfaces/innerkits/signal_handler/dfx_signal_handler.c +++ b/interfaces/innerkits/signal_handler/dfx_signal_handler.c @@ -88,12 +88,10 @@ #define NUMBER_SIXTYFOUR 64 #define INHERITABLE_OFFSET 32 -#ifndef __MUSL__ void __attribute__((constructor)) InitHandler(void) { DFX_InstallSignalHandler(); } -#endif static struct ProcessDumpRequest g_request; static pthread_mutex_t g_signalHandlerMutex = PTHREAD_MUTEX_INITIALIZER; @@ -101,8 +99,6 @@ static pthread_key_t g_crashObjKey; static uint64_t g_crashLogConfig = 0; static bool g_crashObjInit = false; static BOOL g_hasInit = FALSE; -static const int SIGNALHANDLER_TIMEOUT = 10000; // 10000 us -static const int ALARM_TIME_S = 10; static int g_prevHandledSignal = SIGDUMP; static struct sigaction g_oldSigactionList[NSIG] = {}; static char g_appRunningId[MAX_APP_RUNNING_UNIQUE_ID_LEN]; @@ -317,20 +313,6 @@ static const int SIGCHAIN_CRASH_SIGNAL_LIST[] = { SIGSEGV, SIGSTKFLT, SIGSYS, SIGTRAP }; -static bool IsMainThread(void) -{ - if (syscall(SYS_getpid) == 1) { - if (syscall(SYS_gettid) == 1) { - return true; - } - } else { - if (syscall(SYS_getpid) == syscall(SYS_gettid)) { - return true; - } - } - return false; -} - static void ResetAndRethrowSignalIfNeed(int signo, siginfo_t *si) { if (IsDumpSignal(signo)) { diff --git a/interfaces/innerkits/signal_handler/libdfx_signalhandler.map b/interfaces/innerkits/signal_handler/libdfx_signalhandler.map index 3fe234276..ec017000e 100644 --- a/interfaces/innerkits/signal_handler/libdfx_signalhandler.map +++ b/interfaces/innerkits/signal_handler/libdfx_signalhandler.map @@ -2,6 +2,13 @@ global: extern "C" { DfxDumpRequest; + SetThreadInfoCallback; + DFX_InstallSignalHandler; + SetAsyncStackCallbackFunc; + DFX_SetAppRunningUniqueId; + DFX_SetCrashObj; + DFX_ResetCrashObj; + DFX_SetCrashLogConfig; }; local: *; diff --git a/test/moduletest/BUILD.gn b/test/moduletest/BUILD.gn index e3f94eb9a..35c4ff0d5 100644 --- a/test/moduletest/BUILD.gn +++ b/test/moduletest/BUILD.gn @@ -61,9 +61,9 @@ if (defined(ohos_lite)) { "$faultloggerd_path/common/build:coverage_flags", ] deps = [ + "$faultloggerd_path/common/dfxutil:dfx_util", "$faultloggerd_path/interfaces/innerkits/faultloggerd_client:libfaultloggerd", "$faultloggerd_path/test/utils:dfx_test_util", - "$faultloggerd_path/common/dfxutil:dfx_util", ] external_deps = [ "c_utils:utils", diff --git a/test/systemtest/BUILD.gn b/test/systemtest/BUILD.gn index ff45b400a..0ae11c3e8 100644 --- a/test/systemtest/BUILD.gn +++ b/test/systemtest/BUILD.gn @@ -42,10 +42,10 @@ if (defined(ohos_lite)) { deps = [ "$faultloggerd_common_path/dfxutil:dfx_util", + "$faultloggerd_interfaces_path/innerkits/faultloggerd_client:libfaultloggerd", "$faultloggerd_path/interfaces/innerkits/dump_catcher:libdfx_dumpcatcher", "$faultloggerd_path/interfaces/innerkits/procinfo:libdfx_procinfo", "$faultloggerd_path/test/utils:dfx_test_util", - "$faultloggerd_interfaces_path/innerkits/faultloggerd_client:libfaultloggerd", ] external_deps = [ "hilog_lite:hilog_shared" ] @@ -91,13 +91,13 @@ if (defined(ohos_lite)) { ] deps = [ + "$faultloggerd_interfaces_path/innerkits/faultloggerd_client:libfaultloggerd", "$faultloggerd_path/common/dfxutil:dfx_util", "$faultloggerd_path/interfaces/innerkits/dump_catcher:libdfx_dumpcatcher", "$faultloggerd_path/interfaces/innerkits/procinfo:libdfx_procinfo", "$faultloggerd_path/test/utils:dfx_test_util", "$faultloggerd_path/tools/crasher_c:crasher_c", "$faultloggerd_path/tools/crasher_cpp:crasher_cpp", - "$faultloggerd_interfaces_path/innerkits/faultloggerd_client:libfaultloggerd", ] if (support_jsapi) { deps += [ "$faultloggerd_path/test/resource:FaultloggerdJsTest" ] diff --git a/test/unittest/local_handler/BUILD.gn b/test/unittest/local_handler/BUILD.gn index da694d5b7..861de2da7 100644 --- a/test/unittest/local_handler/BUILD.gn +++ b/test/unittest/local_handler/BUILD.gn @@ -51,8 +51,8 @@ if (defined(ohos_lite)) { "$faultloggerd_frameworks_path/localhandler:dfx_local_handler_src", "$faultloggerd_interfaces_path/innerkits/faultloggerd_client:libfaultloggerd", "$faultloggerd_path/common/cutil:dfx_cutil", - "$faultloggerd_path/test/utils:dfx_test_util", "$faultloggerd_path/common/dfxutil:dfx_util", + "$faultloggerd_path/test/utils:dfx_test_util", ] external_deps = [ diff --git a/tools/dump_catcher/BUILD.gn b/tools/dump_catcher/BUILD.gn index 55ad7715c..d21642bce 100644 --- a/tools/dump_catcher/BUILD.gn +++ b/tools/dump_catcher/BUILD.gn @@ -66,10 +66,10 @@ if (defined(ohos_lite)) { deps = [ "$faultloggerd_frameworks_path/localhandler:dfx_local_handler_src", + "$faultloggerd_interfaces_path/innerkits/faultloggerd_client:libfaultloggerd", "$faultloggerd_path/common/dfxlog:dfx_hilog", "$faultloggerd_path/common/dfxutil:dfx_util", "$faultloggerd_path/interfaces/innerkits/dump_catcher:libdfx_dumpcatcher", - "$faultloggerd_interfaces_path/innerkits/faultloggerd_client:libfaultloggerd", ] external_deps = [ diff --git a/tools/process_dump/BUILD.gn b/tools/process_dump/BUILD.gn index 45b6dfdab..d85b42342 100644 --- a/tools/process_dump/BUILD.gn +++ b/tools/process_dump/BUILD.gn @@ -14,8 +14,8 @@ import("//base/hiviewdfx/faultloggerd/faultloggerd.gni") processdump_sources = [ - "coredump/dfx_coredump_writer.cpp", "coredump/dfx_coredump_service.cpp", + "coredump/dfx_coredump_writer.cpp", "dfx_buffer_writer.cpp", "dfx_process.cpp", "dfx_thread.cpp", -- Gitee