Author: enrico Date: Mon Sep 12 19:22:49 2016 New Revision: 281282 URL: http://llvm.org/viewvc/llvm-project?rev=281282&view=rev Log: Fix an issue where LLDB was not masking enough bits off of objc classes data() pointers, effectively rendering us unable to generate descriptors for some classes
Fixes rdar://27758358 Modified: lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp Modified: lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp?rev=281282&r1=281281&r2=281282&view=diff ============================================================================== --- lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp (original) +++ lldb/trunk/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp Mon Sep 12 19:22:49 2016 @@ -28,6 +28,19 @@ bool ClassDescriptorV2::Read_objc_class( return ret; } +static lldb::addr_t GetClassDataMask(Process *process) { + switch (process->GetAddressByteSize()) { + case 4: + return 0xfffffffcUL; + case 8: + return 0x00007ffffffffff8UL; + default: + break; + } + + return LLDB_INVALID_ADDRESS; +} + bool ClassDescriptorV2::objc_class_t::Read(Process *process, lldb::addr_t addr) { size_t ptr_size = process->GetAddressByteSize(); @@ -60,7 +73,7 @@ bool ClassDescriptorV2::objc_class_t::Re extractor.GetAddress_unchecked(&cursor); // uintptr_t data_NEVER_USE; m_flags = (uint8_t)(data_NEVER_USE & (lldb::addr_t)3); - m_data_ptr = data_NEVER_USE & ~(lldb::addr_t)3; + m_data_ptr = data_NEVER_USE & GetClassDataMask(process); return true; } _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits