From: Enrico Granata Date: Tue, 13 Sep 2016 00:22:49 +0000 (+0000) Subject: Fix an issue where LLDB was not masking enough bits off of objc classes data() pointe... X-Git-Tag: llvmorg-4.0.0-rc1~9997 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b82825b6d57afb267e263d45e78a3d28587e1c6f;p=platform%2Fupstream%2Fllvm.git 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 llvm-svn: 281282 --- diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp index 477f4df..131f31f 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp @@ -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::Read(Process *process, 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; }