[Lldb-commits] [lldb] [lldb][AIX] Enable NativeProcessAIX Manager for lldb-server (PR #190173)

via lldb-commits lldb-commits at lists.llvm.org
Thu Apr 2 06:20:43 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: Hemang Gadhavi (HemangGadhavi)

<details>
<summary>Changes</summary>

This PR is in reference to porting LLDB on AIX. Ref discusssions: [llvm discourse](https://discourse.llvm.org/t/port-lldb-to-ibm-aix/80640) and https://github.com/llvm/llvm-project/issues/101657.
Complete changes together in this draft:
- https://github.com/llvm/llvm-project/pull/102601

Description:
This change enables proper Native processes AIX integration with lldb-server,  ensuring correct loading and handling of AIX target architectures.
It also retrieves the target process architecture from the host and configures NativeProcessAIX accordingly.

---
Full diff: https://github.com/llvm/llvm-project/pull/190173.diff


2 Files Affected:

- (modified) lldb/source/Plugins/Process/AIX/NativeProcessAIX.cpp (+16-1) 
- (modified) lldb/tools/lldb-server/lldb-gdbserver.cpp (+7-4) 


``````````diff
diff --git a/lldb/source/Plugins/Process/AIX/NativeProcessAIX.cpp b/lldb/source/Plugins/Process/AIX/NativeProcessAIX.cpp
index 67db9eb4e4d2b..c1d927aefa258 100644
--- a/lldb/source/Plugins/Process/AIX/NativeProcessAIX.cpp
+++ b/lldb/source/Plugins/Process/AIX/NativeProcessAIX.cpp
@@ -84,9 +84,19 @@ NativeProcessAIX::Manager::Launch(ProcessLaunchInfo &launch_info,
   }
   LLDB_LOG(log, "inferior started, now in stopped state");
 
+  ProcessInstanceInfo Info;
+  if (!Host::GetProcessInfo(pid, Info)) {
+    return llvm::make_error<StringError>("Cannot get process architectrue",
+                                         llvm::inconvertibleErrorCode());
+  }
+
+  // Set the architecture to the exe architecture.
+  LLDB_LOG(log, "pid = {0}, detected architecture {1}", pid,
+           Info.GetArchitecture().GetArchitectureName());
+
   return std::unique_ptr<NativeProcessAIX>(new NativeProcessAIX(
       pid, launch_info.GetPTY().ReleasePrimaryFileDescriptor(), native_delegate,
-      HostInfo::GetArchitecture(HostInfo::eArchKind64), *this, {pid}));
+      Info.GetArchitecture(), *this, {pid}));
 }
 
 llvm::Expected<std::unique_ptr<NativeProcessProtocol>>
@@ -242,6 +252,11 @@ size_t NativeProcessAIX::UpdateThreads() {
   return m_threads.size();
 }
 
+Status NativeProcessAIX::GetFileLoadAddress(const llvm::StringRef &file_name,
+                                            lldb::addr_t &load_addr) {
+  return Status("unsupported");
+}
+
 Status NativeProcessAIX::GetLoadedModuleFileSpec(const char *module_path,
                                                  FileSpec &file_spec) {
   return Status("unsupported");
diff --git a/lldb/tools/lldb-server/lldb-gdbserver.cpp b/lldb/tools/lldb-server/lldb-gdbserver.cpp
index c5c0d4b97e935..41d18d8268906 100644
--- a/lldb/tools/lldb-server/lldb-gdbserver.cpp
+++ b/lldb/tools/lldb-server/lldb-gdbserver.cpp
@@ -46,6 +46,8 @@
 #include "Plugins/Process/NetBSD/NativeProcessNetBSD.h"
 #elif defined(_WIN32)
 #include "Plugins/Process/Windows/Common/NativeProcessWindows.h"
+#elif defined(_AIX)
+#include "Plugins/Process/AIX/NativeProcessAIX.h"
 #endif
 
 #ifndef LLGS_PROGRAM_NAME
@@ -71,6 +73,8 @@ typedef process_freebsd::NativeProcessFreeBSD::Manager NativeProcessManager;
 typedef process_netbsd::NativeProcessNetBSD::Manager NativeProcessManager;
 #elif defined(_WIN32)
 typedef NativeProcessWindows::Manager NativeProcessManager;
+#elif defined(_AIX)
+typedef process_aix::NativeProcessAIX::Manager NativeProcessManager;
 #else
 // Dummy implementation to make sure the code compiles
 class NativeProcessManager : public NativeProcessProtocol::Manager {
@@ -90,7 +94,7 @@ class NativeProcessManager : public NativeProcessProtocol::Manager {
   }
 };
 #endif
-}
+} // namespace
 
 #ifndef _WIN32
 // Watch for signals
@@ -134,9 +138,8 @@ llvm::Error handle_attach(GDBRemoteCommunicationServerLLGS &gdb_server,
   const long int pid = strtol(attach_target.c_str(), &end_p, 10);
 
   // We'll call it a match if the entire argument is consumed.
-  if (end_p &&
-      static_cast<size_t>(end_p - attach_target.c_str()) ==
-          attach_target.size())
+  if (end_p && static_cast<size_t>(end_p - attach_target.c_str()) ==
+                   attach_target.size())
     return handle_attach_to_pid(gdb_server, static_cast<lldb::pid_t>(pid));
   return handle_attach_to_process_name(gdb_server, attach_target);
 }

``````````

</details>


https://github.com/llvm/llvm-project/pull/190173


More information about the lldb-commits mailing list