aboutsummaryrefslogtreecommitdiff
path: root/include/pub_tool_debuginfo.h
diff options
context:
space:
mode:
authornjn <njn@a5019735-40e9-0310-863c-91ae7b9d1cf9>2005-05-31 02:38:09 +0000
committernjn <njn@a5019735-40e9-0310-863c-91ae7b9d1cf9>2005-05-31 02:38:09 +0000
commitea27e4627518665dd6c81213c0ba1f7ff0218e1a (patch)
treeff70c55be07fee4d103d36645b36faed358500e2 /include/pub_tool_debuginfo.h
parent0c24647c0e69c8da8e7683ae9e75526c5d7185a5 (diff)
downloadvalgrind-ea27e4627518665dd6c81213c0ba1f7ff0218e1a.tar.gz
Modularised all the debug info stuff as m_debuginfo/. It's a mess
and needs further cleaning up, but it's a start. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@3821 a5019735-40e9-0310-863c-91ae7b9d1cf9
Diffstat (limited to 'include/pub_tool_debuginfo.h')
-rw-r--r--include/pub_tool_debuginfo.h116
1 files changed, 116 insertions, 0 deletions
diff --git a/include/pub_tool_debuginfo.h b/include/pub_tool_debuginfo.h
new file mode 100644
index 000000000..927a4c5ce
--- /dev/null
+++ b/include/pub_tool_debuginfo.h
@@ -0,0 +1,116 @@
+
+/*--------------------------------------------------------------------*/
+/*--- DebugInfo. pub_tool_debuginfo.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2000-2005 Julian Seward
+ jseward@acm.org
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#ifndef __PUB_TOOL_DEBUGINFO_H
+#define __PUB_TOOL_DEBUGINFO_H
+
+/*====================================================================*/
+/*=== Obtaining debug information ===*/
+/*====================================================================*/
+
+/* Get the file/function/line number of the instruction at address
+ 'a'. For these four, if debug info for the address is found, it
+ copies the info into the buffer/UInt and returns True. If not, it
+ returns False and nothing is copied. VG_(get_fnname) always
+ demangles C++ function names. VG_(get_fnname_w_offset) is the
+ same, except it appends "+N" to symbol names to indicate offsets. */
+extern Bool VG_(get_filename) ( Addr a, Char* filename, Int n_filename );
+extern Bool VG_(get_fnname) ( Addr a, Char* fnname, Int n_fnname );
+extern Bool VG_(get_linenum) ( Addr a, UInt* linenum );
+extern Bool VG_(get_fnname_w_offset)
+ ( Addr a, Char* fnname, Int n_fnname );
+
+/* This one is more efficient if getting both filename and line number,
+ because the two lookups are done together. */
+extern Bool VG_(get_filename_linenum)
+ ( Addr a, Char* filename, Int n_filename,
+ UInt* linenum );
+
+/* Succeeds only if we find from debug info that 'a' is the address of the
+ first instruction in a function -- as opposed to VG_(get_fnname) which
+ succeeds if we find from debug info that 'a' is the address of any
+ instruction in a function. Use this to instrument the start of
+ a particular function. Nb: if an executable/shared object is stripped
+ of its symbols, this function will not be able to recognise function
+ entry points within it. */
+extern Bool VG_(get_fnname_if_entry) ( Addr a, Char* fnname, Int n_fnname );
+
+/* Succeeds if the address is within a shared object or the main executable.
+ It doesn't matter if debug info is present or not. */
+extern Bool VG_(get_objname) ( Addr a, Char* objname, Int n_objname );
+
+/* Puts into 'buf' info about the code address %eip: the address, function
+ name (if known) and filename/line number (if known), like this:
+
+ 0x4001BF05: realloc (vg_replace_malloc.c:339)
+
+ 'n_buf' gives length of 'buf'. Returns 'buf'.
+*/
+extern Char* VG_(describe_IP)(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);
+
+/*====================================================================*/
+/*=== Obtaining segment information ===*/
+/*====================================================================*/
+
+/* A way to get information about what segments are mapped */
+typedef struct _SegInfo SegInfo;
+
+/* Returns NULL if the SegInfo isn't found. It doesn't matter if debug info
+ is present or not. */
+extern SegInfo* VG_(get_obj) ( Addr a );
+
+extern const SegInfo* VG_(next_seginfo) ( const SegInfo *si );
+extern Addr VG_(seg_start) ( const SegInfo *si );
+extern SizeT VG_(seg_size) ( const SegInfo *si );
+extern const UChar* VG_(seg_filename) ( const SegInfo *si );
+extern ULong VG_(seg_sym_offset)( const SegInfo *si );
+
+typedef
+ enum {
+ Vg_SectUnknown,
+ Vg_SectText,
+ Vg_SectData,
+ Vg_SectBSS,
+ Vg_SectGOT,
+ Vg_SectPLT
+ }
+ VgSectKind;
+
+extern VgSectKind VG_(seg_sect_kind)(Addr);
+
+#endif // __PUB_TOOL_DEBUGINFO_H
+
+/*--------------------------------------------------------------------*/
+/*--- end ---*/
+/*--------------------------------------------------------------------*/