[Lldb-commits] [lldb] [lldb][AIX] Implement read/write handling for GPR and SPR registers (PR #193205)
David Spickett via lldb-commits
lldb-commits at lists.llvm.org
Fri Apr 24 03:51:39 PDT 2026
================
@@ -279,13 +282,98 @@ llvm::Error NativeProcessAIX::Detach(lldb::tid_t tid) {
return PtraceWrapper(PT_DETACH, tid).takeError();
}
+template <typename GPR_T, typename PTSPRS_T>
+int GetSPRs(int req, lldb::tid_t tid, GPR_T *gpr) {
+ PTSPRS_T sprs;
+
+ int ret = ptrace64(req, tid, reinterpret_cast<long long>(&sprs), 0, 0);
+
+ if (ret != -1) {
+ gpr->cr = sprs.pt_cr;
+ gpr->msr = sprs.pt_msr;
+ gpr->xer = sprs.pt_xer;
+ gpr->lr = sprs.pt_lr;
+ gpr->ctr = sprs.pt_ctr;
+ gpr->pc = sprs.pt_iar;
+ }
+ return ret;
+}
+
+template <typename GPR_T, typename PTSPRS_T>
+int SetSPRs(int req, lldb::tid_t tid, GPR_T *gpr) {
+ PTSPRS_T sprs;
+
+ sprs.pt_cr = gpr->cr;
+ sprs.pt_msr = gpr->msr;
+ sprs.pt_xer = gpr->xer;
+ sprs.pt_lr = gpr->lr;
+ sprs.pt_ctr = gpr->ctr;
+ sprs.pt_iar = gpr->pc;
+
+ return ptrace64(req, tid, reinterpret_cast<long long>(&sprs), 0, 0);
+}
+
llvm::Expected<int> NativeProcessAIX::PtraceWrapper(int req, lldb::pid_t pid,
void *addr, void *data,
size_t data_size) {
- int ret;
-
+ int ret = 0;
Log *log = GetLog(POSIXLog::Ptrace);
+ // PTT_* requests require a thread ID (TID).
+ // Each entry under /proc/<pid>/lwp/ represents a thread,
+ // and the directory name corresponds to its thread ID (TID).
+ // A process may contain multiple threads.
+ // TODO: With multi-threading support, iterate over all entries to enumerate
+ // available TIDs and retrieve the target debugging thread ID.
+ llvm::SmallString<128> proc_lwp_dir;
+ llvm::sys::path::append(proc_lwp_dir, "/proc/", std::to_string(pid), "/lwp/");
+
+ lldb::tid_t tid = 0;
+ std::error_code ec;
+ bool result;
+ if (!llvm::sys::fs::is_directory(proc_lwp_dir, result) && result) {
----------------
DavidSpickett wrote:
Sorry I'm reading this incorrectly. Result tells you whether it is a dir or not, and the return type is whether the operation succeeded or not.
So "not return value" means "if the return value was not some error".
https://github.com/llvm/llvm-project/pull/193205
More information about the lldb-commits
mailing list