libdwP.h revision 361df7da6dfecd817b27e62b91752ac316d7cdd4
1b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Internal definitions for libdwarf. 2b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc. 3361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper This file is part of Red Hat elfutils. 4b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Written by Ulrich Drepper <drepper@redhat.com>, 2002. 5b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 6361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper Red Hat elfutils is free software; you can redistribute it and/or modify 7361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper it under the terms of the GNU General Public License as published by the 8361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper Free Software Foundation; version 2 of the License. 9b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 10361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper Red Hat elfutils is distributed in the hope that it will be useful, but 11361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper WITHOUT ANY WARRANTY; without even the implied warranty of 12361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper General Public License for more details. 14361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper 15361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper You should have received a copy of the GNU General Public License along 16361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper with Red Hat elfutils; if not, write to the Free Software Foundation, 17361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 18361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper 19361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper In addition, as a special exception, Red Hat, Inc. gives You the 20361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper additional right to link the code of Red Hat elfutils with code licensed 21361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper under any Open Source Initiative certified open source license 22361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper (http://www.opensource.org/licenses/index.php) which requires the 23361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper distribution of source code with any binary distribution and to 24361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper distribute linked combinations of the two. Non-GPL Code permitted under 25361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper this exception must only link to the code of Red Hat elfutils through 26361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper those well defined interfaces identified in the file named EXCEPTION 27361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper found in the source code files (the "Approved Interfaces"). The files 28361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper of Non-GPL Code may instantiate templates or use macros or inline 29361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper functions from the Approved Interfaces without causing the resulting 30361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper work to be covered by the GNU General Public License. Only Red Hat, 31361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper Inc. may make changes or additions to the list of Approved Interfaces. 32361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper Red Hat's grant of this exception is conditioned upon your not adding 33361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper any new exceptions. If you wish to add a new Approved Interface or 34361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper exception, please contact Red Hat. You must obey the GNU General Public 35361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper License in all respects for all of the Red Hat elfutils code and other 36361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper code used in conjunction with Red Hat elfutils except the Non-GPL Code 37361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper covered by this exception. If you modify this file, you may extend this 38361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper exception to your version of the file, but you are not obligated to do 39361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper so. If you do not wish to provide this exception without modification, 40361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper you must delete this exception statement from your version and license 41361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper this file solely under the GPL without exception. 42361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper 43361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper Red Hat elfutils is an included package of the Open Invention Network. 44361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper An included package of the Open Invention Network is a package for which 45361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper Open Invention Network licensees cross-license their patents. No patent 46361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper license is granted, either expressly or impliedly, by designation as an 47361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper included package. Should you wish to participate in the Open Invention 48361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper Network licensing program, please visit www.openinventionnetwork.com 49361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper <http://www.openinventionnetwork.com>. */ 50b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 51b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#ifndef _LIBDWP_H 52b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#define _LIBDWP_H 1 53b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 54b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <libintl.h> 55b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <stdbool.h> 56b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 57b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <libdw.h> 58b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 59b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 60b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* gettext helper macros. */ 61b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#define _(Str) dgettext ("elfutils", Str) 62b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 63b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 64b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Version of the DWARF specification we support. */ 65b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#define DWARF_VERSION 2 66b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 67b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Version of the CIE format. */ 68b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#define CIE_VERSION 1 69b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 70b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 716724c90d02659f7466b67b357563042e403d154eRoland McGrath/* Known location expressions already decoded. */ 72b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstruct loc_s 73b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{ 74b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper void *addr; 756724c90d02659f7466b67b357563042e403d154eRoland McGrath Dwarf_Op *loc; 76b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper size_t nloc; 77b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper}; 78b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 79b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Valid indeces for the section data. */ 80b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperenum 81b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 82b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper IDX_debug_info = 0, 83b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper IDX_debug_abbrev, 84b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper IDX_debug_aranges, 85b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper IDX_debug_line, 86b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper IDX_debug_frame, 87b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper IDX_eh_frame, 88b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper IDX_debug_loc, 89b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper IDX_debug_pubnames, 90b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper IDX_debug_str, 91b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper IDX_debug_funcnames, 92b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper IDX_debug_typenames, 93b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper IDX_debug_varnames, 94b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper IDX_debug_weaknames, 95b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper IDX_debug_macinfo, 96b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper IDX_debug_ranges, 97b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper IDX_last 98b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper }; 99b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 100b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 101b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Error values. */ 102b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperenum 103b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{ 104b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_NOERROR = 0, 105b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_UNKNOWN_ERROR, 106b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_INVALID_ACCESS, 107b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_NO_REGFILE, 108b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_IO_ERROR, 109b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_INVALID_ELF, 110b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_NO_DWARF, 111b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_NOELF, 112b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_GETEHDR_ERROR, 113b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_NOMEM, 114b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_UNIMPL, 115b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_INVALID_CMD, 116b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_INVALID_VERSION, 117b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_INVALID_FILE, 118b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_NO_ENTRY, 119b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_INVALID_DWARF, 120b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_NO_STRING, 121b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_NO_ADDR, 122b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_NO_CONSTANT, 123b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_NO_REFERENCE, 124b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_INVALID_REFERENCE, 125b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_NO_DEBUG_LINE, 126b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_INVALID_DEBUG_LINE, 127b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_TOO_BIG, 128b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_VERSION, 129b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_INVALID_DIR_IDX, 130b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_ADDR_OUTOFRANGE, 131b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_NO_LOCLIST, 132b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_NO_BLOCK, 133b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_INVALID_LINE_IDX, 134b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_INVALID_ARANGE_IDX, 135b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_NO_MATCH, 136b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_NO_FLAG, 137b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_INVALID_OFFSET, 138b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper DWARF_E_NO_DEBUG_RANGES, 139b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper}; 140b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 141b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 142b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* This is the structure representing the debugging state. */ 143b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstruct Dwarf 144b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{ 145b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* The underlying ELF file. */ 146b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Elf *elf; 147b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 148b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* The section data. */ 149b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Elf_Data *sectiondata[IDX_last]; 150b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 151b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* True if the file has a byte order different from the host. */ 152b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper bool other_byte_order; 153b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 154b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* If true, we allocated the ELF descriptor ourselves. */ 155b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper bool free_elf; 156b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 157b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* Information for traversing the .debug_pubnames section. This is 158b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper an array and separately allocated with malloc. */ 159b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct pubnames_s 160b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 161b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Off cu_offset; 162b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Off set_start; 163b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int cu_header_size; 164b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper int address_len; 165b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } *pubnames_sets; 166b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper size_t pubnames_nsets; 167b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 168b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* Search tree for the CUs. */ 169b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper void *cu_tree; 170b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Off next_cu_offset; 171b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 172b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* Address ranges. */ 173b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Aranges *aranges; 174b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 175b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* Internal memory handling. This is basically a simplified 176b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper reimplementation of obstacks. Unfortunately the standard obstack 177b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper implementation is not usable in libraries. */ 178b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct libdw_memblock 179b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 180b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper size_t size; 181b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper size_t remaining; 182b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct libdw_memblock *prev; 183b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper char mem[0]; 184b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } *mem_tail; 185b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 186b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* Default size of allocated memory blocks. */ 187b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper size_t mem_default_size; 188b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 189b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* Registered OOM handler. */ 190b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_OOM oom_handler; 191b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper}; 192b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 193b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 194b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Abbreviation representation. */ 195b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstruct Dwarf_Abbrev 196b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{ 197b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int code; 198b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int tag; 199b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper int has_children; 200b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int attrcnt; 201b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned char *attrp; 202b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Off offset; 203b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper}; 204b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 205b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include "dwarf_abbrev_hash.h" 206b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 207b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 208b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Files in line information records. */ 209b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstruct Dwarf_Files_s 210b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 211b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf *dbg; 212b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int nfiles; 213b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct Dwarf_Fileinfo_s 214b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 215b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper char *name; 216b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Word mtime; 217b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Word length; 218b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } info[0]; 219b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper }; 220b08d5a8fb42f4586d756068065186b5af7e48daUlrich Dreppertypedef struct Dwarf_Fileinfo_s Dwarf_Fileinfo; 221b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 222b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 223b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Representation of a row in the line table. */ 224b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstruct Dwarf_Lines_s 225b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 226b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper size_t nlines; 227b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 228b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct Dwarf_Line_s 229b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 230b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Addr addr; 231b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int file; 232b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper int line; 233b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned short int column; 234b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int is_stmt:1; 235b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int basic_block:1; 236b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int end_sequence:1; 237b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int prologue_end:1; 238b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int epilogue_begin:1; 239b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 240b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Files *files; 241b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } info[0]; 242b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper }; 243b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 244b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 245b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Representation of address ranges. */ 246b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstruct Dwarf_Aranges_s 247b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{ 248b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf *dbg; 249b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper size_t naranges; 250b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 251b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper struct Dwarf_Arange_s 252b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 253b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Addr addr; 254b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Word length; 255b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Off offset; 256b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } info[0]; 257b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper}; 258b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 259b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 260b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* CU representation. */ 261b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstruct Dwarf_CU 262b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{ 263b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf *dbg; 264b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Off start; 265b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Off end; 266b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper uint8_t address_size; 267b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper uint8_t offset_size; 268b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 269b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* Hash table for the abbreviations. */ 270b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Abbrev_Hash abbrev_hash; 271b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* Offset of the first abbreviation. */ 272b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper size_t orig_abbrev_offset; 273b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* Offset past last read abbreviation. */ 274b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper size_t last_abbrev_offset; 275b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 276b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* The srcline information. */ 277b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Lines *lines; 278b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 279b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* The source file information. */ 280b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Files *files; 281b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 282b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper /* Known location lists. */ 283b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper void *locs; 284b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper}; 285b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 2866724c90d02659f7466b67b357563042e403d154eRoland McGrath#define CUDIE(fromcu) \ 2876724c90d02659f7466b67b357563042e403d154eRoland McGrath ((Dwarf_Die) \ 2886724c90d02659f7466b67b357563042e403d154eRoland McGrath { \ 2896724c90d02659f7466b67b357563042e403d154eRoland McGrath .cu = (fromcu), \ 2906724c90d02659f7466b67b357563042e403d154eRoland McGrath .addr = ((char *) (fromcu)->dbg->sectiondata[IDX_debug_info]->d_buf \ 2916724c90d02659f7466b67b357563042e403d154eRoland McGrath + (fromcu)->start + 3 * (fromcu)->offset_size - 4 + 3), \ 2926724c90d02659f7466b67b357563042e403d154eRoland McGrath }) 293b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 294b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 295b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Macro information. */ 296b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstruct Dwarf_Macro_s 297b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{ 298b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int opcode; 299b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Word param1; 300b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper union 301b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { 302b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Word u; 303b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper const char *s; 304b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } param2; 305b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper}; 306b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 307b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 308b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* We have to include the file at this point because the inline 309b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper functions access internals of the Dwarf structure. */ 310b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include "memory-access.h" 311b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 312b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 313b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Set error value. */ 314b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern void __libdw_seterrno (int value) internal_function; 315b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 316b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 317b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Memory handling, the easy parts. This macro does not do any locking. */ 318b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#define libdw_alloc(dbg, type, tsize, cnt) \ 319b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper ({ struct libdw_memblock *_tail = (dbg)->mem_tail; \ 320b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper size_t _required = (tsize) * (cnt); \ 321b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper type *_result = (type *) (_tail->mem + (_tail->size - _tail->remaining));\ 322b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper size_t _padding = ((__alignof (type) \ 323b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper - ((uintptr_t) _result & (__alignof (type) - 1))) \ 324b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper & (__alignof (type) - 1)); \ 325b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper if (unlikely (_tail->remaining < _required + _padding)) \ 326b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { \ 327b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper _result = (type *) __libdw_allocate (dbg, _required); \ 328b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper _tail = (dbg)->mem_tail; \ 329b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } \ 330b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper else \ 331b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper { \ 332b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper _required += _padding; \ 333b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper _result = (type *) ((char *) _result + _padding); \ 334b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper } \ 335b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper _tail->remaining -= _required; \ 336b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper _result; }) 337b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 338b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#define libdw_typed_alloc(dbg, type) \ 339b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper libdw_alloc (dbg, type, sizeof (type), 1) 340b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 341b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Callback to allocate more. */ 342b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern void *__libdw_allocate (Dwarf *dbg, size_t minsize) 343b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper __attribute__ ((__malloc__)) __nonnull_attribute__ (1); 344b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 345b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Default OOM handler. */ 346b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern void __libdw_oom (void) __attribute ((noreturn, visibility ("hidden"))); 347b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 348b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Find CU for given offset. */ 349b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern struct Dwarf_CU *__libdw_findcu (Dwarf *dbg, Dwarf_Off offset) 350b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper __nonnull_attribute__ (1) internal_function; 351b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 352b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Return tag of given DIE. */ 353b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern Dwarf_Abbrev *__libdw_findabbrev (struct Dwarf_CU *cu, 354b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int code) 355b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper __nonnull_attribute__ (1) internal_function; 356b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 357b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Get abbreviation at given offset. */ 358b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern Dwarf_Abbrev *__libdw_getabbrev (Dwarf *dbg, struct Dwarf_CU *cu, 359b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Off offset, size_t *lengthp, 360b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper Dwarf_Abbrev *result) 361b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper __nonnull_attribute__ (1) internal_function; 362b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 363b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Helper functions for form handling. */ 364b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern size_t __libdw_form_val_len (Dwarf *dbg, struct Dwarf_CU *cu, 365b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int form, 366b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper const unsigned char *valp) 367b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper __nonnull_attribute__ (1, 2, 4) internal_function; 368b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 369b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Helper function to locate attribute. */ 370b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern unsigned char *__libdw_find_attr (Dwarf_Die *die, 371b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int search_name, 372b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int *codep, 373b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper unsigned int *formp) 374b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper __nonnull_attribute__ (1) internal_function; 375b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 376b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Helper function to access integer attribute. */ 3776724c90d02659f7466b67b357563042e403d154eRoland McGrathextern int __libdw_attr_intval (Dwarf_Die *die, int *valp, int attval) 378b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper __nonnull_attribute__ (1, 2) internal_function; 379b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 3801ecb606f5af22838bf42b50dcc581d2b0f9191feRoland McGrath/* Helper function to walk scopes. */ 38171e15a01742e5d5de9c6260d4526146be54e5a8aRoland McGrathstruct Dwarf_Die_Chain 38271e15a01742e5d5de9c6260d4526146be54e5a8aRoland McGrath{ 38371e15a01742e5d5de9c6260d4526146be54e5a8aRoland McGrath Dwarf_Die die; 38471e15a01742e5d5de9c6260d4526146be54e5a8aRoland McGrath struct Dwarf_Die_Chain *parent; 38571e15a01742e5d5de9c6260d4526146be54e5a8aRoland McGrath bool prune; /* The PREVISIT function can set this. */ 38671e15a01742e5d5de9c6260d4526146be54e5a8aRoland McGrath}; 38771e15a01742e5d5de9c6260d4526146be54e5a8aRoland McGrathextern int __libdw_visit_scopes (unsigned int depth, 38871e15a01742e5d5de9c6260d4526146be54e5a8aRoland McGrath struct Dwarf_Die_Chain *root, 38971e15a01742e5d5de9c6260d4526146be54e5a8aRoland McGrath int (*previsit) (unsigned int depth, 39071e15a01742e5d5de9c6260d4526146be54e5a8aRoland McGrath struct Dwarf_Die_Chain *, 39171e15a01742e5d5de9c6260d4526146be54e5a8aRoland McGrath void *arg), 39271e15a01742e5d5de9c6260d4526146be54e5a8aRoland McGrath int (*postvisit) (unsigned int depth, 39371e15a01742e5d5de9c6260d4526146be54e5a8aRoland McGrath struct Dwarf_Die_Chain *, 39471e15a01742e5d5de9c6260d4526146be54e5a8aRoland McGrath void *arg), 3951ecb606f5af22838bf42b50dcc581d2b0f9191feRoland McGrath void *arg) 3961ecb606f5af22838bf42b50dcc581d2b0f9191feRoland McGrath __nonnull_attribute__ (2, 3) internal_function; 3971ecb606f5af22838bf42b50dcc581d2b0f9191feRoland McGrath 398b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Return error code of last failing function call. This value is kept 399b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper separately for each thread. */ 400b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperextern int __dwarf_errno_internal (void); 401b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 402b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 403b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper/* Aliases to avoid PLTs. */ 404b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_attr) 405b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_attr_integrate) 406b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_begin_elf) 407b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_child) 408b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_dieoffset) 40971e15a01742e5d5de9c6260d4526146be54e5a8aRoland McGrathINTDECL (dwarf_diename) 4104959bf89d92b59ba72bea5786d7b3f9b5564f750Roland McGrathINTDECL (dwarf_end) 41107d4f2fc1cb53f170a71bc13617bbdd9cb1c3c60Roland McGrathINTDECL (dwarf_entrypc) 4124959bf89d92b59ba72bea5786d7b3f9b5564f750Roland McGrathINTDECL (dwarf_errmsg) 413b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_formaddr) 414b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_formblock) 415b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_formref) 416b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_formref_die) 417b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_formsdata) 418b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_formstring) 419b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_formudata) 420b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_getarange_addr) 421b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_getarangeinfo) 422b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_getaranges) 423b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_getsrcfiles) 424b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_getsrclines) 425b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_hasattr) 426b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_haschildren) 427b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_haspc) 428b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_highpc) 429b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_lowpc) 430b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_nextcu) 431b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_offdie) 43207d4f2fc1cb53f170a71bc13617bbdd9cb1c3c60Roland McGrathINTDECL (dwarf_ranges) 433b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_siblingof) 434b08d5a8fb42f4586d756068065186b5af7e48daUlrich DrepperINTDECL (dwarf_tag) 435b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper 436b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#endif /* libdwP.h */ 437