[Lldb-commits] [lldb] r161606 - in /lldb/trunk: include/lldb/lldb-enumerations.h source/Commands/CommandObjectMemory.cpp source/Core/DataExtractor.cpp source/Core/FormatManager.cpp source/Core/ValueObject.cpp source/Symbol/ClangASTType.cpp test/functionalities/data-formatter/rdar-10449092/ test/functionalities/data-formatter/rdar-10449092/Makefile test/functionalities/data-formatter/rdar-10449092/Test-rdar-10449092.py test/functionalities/data-formatter/rdar-10449092/main.cpp

Enrico Granata egranata at apple.com
Thu Aug 9 12:33:34 PDT 2012


Author: enrico
Date: Thu Aug  9 14:33:34 2012
New Revision: 161606

URL: http://llvm.org/viewvc/llvm-project?rev=161606&view=rev
Log:
<rdar://problem/10449092> Adding a new uppercase hex format specifier. This commit also changes the short names for formats so that uppercase hex can be 'X', which was previously assigned to hex float. hex float now has no short name.

Added:
    lldb/trunk/test/functionalities/data-formatter/rdar-10449092/
    lldb/trunk/test/functionalities/data-formatter/rdar-10449092/Makefile
    lldb/trunk/test/functionalities/data-formatter/rdar-10449092/Test-rdar-10449092.py
    lldb/trunk/test/functionalities/data-formatter/rdar-10449092/main.cpp
Modified:
    lldb/trunk/include/lldb/lldb-enumerations.h
    lldb/trunk/source/Commands/CommandObjectMemory.cpp
    lldb/trunk/source/Core/DataExtractor.cpp
    lldb/trunk/source/Core/FormatManager.cpp
    lldb/trunk/source/Core/ValueObject.cpp
    lldb/trunk/source/Symbol/ClangASTType.cpp

Modified: lldb/trunk/include/lldb/lldb-enumerations.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-enumerations.h?rev=161606&r1=161605&r2=161606&view=diff
==============================================================================
--- lldb/trunk/include/lldb/lldb-enumerations.h (original)
+++ lldb/trunk/include/lldb/lldb-enumerations.h Thu Aug  9 14:33:34 2012
@@ -100,6 +100,7 @@
         eFormatDecimal,
         eFormatEnum,
         eFormatHex,
+        eFormatHexUppercase,
         eFormatFloat,
         eFormatOctal,
         eFormatOSType,          // OS character codes encoded into an integer 'PICT' 'text' etc...

Modified: lldb/trunk/source/Commands/CommandObjectMemory.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectMemory.cpp?rev=161606&r1=161605&r2=161606&view=diff
==============================================================================
--- lldb/trunk/source/Commands/CommandObjectMemory.cpp (original)
+++ lldb/trunk/source/Commands/CommandObjectMemory.cpp Thu Aug  9 14:33:34 2012
@@ -1116,6 +1116,7 @@
             case eFormatDefault:
             case eFormatBytes:
             case eFormatHex:
+            case eFormatHexUppercase:
             case eFormatPointer:
                 
                 // Decode hex bytes

Modified: lldb/trunk/source/Core/DataExtractor.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/DataExtractor.cpp?rev=161606&r1=161605&r2=161606&view=diff
==============================================================================
--- lldb/trunk/source/Core/DataExtractor.cpp (original)
+++ lldb/trunk/source/Core/DataExtractor.cpp Thu Aug  9 14:33:34 2012
@@ -1675,27 +1675,31 @@
         default:
         case eFormatDefault:
         case eFormatHex:
-            if (item_byte_size <= 8)
+        case eFormatHexUppercase:
             {
-                s->Printf("0x%*.*llx", 2 * item_byte_size, 2 * item_byte_size, GetMaxU64Bitfield(&offset, item_byte_size, item_bit_size, item_bit_offset));
-            }
-            else
-            {
-                assert (item_bit_size == 0 && item_bit_offset == 0);
-                s->PutCString("0x");
-                const uint8_t *bytes = (const uint8_t* )GetData(&offset, item_byte_size);
-                if (bytes)
+                bool wantsuppercase  = (item_format == eFormatHexUppercase);
+                if (item_byte_size <= 8)
                 {
-                    uint32_t idx;
-                    if (m_byte_order == eByteOrderBig)
-                    {
-                        for (idx = 0; idx < item_byte_size; ++idx)
-                            s->Printf("%2.2x", bytes[idx]);
-                    }
-                    else
+                    s->Printf(wantsuppercase ? "0x%*.*llX" : "0x%*.*llx", 2 * item_byte_size, 2 * item_byte_size, GetMaxU64Bitfield(&offset, item_byte_size, item_bit_size, item_bit_offset));
+                }
+                else
+                {
+                    assert (item_bit_size == 0 && item_bit_offset == 0);
+                    s->PutCString("0x");
+                    const uint8_t *bytes = (const uint8_t* )GetData(&offset, item_byte_size);
+                    if (bytes)
                     {
-                        for (idx = 0; idx < item_byte_size; ++idx)
-                            s->Printf("%2.2x", bytes[item_byte_size - 1 - idx]);
+                        uint32_t idx;
+                        if (m_byte_order == eByteOrderBig)
+                        {
+                            for (idx = 0; idx < item_byte_size; ++idx)
+                                s->Printf(wantsuppercase ? "%2.2X" : "%2.2x", bytes[idx]);
+                        }
+                        else
+                        {
+                            for (idx = 0; idx < item_byte_size; ++idx)
+                                s->Printf(wantsuppercase ? "%2.2X" : "%2.2x", bytes[item_byte_size - 1 - idx]);
+                        }
                     }
                 }
             }

