[Lldb-commits] [lldb] r154516 - in /lldb/branches/lldb-platform-work: ./ examples/darwin/heap_find/Makefile examples/darwin/heap_find/heap.py examples/darwin/heap_find/heap_find.cpp scripts/Python/interface/SBValue.i source/Symbol/ClangASTType.cpp

Johnny Chen johnny.chen at apple.com
Wed Apr 11 11:10:00 PDT 2012


Author: johnny
Date: Wed Apr 11 13:09:59 2012
New Revision: 154516

URL: http://llvm.org/viewvc/llvm-project?rev=154516&view=rev
Log:
Merge changes from ToT:

svn merge -r 154458:154506 https://johnny@llvm.org/svn/llvm-project/lldb/trunk .

Added:
    lldb/branches/lldb-platform-work/examples/darwin/heap_find/heap.py
      - copied unchanged from r154506, lldb/trunk/examples/darwin/heap_find/heap.py
Modified:
    lldb/branches/lldb-platform-work/   (props changed)
    lldb/branches/lldb-platform-work/examples/darwin/heap_find/Makefile
    lldb/branches/lldb-platform-work/examples/darwin/heap_find/heap_find.cpp
    lldb/branches/lldb-platform-work/scripts/Python/interface/SBValue.i
    lldb/branches/lldb-platform-work/source/Symbol/ClangASTType.cpp

Propchange: lldb/branches/lldb-platform-work/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Apr 11 13:09:59 2012
@@ -1 +1 @@
-/lldb/trunk:154224-154458
+/lldb/trunk:154224-154506

Modified: lldb/branches/lldb-platform-work/examples/darwin/heap_find/Makefile
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/lldb-platform-work/examples/darwin/heap_find/Makefile?rev=154516&r1=154515&r2=154516&view=diff
==============================================================================
--- lldb/branches/lldb-platform-work/examples/darwin/heap_find/Makefile (original)
+++ lldb/branches/lldb-platform-work/examples/darwin/heap_find/Makefile Wed Apr 11 13:09:59 2012
@@ -2,6 +2,6 @@
 
 DYLIB_NAME := heap
 DYLIB_ONLY := YES
-DYLIB_C_SOURCES := heap_find.cpp
+DYLIB_CXX_SOURCES := heap_find.cpp
 
 include $(LEVEL)/Makefile.rules

Modified: lldb/branches/lldb-platform-work/examples/darwin/heap_find/heap_find.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/lldb-platform-work/examples/darwin/heap_find/heap_find.cpp?rev=154516&r1=154515&r2=154516&view=diff
==============================================================================
--- lldb/branches/lldb-platform-work/examples/darwin/heap_find/heap_find.cpp (original)
+++ lldb/branches/lldb-platform-work/examples/darwin/heap_find/heap_find.cpp Wed Apr 11 13:09:59 2012
@@ -42,7 +42,7 @@
 // format. The address format shows pointers, and if those pointers point to
 // objects that have symbols or know data contents, it will display information
 // about the pointers:
-/
+//
 // (lldb) memory read --format address --count 1 0x104000730 
 // 0x104000730: 0x0000000100002460 (void *)0x0000000100002488: MyString
 // 
@@ -71,6 +71,7 @@
 #include <stack_logging.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <vector>
 
 struct range_callback_info_t;
 
@@ -91,15 +92,23 @@
     eDataTypeInteger
 };
 
-typedef struct range_contains_data_callback_info_tag
+struct range_contains_data_callback_info_t
 {
     const uint8_t *data;
     const size_t data_len;
     const uint32_t align;
     const data_type_t data_type;
     uint32_t match_count;
-} range_contains_data_callback_info_t;
+};
 
+struct malloc_match
+{
+    void *addr;
+    intptr_t size;
+    intptr_t offset;
+};
+
+std::vector<malloc_match> g_matches;
 
 static kern_return_t
 task_peek (task_t task, vm_address_t remote_address, vm_size_t size, void **local_memory)
@@ -166,6 +175,7 @@
     foreach_zone_in_this_process (&info);
 }
 
+
 static void
 range_contains_ptr_callback (task_t task, void *baton, unsigned type, uint64_t ptr_addr, uint64_t ptr_size)
 {
@@ -191,39 +201,41 @@
             if (memcmp (data_info->data, data, data_info->data_len) == 0)
             {
                 ++data_info->match_count;
-                printf ("0x%llx: ", addr);
-                uint32_t i;
-                switch (data_info->data_type)
-                {
-                case eDataTypeInteger:
-                    {
-                        // NOTE: little endian specific, but all darwin platforms are little endian now..
-                        for (i=0; i<data_info->data_len; ++i)
-                            printf (i ? "%2.2x" : "0x%2.2x", data[data_info->data_len - (i + 1)]);
-                    }
-                    break;
-                case eDataTypeBytes:
-                    {
-                        for (i=0; i<data_info->data_len; ++i)
-                            printf (" %2.2x", data[i]);
-                    }
-                    break;
-                case eDataTypeCStr:
-                    {
-                        putchar ('"');
-                        for (i=0; i<data_info->data_len; ++i)
-                        {
-                            if (isprint (data[i]))
-                                putchar (data[i]);
-                            else
-                                printf ("\\x%2.2x", data[i]);
-                        }
-                        putchar ('"');
-                    }
-                    break;
-                    
-                }
-                printf (" found in malloc block 0x%llx + %llu (malloc_size = %llu)\n", ptr_addr, addr - ptr_addr, ptr_size);
+                malloc_match match = { (void *)ptr_addr, ptr_size, addr - ptr_addr };
+                g_matches.push_back(match);
+                // printf ("0x%llx: ", addr);
+                // uint32_t i;
+                // switch (data_info->data_type)
+                // {
+                // case eDataTypeInteger:
+                //     {
+                //         // NOTE: little endian specific, but all darwin platforms are little endian now..
+                //         for (i=0; i<data_info->data_len; ++i)
+                //             printf (i ? "%2.2x" : "0x%2.2x", data[data_info->data_len - (i + 1)]);
+                //     }
+                //     break;
+                // case eDataTypeBytes:
+                //     {
+                //         for (i=0; i<data_info->data_len; ++i)
+                //             printf (" %2.2x", data[i]);
+                //     }
+                //     break;
+                // case eDataTypeCStr:
+                //     {
+                //         putchar ('"');
+                //         for (i=0; i<data_info->data_len; ++i)
+                //         {
+                //             if (isprint (data[i]))
+                //                 putchar (data[i]);
+                //             else
+                //                 printf ("\\x%2.2x", data[i]);
+                //         }
+                //         putchar ('"');
+                //     }
+                //     break;
+                //     
+                // }
+                // printf (" found in malloc block 0x%llx + %llu (malloc_size = %llu)\n", ptr_addr, addr - ptr_addr, ptr_size);
             }
         }
     }
