Author: Jonas Devlieghere Date: 2021-11-05T13:19:00-07:00 New Revision: 10eb32f45d40e180a229590f57dd0a61f97f1bc9
URL: https://github.com/llvm/llvm-project/commit/10eb32f45d40e180a229590f57dd0a61f97f1bc9 DIFF: https://github.com/llvm/llvm-project/commit/10eb32f45d40e180a229590f57dd0a61f97f1bc9.diff LOG: [lldb] Improve 'lang objc tagged-pointer info' command Don't try to get a class descriptor for a pointer that doesn't look like a tagged pointer. Also print addresses as fixed-width hex and update the test. Added: Modified: lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp lldb/test/API/lang/objc/tagged-pointer/TestTaggedPointerCmd.py lldb/test/API/lang/objc/tagged-pointer/main.m Removed: ################################################################################ diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp index 2cc05f4234fa7..bd6b6335ca8c9 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp @@ -982,10 +982,15 @@ class CommandObjectMultiwordObjC_TaggedPointer_Info return false; } + if (!tagged_ptr_vendor->IsPossibleTaggedPointer(arg_addr)) { + result.GetOutputStream().Format("{0:x16} is not tagged\n", arg_addr); + continue; + } + auto descriptor_sp = tagged_ptr_vendor->GetClassDescriptor(arg_addr); if (!descriptor_sp) { result.AppendErrorWithFormatv( - "could not get class descriptor for {0:x}\n", arg_addr); + "could not get class descriptor for {0:x16}\n", arg_addr); result.SetStatus(lldb::eReturnStatusFailed); return false; } @@ -997,15 +1002,14 @@ class CommandObjectMultiwordObjC_TaggedPointer_Info &payload)) { result.GetOutputStream().Format( "{0:x} is tagged\n" - "\tpayload = {1:x}\n" - "\tvalue = {2:x}\n" - "\tinfo bits = {3:x}\n" + "\tpayload = {1:x16}\n" + "\tvalue = {2:x16}\n" + "\tinfo bits = {3:x16}\n" "\tclass = {4}\n", arg_addr, payload, value_bits, info_bits, descriptor_sp->GetClassName().AsCString("<unknown>")); } else { - result.GetOutputStream().Format("{0:x16} is not tagged\n", - (uint64_t)arg_addr); + result.GetOutputStream().Format("{0:x16} is not tagged\n", arg_addr); } } diff --git a/lldb/test/API/lang/objc/tagged-pointer/TestTaggedPointerCmd.py b/lldb/test/API/lang/objc/tagged-pointer/TestTaggedPointerCmd.py index fbe9de7ecf80e..4c70b53ca4b28 100644 --- a/lldb/test/API/lang/objc/tagged-pointer/TestTaggedPointerCmd.py +++ b/lldb/test/API/lang/objc/tagged-pointer/TestTaggedPointerCmd.py @@ -8,6 +8,7 @@ class TestTaggedPointerCommand(TestBase): mydir = TestBase.compute_mydir(__file__) + @no_debug_info_test def test(self): self.build() lldbutil.run_to_source_breakpoint(self,"// break here", lldb.SBFileSpec("main.m")) @@ -18,5 +19,5 @@ def test(self): self.expect("lang objc tagged-pointer info 0x0", error=True, patterns=["could not convert '0x0' to a valid address"]) - self.expect("lang objc tagged-pointer info 0xffffffff", error=True, - patterns=["could not get class descriptor for 0xffffffff"]) + self.expect("lang objc tagged-pointer info 0x00000001", + patterns=["0x0000000000000001 is not tagged"]) diff --git a/lldb/test/API/lang/objc/tagged-pointer/main.m b/lldb/test/API/lang/objc/tagged-pointer/main.m index 4d2ccf5120042..11a9781482f11 100644 --- a/lldb/test/API/lang/objc/tagged-pointer/main.m +++ b/lldb/test/API/lang/objc/tagged-pointer/main.m @@ -1,6 +1,6 @@ #import <Foundation/Foundation.h> int main() { id n1 = [NSNumber numberWithInt:1]; - printf("%x", n1); // break here + printf("%x\n", n1); // break here return 0; } _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits