[Lldb-commits] [PATCH] D131110: [lldb] Make LLDB resilient against failing dyld introspection APIs
Jonas Devlieghere via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Wed Aug 3 15:18:51 PDT 2022
JDevlieghere updated this revision to Diff 449797.
JDevlieghere added a comment.
Reduce indentation with early returns in a helper function
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D131110/new/
https://reviews.llvm.org/D131110
Files:
lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm
Index: lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm
===================================================================
--- lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm
+++ lldb/source/Host/macosx/objcxx/HostInfoMacOSX.mm
@@ -16,6 +16,7 @@
#include "lldb/Utility/Timer.h"
#include "Utility/UuidCompatibility.h"
+#include "llvm/ADT/ScopeExit.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/Support/FileSystem.h"
@@ -520,20 +521,33 @@
SharedCacheInfo();
private:
+ bool CreateSharedCacheInfoWithInstrospectionSPIS();
+
llvm::StringMap<SharedCacheImageInfo> m_images;
UUID m_uuid;
};
}
-SharedCacheInfo::SharedCacheInfo() {
+bool SharedCacheInfo::CreateSharedCacheInfoWithInstrospectionSPIS() {
#if defined(SDK_HAS_NEW_DYLD_INTROSPECTION_SPIS)
if (__builtin_available(macOS 12, *)) {
if (dyld_process_create_for_current_task) {
- auto dyld_process = dyld_process_create_for_current_task();
- auto snapshot =
+ dyld_process_t dyld_process = dyld_process_create_for_current_task();
+ if (!dyld_process)
+ return false;
+
+ dyld_process_snapshot_t snapshot =
dyld_process_snapshot_create_for_process(dyld_process, nullptr);
- auto shared_cache = dyld_process_snapshot_get_shared_cache(snapshot);
- assert(dyld_process && snapshot && shared_cache);
+ if (!snapshot)
+ return false;
+
+ auto on_exit = llvm::make_scope_exit(
+ [&]() { dyld_process_snapshot_dispose(snapshot); });
+
+ dyld_shared_cache_t shared_cache =
+ dyld_process_snapshot_get_shared_cache(snapshot);
+ if (!shared_cache)
+ return false;
dyld_shared_cache_for_each_image(shared_cache, ^(dyld_image_t image) {
__block uint64_t minVmAddr = UINT64_MAX;
@@ -555,11 +569,16 @@
std::make_shared<DataBufferUnowned>((uint8_t *)minVmAddr,
maxVmAddr - minVmAddr)};
});
- dyld_process_snapshot_dispose(snapshot);
- return;
+ return true;
}
}
#endif
+ return false;
+}
+
+SharedCacheInfo::SharedCacheInfo() {
+ if (CreateSharedCacheInfoWithInstrospectionSPIS())
+ return;
size_t shared_cache_size;
uint8_t *shared_cache_start =
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D131110.449797.patch
Type: text/x-patch
Size: 2284 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20220803/1c4cb664/attachment-0001.bin>
More information about the lldb-commits
mailing list