Merge all remaining changes from branches/PTRCHECK.  These are some
relatively minor extensions to m_debuginfo, a major overhaul of
m_debuginfo/readdwarf3.c to get its space usage under control, and
changes throughout the system to enable heap-use profiling.

The majority of the merged changes were committed into
branches/PTRCHECK as the following revs: 8591 8595 8598 8599 8601 and
8161.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8621 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/include/pub_tool_debuginfo.h b/include/pub_tool_debuginfo.h
index b43e0a6..30725d5 100644
--- a/include/pub_tool_debuginfo.h
+++ b/include/pub_tool_debuginfo.h
@@ -105,6 +105,48 @@
 */
 extern Char* VG_(describe_IP)(Addr eip, Char* buf, Int n_buf);
 
+
+/* Get an XArray of StackBlock which describe the stack (auto) blocks
+   for this ip.  The caller is expected to free the XArray at some
+   point.  If 'arrays_only' is True, only array-typed blocks are
+   returned; otherwise blocks of all types are returned. */
+
+typedef
+   struct {
+      OffT  base;     /* offset from sp or fp */
+      SizeT szB;      /* size in bytes */
+      Bool  spRel;    /* True => sp-rel, False => fp-rel */
+      Bool  isVec;    /* does block have an array type, or not? */
+      HChar name[16]; /* first 15 chars of name (asciiz) */
+   }
+   StackBlock;
+
+extern void* /* really, XArray* of StackBlock */
+             VG_(di_get_stack_blocks_at_ip)( Addr ip, Bool arrays_only );
+
+
+/* Get an array of GlobalBlock which describe the global blocks owned
+   by the shared object characterised by the given di_handle.  Asserts
+   if the handle is invalid.  The caller is responsible for freeing
+   the array at some point.  If 'arrays_only' is True, only
+   array-typed blocks are returned; otherwise blocks of all types are
+   returned. */
+
+typedef
+   struct {
+      Addr  addr;
+      SizeT szB;
+      Bool  isVec;      /* does block have an array type, or not? */
+      HChar name[16];   /* first 15 chars of name (asciiz) */
+      HChar soname[16]; /* first 15 chars of name (asciiz) */
+   }
+   GlobalBlock;
+
+extern void* /* really, XArray* of GlobalBlock */
+VG_(di_get_global_blocks_from_dihandle) ( ULong di_handle,
+                                          Bool  arrays_only );
+
+
 /*====================================================================*/
 /*=== Obtaining segment information                                ===*/
 /*====================================================================*/