diff options
| author | Vedant Kumar <vsk@apple.com> | 2018-02-22 23:48:21 +0000 |
|---|---|---|
| committer | Vedant Kumar <vsk@apple.com> | 2018-02-22 23:48:21 +0000 |
| commit | 6d2b435d80dd8e0fb26208a4f6d042a06e5eb87e (patch) | |
| tree | d28122849f348726db88cbfde0197ba1701e38c4 /lldb/source/Plugins/Language/ObjC | |
| parent | d2fab30827dd195c50bd1a92be6bf530280bbcde (diff) | |
| download | bcm5719-llvm-6d2b435d80dd8e0fb26208a4f6d042a06e5eb87e.tar.gz bcm5719-llvm-6d2b435d80dd8e0fb26208a4f6d042a06e5eb87e.zip | |
[ObjC] Fix the NSConcreteData formatter and test it
The length field of an NSConcreteData lives one word past the start of
the object, not two.
llvm-svn: 325841
Diffstat (limited to 'lldb/source/Plugins/Language/ObjC')
| -rw-r--r-- | lldb/source/Plugins/Language/ObjC/Cocoa.cpp | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/lldb/source/Plugins/Language/ObjC/Cocoa.cpp b/lldb/source/Plugins/Language/ObjC/Cocoa.cpp index 8f499753321..16de62b02e5 100644 --- a/lldb/source/Plugins/Language/ObjC/Cocoa.cpp +++ b/lldb/source/Plugins/Language/ObjC/Cocoa.cpp @@ -871,28 +871,34 @@ bool lldb_private::formatters::NSDataSummaryProvider( uint64_t value = 0; - const char *class_name = descriptor->GetClassName().GetCString(); + llvm::StringRef class_name = descriptor->GetClassName().GetCString(); - if (!class_name || !*class_name) + if (class_name.empty()) return false; - if (!strcmp(class_name, "NSConcreteData") || - !strcmp(class_name, "NSConcreteMutableData") || - !strcmp(class_name, "__NSCFData")) { - uint32_t offset = (is_64bit ? 16 : 8); + bool isNSConcreteData = class_name == "NSConcreteData"; + bool isNSConcreteMutableData = class_name == "NSConcreteMutableData"; + bool isNSCFData = class_name == "__NSCFData"; + if (isNSConcreteData || isNSConcreteMutableData || isNSCFData) { + uint32_t offset; + if (isNSConcreteData) + offset = is_64bit ? 8 : 4; + else + offset = is_64bit ? 16 : 8; + Status error; value = process_sp->ReadUnsignedIntegerFromMemory( valobj_addr + offset, is_64bit ? 8 : 4, 0, error); if (error.Fail()) return false; - } else if (!strcmp(class_name, "_NSInlineData")) { + } else if (class_name == "_NSInlineData") { uint32_t offset = (is_64bit ? 8 : 4); Status error; value = process_sp->ReadUnsignedIntegerFromMemory(valobj_addr + offset, 2, 0, error); if (error.Fail()) return false; - } else if (!strcmp(class_name, "_NSZeroData")) { + } else if (class_name == "_NSZeroData") { value = 0; } else return false; |

