From ea27e4627518665dd6c81213c0ba1f7ff0218e1a Mon Sep 17 00:00:00 2001 From: njn Date: Tue, 31 May 2005 02:38:09 +0000 Subject: 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 --- include/pub_tool_debuginfo.h | 116 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 include/pub_tool_debuginfo.h (limited to 'include/pub_tool_debuginfo.h') 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 ---*/ +/*--------------------------------------------------------------------*/ -- cgit v1.2.3