libdwfl.h revision cc6695e2684ce93cdf8bd2da63d55d2cf49ff076
120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Interfaces for libdwfl. 220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Copyright (C) 2005, 2006, 2007, 2008 Red Hat, Inc. 320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner This file is part of Red Hat elfutils. 420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Red Hat elfutils is free software; you can redistribute it and/or modify 620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner it under the terms of the GNU General Public License as published by the 720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Free Software Foundation; version 2 of the License. 820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Red Hat elfutils is distributed in the hope that it will be useful, but 1020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner WITHOUT ANY WARRANTY; without even the implied warranty of 1120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner General Public License for more details. 1320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 1420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner You should have received a copy of the GNU General Public License along 1520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner with Red Hat elfutils; if not, write to the Free Software Foundation, 1620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. 1720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 1820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner In addition, as a special exception, Red Hat, Inc. gives You the 1920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner additional right to link the code of Red Hat elfutils with code licensed 2020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner under any Open Source Initiative certified open source license 2120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner (http://www.opensource.org/licenses/index.php) which requires the 2220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner distribution of source code with any binary distribution and to 2320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner distribute linked combinations of the two. Non-GPL Code permitted under 2420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner this exception must only link to the code of Red Hat elfutils through 2520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner those well defined interfaces identified in the file named EXCEPTION 2620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner found in the source code files (the "Approved Interfaces"). The files 2720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner of Non-GPL Code may instantiate templates or use macros or inline 2820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner functions from the Approved Interfaces without causing the resulting 2920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner work to be covered by the GNU General Public License. Only Red Hat, 3020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Inc. may make changes or additions to the list of Approved Interfaces. 3120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Red Hat's grant of this exception is conditioned upon your not adding 3220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner any new exceptions. If you wish to add a new Approved Interface or 3320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner exception, please contact Red Hat. You must obey the GNU General Public 3420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner License in all respects for all of the Red Hat elfutils code and other 3520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner code used in conjunction with Red Hat elfutils except the Non-GPL Code 3620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner covered by this exception. If you modify this file, you may extend this 3720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner exception to your version of the file, but you are not obligated to do 3820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner so. If you do not wish to provide this exception without modification, 3920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner you must delete this exception statement from your version and license 4020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner this file solely under the GPL without exception. 4120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 4220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Red Hat elfutils is an included package of the Open Invention Network. 4320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner An included package of the Open Invention Network is a package for which 4420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Open Invention Network licensees cross-license their patents. No patent 4520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner license is granted, either expressly or impliedly, by designation as an 4620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner included package. Should you wish to participate in the Open Invention 4720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Network licensing program, please visit www.openinventionnetwork.com 4820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner <http://www.openinventionnetwork.com>. */ 4920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 5020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner#ifndef _LIBDWFL_H 5120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner#define _LIBDWFL_H 1 5220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 5320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner#include "libdw.h" 5420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner#include <stdio.h> 5520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 5620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Handle for a session using the library. */ 5720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnertypedef struct Dwfl Dwfl; 5820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 5920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Handle for a module. */ 6020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnertypedef struct Dwfl_Module Dwfl_Module; 6120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 6220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Handle describing a line record. */ 6320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnertypedef struct Dwfl_Line Dwfl_Line; 6420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 6520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Callbacks. */ 6620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnertypedef struct 6720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner{ 6820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner int (*find_elf) (Dwfl_Module *mod, void **userdata, 6920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *modname, Dwarf_Addr base, 7020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner char **file_name, Elf **elfp); 7120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 7220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner int (*find_debuginfo) (Dwfl_Module *mod, void **userdata, 7320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *modname, Dwarf_Addr base, 7420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *file_name, 7520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *debuglink_file, GElf_Word debuglink_crc, 7620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner char **debuginfo_file_name); 7720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 7820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner /* Fill *ADDR with the loaded address of the section called SECNAME in 7920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner the given module. Use (Dwarf_Addr) -1 if this section is omitted from 8020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner accessible memory. This is called exactly once for each SHF_ALLOC 8120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner section that relocations affecting DWARF data refer to, so it can 8220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner easily be used to collect state about the sections referenced. */ 8320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner int (*section_address) (Dwfl_Module *mod, void **userdata, 8420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *modname, Dwarf_Addr base, 8520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *secname, 8620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner GElf_Word shndx, const GElf_Shdr *shdr, 8720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Dwarf_Addr *addr); 8820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 8920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner char **debuginfo_path; /* See dwfl_standard_find_debuginfo. */ 9020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner} Dwfl_Callbacks; 9120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 9220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 9320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner#ifdef __cplusplus 9420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern "C" { 9520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner#endif 9620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 9720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Start a new session with the library. */ 9820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwfl *dwfl_begin (const Dwfl_Callbacks *callbacks) 9920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner __nonnull_attribute__ (1); 10020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 10120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 10220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* End a session. */ 10320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern void dwfl_end (Dwfl *); 10420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 10520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Return implementation's version string suitable for printing. */ 10620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern const char *dwfl_version (Dwfl *); 10720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 10820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Return error code of last failing function call. This value is kept 10920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner separately for each thread. */ 11020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_errno (void); 11120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 11220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Return error string for ERROR. If ERROR is zero, return error string 11320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner for most recent error or NULL if none occurred. If ERROR is -1 the 11420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner behaviour is similar to the last case except that not NULL but a legal 11520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner string is returned. */ 11620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern const char *dwfl_errmsg (int err); 11720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 11820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 11920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Start reporting the current set of segments and modules to the library. 12020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner All existing segments are wiped. Existing modules are marked to be 12120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner deleted, and will not be found via dwfl_addrmodule et al if they are not 12220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner re-reported before dwfl_report_end is called. */ 12320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern void dwfl_report_begin (Dwfl *dwfl); 12420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 12520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Report that segment NDX begins at PHDR->p_vaddr + BIAS. 12620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner If NDX is < 0, the value succeeding the last call's NDX 12720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner is used instead (zero on the first call). 12820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 12920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner If nonzero, the smallest PHDR->p_align value seen sets the 13020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner effective page size for the address space DWFL describes. 13120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner This is the granularity at which reported module boundary 13220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner addresses will be considered to fall in or out of a segment. 13320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 13420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Returns -1 for errors, or NDX (or its assigned replacement) on success. 13520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 13620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner When NDX is the value succeeding the last call's NDX (or is implicitly 13720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner so as above), IDENT is nonnull and matches the value in the last call, 13820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner and the PHDR and BIAS values reflect a segment that would be contiguous, 13920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner in both memory and file, with the last segment reported, then this 14020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner segment may be coalesced internally with preceding segments. When given 14120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner an address inside this segment, dwfl_addrsegment may return the NDX of a 14220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner preceding contiguous segment. To prevent coalesced segments, always 14320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner pass a null pointer for IDENT. 14420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 14520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner The values passed are not stored (except to track coalescence). 14620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner The only information that can be extracted from DWFL later is the 14720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner mapping of an address to a segment index that starts at or below 14820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner it. Reporting segments at all is optional. Its only benefit to 14920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner the caller is to offer this quick lookup via dwfl_addrsegment, 15020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner or use other segment-based calls. */ 15120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_report_segment (Dwfl *dwfl, int ndx, 15220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const GElf_Phdr *phdr, GElf_Addr bias, 15320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const void *ident); 15420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 15520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Report that a module called NAME spans addresses [START, END). 15620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Returns the module handle, either existing or newly allocated, 15720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner or returns a null pointer for an allocation error. */ 15820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwfl_Module *dwfl_report_module (Dwfl *dwfl, const char *name, 15920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Dwarf_Addr start, Dwarf_Addr end); 16020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 16120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Report a module with start and end addresses computed from the ELF 16220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner program headers in the given file, plus BASE. For an ET_REL file, 16320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner does a simple absolute section layout starting at BASE. 16420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner FD may be -1 to open FILE_NAME. On success, FD is consumed by the 16520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner library, and the `find_elf' callback will not be used for this module. */ 16620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwfl_Module *dwfl_report_elf (Dwfl *dwfl, const char *name, 16720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *file_name, int fd, 16820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner GElf_Addr base); 16920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 17020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Similar, but report the module for offline use. All ET_EXEC files 17120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner being reported must be reported before any relocatable objects. 17220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner If this is used, dwfl_report_module and dwfl_report_elf may not be 17320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner used in the same reporting session. */ 17420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwfl_Module *dwfl_report_offline (Dwfl *dwfl, const char *name, 17520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *file_name, int fd); 17620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 17720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 17820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Finish reporting the current set of modules to the library. 17920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner If REMOVED is not null, it's called for each module that 18020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner existed before but was not included in the current report. 18120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Returns a nonzero return value from the callback. 18220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner The callback may call dwfl_report_module; doing so with the 18320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner details of the module being removed prevents its removal. 18420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner DWFL cannot be used until this function has returned zero. */ 18520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_report_end (Dwfl *dwfl, 18620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner int (*removed) (Dwfl_Module *, void *, 18720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *, Dwarf_Addr, 18820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner void *arg), 18920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner void *arg); 19020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 19120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Start reporting additional modules to the library. No calls but 19220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner dwfl_report_* can be made on DWFL until dwfl_report_end is called. 19320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner This is like dwfl_report_begin, but all the old modules are kept on. 19420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner More dwfl_report_* calls can follow to add more modules. 19520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner When dwfl_report_end is called, no old modules will be removed. */ 19620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern void dwfl_report_begin_add (Dwfl *dwfl); 19720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 19820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 19920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Return the name of the module, and for each non-null argument store 20020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner interesting details: *USERDATA is a location for storing your own 20120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner pointer, **USERDATA is initially null; *START and *END give the address 20220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner range covered by the module; *DWBIAS is the address bias for debugging 20320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner information, and *SYMBIAS for symbol table entries (either is -1 if not 20420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner yet accessed); *MAINFILE is the name of the ELF file, and *DEBUGFILE the 20520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner name of the debuginfo file (might be equal to *MAINFILE; either is null 20620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner if not yet accessed). */ 20720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern const char *dwfl_module_info (Dwfl_Module *mod, void ***userdata, 20820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Dwarf_Addr *start, Dwarf_Addr *end, 20920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Dwarf_Addr *dwbias, Dwarf_Addr *symbias, 21020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char **mainfile, 21120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char **debugfile); 21220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 21320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Iterate through the modules, starting the walk with OFFSET == 0. 21420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Calls *CALLBACK for each module as long as it returns DWARF_CB_OK. 21520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner When *CALLBACK returns another value, the walk stops and the 21620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner return value can be passed as OFFSET to resume it. Returns 0 when 21720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner there are no more modules, or -1 for errors. */ 21820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern ptrdiff_t dwfl_getmodules (Dwfl *dwfl, 21920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner int (*callback) (Dwfl_Module *, void **, 22020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *, Dwarf_Addr, 22120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner void *arg), 22220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner void *arg, 22320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner ptrdiff_t offset); 22420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 22520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Find the module containing the given address. */ 22620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwfl_Module *dwfl_addrmodule (Dwfl *dwfl, Dwarf_Addr address); 22720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 22820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Find the segment, if any, and module, if any, containing ADDRESS. 22920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Returns a segment index returned by dwfl_report_segment, or -1 23020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner if no segment matches the address. Regardless of the return value, 23120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner *MOD is always set to the module containing ADDRESS, or to null. */ 23220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_addrsegment (Dwfl *dwfl, Dwarf_Addr address, Dwfl_Module **mod); 23320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 23420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 23520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 23620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Report the known build ID bits associated with a module. 23720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner If VADDR is nonzero, it gives the absolute address where those 23820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner bits are found within the module. This can be called at any 23920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner time, but is usually used immediately after dwfl_report_module. 24020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Once the module's main ELF file is opened, the ID note found 24120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner there takes precedence and cannot be changed. */ 24220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_module_report_build_id (Dwfl_Module *mod, 24320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const unsigned char *bits, size_t len, 24420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner GElf_Addr vaddr) 24520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner __nonnull_attribute__ (2); 24620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 24720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Extract the build ID bits associated with a module. 24820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Returns -1 for errors, 0 if no ID is known, or the number of ID bytes. 24920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner When an ID is found, *BITS points to it; *VADDR is the absolute address 25020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner at which the ID bits are found within the module, or 0 if unknown. 25120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 25220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner This returns 0 when the module's main ELF file has not yet been loaded 25320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner and its build ID bits were not reported. To ensure the ID is always 25420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner returned when determinable, call dwfl_module_getelf first. */ 25520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_module_build_id (Dwfl_Module *mod, 25620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const unsigned char **bits, GElf_Addr *vaddr) 25720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner __nonnull_attribute__ (2, 3); 25820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 25920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 26020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/*** Standard callbacks ***/ 26120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 26220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* These standard find_elf and find_debuginfo callbacks are 26320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner controlled by a string specifying directories to look in. 26420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner If `debuginfo_path' is set in the Dwfl_Callbacks structure 26520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner and the char * it points to is not null, that supplies the 26620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner string. Otherwise a default path is used. 26720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 26820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner If the first character of the string is + or - that enables or 26920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner disables CRC32 checksum validation when it's necessary. The 27020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner remainder of the string is composed of elements separated by 27120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner colons. Each element can start with + or - to override the 27220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner global checksum behavior. This flag is never relevant when 27320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner working with build IDs, but it's always parsed in the path 27420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner string. The remainder of the element indicates a directory. 27520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 27620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Searches by build ID consult only the elements naming absolute 27720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner directory paths. They look under those directories for a link 27820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner named ".build-id/xx/yy" or ".build-id/xx/yy.debug", where "xxyy" 27920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner is the lower-case hexadecimal representation of the ID bytes. 28020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 28120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner In searches for debuginfo by name, if the remainder of the 28220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner element is empty, the directory containing the main file is 28320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner tried; if it's an absolute path name, the absolute directory path 28420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner containing the main file is taken as a subdirectory of this path; 28520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner a relative path name is taken as a subdirectory of the directory 28620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner containing the main file. Hence for /bin/ls, the default string 28720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner ":.debug:/usr/lib/debug" says to look in /bin, then /bin/.debug, 28820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner then /usr/lib/debug/bin, for the file name in the .gnu_debuglink 28920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner section (or "ls.debug" if none was found). */ 29020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 29120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Standard find_elf callback function working solely on build ID. 29220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner This can be tried first by any find_elf callback, to use the 29320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner bits passed to dwfl_module_report_build_id, if any. */ 29420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_build_id_find_elf (Dwfl_Module *, void **, 29520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *, Dwarf_Addr, 29620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner char **, Elf **); 29720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 29820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Standard find_debuginfo callback function working solely on build ID. 29920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner This can be tried first by any find_debuginfo callback, 30020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner to use the build ID bits from the main file when present. */ 30120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_build_id_find_debuginfo (Dwfl_Module *, void **, 30220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *, Dwarf_Addr, 30320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *, const char *, 30420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner GElf_Word, char **); 30520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 30620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Standard find_debuginfo callback function. 30720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner If a build ID is available, this tries first to use that. 30820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner If there is no build ID or no valid debuginfo found by ID, 30920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner it searches the debuginfo path by name, as described above. 31020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Any file found in the path is validated by build ID if possible, 31120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner or else by CRC32 checksum if enabled, and skipped if it does not match. */ 31220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_standard_find_debuginfo (Dwfl_Module *, void **, 31320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *, Dwarf_Addr, 31420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *, const char *, 31520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner GElf_Word, char **); 31620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 31720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 31820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* This callback must be used when using dwfl_offline_* to report modules, 31920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner if ET_REL is to be supported. */ 32020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_offline_section_address (Dwfl_Module *, void **, 32120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *, Dwarf_Addr, 32220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *, GElf_Word, 32320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const GElf_Shdr *, 32420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Dwarf_Addr *addr); 32520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 32620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 32720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Callbacks for working with kernel modules in the running Linux kernel. */ 32820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_linux_kernel_find_elf (Dwfl_Module *, void **, 32920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *, Dwarf_Addr, 33020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner char **, Elf **); 33120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_linux_kernel_module_section_address (Dwfl_Module *, void **, 33220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *, Dwarf_Addr, 33320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *, GElf_Word, 33420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const GElf_Shdr *, 33520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Dwarf_Addr *addr); 33620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 33720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Call dwfl_report_elf for the running Linux kernel. 33820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Returns zero on success, -1 if dwfl_report_module failed, 33920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner or an errno code if opening the kernel binary failed. */ 34020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_linux_kernel_report_kernel (Dwfl *dwfl); 34120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 34220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Call dwfl_report_module for each kernel module in the running Linux kernel. 34320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Returns zero on success, -1 if dwfl_report_module failed, 34420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner or an errno code if reading the list of modules failed. */ 34520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_linux_kernel_report_modules (Dwfl *dwfl); 34620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 34720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Report a kernel and its modules found on disk, for offline use. 34820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner If RELEASE starts with '/', it names a directory to look in; 34920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner if not, it names a directory to find under /lib/modules/; 35020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner if null, /lib/modules/`uname -r` is used. 35120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Returns zero on success, -1 if dwfl_report_module failed, 35220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner or an errno code if finding the files on disk failed. 35320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 35420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner If PREDICATE is not null, it is called with each module to be reported; 35520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner its arguments are the module name, and the ELF file name or null if unknown, 35620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner and its return value should be zero to skip the module, one to report it, 35720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner or -1 to cause the call to fail and return errno. */ 35820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_linux_kernel_report_offline (Dwfl *dwfl, const char *release, 35920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner int (*predicate) (const char *, 36020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *)); 36120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 36220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 36320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Call dwfl_report_module for each file mapped into the address space of PID. 36420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Returns zero on success, -1 if dwfl_report_module failed, 36520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner or an errno code if opening the kernel binary failed. */ 36620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_linux_proc_report (Dwfl *dwfl, pid_t pid); 36720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 36820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Similar, but reads an input stream in the format of Linux /proc/PID/maps 36920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner files giving module layout, not the file for a live process. */ 37020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_linux_proc_maps_report (Dwfl *dwfl, FILE *); 37120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 37220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Trivial find_elf callback for use with dwfl_linux_proc_report. 37320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner This uses the module name as a file name directly and tries to open it 37420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner if it begin with a slash, or handles the magic string "[vdso]". */ 37520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_linux_proc_find_elf (Dwfl_Module *mod, void **userdata, 37620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *module_name, Dwarf_Addr base, 37720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner char **file_name, Elf **); 37820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 37920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Standard argument parsing for using a standard callback set. */ 38020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerstruct argp; 38120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern const struct argp *dwfl_standard_argp (void) __attribute__ ((const)); 38220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 38320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 38420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/*** Relocation of addresses from Dwfl ***/ 38520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 38620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Return the number of relocatable bases associated with the module, 38720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner which is zero for ET_EXEC and one for ET_DYN. Returns -1 for errors. */ 38820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_module_relocations (Dwfl_Module *mod); 38920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 39020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Return the relocation base index associated with the *ADDRESS location, 39120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner and adjust *ADDRESS to be an offset relative to that base. 39220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Returns -1 for errors. */ 39320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_module_relocate_address (Dwfl_Module *mod, 39420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Dwarf_Addr *address); 39520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 39620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Return the ELF section name for the given relocation base index; 39720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner if SHNDXP is not null, set *SHNDXP to the ELF section index. 39820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner For ET_DYN, returns "" and sets *SHNDXP to SHN_ABS; the relocation 39920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner base is the runtime start address reported for the module. 40020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Returns null for errors. */ 40120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern const char *dwfl_module_relocation_info (Dwfl_Module *mod, 40220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner unsigned int idx, 40320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner GElf_Word *shndxp); 40420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 40520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Validate that ADDRESS and ADDRESS+OFFSET lie in a known module 40620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner and both within the same contiguous region for relocation purposes. 40720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Returns zero for success and -1 for errors. */ 40820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_validate_address (Dwfl *dwfl, 40920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Dwarf_Addr address, Dwarf_Sword offset); 41020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 41120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 41220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/*** ELF access functions ***/ 41320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 41420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Fetch the module main ELF file (where the allocated sections 41520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner are found) for use with libelf. If successful, fills in *BIAS 41620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner with the difference between addresses within the loaded module 41720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner and those in symbol tables or Dwarf information referring to it. */ 41820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Elf *dwfl_module_getelf (Dwfl_Module *, GElf_Addr *bias); 41920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 42020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Return the number of symbols in the module's symbol table, 42120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner or -1 for errors. */ 42220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_module_getsymtab (Dwfl_Module *mod); 42320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 42420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Fetch one entry from the module's symbol table. On errors, returns 42520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner NULL. If successful, fills in *SYM and returns the string for st_name. 42620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner This works like gelf_getsym except that st_value is always adjusted 42720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner to an absolute value based on the module's location. If SHNDXP is 42820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner non-null, it's set with the section index (whether from st_shndx or 42920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner extended index table). */ 43020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern const char *dwfl_module_getsym (Dwfl_Module *mod, int ndx, 43120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner GElf_Sym *sym, GElf_Word *shndxp) 43220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner __nonnull_attribute__ (3); 43320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 43420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Find the symbol that ADDRESS lies inside, and return its name. */ 43520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern const char *dwfl_module_addrname (Dwfl_Module *mod, GElf_Addr address); 43620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 43720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Find the symbol that ADDRESS lies inside, and return detailed 43820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner information as for dwfl_module_getsym (above). */ 43920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern const char *dwfl_module_addrsym (Dwfl_Module *mod, GElf_Addr address, 44020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner GElf_Sym *sym, GElf_Word *shndxp) 44120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner __nonnull_attribute__ (3); 44220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 44320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Find the ELF section that *ADDRESS lies inside and return it. 44420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner On success, adjusts *ADDRESS to be relative to the section, 44520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner and sets *BIAS to the difference between addresses used in 44620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner the returned section's headers and run-time addresses. */ 44720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Elf_Scn *dwfl_module_address_section (Dwfl_Module *mod, 44820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Dwarf_Addr *address, 44920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Dwarf_Addr *bias) 45020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner __nonnull_attribute__ (2, 3); 45120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 45220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 45320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/*** Dwarf access functions ***/ 45420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 45520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Fetch the module's debug information for use with libdw. 45620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner If successful, fills in *BIAS with the difference between 45720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner addresses within the loaded module and those to use with libdw. */ 45820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwarf *dwfl_module_getdwarf (Dwfl_Module *, Dwarf_Addr *bias) 45920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner __nonnull_attribute__ (2); 46020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 46120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Get the libdw handle for each module. */ 46220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern ptrdiff_t dwfl_getdwarf (Dwfl *, 46320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner int (*callback) (Dwfl_Module *, void **, 46420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *, Dwarf_Addr, 46520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Dwarf *, Dwarf_Addr, void *), 46620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner void *arg, ptrdiff_t offset); 46720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 46820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Look up the module containing ADDR and return its debugging information, 46920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner loading it if necessary. */ 47020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwarf *dwfl_addrdwarf (Dwfl *dwfl, Dwarf_Addr addr, Dwarf_Addr *bias) 47120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner __nonnull_attribute__ (3); 47220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 47320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 47420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Find the CU containing ADDR and return its DIE. */ 47520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwarf_Die *dwfl_addrdie (Dwfl *dwfl, Dwarf_Addr addr, Dwarf_Addr *bias) 47620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner __nonnull_attribute__ (3); 47720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwarf_Die *dwfl_module_addrdie (Dwfl_Module *mod, 47820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Dwarf_Addr addr, Dwarf_Addr *bias) 47920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner __nonnull_attribute__ (3); 48020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 48120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Iterate through the CUs, start with null for LASTCU. */ 48220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwarf_Die *dwfl_nextcu (Dwfl *dwfl, Dwarf_Die *lastcu, Dwarf_Addr *bias) 48320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner __nonnull_attribute__ (3); 48420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwarf_Die *dwfl_module_nextcu (Dwfl_Module *mod, 48520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Dwarf_Die *lastcu, Dwarf_Addr *bias) 48620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner __nonnull_attribute__ (3); 48720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 48820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Return the module containing the CU DIE. */ 48920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwfl_Module *dwfl_cumodule (Dwarf_Die *cudie); 49020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 49120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 49220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Cache the source line information fo the CU and return the 49320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner number of Dwfl_Line entries it has. */ 49420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_getsrclines (Dwarf_Die *cudie, size_t *nlines); 49520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 49620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Access one line number entry within the CU. */ 49720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwfl_Line *dwfl_onesrcline (Dwarf_Die *cudie, size_t idx); 49820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 49920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Get source for address. */ 50020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwfl_Line *dwfl_module_getsrc (Dwfl_Module *mod, Dwarf_Addr addr); 50120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwfl_Line *dwfl_getsrc (Dwfl *dwfl, Dwarf_Addr addr); 50220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 50320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Get address for source. */ 50420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_module_getsrc_file (Dwfl_Module *mod, 50520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *fname, int lineno, int column, 50620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Dwfl_Line ***srcsp, size_t *nsrcs); 50720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 50820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Return the module containing this line record. */ 50920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwfl_Module *dwfl_linemodule (Dwfl_Line *line); 51020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 51120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Return the CU containing this line record. */ 51220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern Dwarf_Die *dwfl_linecu (Dwfl_Line *line); 51320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 51420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Return the source file name and fill in other information. 51520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Arguments may be null for unneeded fields. */ 51620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern const char *dwfl_lineinfo (Dwfl_Line *line, Dwarf_Addr *addr, 51720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner int *linep, int *colp, 51820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Dwarf_Word *mtime, Dwarf_Word *length); 51920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 52020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Return the compilation directory (AT_comp_dir) from this line's CU. */ 52120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern const char *dwfl_line_comp_dir (Dwfl_Line *line); 52220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 52320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 52420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/*** Machine backend access functions ***/ 52520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 52620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Return location expression to find return value given a 52720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner DW_TAG_subprogram, DW_TAG_subroutine_type, or similar DIE describing 52820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner function itself (whose DW_AT_type attribute describes its return type). 52920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner The given DIE must come from the given module. Returns -1 for errors. 53020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Returns zero if the function has no return value (e.g. "void" in C). 53120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Otherwise, *LOCOPS gets a location expression to find the return value, 53220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner and returns the number of operations in the expression. The pointer is 53320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner permanently allocated at least as long as the module is live. */ 53420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_module_return_value_location (Dwfl_Module *mod, 53520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner Dwarf_Die *functypedie, 53620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const Dwarf_Op **locops); 53720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 53820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner/* Enumerate the DWARF register numbers and their names. 53920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner For each register, CALLBACK gets its DWARF number, a string describing 54020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner the register set (such as "integer" or "FPU"), a prefix used in 54120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner assembler syntax (such as "%" or "$", may be ""), and the name for the 54220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner register (contains identifier characters only, possibly all digits). 54320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner The REGNAME string is valid only during the callback. */ 54420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turnerextern int dwfl_module_register_names (Dwfl_Module *mod, 54520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner int (*callback) (void *arg, 54620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner int regno, 54720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *setname, 54820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *prefix, 54920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner const char *regname, 55020777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner int bits, int type), 55120777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner void *arg); 55220777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 55320777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 55420777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner#ifdef __cplusplus 55520777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner} 55620777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner#endif 55720777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner 55820777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner#endif /* libdwfl.h */ 55920777798f5184ef65e59bb5eb91ac9e839d7afebDavid 'Digit' Turner