Skip to content

Commit 4b88b68

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 2d5fab8 commit 4b88b68

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
@@ -2020,7 +2020,8 @@ AppleObjCRuntimeV2::SharedCacheClassInfoExtractor::UpdateISAToDescriptorMap() {
20202020
shared_cache_base_addr == LLDB_INVALID_ADDRESS)
20212021
return DescriptorMapUpdateResult::Fail();
20222022

2023-
const uint32_t num_classes = 128 * 1024;
2023+
// The number of entries to pre-allocate room for.
2024+
const uint32_t max_num_classes = 256 * 1024;
20242025

20252026
UtilityFunction *get_class_info_code = GetClassInfoUtilityFunction(exe_ctx);
20262027
if (!get_class_info_code) {
@@ -2042,7 +2043,7 @@ AppleObjCRuntimeV2::SharedCacheClassInfoExtractor::UpdateISAToDescriptorMap() {
20422043
DiagnosticManager diagnostics;
20432044

20442045
const uint32_t class_info_byte_size = addr_size + 4;
2045-
const uint32_t class_infos_byte_size = num_classes * class_info_byte_size;
2046+
const uint32_t class_infos_byte_size = max_num_classes * class_info_byte_size;
20462047
lldb::addr_t class_infos_addr = process->AllocateMemory(
20472048
class_infos_byte_size, ePermissionsReadable | ePermissionsWritable, err);
20482049
const uint32_t relative_selector_offset_addr_size = 64;
@@ -2108,10 +2109,12 @@ AppleObjCRuntimeV2::SharedCacheClassInfoExtractor::UpdateISAToDescriptorMap() {
21082109
num_class_infos = return_value.GetScalar().ULong();
21092110
LLDB_LOG(log, "Discovered {0} Objective-C classes in the shared cache",
21102111
num_class_infos);
2111-
assert(num_class_infos <= num_classes);
2112+
// Assert if there were more classes than we pre-allocated
2113+
// room for.
2114+
assert(num_class_infos <= max_num_classes);
21122115
if (num_class_infos > 0) {
2113-
if (num_class_infos > num_classes) {
2114-
num_class_infos = num_classes;
2116+
if (num_class_infos > max_num_classes) {
2117+
num_class_infos = max_num_classes;
21152118

21162119
success = false;
21172120
} else {

0 commit comments

Comments
 (0)