[Lldb-commits] [PATCH] D134842: Improve dynamic loader support in DynamicLoaderPOSIXDYLD when using core files.
Greg Clayton via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Thu Oct 13 17:40:34 PDT 2022
This revision was automatically updated to reflect the committed changes.
Closed by commit rGc338516463ff: Improve dynamic loader support in DynamicLoaderPOSIXDYLD when using core files. (authored by clayborg).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D134842/new/
https://reviews.llvm.org/D134842
Files:
lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.h
lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h
Index: lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h
===================================================================
--- lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h
+++ lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h
@@ -91,6 +91,9 @@
std::map<lldb::ModuleWP, lldb::addr_t, std::owner_less<lldb::ModuleWP>>
m_loaded_modules;
+ /// Returns true if the process is for a core file.
+ bool IsCoreFile() const;
+
/// If possible sets a breakpoint on a function called by the runtime
/// linker each time a module is loaded or unloaded.
bool SetRendezvousBreakpoint();
Index: lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
===================================================================
--- lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
+++ lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp
@@ -213,6 +213,10 @@
void DynamicLoaderPOSIXDYLD::ProbeEntry() {
Log *log = GetLog(LLDBLog::DynamicLoader);
+ // If we have a core file, we don't need any breakpoints.
+ if (IsCoreFile())
+ return;
+
const addr_t entry = GetEntryPoint();
if (entry == LLDB_INVALID_ADDRESS) {
LLDB_LOGF(
@@ -297,6 +301,11 @@
bool DynamicLoaderPOSIXDYLD::SetRendezvousBreakpoint() {
Log *log = GetLog(LLDBLog::DynamicLoader);
+
+ // If we have a core file, we don't need any breakpoints.
+ if (IsCoreFile())
+ return false;
+
if (m_dyld_bid != LLDB_INVALID_BREAK_ID) {
LLDB_LOG(log,
"Rendezvous breakpoint breakpoint id {0} for pid {1}"
@@ -829,3 +838,7 @@
return module_sp->GetFileSpec().GetPath() == "[vdso]";
}
+
+bool DynamicLoaderPOSIXDYLD::IsCoreFile() const {
+ return !m_process->IsLiveDebugSession();
+}
Index: lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.h
===================================================================
--- lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.h
+++ lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.h
@@ -267,6 +267,8 @@
bool FindMetadata(const char *name, PThreadField field, uint32_t &value);
+ bool IsCoreFile() const;
+
enum RendezvousAction {
eNoAction,
eTakeSnapshot,
Index: lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
===================================================================
--- lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
+++ lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp
@@ -190,6 +190,14 @@
}
DYLDRendezvous::RendezvousAction DYLDRendezvous::GetAction() const {
+ // If we have a core file, we will read the current rendezvous state
+ // from the core file's memory into m_current which can be in an inconsistent
+ // state, so we can't rely on its state to determine what we should do. We
+ // always need it to load all of the shared libraries one time when we attach
+ // to a core file.
+ if (IsCoreFile())
+ return eTakeSnapshot;
+
switch (m_current.state) {
case eConsistent:
@@ -664,3 +672,7 @@
LLDB_LOGF(log, " Prev : %" PRIx64, I->prev);
}
}
+
+bool DYLDRendezvous::IsCoreFile() const {
+ return !m_process->IsLiveDebugSession();
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D134842.467645.patch
Type: text/x-patch
Size: 3263 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20221014/c5583034/attachment.bin>
More information about the lldb-commits
mailing list