[Lldb-commits] [lldb] [lldb] Add Populate Methods for ELFLinuxPrPsInfo and ELFLinuxPrStatus (PR #104109)
Fred Grim via lldb-commits
lldb-commits at lists.llvm.org
Thu Aug 15 10:44:35 PDT 2024
================
@@ -318,6 +318,32 @@ Status ELFLinuxPrStatus::Parse(const DataExtractor &data,
return error;
}
+static struct compat_timeval
+copy_timespecs(const ProcessInstanceInfo::timespec &oth) {
+ using sec_t = decltype(compat_timeval::tv_sec);
+ using usec_t = decltype(compat_timeval::tv_usec);
+ return {static_cast<sec_t>(oth.tv_sec), static_cast<usec_t>(oth.tv_usec)};
+}
+
+std::optional<ELFLinuxPrStatus>
+ELFLinuxPrStatus::Populate(const lldb::ThreadSP &thread_sp) {
----------------
feg208 wrote:
yes we should. In linux (and I guess in FreeBSD as well) a prstatus object is created for each thread which you can see in ProcessELFCore
```
904 case ELF::NT_PRSTATUS: {
905 have_prstatus = true;
906 ELFLinuxPrStatus prstatus;
907 Status status = prstatus.Parse(note.data, arch);
908 if (status.Fail())
909 return status.ToError();
910 thread_data.prstatus_sig = prstatus.pr_cursig;
911 thread_data.tid = prstatus.pr_pid;
912 uint32_t header_size = ELFLinuxPrStatus::GetSize(arch);
913 size_t len = note.data.GetByteSize() - header_size;
914 thread_data.gpregset = DataExtractor(note.data, header_size, len);
915 break;
```
The tid is the pid. So in SaveCore we'll need to iterate over all the threads to build each struct.
https://github.com/llvm/llvm-project/pull/104109
More information about the lldb-commits
mailing list