https://github.com/DhruvSrivastavaX updated https://github.com/llvm/llvm-project/pull/130582
>From 21fe9850c99b3eae4be65ac34c1f4f9c2d06ab2c Mon Sep 17 00:00:00 2001 From: Dhruv-Srivastava <dhruv.srivast...@ibm.com> Date: Mon, 10 Mar 2025 05:39:52 -0500 Subject: [PATCH 1/5] Host.cpp base for AIX --- lldb/source/Host/CMakeLists.txt | 1 + lldb/source/Host/aix/Host.cpp | 126 ++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 lldb/source/Host/aix/Host.cpp diff --git a/lldb/source/Host/CMakeLists.txt b/lldb/source/Host/CMakeLists.txt index 9be0c06a516ba..52ef67feeb6ab 100644 --- a/lldb/source/Host/CMakeLists.txt +++ b/lldb/source/Host/CMakeLists.txt @@ -135,6 +135,7 @@ else() elseif (CMAKE_SYSTEM_NAME MATCHES "AIX") add_host_subdirectory(aix + aix/Host.cpp aix/HostInfoAIX.cpp ) endif() diff --git a/lldb/source/Host/aix/Host.cpp b/lldb/source/Host/aix/Host.cpp new file mode 100644 index 0000000000000..a410899dc2a50 --- /dev/null +++ b/lldb/source/Host/aix/Host.cpp @@ -0,0 +1,126 @@ +//===-- source/Host/aix/Host.cpp ----------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "lldb/Host/Host.h" +#include "lldb/Host/FileSystem.h" +#include "lldb/Host/HostInfo.h" +#include "lldb/Utility/LLDBLog.h" +#include "lldb/Utility/Log.h" +#include "lldb/Utility/ProcessInfo.h" +#include "lldb/Utility/Status.h" +#include "llvm/ADT/StringSwitch.h" +#include "llvm/Object/ELF.h" +#include "llvm/Support/ScopedPrinter.h" +#include <cerrno> +#include <cstdio> +#include <cstring> +#include <dirent.h> +#include <fcntl.h> +#include <sstream> +#include <sys/stat.h> +#include <sys/types.h> +#include <sys/utsname.h> +#include <unistd.h> + +using namespace llvm; +using namespace lldb; +using namespace lldb_private; + +namespace { +enum class ProcessState { + Unknown, + Dead, + DiskSleep, + Idle, + Paging, + Parked, + Running, + Sleeping, + TracedOrStopped, + Zombie, +}; +} + +namespace lldb_private { +class ProcessLaunchInfo; +} + +static bool GetStatusInfo(::pid_t Pid, ProcessInstanceInfo &ProcessInfo, + ProcessState &State, ::pid_t &TracerPid, + ::pid_t &Tgid) { + return false; +} + +static void GetProcessArgs(::pid_t pid, ProcessInstanceInfo &process_info) {} + +static bool GetProcessAndStatInfo(::pid_t pid, + ProcessInstanceInfo &process_info, + ProcessState &State, ::pid_t &tracerpid) { + return false; +} + +uint32_t Host::FindProcessesImpl(const ProcessInstanceInfoMatch &match_info, + ProcessInstanceInfoList &process_infos) { + static const char procdir[] = "/proc/"; + + DIR *dirproc = opendir(procdir); + if (dirproc) { + struct dirent *direntry = nullptr; + const uid_t our_uid = getuid(); + const lldb::pid_t our_pid = getpid(); + bool all_users = match_info.GetMatchAllUsers(); + + while ((direntry = readdir(dirproc)) != nullptr) { + + lldb::pid_t pid = atoi(direntry->d_name); + + // Skip this process. + if (pid == our_pid) + continue; + + ::pid_t tracerpid; + ProcessState State; + ProcessInstanceInfo process_info; + + if (!GetProcessAndStatInfo(pid, process_info, State, tracerpid)) + continue; + + // Skip if process is being debugged. + if (tracerpid != 0) + continue; + + if (State == ProcessState::Zombie) + continue; + + // Check for user match if we're not matching all users and not running + // as root. + if (!all_users && (our_uid != 0) && (process_info.GetUserID() != our_uid)) + continue; + + if (match_info.Matches(process_info)) { + process_infos.push_back(process_info); + } + } + + closedir(dirproc); + } + + return process_infos.size(); +} + +bool Host::GetProcessInfo(lldb::pid_t pid, ProcessInstanceInfo &process_info) { + ::pid_t tracerpid; + ProcessState State; + return GetProcessAndStatInfo(pid, process_info, State, tracerpid); +} + +Environment Host::GetEnvironment() { return Environment(environ); } + +Status Host::ShellExpandArguments(ProcessLaunchInfo &launch_info) { + return Status("unimplemented"); +} >From 4a9ff1d56b0210e4f2130394a81dfdd414457475 Mon Sep 17 00:00:00 2001 From: Dhruv-Srivastava <dhruv.srivast...@ibm.com> Date: Mon, 10 Mar 2025 06:02:02 -0500 Subject: [PATCH 2/5] cleanup --- lldb/source/Host/aix/Host.cpp | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/lldb/source/Host/aix/Host.cpp b/lldb/source/Host/aix/Host.cpp index a410899dc2a50..38c77b4959ead 100644 --- a/lldb/source/Host/aix/Host.cpp +++ b/lldb/source/Host/aix/Host.cpp @@ -7,25 +7,9 @@ //===----------------------------------------------------------------------===// #include "lldb/Host/Host.h" -#include "lldb/Host/FileSystem.h" -#include "lldb/Host/HostInfo.h" -#include "lldb/Utility/LLDBLog.h" -#include "lldb/Utility/Log.h" #include "lldb/Utility/ProcessInfo.h" #include "lldb/Utility/Status.h" -#include "llvm/ADT/StringSwitch.h" -#include "llvm/Object/ELF.h" -#include "llvm/Support/ScopedPrinter.h" -#include <cerrno> -#include <cstdio> -#include <cstring> #include <dirent.h> -#include <fcntl.h> -#include <sstream> -#include <sys/stat.h> -#include <sys/types.h> -#include <sys/utsname.h> -#include <unistd.h> using namespace llvm; using namespace lldb; @@ -102,9 +86,8 @@ uint32_t Host::FindProcessesImpl(const ProcessInstanceInfoMatch &match_info, if (!all_users && (our_uid != 0) && (process_info.GetUserID() != our_uid)) continue; - if (match_info.Matches(process_info)) { + if (match_info.Matches(process_info)) process_infos.push_back(process_info); - } } closedir(dirproc); >From b6daa272fc829ae94830ccd4d4a941314cf659a8 Mon Sep 17 00:00:00 2001 From: Dhruv-Srivastava <dhruv.srivast...@ibm.com> Date: Mon, 10 Mar 2025 08:23:05 -0500 Subject: [PATCH 3/5] Addressed comments --- lldb/source/Host/aix/Host.cpp | 45 +---------------------------------- 1 file changed, 1 insertion(+), 44 deletions(-) diff --git a/lldb/source/Host/aix/Host.cpp b/lldb/source/Host/aix/Host.cpp index 38c77b4959ead..e98e916a9124a 100644 --- a/lldb/source/Host/aix/Host.cpp +++ b/lldb/source/Host/aix/Host.cpp @@ -50,50 +50,7 @@ static bool GetProcessAndStatInfo(::pid_t pid, uint32_t Host::FindProcessesImpl(const ProcessInstanceInfoMatch &match_info, ProcessInstanceInfoList &process_infos) { - static const char procdir[] = "/proc/"; - - DIR *dirproc = opendir(procdir); - if (dirproc) { - struct dirent *direntry = nullptr; - const uid_t our_uid = getuid(); - const lldb::pid_t our_pid = getpid(); - bool all_users = match_info.GetMatchAllUsers(); - - while ((direntry = readdir(dirproc)) != nullptr) { - - lldb::pid_t pid = atoi(direntry->d_name); - - // Skip this process. - if (pid == our_pid) - continue; - - ::pid_t tracerpid; - ProcessState State; - ProcessInstanceInfo process_info; - - if (!GetProcessAndStatInfo(pid, process_info, State, tracerpid)) - continue; - - // Skip if process is being debugged. - if (tracerpid != 0) - continue; - - if (State == ProcessState::Zombie) - continue; - - // Check for user match if we're not matching all users and not running - // as root. - if (!all_users && (our_uid != 0) && (process_info.GetUserID() != our_uid)) - continue; - - if (match_info.Matches(process_info)) - process_infos.push_back(process_info); - } - - closedir(dirproc); - } - - return process_infos.size(); + return 0; } bool Host::GetProcessInfo(lldb::pid_t pid, ProcessInstanceInfo &process_info) { >From b6d3023a2958501284ab936dc45c69740d8609e0 Mon Sep 17 00:00:00 2001 From: Dhruv-Srivastava <dhruv.srivast...@ibm.com> Date: Mon, 10 Mar 2025 08:45:35 -0500 Subject: [PATCH 4/5] Addressed comments --- lldb/source/Host/aix/Host.cpp | 41 +---------------------------------- 1 file changed, 1 insertion(+), 40 deletions(-) diff --git a/lldb/source/Host/aix/Host.cpp b/lldb/source/Host/aix/Host.cpp index e98e916a9124a..b95de6ecffa45 100644 --- a/lldb/source/Host/aix/Host.cpp +++ b/lldb/source/Host/aix/Host.cpp @@ -7,60 +7,21 @@ //===----------------------------------------------------------------------===// #include "lldb/Host/Host.h" -#include "lldb/Utility/ProcessInfo.h" #include "lldb/Utility/Status.h" -#include <dirent.h> using namespace llvm; using namespace lldb; using namespace lldb_private; -namespace { -enum class ProcessState { - Unknown, - Dead, - DiskSleep, - Idle, - Paging, - Parked, - Running, - Sleeping, - TracedOrStopped, - Zombie, -}; -} - -namespace lldb_private { -class ProcessLaunchInfo; -} - -static bool GetStatusInfo(::pid_t Pid, ProcessInstanceInfo &ProcessInfo, - ProcessState &State, ::pid_t &TracerPid, - ::pid_t &Tgid) { - return false; -} - -static void GetProcessArgs(::pid_t pid, ProcessInstanceInfo &process_info) {} - -static bool GetProcessAndStatInfo(::pid_t pid, - ProcessInstanceInfo &process_info, - ProcessState &State, ::pid_t &tracerpid) { - return false; -} - uint32_t Host::FindProcessesImpl(const ProcessInstanceInfoMatch &match_info, ProcessInstanceInfoList &process_infos) { return 0; } bool Host::GetProcessInfo(lldb::pid_t pid, ProcessInstanceInfo &process_info) { - ::pid_t tracerpid; - ProcessState State; - return GetProcessAndStatInfo(pid, process_info, State, tracerpid); + return false; } -Environment Host::GetEnvironment() { return Environment(environ); } - Status Host::ShellExpandArguments(ProcessLaunchInfo &launch_info) { return Status("unimplemented"); } >From 191717be18f0838de45427aef4a1f477d3c85e89 Mon Sep 17 00:00:00 2001 From: Dhruv-Srivastava <dhruv.srivast...@ibm.com> Date: Mon, 10 Mar 2025 11:47:51 -0500 Subject: [PATCH 5/5] Cleanup --- lldb/source/Host/aix/Host.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/lldb/source/Host/aix/Host.cpp b/lldb/source/Host/aix/Host.cpp index b95de6ecffa45..751c4fbcc9368 100644 --- a/lldb/source/Host/aix/Host.cpp +++ b/lldb/source/Host/aix/Host.cpp @@ -9,8 +9,6 @@ #include "lldb/Host/Host.h" #include "lldb/Utility/Status.h" -using namespace llvm; -using namespace lldb; using namespace lldb_private; uint32_t Host::FindProcessesImpl(const ProcessInstanceInfoMatch &match_info, _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits