1ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn
2ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn/*--------------------------------------------------------------------*/
3ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn/*--- Debug info.                             pub_core_debuginfo.h ---*/
4ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn/*--------------------------------------------------------------------*/
5ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn
6ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn/*
7ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn   This file is part of Valgrind, a dynamic binary instrumentation
8ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn   framework.
9ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn
10b3a1e4bffbdbbf38304f216af405009868f43628sewardj   Copyright (C) 2000-2015 Julian Seward
11ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn      jseward@acm.org
12ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn
13ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn   This program is free software; you can redistribute it and/or
14ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn   modify it under the terms of the GNU General Public License as
15ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn   published by the Free Software Foundation; either version 2 of the
16ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn   License, or (at your option) any later version.
17ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn
18ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn   This program is distributed in the hope that it will be useful, but
19ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn   WITHOUT ANY WARRANTY; without even the implied warranty of
20ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn   General Public License for more details.
22ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn
23ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn   You should have received a copy of the GNU General Public License
24ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn   along with this program; if not, write to the Free Software
25ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn   02111-1307, USA.
27ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn
28ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn   The GNU General Public License is contained in the file COPYING.
29ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn*/
30ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn
31ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn#ifndef __PUB_CORE_DEBUGINFO_H
32ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn#define __PUB_CORE_DEBUGINFO_H
33ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn
34ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn//--------------------------------------------------------------------
35ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn// PURPOSE: This module deals with reading debug info and symbol tables
36ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn// to get file and function names, line numbers, variable types, and
37ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn// to help stack unwinding.
38ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn//--------------------------------------------------------------------
39ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn
40ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn#include "pub_tool_debuginfo.h"
41ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn
42f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj/* Initialise the entire module.  Must be called first of all. */
43f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardjextern void VG_(di_initialise) ( void );
44f98e1c03ce4bea1fb092cdea5571c41f29f6df9bsewardj
45811469c938e0716675b6d01c50a5eefb27cf3fccsewardj/* LINUX: Notify the debuginfo system about a new mapping, or the
46811469c938e0716675b6d01c50a5eefb27cf3fccsewardj   disappearance of such, or a permissions change on an existing
47811469c938e0716675b6d01c50a5eefb27cf3fccsewardj   mapping.  This is the way new debug information gets loaded.  If
48811469c938e0716675b6d01c50a5eefb27cf3fccsewardj   allow_SkFileV is True, it will try load debug info if the mapping
49811469c938e0716675b6d01c50a5eefb27cf3fccsewardj   at 'a' belongs to Valgrind; whereas normally (False) it will not do
50811469c938e0716675b6d01c50a5eefb27cf3fccsewardj   that.  This allows us to carefully control when the thing will read
519c606bd8634cd6b67bb41fa645b5c639668cfa2dsewardj   symbols from the Valgrind executable itself.
529c606bd8634cd6b67bb41fa645b5c639668cfa2dsewardj
539c606bd8634cd6b67bb41fa645b5c639668cfa2dsewardj   If a call to VG_(di_notify_mmap) causes debug info to be read, then
549c606bd8634cd6b67bb41fa645b5c639668cfa2dsewardj   the returned ULong is an abstract handle which can later be used to
559c606bd8634cd6b67bb41fa645b5c639668cfa2dsewardj   refer to the debuginfo read as a result of this specific mapping,
569c606bd8634cd6b67bb41fa645b5c639668cfa2dsewardj   in later queries to m_debuginfo.  In this case the handle value
579c606bd8634cd6b67bb41fa645b5c639668cfa2dsewardj   will be one or above.  If the returned value is zero, no debug info
585f2dcad945d0bf3aaa9c9449ae90a5f2ca69adf1sewardj   was read.
595f2dcad945d0bf3aaa9c9449ae90a5f2ca69adf1sewardj
605f2dcad945d0bf3aaa9c9449ae90a5f2ca69adf1sewardj   For VG_(di_notify_mmap), if use_fd is not -1, that is used instead
615f2dcad945d0bf3aaa9c9449ae90a5f2ca69adf1sewardj   of the filename; this avoids perturbing fcntl locks, which are
625f2dcad945d0bf3aaa9c9449ae90a5f2ca69adf1sewardj   released by simply re-opening and closing the same file (even via
635f2dcad945d0bf3aaa9c9449ae90a5f2ca69adf1sewardj   different fd!).
645f2dcad945d0bf3aaa9c9449ae90a5f2ca69adf1sewardj*/
658eb8bab992e3998c33770b0cdb16059a8b918a06sewardj#if defined(VGO_linux) || defined(VGO_darwin) || defined(VGO_solaris)
665f2dcad945d0bf3aaa9c9449ae90a5f2ca69adf1sewardjextern ULong VG_(di_notify_mmap)( Addr a, Bool allow_SkFileV, Int use_fd );
67f72cced460e350fa4c51581ec267381a63203157sewardj
6845f4e7c91119c7d01a59f5e827c67841632c9314sewardjextern void VG_(di_notify_munmap)( Addr a, SizeT len );
69f72cced460e350fa4c51581ec267381a63203157sewardj
7045f4e7c91119c7d01a59f5e827c67841632c9314sewardjextern void VG_(di_notify_mprotect)( Addr a, SizeT len, UInt prot );
71c8259b85b701d25d72aabe9dc0a8154517f96913sewardj
72c8259b85b701d25d72aabe9dc0a8154517f96913sewardj/* this should really return ULong, as per VG_(di_notify_mmap). */
73c8259b85b701d25d72aabe9dc0a8154517f96913sewardjextern void VG_(di_notify_pdb_debuginfo)( Int fd, Addr avma,
74c8259b85b701d25d72aabe9dc0a8154517f96913sewardj                                          SizeT total_size,
7554c45db2f978055aeca91aaccb05aac825523e6csewardj                                          PtrdiffT bias );
76731f9cf9fd4d507b44f1a0fdc2d3b8e8efae02e3sewardj
77731f9cf9fd4d507b44f1a0fdc2d3b8e8efae02e3sewardj/* this should also really return ULong */
78731f9cf9fd4d507b44f1a0fdc2d3b8e8efae02e3sewardjextern void VG_(di_notify_vm_protect)( Addr a, SizeT len, UInt prot );
79811469c938e0716675b6d01c50a5eefb27cf3fccsewardj#endif
80811469c938e0716675b6d01c50a5eefb27cf3fccsewardj
819c606bd8634cd6b67bb41fa645b5c639668cfa2dsewardjextern void VG_(di_discard_ALL_debuginfo)( void );
829c606bd8634cd6b67bb41fa645b5c639668cfa2dsewardj
836b7611bf42a0fbb62e047d8c43b008205bd21e75njn/* Like VG_(get_fnname), but it does not do C++ demangling nor Z-demangling
846b7611bf42a0fbb62e047d8c43b008205bd21e75njn * nor below-main renaming.
856b7611bf42a0fbb62e047d8c43b008205bd21e75njn * It should not be used for any names that will be shown to users.
866b7611bf42a0fbb62e047d8c43b008205bd21e75njn * It should only be used in cases where the names of interest will have
876b7611bf42a0fbb62e047d8c43b008205bd21e75njn * particular (ie. non-mangled) forms, or the mangled form is acceptable. */
886b7611bf42a0fbb62e047d8c43b008205bd21e75njnextern
8946cc04521acf2827eb33310fadc119bf2dc039e4florianBool VG_(get_fnname_raw) ( Addr a, const HChar** buf );
906b7611bf42a0fbb62e047d8c43b008205bd21e75njn
916b7611bf42a0fbb62e047d8c43b008205bd21e75njn/* Like VG_(get_fnname), but without C++ demangling.  (But it does
92a0a73939b0398b6608fd6dbde49820ce6530d12cphilippe Z-demangling and below-main renaming.)
93a0a73939b0398b6608fd6dbde49820ce6530d12cphilippe iipc argument: same usage as in VG_(describe_IP) in pub_tool_debuginfo.h. */
946b7611bf42a0fbb62e047d8c43b008205bd21e75njnextern
9546cc04521acf2827eb33310fadc119bf2dc039e4florianBool VG_(get_fnname_no_cxx_demangle) ( Addr a, const HChar** buf,
9646cc04521acf2827eb33310fadc119bf2dc039e4florian                                       const InlIPCursor* iipc );
97ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn
985db15403e889d4db339b342bc2a824ef0bfaa654sewardj/* mips-linux only: find the offset of current address. This is needed for
995db15403e889d4db339b342bc2a824ef0bfaa654sewardj   stack unwinding for MIPS.
1005db15403e889d4db339b342bc2a824ef0bfaa654sewardj*/
1015db15403e889d4db339b342bc2a824ef0bfaa654sewardjextern
1025db15403e889d4db339b342bc2a824ef0bfaa654sewardjBool VG_(get_inst_offset_in_function)( Addr a, /*OUT*/PtrdiffT* offset );
1035db15403e889d4db339b342bc2a824ef0bfaa654sewardj
1043026f71684a930286186aa10fef266c304672e8fsewardj
1053026f71684a930286186aa10fef266c304672e8fsewardj/* Use DWARF2/3 CFA information to do one step of stack unwinding.
1063026f71684a930286186aa10fef266c304672e8fsewardj   D3UnwindRegs holds the current register values, and is
1073026f71684a930286186aa10fef266c304672e8fsewardj   arch-specific.  Note that the x86 and amd64 definitions are shared
1083026f71684a930286186aa10fef266c304672e8fsewardj   and so the regs are named 'xip' etc rather than 'eip' and 'rip'. */
1093026f71684a930286186aa10fef266c304672e8fsewardj#if defined(VGA_amd64) || defined(VGA_x86)
1103026f71684a930286186aa10fef266c304672e8fsewardjtypedef
1113026f71684a930286186aa10fef266c304672e8fsewardj   struct { Addr xip; Addr xsp; Addr xbp; }
1123026f71684a930286186aa10fef266c304672e8fsewardj   D3UnwindRegs;
1133026f71684a930286186aa10fef266c304672e8fsewardj#elif defined(VGA_arm)
1143026f71684a930286186aa10fef266c304672e8fsewardjtypedef
115fa5ce5616a17e79828fbc79f30b02b5085151e3csewardj   struct { Addr r15; Addr r14; Addr r13; Addr r12; Addr r11; Addr r7; }
1163026f71684a930286186aa10fef266c304672e8fsewardj   D3UnwindRegs;
117f0c1250e324f6684757c6a15545366447ef1d64fsewardj#elif defined(VGA_arm64)
118f0c1250e324f6684757c6a15545366447ef1d64fsewardjtypedef
119821283b2110420321fd3f60afcc799b287788c68sewardj   struct { Addr pc; Addr sp; Addr x30; Addr x29; } /* PC, SP, LR, FP */
120f0c1250e324f6684757c6a15545366447ef1d64fsewardj   D3UnwindRegs;
121cae0cc22b83ffb260ee8379e92099c5a701944cbcarll#elif defined(VGA_ppc32) || defined(VGA_ppc64be) || defined(VGA_ppc64le)
1223026f71684a930286186aa10fef266c304672e8fsewardjtypedef
123f5f1e12bd89408917c1ffeb22ec23a1fd11b7a23sewardj   UChar  /* should be void, but gcc complains at use points */
1243026f71684a930286186aa10fef266c304672e8fsewardj   D3UnwindRegs;
125b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj#elif defined(VGA_s390x)
126b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardjtypedef
127b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj   struct { Addr ia; Addr sp; Addr fp; Addr lr;}
128b5b87408c0c99f9f6938d8cd921e2a5f420577c4sewardj   D3UnwindRegs;
1294df0bfc0614379192c780c944415dc420d9cfe8epetarj#elif defined(VGA_mips32) || defined(VGA_mips64)
1305db15403e889d4db339b342bc2a824ef0bfaa654sewardjtypedef
1315db15403e889d4db339b342bc2a824ef0bfaa654sewardj   struct { Addr pc; Addr sp; Addr fp; Addr ra; }
1325db15403e889d4db339b342bc2a824ef0bfaa654sewardj   D3UnwindRegs;
133112711afefcfcd43680c7c4aa8d38ef180e8811esewardj#elif defined(VGA_tilegx)
134112711afefcfcd43680c7c4aa8d38ef180e8811esewardjtypedef
135112711afefcfcd43680c7c4aa8d38ef180e8811esewardj   struct { Addr pc; Addr sp; Addr fp; Addr lr; }
136112711afefcfcd43680c7c4aa8d38ef180e8811esewardj   D3UnwindRegs;
1373026f71684a930286186aa10fef266c304672e8fsewardj#else
1383026f71684a930286186aa10fef266c304672e8fsewardj#  error "Unsupported arch"
1393026f71684a930286186aa10fef266c304672e8fsewardj#endif
1403026f71684a930286186aa10fef266c304672e8fsewardj
1413026f71684a930286186aa10fef266c304672e8fsewardjextern Bool VG_(use_CF_info) ( /*MOD*/D3UnwindRegs* uregs,
142eadcd86d1b0f59efed44c162ef4378ccfb528290sewardj                               Addr min_accessible,
143eadcd86d1b0f59efed44c162ef4378ccfb528290sewardj                               Addr max_accessible );
144c8259b85b701d25d72aabe9dc0a8154517f96913sewardj
145f7bbd7982397fb73477bdc21bf236cf9100cee44philippe/* returns the "generation" of the debug info.
14620ede3a4f086d4a4b1e0969b1098dcb244ffb6b4philippe   Each time some debuginfo is changed (e.g. loaded or unloaded),
147f7bbd7982397fb73477bdc21bf236cf9100cee44philippe   the VG_(debuginfo_generation)() value returned will be increased.
148f7bbd7982397fb73477bdc21bf236cf9100cee44philippe   This can be used to flush cached information derived from debug
149f7bbd7982397fb73477bdc21bf236cf9100cee44philippe   info (e.g. CFI info or FPO info or ...). */
150f7bbd7982397fb73477bdc21bf236cf9100cee44philippeextern UInt VG_(debuginfo_generation) (void);
15120ede3a4f086d4a4b1e0969b1098dcb244ffb6b4philippe
15220ede3a4f086d4a4b1e0969b1098dcb244ffb6b4philippe
1533026f71684a930286186aa10fef266c304672e8fsewardj
154f7bbd7982397fb73477bdc21bf236cf9100cee44philippe/* True if some FPO information is loaded.
155f7bbd7982397fb73477bdc21bf236cf9100cee44philippe   It is useless to call VG_(use_FPO_info) if this returns False.
156f7bbd7982397fb73477bdc21bf236cf9100cee44philippe   Note that the return value should preferrably be cached in
157f7bbd7982397fb73477bdc21bf236cf9100cee44philippe   the stack unwind code, and re-queried when the debug info generation
158f7bbd7982397fb73477bdc21bf236cf9100cee44philippe   changes. */
159f7bbd7982397fb73477bdc21bf236cf9100cee44philippeextern Bool VG_(FPO_info_present)(void);
160f7bbd7982397fb73477bdc21bf236cf9100cee44philippe
161c8259b85b701d25d72aabe9dc0a8154517f96913sewardj/* Use MSVC FPO data to do one step of stack unwinding. */
162c8259b85b701d25d72aabe9dc0a8154517f96913sewardjextern Bool VG_(use_FPO_info) ( /*MOD*/Addr* ipP,
163c8259b85b701d25d72aabe9dc0a8154517f96913sewardj                                /*MOD*/Addr* spP,
164c8259b85b701d25d72aabe9dc0a8154517f96913sewardj                                /*MOD*/Addr* fpP,
165c8259b85b701d25d72aabe9dc0a8154517f96913sewardj                                Addr min_accessible,
166c8259b85b701d25d72aabe9dc0a8154517f96913sewardj                                Addr max_accessible );
167ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn
16897bfa1905b957b46e8426db4a8aed9b4ee7f476ephilippe/* Print the unwind info (if there is some) for the given address
16997bfa1905b957b46e8426db4a8aed9b4ee7f476ephilippe   range [from,to]. */
17097bfa1905b957b46e8426db4a8aed9b4ee7f476ephilippeextern void VG_(ppUnwindInfo) (Addr from, Addr to);
17197bfa1905b957b46e8426db4a8aed9b4ee7f476ephilippe
1724cace66777ca9ee73ea156210c04e9d4cc178395philippe/* AVMAs for a symbol. Usually only the lowest address of the entity.
1734cace66777ca9ee73ea156210c04e9d4cc178395philippe   On ppc64 platforms, also contains tocptr and local_ep.
1744cace66777ca9ee73ea156210c04e9d4cc178395philippe   These fields should only be accessed using the macros
1754cace66777ca9ee73ea156210c04e9d4cc178395philippe   GET_TOCPTR_AVMA/SET_TOCPTR_AVMA/GET_LOCAL_EP_AVMA/SET_LOCAL_EP_AVMA. */
1764cace66777ca9ee73ea156210c04e9d4cc178395philippetypedef
1774cace66777ca9ee73ea156210c04e9d4cc178395philippe   struct {
1784cace66777ca9ee73ea156210c04e9d4cc178395philippe      Addr main;      /* lowest address of entity */
1794cace66777ca9ee73ea156210c04e9d4cc178395philippe#     if defined(VGA_ppc64be) || defined(VGA_ppc64le)
1804cace66777ca9ee73ea156210c04e9d4cc178395philippe      Addr tocptr;    /* ppc64be/le-linux only: value that R2 should have */
1814cace66777ca9ee73ea156210c04e9d4cc178395philippe#     endif
1824cace66777ca9ee73ea156210c04e9d4cc178395philippe#     if defined(VGA_ppc64le)
1834cace66777ca9ee73ea156210c04e9d4cc178395philippe      Addr local_ep;  /* address for local entry point, ppc64le only */
1844cace66777ca9ee73ea156210c04e9d4cc178395philippe#     endif
1854cace66777ca9ee73ea156210c04e9d4cc178395philippe   }
1864cace66777ca9ee73ea156210c04e9d4cc178395philippe   SymAVMAs;
1874cace66777ca9ee73ea156210c04e9d4cc178395philippe
1884cace66777ca9ee73ea156210c04e9d4cc178395philippe#if defined(VGA_ppc64be) || defined(VGA_ppc64le)
1894cace66777ca9ee73ea156210c04e9d4cc178395philippe# define GET_TOCPTR_AVMA(_sym_avmas)          (_sym_avmas).tocptr
1904cace66777ca9ee73ea156210c04e9d4cc178395philippe# define SET_TOCPTR_AVMA(_sym_avmas, _val)    (_sym_avmas).tocptr = (_val)
1914cace66777ca9ee73ea156210c04e9d4cc178395philippe#else
1924cace66777ca9ee73ea156210c04e9d4cc178395philippe# define GET_TOCPTR_AVMA(_sym_avmas)          ((Addr)0)
1934cace66777ca9ee73ea156210c04e9d4cc178395philippe# define SET_TOCPTR_AVMA(_sym_avmas, _val)    /* */
1944cace66777ca9ee73ea156210c04e9d4cc178395philippe#endif
1954cace66777ca9ee73ea156210c04e9d4cc178395philippe
1964cace66777ca9ee73ea156210c04e9d4cc178395philippe#if defined(VGA_ppc64le)
1974cace66777ca9ee73ea156210c04e9d4cc178395philippe# define GET_LOCAL_EP_AVMA(_sym_avmas)        (_sym_avmas).local_ep
1984cace66777ca9ee73ea156210c04e9d4cc178395philippe# define SET_LOCAL_EP_AVMA(_sym_avmas, _val)  (_sym_avmas).local_ep = (_val)
1994cace66777ca9ee73ea156210c04e9d4cc178395philippe#else
2004cace66777ca9ee73ea156210c04e9d4cc178395philippe# define GET_LOCAL_EP_AVMA(_sym_avmas)        ((Addr)0)
2014cace66777ca9ee73ea156210c04e9d4cc178395philippe# define SET_LOCAL_EP_AVMA(_sym_avmas, _val)  /* */
2024cace66777ca9ee73ea156210c04e9d4cc178395philippe#endif
2034cace66777ca9ee73ea156210c04e9d4cc178395philippe
2044cace66777ca9ee73ea156210c04e9d4cc178395philippe/* Functions for traversing all the symbols in a DebugInfo.  _howmany
2054cace66777ca9ee73ea156210c04e9d4cc178395philippe   tells how many symbol table entries there are.  _getidx retrieves
2064cace66777ca9ee73ea156210c04e9d4cc178395philippe   the n'th entry, for n in 0 .. _howmany-1.  You may not modify the
2074cace66777ca9ee73ea156210c04e9d4cc178395philippe   function names thereby acquired; if you want to do so, first strdup
2084cace66777ca9ee73ea156210c04e9d4cc178395philippe   them.  The primary name is returned in *pri_name, and *sec_names is
2094cace66777ca9ee73ea156210c04e9d4cc178395philippe   set either to NULL or to a NULL terminated vector containing
2104cace66777ca9ee73ea156210c04e9d4cc178395philippe   pointers to the secondary names. */
2114cace66777ca9ee73ea156210c04e9d4cc178395philippeInt  VG_(DebugInfo_syms_howmany) ( const DebugInfo *di );
2124cace66777ca9ee73ea156210c04e9d4cc178395philippevoid VG_(DebugInfo_syms_getidx)  ( const DebugInfo *di,
2134cace66777ca9ee73ea156210c04e9d4cc178395philippe                                   Int idx,
2144cace66777ca9ee73ea156210c04e9d4cc178395philippe                                   /*OUT*/SymAVMAs* ad,
2154cace66777ca9ee73ea156210c04e9d4cc178395philippe                                   /*OUT*/UInt*     size,
2161ef70c6f00ab1b50d1936f77037e9923d8ed8c59florian                                   /*OUT*/const HChar**   pri_name,
2171ef70c6f00ab1b50d1936f77037e9923d8ed8c59florian                                   /*OUT*/const HChar***  sec_names,
2184cace66777ca9ee73ea156210c04e9d4cc178395philippe                                   /*OUT*/Bool*     isText,
2194cace66777ca9ee73ea156210c04e9d4cc178395philippe                                   /*OUT*/Bool*     isIFunc );
22040c186c6efbd043e7c8cfc243b0fff1157162184sewardj/* ppc64-linux only: find the TOC pointer (R2 value) that should be in
22140c186c6efbd043e7c8cfc243b0fff1157162184sewardj   force at the entry point address of the function containing
22240c186c6efbd043e7c8cfc243b0fff1157162184sewardj   guest_code_addr.  Returns 0 if not known. */
22340c186c6efbd043e7c8cfc243b0fff1157162184sewardjextern Addr VG_(get_tocptr) ( Addr guest_code_addr );
224ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn
2254cace66777ca9ee73ea156210c04e9d4cc178395philippe/* Map a function name to its SymAVMAs.  Is done by
226811469c938e0716675b6d01c50a5eefb27cf3fccsewardj   sequential search of all symbol tables, so is very slow.  To
227811469c938e0716675b6d01c50a5eefb27cf3fccsewardj   mitigate the worst performance effects, you may specify a soname
228811469c938e0716675b6d01c50a5eefb27cf3fccsewardj   pattern, and only objects matching that pattern are searched.
229811469c938e0716675b6d01c50a5eefb27cf3fccsewardj   Therefore specify "*" to search all the objects.  On TOC-afflicted
230811469c938e0716675b6d01c50a5eefb27cf3fccsewardj   platforms, a symbol is deemed to be found only if it has a nonzero
231811469c938e0716675b6d01c50a5eefb27cf3fccsewardj   TOC pointer.  */
232811469c938e0716675b6d01c50a5eefb27cf3fccsewardjextern
233518850bf0da07ed3e2244e307268ae0fd80e93a8florianBool VG_(lookup_symbol_SLOW)(const HChar* sopatt, const HChar* name,
234518850bf0da07ed3e2244e307268ae0fd80e93a8florian                             SymAVMAs* avmas);
235811469c938e0716675b6d01c50a5eefb27cf3fccsewardj
236ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn#endif   // __PUB_CORE_DEBUGINFO_H
237ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn
238ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn/*--------------------------------------------------------------------*/
239ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn/*--- end                                                          ---*/
240ea27e4627518665dd6c81213c0ba1f7ff0218e1anjn/*--------------------------------------------------------------------*/
241