llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: Dhruv Srivastava (DhruvSrivastavaX)

<details>
<summary>Changes</summary>

This PR is in reference to porting LLDB on AIX.

Link to discussions on llvm 
[discourse](https://discourse.llvm.org/t/port-lldb-to-ibm-aix/80640) and 
[github](https://github.com/llvm/llvm-project/issues/101657).

The complete changes for porting are present in this draft PR:
- https://github.com/llvm/llvm-project/pull/102601

Description:
Extending Kill and SigchldHandler for NativeProcessAIX.

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


1 Files Affected:

- (modified) lldb/source/Plugins/Process/AIX/NativeProcessAIX.cpp (+42-1) 


``````````diff
diff --git a/lldb/source/Plugins/Process/AIX/NativeProcessAIX.cpp 
b/lldb/source/Plugins/Process/AIX/NativeProcessAIX.cpp
index cd5e3458e60e8..7f3dbbff18ea2 100644
--- a/lldb/source/Plugins/Process/AIX/NativeProcessAIX.cpp
+++ b/lldb/source/Plugins/Process/AIX/NativeProcessAIX.cpp
@@ -137,6 +137,12 @@ void NativeProcessAIX::Manager::SigchldHandler() {
     auto wait_result = WaitPid();
     if (!wait_result)
       return;
+    lldb::pid_t pid = wait_result->first;
+    WaitStatus status = wait_result->second;
+
+    llvm::any_of(m_processes, [&](NativeProcessAIX *process) {
+      return process->TryHandleWaitStatus(pid, status);
+    });
   }
 }
 
@@ -187,7 +193,41 @@ Status NativeProcessAIX::Signal(int signo) { return 
Status("unsupported"); }
 
 Status NativeProcessAIX::Interrupt() { return Status("unsupported"); }
 
-Status NativeProcessAIX::Kill() { return Status("unsupported"); }
+Status NativeProcessAIX::Kill() {
+
+  Log *log = GetLog(POSIXLog::Process);
+  LLDB_LOG(log, "pid {0}", GetID());
+
+  Status error;
+
+  switch (m_state) {
+  case StateType::eStateInvalid:
+  case StateType::eStateExited:
+  case StateType::eStateCrashed:
+  case StateType::eStateDetached:
+  case StateType::eStateUnloaded:
+    // Nothing to do - the process is already dead.
+    LLDB_LOG(log, "ignored for PID {0} due to current state: {1}", GetID(),
+             m_state);
+    return error;
+
+  case StateType::eStateConnected:
+  case StateType::eStateAttaching:
+  case StateType::eStateLaunching:
+  case StateType::eStateStopped:
+  case StateType::eStateRunning:
+  case StateType::eStateStepping:
+  case StateType::eStateSuspended:
+    // We can try to kill a process in these states.
+    break;
+  }
+
+  llvm::Error result =
+      (PtraceWrapper(PT_KILL, GetID(), nullptr, nullptr, 0)).takeError();
+  if (!result)
+    error.FromErrorString("Kill failed");
+  return error;
+}
 
 Status NativeProcessAIX::ReadMemory(lldb::addr_t addr, void *buf, size_t size,
                                     size_t &bytes_read) {
@@ -237,6 +277,7 @@ llvm::Expected<int> NativeProcessAIX::PtraceWrapper(int 
req, lldb::pid_t pid,
   switch (req) {
   case PT_ATTACH:
   case PT_DETACH:
+  case PT_KILL:
     ret = ptrace64(req, pid, 0, 0, nullptr);
     break;
   default:

``````````

</details>


https://github.com/llvm/llvm-project/pull/169454
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to