mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-21 07:42:52 +00:00
[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
This commit is contained in:
parent
eafd34581f
commit
d230848a85
@ -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);
|
||||
|
@ -399,6 +399,7 @@ private:
|
||||
};
|
||||
|
||||
void WarnIfNoClassesCached(SharedCacheWarningReason reason);
|
||||
void WarnIfNoExpandedSharedCache();
|
||||
|
||||
lldb::addr_t GetSharedCacheReadOnlyAddress();
|
||||
lldb::addr_t GetSharedCacheBaseAddress();
|
||||
|
Loading…
x
Reference in New Issue
Block a user