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