[Lldb-commits] [lldb] d230848 - [lldb] Print an error message when we're reading libobjc.A.dylib from memory
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Tue Jan 18 17:23:44 PST 2022
Author: Jonas Devlieghere
Date: 2022-01-18T17:23:38-08:00
New Revision: d230848a85a922260b7ad6984f2dd19222c125a6
URL: https://github.com/llvm/llvm-project/commit/d230848a85a922260b7ad6984f2dd19222c125a6
DIFF: https://github.com/llvm/llvm-project/commit/d230848a85a922260b7ad6984f2dd19222c125a6.diff
LOG: [lldb] Print an error message when we're reading libobjc.A.dylib from memory
Use libobjc.A.dylib as a sentinel to detect situations where we're
reading libraries from process memory instead of the shared cache.
Differential revision: https://reviews.llvm.org/D117623
Added:
Modified:
lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h
Removed:
################################################################################
diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
index bd6b6335ca8c9..f2cf25f93eb23 100644
--- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
+++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
@@ -671,7 +671,7 @@ AppleObjCRuntimeV2::AppleObjCRuntimeV2(Process *process,
static const ConstString g_objc_copyRealizedClassList(
"_ZL33objc_copyRealizedClassList_nolockPj");
m_has_objc_copyRealizedClassList = HasSymbol(g_objc_copyRealizedClassList);
-
+ WarnIfNoExpandedSharedCache();
RegisterObjCExceptionRecognizer(process);
}
@@ -2355,6 +2355,32 @@ void AppleObjCRuntimeV2::WarnIfNoClassesCached(
}
}
+void AppleObjCRuntimeV2::WarnIfNoExpandedSharedCache() {
+ if (!m_objc_module_sp)
+ return;
+
+ ObjectFile *object_file = m_objc_module_sp->GetObjectFile();
+ if (!object_file)
+ return;
+
+ if (!object_file->IsInMemory())
+ return;
+
+ Target &target = GetProcess()->GetTarget();
+ Debugger &debugger = target.GetDebugger();
+ if (auto stream = debugger.GetAsyncOutputStream()) {
+ const char *msg = "read from the shared cache";
+ if (PlatformSP platform_sp = target.GetPlatform())
+ msg = platform_sp->IsHost()
+ ? "read from the host's in-memory shared cache"
+ : "find the on-disk shared cache for this device";
+ stream->Printf("warning: libobjc.A.dylib is being read from process "
+ "memory. This indicates that LLDB could not %s. This will "
+ "likely reduce debugging performance.\n",
+ msg);
+ }
+}
+
DeclVendor *AppleObjCRuntimeV2::GetDeclVendor() {
if (!m_decl_vendor_up)
m_decl_vendor_up = std::make_unique<AppleObjCDeclVendor>(*this);
diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h
index 6266634e64c56..e1a6b7cde48a7 100644
--- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h
+++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h
@@ -399,6 +399,7 @@ class AppleObjCRuntimeV2 : public AppleObjCRuntime {
};
void WarnIfNoClassesCached(SharedCacheWarningReason reason);
+ void WarnIfNoExpandedSharedCache();
lldb::addr_t GetSharedCacheReadOnlyAddress();
lldb::addr_t GetSharedCacheBaseAddress();
More information about the lldb-commits
mailing list