libdwflP.h revision 4959bf89d92b59ba72bea5786d7b3f9b5564f750
1b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Internal definitions for libdwfl. 2b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Copyright (C) 2005 Red Hat, Inc. 3b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 4b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper This program is Open Source software; you can redistribute it and/or 5b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper modify it under the terms of the Open Software License version 1.0 as 6b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper published by the Open Source Initiative. 7b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 8b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper You should have received a copy of the Open Software License along 9b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper with this program; if not, you may obtain a copy of the Open Software 10b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper License version 1.0 from http://www.opensource.org/licenses/osl.php or 11b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper by writing the Open Source Initiative c/o Lawrence Rosen, Esq., 12b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 3001 King Ranch Road, Ukiah, CA 95482. */ 13b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 14b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#ifndef _LIBDWFLP_H 15b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#define _LIBDWFLP_H 1 16b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 17b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#ifndef PACKAGE 18b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper# include <config.h> 19b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#endif 20b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <libdwfl.h> 21b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <libebl.h> 22b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <assert.h> 23b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <errno.h> 24b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <stdbool.h> 25b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <stdlib.h> 26b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <string.h> 27b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 284959bf89d92b59ba72bea5786d7b3f9b5564f750Roland McGrath#include "../libdw/libdwP.h" /* We need its INTDECLs. */ 294959bf89d92b59ba72bea5786d7b3f9b5564f750Roland McGrath 30b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* gettext helper macros. */ 31b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#define _(Str) dgettext ("elfutils", Str) 32b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 33b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#define DWFL_ERRORS \ 34b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (NOERROR, N_("no error")) \ 35b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (UNKNOWN_ERROR, N_("unknown error")) \ 36b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (NOMEM, N_("out of memory")) \ 37b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (ERRNO, N_("See errno")) \ 38b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (LIBELF, N_("See elf_errno")) \ 39b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (LIBDW, N_("See dwarf_errno")) \ 40b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (LIBEBL, N_("See ebl_errno (XXX missing)")) \ 41b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (NOREL, N_("Callbacks missing for ET_REL file")) \ 42b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (BADRELTYPE, N_("Unsupported relocation type")) \ 43b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (BADRELOFF, N_("r_offset is bogus")) \ 44b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (BADSTROFF, N_("offset out of range")) \ 45b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (RELUNDEF, N_("relocation refers to undefined symbol")) \ 46b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (CB, N_("Callback returned failure")) \ 47b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (NO_DWARF, N_("No DWARF information found")) \ 48b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (NO_SYMTAB, N_("No symbol table found")) \ 49b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (NO_PHDR, N_("No ELF program headers")) \ 50b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (OVERLAP, N_("address range overlaps an existing module")) \ 51b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (ADDR_OUTOFRANGE, N_("address out of range")) \ 52b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (NO_MATCH, N_("no matching address range")) \ 53b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (TRUNCATED, N_("image truncated")) \ 54b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWFL_ERROR (BADELF, N_("not a valid ELF file")) 55b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 56b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#define DWFL_ERROR(name, text) DWFL_E_##name, 57b08d5a8fb42f4586d756068065186b5af7e48daUlrich Dreppertypedef enum { DWFL_ERRORS DWFL_E_NUM } Dwfl_Error; 58b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#undef DWFL_ERROR 59b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 60b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#define OTHER_ERROR(name) ((unsigned int) DWFL_E_##name << 16) 61b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#define DWFL_E(name, errno) (OTHER_ERROR (name) | (errno)) 62b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 63b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern int __libdwfl_canon_error (Dwfl_Error error) internal_function; 64b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern void __libdwfl_seterrno (Dwfl_Error error) internal_function; 65b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 66b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstruct Dwfl 67b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{ 68b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper const Dwfl_Callbacks *callbacks; 69b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 70b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwfl_Module *modulelist; /* List in order used by full traversals. */ 71b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 72b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwfl_Module **modules; 73b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper size_t nmodules; 74b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper}; 75b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 76b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstruct dwfl_file 77b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{ 78b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper char *name; 79b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper int fd; 80b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 81b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Elf *elf; 82b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper GElf_Addr bias; /* Actual load address - p_vaddr. */ 83b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper}; 84b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 85b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstruct Dwfl_Module 86b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{ 87b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwfl *dwfl; 88b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct Dwfl_Module *next; /* Link on Dwfl.moduelist. */ 89b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 90b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper void *userdata; 91b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 92b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper char *name; /* Iterator name for this module. */ 93b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper GElf_Addr low_addr, high_addr; 94b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 95b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct dwfl_file main, debug; 96b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Ebl *ebl; 97b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper bool isrel; /* True iff this is an ET_REL file. */ 98b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwfl_Error elferr; /* Previous failure to open main file. */ 99b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 100b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct dwfl_file *symfile; /* Either main or debug. */ 101b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Elf_Data *symdata; /* Data in the ELF symbol table section. */ 102b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper size_t syments; /* sh_size / sh_entsize of that section. */ 103b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper const Elf_Data *symstrdata; /* Data for its string table. */ 104b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Elf_Data *symxndxdata; /* Data in the extended section index table. */ 105b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwfl_Error symerr; /* Previous failure to load symbols. */ 106b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 107b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf *dw; /* libdw handle for its debugging info. */ 108b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwfl_Error dwerr; /* Previous failure to load info. */ 109b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 110b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* Known CU's in this module. */ 111b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct dwfl_cu *first_cu, **cu; 112b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int ncu; 113b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 114b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper void *lazy_cu_root; /* Table indexed by Dwarf_Off of CU. */ 115b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int lazycu; /* Possible users, deleted when none left. */ 116b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 117b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct dwfl_arange *aranges; /* Mapping of addresses in module to CUs. */ 118b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int naranges; 119b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 120b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper bool gc; /* Mark/sweep flag. */ 121b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper}; 122b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 123b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 124b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 125b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Information cached about each CU in Dwfl_Module.dw. */ 126b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstruct dwfl_cu 127b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{ 128b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* This caches libdw information about the CU. It's also the 129b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper address passed back to users, so we take advantage of the 130b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper fact that it's placed first to cast back. */ 131b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Die die; 132b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 133b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwfl_Module *mod; /* Pointer back to containing module. */ 134b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 135b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct dwfl_cu *next; /* CU immediately following in the file. */ 136b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 137b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct Dwfl_Lines *lines; 138b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper}; 139b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 140b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstruct Dwfl_Lines 141b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{ 142b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct dwfl_cu *cu; 143b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 144b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* This is what the opaque Dwfl_Line * pointers we pass to users are. 145b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper We need to recover pointers to our struct dwfl_cu and a record in 146b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper libdw's Dwarf_Line table. To minimize the memory used in addition 147b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper to libdw's Dwarf_Lines buffer, we just point to our own index in 148b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper this table, and have one pointer back to the CU. The indices here 149b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper match those in libdw's Dwarf_CU.lines->info table. */ 150b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct Dwfl_Line 151b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 152b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int idx; /* My index in the dwfl_cu.lines table. */ 153b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } idx[0]; 154b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper}; 155b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 156b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstatic inline struct dwfl_cu * 157b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperdwfl_linecu (const Dwfl_Line *line) 158b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{ 159b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper const struct Dwfl_Lines *lines = ((const void *) line 160b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper - offsetof (struct Dwfl_Lines, 161b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper idx[line->idx])); 162b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper return lines->cu; 163b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper} 164b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 165b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* This describes a contiguous address range that lies in a single CU. 166b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper We condense runs of Dwarf_Arange entries for the same CU into this. */ 167b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstruct dwfl_arange 168b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{ 169b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct dwfl_cu *cu; 170b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper size_t arange; /* Index in Dwarf_Aranges. */ 171b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper}; 172b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 173b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 174b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 175b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 176b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern void __libdwfl_module_free (Dwfl_Module *mod) internal_function; 177b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 178b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 179b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Process relocations in debugging sections in an ET_REL file. 180b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper MOD->debug.elf must be opened with ELF_C_READ_MMAP_PRIVATE or ELF_C_READ, 181b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper to make it possible to relocate the data in place (or ELF_C_RDWR or 182b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ELF_C_RDWR_MMAP if you intend to modify the Elf file on disk). After 183b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper this, dwarf_begin_elf on MOD->debug.elf will read the relocated data. */ 184b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern Dwfl_Error __libdwfl_relocate (Dwfl_Module *) internal_function; 185b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 186b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Adjust *VALUE from section-relative to absolute. 187b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper MOD->dwfl->callbacks->section_address is called to determine the actual 188b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper address of a loaded section. */ 189b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern Dwfl_Error __libdwfl_relocate_value (Dwfl_Module *mod, 190b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper size_t m_shstrndx, 191b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Elf32_Word shndx, 192b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper GElf_Addr *value) 193b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper internal_function; 194b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 195b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Iterate through all the CU's in the module. Start by passing a null 196b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper LASTCU, and then pass the last *CU returned. Success return with null 197b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper *CU no more CUs. */ 198b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern Dwfl_Error __libdwfl_nextcu (Dwfl_Module *mod, struct dwfl_cu *lastcu, 199b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct dwfl_cu **cu) internal_function; 200b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 201b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Find the CU by address. */ 202b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern Dwfl_Error __libdwfl_addrcu (Dwfl_Module *mod, Dwarf_Addr addr, 203b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct dwfl_cu **cu) internal_function; 204b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 205b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Ensure that CU->lines (and CU->cu->lines) is set up. */ 206b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern Dwfl_Error __libdwfl_cu_getsrclines (struct dwfl_cu *cu) 207b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper internal_function; 208b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 209b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 21018618fd74777576cc20dce341bb71be327f9ed48Ulrich Drepperextern uint32_t __libdwfl_crc32 (uint32_t crc, unsigned char *buf, size_t len) 21118618fd74777576cc20dce341bb71be327f9ed48Ulrich Drepper attribute_hidden; 21218618fd74777576cc20dce341bb71be327f9ed48Ulrich Drepperextern int __libdwfl_crc32_file (int fd, uint32_t *resp) attribute_hidden; 21318618fd74777576cc20dce341bb71be327f9ed48Ulrich Drepper 214b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 215b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 216b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Avoid PLT entries. */ 217b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_begin) 218b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_errmsg) 219b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_addrmodule) 220b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_addrdwarf) 221b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_addrdie) 222b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_module_addrdie) 223b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_module_getdwarf) 224b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_module_getelf) 225b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_module_getsrc) 226b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_report_elf) 227b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_report_begin) 228b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_report_module) 229b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_report_end) 230b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_standard_find_debuginfo) 231b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_linux_kernel_find_elf) 232b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_linux_kernel_module_section_address) 233b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_linux_proc_report) 234b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_linux_proc_find_elf) 235b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_linux_kernel_report_kernel) 236b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwfl_linux_kernel_report_modules) 237b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 238b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Leading arguments standard to callbacks passed a Dwfl_Module. */ 239b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#define MODCB_ARGS(mod) (mod), &(mod)->userdata, (mod)->name, (mod)->low_addr 240b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#define CBFAIL (errno ? DWFL_E (ERRNO, errno) : DWFL_E_CB); 241b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 242b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 243b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#endif /* libdwflP.h */ 244