Modified: lldb/trunk/source/Core/FormatManager.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/FormatManager.cpp?rev=161606&r1=161605&r2=161606&view=diff
==============================================================================
--- lldb/trunk/source/Core/FormatManager.cpp (original)
+++ lldb/trunk/source/Core/FormatManager.cpp Thu Aug  9 14:33:34 2012
@@ -42,6 +42,7 @@
     { eFormatDecimal        , 'd'   , "decimal"             },
     { eFormatEnum           , 'E'   , "enumeration"         },
     { eFormatHex            , 'x'   , "hex"                 },
+    { eFormatHexUppercase   , 'X'   , "uppercase hex"       },
     { eFormatFloat          , 'f'   , "float"               },
     { eFormatOctal          , 'o'   , "octal"               },
     { eFormatOSType         , 'O'   , "OSType"              },
@@ -64,7 +65,7 @@
     { eFormatComplexInteger , 'I'   , "complex integer"     },
     { eFormatCharArray      , 'a'   , "character array"     },
     { eFormatAddressInfo    , 'A'   , "address"             },
-    { eFormatHexFloat       , 'X'   , "hex float"           },
+    { eFormatHexFloat       , '\0'  , "hex float"           },
     { eFormatInstruction    , 'i'   , "instruction"         },
     { eFormatVoid           , 'v'   , "void"                }
 };

Modified: lldb/trunk/source/Core/ValueObject.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObject.cpp?rev=161606&r1=161605&r2=161606&view=diff
==============================================================================
--- lldb/trunk/source/Core/ValueObject.cpp (original)
+++ lldb/trunk/source/Core/ValueObject.cpp Thu Aug  9 14:33:34 2012
@@ -1426,6 +1426,7 @@
                 (custom_format == eFormatComplexFloat) ||
                 (custom_format == eFormatDecimal) ||
                 (custom_format == eFormatHex) ||
+                (custom_format == eFormatHexUppercase) ||
                 (custom_format == eFormatFloat) ||
                 (custom_format == eFormatOctal) ||
                 (custom_format == eFormatOSType) ||

Modified: lldb/trunk/source/Symbol/ClangASTType.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTType.cpp?rev=161606&r1=161605&r2=161606&view=diff
==============================================================================
--- lldb/trunk/source/Symbol/ClangASTType.cpp (original)
+++ lldb/trunk/source/Symbol/ClangASTType.cpp Thu Aug  9 14:33:34 2012
@@ -1030,6 +1030,7 @@
                     case eFormatDecimal:
                     case eFormatEnum:
                     case eFormatHex:
+                    case eFormatHexUppercase:
                     case eFormatFloat:
                     case eFormatOctal:
                     case eFormatOSType:

Added: lldb/trunk/test/functionalities/data-formatter/rdar-10449092/Makefile
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/rdar-10449092/Makefile?rev=161606&view=auto
==============================================================================
--- lldb/trunk/test/functionalities/data-formatter/rdar-10449092/Makefile (added)
+++ lldb/trunk/test/functionalities/data-formatter/rdar-10449092/Makefile Thu Aug  9 14:33:34 2012
@@ -0,0 +1,5 @@
+LEVEL = ../../../make
+
+CXX_SOURCES := main.cpp
+
+include $(LEVEL)/Makefile.rules

