summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEnrico Granata <egranata@apple.com>2016-09-13 00:22:49 +0000
committerEnrico Granata <egranata@apple.com>2016-09-13 00:22:49 +0000
commitb82825b6d57afb267e263d45e78a3d28587e1c6f (patch)
treeefb33d4cb8fde18f5e26748f3cb6129a772cc1b1
parent8a42d4b9cc038744eeb3f3276a6ecb36a32018c0 (diff)
downloadbcm5719-llvm-b82825b6d57afb267e263d45e78a3d28587e1c6f.tar.gz
bcm5719-llvm-b82825b6d57afb267e263d45e78a3d28587e1c6f.zip
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
-rw-r--r--lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp15
1 files changed, 14 insertions, 1 deletions
diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCClassDescriptorV2.cpp
index 477f4df655e..131f31f69a9 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;
}
OpenPOWER on IntegriCloud