From 32d5b80089a05c8c0de7ea4ebb78f05b56342b1a Mon Sep 17 00:00:00 2001 From: yanmengzhao Date: Thu, 10 Mar 2022 14:45:12 +0800 Subject: [PATCH] support hiprofiler hidebug to init params. Signed-off-by: yanmengzhao --- src/appspawn_server.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/appspawn_server.cpp b/src/appspawn_server.cpp index 7b7ea200..4c39123e 100644 --- a/src/appspawn_server.cpp +++ b/src/appspawn_server.cpp @@ -15,6 +15,7 @@ #include "appspawn_server.h" +#include #include #include #include @@ -255,6 +256,31 @@ void AppSpawnServer::LoadAceLib() #endif } +static void InitDebugParams(const ClientSocket::AppProperty *appProperty) +{ + if (access("/system/lib/libhidebug.so", F_OK) != 0) { + HiLog::Error(LABEL, "access failed, errno = %{public}d", errno); + return; + } + void* handle = dlopen("/system/lib/libhidebug.so", RTLD_LAZY); + if (handle == nullptr) { + HiLog::Error(LABEL, "Failed to dlopen libhidebug.so, %{public}s", dlerror()); + return; + } + bool (* initParam)(const char *name); + initParam = (bool (*)(const char *name))dlsym(handle, "InitEnvironmentParam"); + if (initParam == nullptr) { + HiLog::Error(LABEL, "Failed to dlsym InitEnvironmentParam, %{public}s", dlerror()); + dlclose(handle); + return; + } + bool ret = (*initParam)(appProperty->processName); + if (!ret) { + HiLog::Error(LABEL, "init parameters failed."); + } + dlclose(handle); +} + static void ClearEnvironment(void) { sigset_t mask; @@ -326,6 +352,7 @@ int AppSpawnServer::StartApp(char *longProcName, int64_t longProcNameLen, close(fd[1]); return -errno; } else if (pid == 0) { + InitDebugParams(appProperty); SpecialHandle(appProperty); // close socket connection and peer socket in child process if (socket_ != NULL) { -- Gitee