[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