Added: lldb/trunk/test/functionalities/data-formatter/rdar-10449092/Test-rdar-10449092.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/rdar-10449092/Test-rdar-10449092.py?rev=161606&view=auto
==============================================================================
--- lldb/trunk/test/functionalities/data-formatter/rdar-10449092/Test-rdar-10449092.py (added)
+++ lldb/trunk/test/functionalities/data-formatter/rdar-10449092/Test-rdar-10449092.py Thu Aug  9 14:33:34 2012
@@ -0,0 +1,99 @@
+"""
+Test lldb data formatter subsystem.
+"""
+
+import os, time
+import unittest2
+import lldb
+from lldbtest import *
+
+class Radar10449092DataFormatterTestCase(TestBase):
+
+    # test for rdar://problem/10449092 ()
+    mydir = os.path.join("functionalities", "data-formatter", "rdar-10449092")
+
+    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
+    @dsym_test
+    def test_with_dsym_and_run_command(self):
+        """Test data formatter commands."""
+        self.buildDsym()
+        self.data_formatter_commands()
+
+    @dwarf_test
+    def test_with_dwarf_and_run_command(self):
+        """Test data formatter commands."""
+        self.buildDwarf()
+        self.data_formatter_commands()
+
+    def setUp(self):
+        # Call super's setUp().
+        TestBase.setUp(self)
+        # Find the line number to break at.
+        self.line = line_number('main.cpp', '// Set break point at this line.')
+
+    def data_formatter_commands(self):
+        """Test that that file and class static variables display correctly."""
+        self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)
+
+        self.expect("breakpoint set -f main.cpp -l %d" % self.line,
+                    BREAKPOINT_CREATED,
+            startstr = "Breakpoint created: 1: file ='main.cpp', line = %d, locations = 1" %
+                        self.line)
+
+        self.runCmd("run", RUN_SUCCEEDED)
+
+        # The stop reason of the thread should be breakpoint.
+        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
+            substrs = ['stopped',
+                       'stop reason = breakpoint'])
+
+        # This is the function to remove the custom formats in order to have a
+        # clean slate for the next test case.
+        def cleanup():
+            self.runCmd('type format delete hex', check=False)
+            self.runCmd('type summary clear', check=False)
+
+        # Execute the cleanup function during test case tear down.
+        self.addTearDownHook(cleanup)
+
+        self.runCmd("type format add -f uppercase int")
+     
+        self.expect('frame variable mine',
+            substrs = ['mine = ',
+                       'first = 0x001122AA', 'second = 0x1122BB44'])
+
+        self.runCmd("type format add -f hex int")
+
+        self.expect('frame variable mine',
+            substrs = ['mine = ',
+                       'first = 0x001122aa', 'second = 0x1122bb44'])
+
+        self.runCmd("type format delete int")
+
+        self.runCmd("type summary add -s \"${var.first%X} and ${var.second%x}\" foo")
+
+        self.expect('frame variable mine',
+                    substrs = ['(foo) mine = 0x001122AA and 0x1122bb44'])
+
+        self.runCmd("type summary add -s \"${var.first%X} and ${var.second%X}\" foo")
+        self.runCmd("next")
+        self.expect('frame variable mine',
+                    substrs = ['(foo) mine = 0xAABBCCDD and 0x1122BB44'])
+
+        self.runCmd("type summary add -s \"${var.first%x} and ${var.second%X}\" foo")
+        self.expect('frame variable mine',
+                    substrs = ['(foo) mine = 0xaabbccdd and 0x1122BB44'])
+        self.runCmd("next")
+        self.runCmd("type summary add -s \"${var.first%x} and ${var.second%x}\" foo")
+        self.expect('frame variable mine',
+                    substrs = ['(foo) mine = 0xaabbccdd and 0xff00ff00'])
+        self.runCmd("type summary add -s \"${var.first%X} and ${var.second%X}\" foo")
+        self.expect('frame variable mine',
+                    substrs = ['(foo) mine = 0xAABBCCDD and 0xFF00FF00'])
+
+
+if __name__ == '__main__':
+    import atexit
+    lldb.SBDebugger.Initialize()
+    atexit.register(lambda: lldb.SBDebugger.Terminate())
+    unittest2.main()

Added: lldb/trunk/test/functionalities/data-formatter/rdar-10449092/main.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/functionalities/data-formatter/rdar-10449092/main.cpp?rev=161606&view=auto
==============================================================================
--- lldb/trunk/test/functionalities/data-formatter/rdar-10449092/main.cpp (added)
+++ lldb/trunk/test/functionalities/data-formatter/rdar-10449092/main.cpp Thu Aug  9 14:33:34 2012
@@ -0,0 +1,25 @@
+//===-- main.cpp ------------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include <stdio.h>
+
+struct foo
+{
+    int first;
+    int second;
+};
+
+int main ()
+{
+    struct foo mine = {0x001122AA, 0x1122BB44};
+	mine.first = 0xAABBCCDD; // Set break point at this line.
+	mine.second = 0xFF00FF00;
+    return 0;
+}
+





More information about the lldb-commits mailing list