Skip to content

Commit 944efd0

Browse files
committed
Increase memory buffer for scanning objc classes on darwin systems
iOS systems are getting near this limit; double itfrom a 150kb buffer to a 300kb buffer, which is freed after processing the list of classes. rdar://88454594 Differential Revision: https://reviews.llvm.org/D118972 (cherry picked from commit a37c381)
1 parent 17355e5 commit 944efd0

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2026,7 +2026,8 @@ AppleObjCRuntimeV2::SharedCacheClassInfoExtractor::UpdateISAToDescriptorMap() {
20262026
shared_cache_base_addr == LLDB_INVALID_ADDRESS)
20272027
return DescriptorMapUpdateResult::Fail();
20282028

2029-
const uint32_t num_classes = 128 * 1024;
2029+
// The number of entries to pre-allocate room for.
2030+
const uint32_t max_num_classes = 256 * 1024;
20302031

20312032
UtilityFunction *get_class_info_code = GetClassInfoUtilityFunction(exe_ctx);
20322033
if (!get_class_info_code) {
@@ -2048,7 +2049,7 @@ AppleObjCRuntimeV2::SharedCacheClassInfoExtractor::UpdateISAToDescriptorMap() {
20482049
DiagnosticManager diagnostics;
20492050

20502051
const uint32_t class_info_byte_size = addr_size + 4;
2051-
const uint32_t class_infos_byte_size = num_classes * class_info_byte_size;
2052+
const uint32_t class_infos_byte_size = max_num_classes * class_info_byte_size;
20522053
lldb::addr_t class_infos_addr = process->AllocateMemory(
20532054
class_infos_byte_size, ePermissionsReadable | ePermissionsWritable, err);
20542055
const uint32_t relative_selector_offset_addr_size = 64;
@@ -2114,10 +2115,12 @@ AppleObjCRuntimeV2::SharedCacheClassInfoExtractor::UpdateISAToDescriptorMap() {
21142115
num_class_infos = return_value.GetScalar().ULong();
21152116
LLDB_LOG(log, "Discovered {0} Objective-C classes in the shared cache",
21162117
num_class_infos);
2117-
assert(num_class_infos <= num_classes);
2118+
// Assert if there were more classes than we pre-allocated
2119+
// room for.
2120+
assert(num_class_infos <= max_num_classes);
21182121
if (num_class_infos > 0) {
2119-
if (num_class_infos > num_classes) {
2120-
num_class_infos = num_classes;
2122+
if (num_class_infos > max_num_classes) {
2123+
num_class_infos = max_num_classes;
21212124

21222125
success = false;
21232126
} else {

0 commit comments

Comments
 (0)