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
This commit is contained in:
Enrico Granata 2016-09-13 00:22:49 +00:00
parent 8a42d4b9cc
commit b82825b6d5
1 changed files with 14 additions and 1 deletions

View File

@ -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;
}