[Lldb-commits] [lldb] f9e6be5 - [lldb] Update tagged pointer command output and test.

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Wed Nov 3 15:04:40 PDT 2021


Author: Jonas Devlieghere
Date: 2021-11-03T15:04:36-07:00
New Revision: f9e6be5cc1a2cfe5294d4d55336b23266fcfc26f

URL: https://github.com/llvm/llvm-project/commit/f9e6be5cc1a2cfe5294d4d55336b23266fcfc26f
DIFF: https://github.com/llvm/llvm-project/commit/f9e6be5cc1a2cfe5294d4d55336b23266fcfc26f.diff

LOG: [lldb] Update tagged pointer command output and test.

 - Use formatv to print the addresses.
 - Add check for 0x0 which is treated as an invalid address.
 - Use a an address that's less likely to be interpreted as a real
   tagged pointer.

Added: 
    

Modified: 
    lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
    lldb/test/API/lang/objc/tagged-pointer/TestTaggedPointerCmd.py

Removed: 
    


################################################################################
diff  --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
index b4c517e76c49a..2cc05f4234fa7 100644
--- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
+++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.cpp
@@ -976,17 +976,16 @@ class CommandObjectMultiwordObjC_TaggedPointer_Info
       lldb::addr_t arg_addr = OptionArgParser::ToAddress(
           &exe_ctx, arg_str, LLDB_INVALID_ADDRESS, &error);
       if (arg_addr == 0 || arg_addr == LLDB_INVALID_ADDRESS || error.Fail()) {
-        result.AppendErrorWithFormat(
-            "could not convert '%s' to a valid address\n", arg_str);
+        result.AppendErrorWithFormatv(
+            "could not convert '{0}' to a valid address\n", arg_str);
         result.SetStatus(lldb::eReturnStatusFailed);
         return false;
       }
 
       auto descriptor_sp = tagged_ptr_vendor->GetClassDescriptor(arg_addr);
       if (!descriptor_sp) {
-        result.AppendErrorWithFormat(
-            "could not get class descriptor for 0x%" PRIx64 "\n",
-            (uint64_t)arg_addr);
+        result.AppendErrorWithFormatv(
+            "could not get class descriptor for {0:x}\n", arg_addr);
         result.SetStatus(lldb::eReturnStatusFailed);
         return false;
       }
@@ -996,14 +995,16 @@ class CommandObjectMultiwordObjC_TaggedPointer_Info
       uint64_t payload = 0;
       if (descriptor_sp->GetTaggedPointerInfo(&info_bits, &value_bits,
                                               &payload)) {
-        result.GetOutputStream().Printf(
-            "0x%" PRIx64 " is tagged.\n\tpayload = 0x%" PRIx64
-            "\n\tvalue = 0x%" PRIx64 "\n\tinfo bits = 0x%" PRIx64
-            "\n\tclass = %s\n",
-            (uint64_t)arg_addr, payload, value_bits, info_bits,
+        result.GetOutputStream().Format(
+            "{0:x} is tagged\n"
+            "\tpayload = {1:x}\n"
+            "\tvalue = {2:x}\n"
+            "\tinfo bits = {3:x}\n"
+            "\tclass = {4}\n",
+            arg_addr, payload, value_bits, info_bits,
             descriptor_sp->GetClassName().AsCString("<unknown>"));
       } else {
-        result.GetOutputStream().Printf("0x%" PRIx64 " is not tagged.\n",
+        result.GetOutputStream().Format("{0:x16} is not tagged\n",
                                         (uint64_t)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 0b9ebd86a914b..fbe9de7ecf80e 100644
--- a/lldb/test/API/lang/objc/tagged-pointer/TestTaggedPointerCmd.py
+++ b/lldb/test/API/lang/objc/tagged-pointer/TestTaggedPointerCmd.py
@@ -15,6 +15,8 @@ def test(self):
         self.expect("lang objc tagged-pointer info bogus", error=True,
                     patterns=["could not convert 'bogus' to a valid address"])
 
-        self.expect("lang objc tagged-pointer info 0x1", error=True,
-                    patterns=["could not get class descriptor for 0x1"])
+        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"])


        


More information about the lldb-commits mailing list