Adds VG_(describe_addr)() for generating symbolic descriptions of a
memory address, based on which variables are in scope at the time and
their types.

As part of this change, I restructured the symbol table parsing code,
by splitting the stabs and dwarf-specific parts into their own files.
I also added a new set of vg_symtypes.[ch] files which contains the
type system code and the core of the VG_(describe_addr)().

I've only implemented the stabs type parser.  I have not yet implemented
the DWARF2 parser.  It looks well-defined but complex.

The only skin which uses this is Helgrind at the moment.


git-svn-id: svn://svn.valgrind.org/valgrind/trunk@1926 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/include/vg_skin.h b/include/vg_skin.h
index d8d168a..faf5d72 100644
--- a/include/vg_skin.h
+++ b/include/vg_skin.h
@@ -1452,6 +1452,10 @@
 */
 extern Char* VG_(describe_eip)(Addr eip, Char* buf, Int n_buf);
 
+/* Returns a string containing an expression for the given
+   address. String is malloced with VG_(malloc)() */
+Char *VG_(describe_addr)(ThreadId, Addr);
+
 /* A way to get information about what segments are mapped */
 typedef struct _SegInfo SegInfo;