forked from OSchip/llvm-project
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:
parent
8a42d4b9cc
commit
b82825b6d5
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue