[Lldb-commits] [lldb] [LLDB][SBSaveCore] Implement a selectable threadlist for Core Options. (PR #100443)
Greg Clayton via lldb-commits
lldb-commits at lists.llvm.org
Fri Jul 26 11:27:20 PDT 2024
================
@@ -46,8 +48,79 @@ SaveCoreOptions::GetOutputFile() const {
return m_file;
}
+Status SaveCoreOptions::SetProcess(lldb::ProcessSP process_sp) {
+ Status error;
+ if (!process_sp) {
+ ClearProcessSpecificData();
+ m_process_sp = nullptr;
+ return error;
+ }
+
+ if (!process_sp->IsValid()) {
+ error.SetErrorString("Cannot assign an invalid process.");
+ return error;
+ }
+
+ if (m_process_sp)
+ ClearProcessSpecificData();
+
+ m_process_sp = process_sp;
+ return error;
+}
+
+Status SaveCoreOptions::AddThread(lldb::ThreadSP thread_sp) {
+ Status error;
+ if (!thread_sp) {
+ error.SetErrorString("Thread is null");
+ return error;
+ }
+
+ if (m_process_sp) {
+ if (m_process_sp != thread_sp->GetProcess()) {
+ error.SetErrorString("Cannot add a thread from a different process.");
+ return error;
+ }
+ } else {
+ m_process_sp = thread_sp->GetProcess();
+ }
+
+ m_threads_to_save[thread_sp->GetID()];
+ return error;
+}
+
+bool SaveCoreOptions::RemoveThread(lldb::ThreadSP thread_sp) {
+ return thread_sp && m_threads_to_save.erase(thread_sp->GetID()) > 0;
+}
+
+bool SaveCoreOptions::ShouldThreadBeSaved(lldb::tid_t tid) const {
+ // If the user specified no threads to save, then we save all threads.
+ if (m_threads_to_save.empty())
+ return true;
+ return m_threads_to_save.count(tid) > 0;
+}
+
+Status SaveCoreOptions::EnsureValidConfiguration(
+ lldb::ProcessSP process_to_save) const {
+ Status error;
+ std::string error_str;
+ if (!m_threads_to_save.empty() && GetStyle() == lldb::eSaveCoreFull)
+ error_str += "Cannot save a full core with a subset of threads\n";
+
+ if (m_process_sp && m_process_sp != process_to_save)
+ error_str += "Cannot save core for process using supplied core options. "
+ "Options were constructed targeting a different process. \n";
+
+ if (!error_str.empty())
+ error.SetErrorString(error_str);
+
+ return error;
+}
+
+void SaveCoreOptions::ClearProcessSpecificData() { m_threads_to_save.clear(); }
+
void SaveCoreOptions::Clear() {
m_file = std::nullopt;
m_plugin_name = std::nullopt;
m_style = std::nullopt;
----------------
clayborg wrote:
Add:
```
m_process_sp.reset();
```
https://github.com/llvm/llvm-project/pull/100443
More information about the lldb-commits
mailing list