@@ -233,24 +245,35 @@
     }   
 }
 
-uint32_t
+malloc_match *
 find_pointer_in_heap (intptr_t addr)
 {
+    g_matches.clear();
     range_contains_data_callback_info_t data_info = { (uint8_t *)&addr, sizeof(addr), sizeof(addr), eDataTypeInteger, 0};
     range_callback_info_t info = { enumerate_range_in_zone, range_contains_ptr_callback, &data_info };
     foreach_zone_in_this_process (&info);
-    return data_info.match_count;
+    if (g_matches.empty())
+        return NULL;
+    malloc_match match = { NULL, 0, 0 };
+    g_matches.push_back(match);
+    return g_matches.data();
 }
 
-uint32_t
+
+malloc_match *
 find_cstring_in_heap (const char *s)
 {
     if (s && s[0])
     {
+        g_matches.clear();
         range_contains_data_callback_info_t data_info = { (uint8_t *)s, strlen(s), 1, eDataTypeCStr, 0};
         range_callback_info_t info = { enumerate_range_in_zone, range_contains_ptr_callback, &data_info };
         foreach_zone_in_this_process (&info);
-        return data_info.match_count;
+        if (g_matches.empty())
+            return NULL;
+        malloc_match match = { NULL, 0, 0 };
+        g_matches.push_back(match);
+        return g_matches.data();
     }
     else
     {

Modified: lldb/branches/lldb-platform-work/scripts/Python/interface/SBValue.i
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/lldb-platform-work/scripts/Python/interface/SBValue.i?rev=154516&r1=154515&r2=154516&view=diff
==============================================================================
--- lldb/branches/lldb-platform-work/scripts/Python/interface/SBValue.i (original)
+++ lldb/branches/lldb-platform-work/scripts/Python/interface/SBValue.i Wed Apr 11 13:09:59 2012
@@ -379,7 +379,10 @@
     GetExpressionPath (lldb::SBStream &description, bool qualify_cxx_base_classes);
     
     %pythoncode %{
-
+        def __get_dynamic__ (self):
+            '''Helper function for the "SBValue.dynamic" property.'''
+            return self.GetDynamicValue (eDynamicCanRunTarget)
+        
         __swig_getmethods__["name"] = GetName
         if _newclass: name = property(GetName, None, doc='Returns the name of this SBValue as a string')
 
@@ -429,7 +432,10 @@
 
         __swig_getmethods__["description"] = GetObjectDescription
         if _newclass: description = property(GetObjectDescription, None, doc='Returns the language-specific description of this SBValue as a string')
-
+        
+        __swig_getmethods__["dynamic"] = __get_dynamic__
+        if _newclass: description = property(__get_dynamic__, None, doc='Gets the dynamic type for a value')
+        
         __swig_getmethods__["location"] = GetLocation
         if _newclass: location = property(GetLocation, None, doc='Returns the location of this SBValue as a string')
 

Modified: lldb/branches/lldb-platform-work/source/Symbol/ClangASTType.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/branches/lldb-platform-work/source/Symbol/ClangASTType.cpp?rev=154516&r1=154515&r2=154516&view=diff
==============================================================================
--- lldb/branches/lldb-platform-work/source/Symbol/ClangASTType.cpp (original)
+++ lldb/branches/lldb-platform-work/source/Symbol/ClangASTType.cpp Wed Apr 11 13:09:59 2012
@@ -92,9 +92,12 @@
 }
 
 ConstString
-ClangASTType::GetConstQualifiedTypeName (clang::ASTContext *ast, clang_type_t opaque_qual_type)
+ClangASTType::GetConstQualifiedTypeName (clang::ASTContext *ast, clang_type_t clang_type)
 {
-    return ConstString (GetTypeNameForQualType (ast, clang::QualType::getFromOpaquePtr(opaque_qual_type)).c_str());
+    if (ast == NULL || clang_type == NULL)
+        return ConstString("<invalid>");
+
+    return ConstString (GetTypeNameForQualType (ast, clang::QualType::getFromOpaquePtr(clang_type)).c_str());
 }
 
 





More information about the lldb-commits mailing list