1441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Internal definitions for libdwarf. 2cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc. 3cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng This file is part of Red Hat elfutils. 4441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Written by Ulrich Drepper <drepper@redhat.com>, 2002. 5441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 6cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Red Hat elfutils is free software; you can redistribute it and/or modify 7cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng it under the terms of the GNU General Public License as published by the 8cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Free Software Foundation; version 2 of the License. 9cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 10cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Red Hat elfutils is distributed in the hope that it will be useful, but 11cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng WITHOUT ANY WARRANTY; without even the implied warranty of 12cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng General Public License for more details. 14cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 15cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng You should have received a copy of the GNU General Public License along 16cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng with Red Hat elfutils; if not, write to the Free Software Foundation, 17cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. 18cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 19cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng In addition, as a special exception, Red Hat, Inc. gives You the 20cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng additional right to link the code of Red Hat elfutils with code licensed 21cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng under any Open Source Initiative certified open source license 22cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng (http://www.opensource.org/licenses/index.php) which requires the 23cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng distribution of source code with any binary distribution and to 24cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng distribute linked combinations of the two. Non-GPL Code permitted under 25cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng this exception must only link to the code of Red Hat elfutils through 26cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng those well defined interfaces identified in the file named EXCEPTION 27cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng found in the source code files (the "Approved Interfaces"). The files 28cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng of Non-GPL Code may instantiate templates or use macros or inline 29cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng functions from the Approved Interfaces without causing the resulting 30cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng work to be covered by the GNU General Public License. Only Red Hat, 31cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Inc. may make changes or additions to the list of Approved Interfaces. 32cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Red Hat's grant of this exception is conditioned upon your not adding 33cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng any new exceptions. If you wish to add a new Approved Interface or 34cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng exception, please contact Red Hat. You must obey the GNU General Public 35cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng License in all respects for all of the Red Hat elfutils code and other 36cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng code used in conjunction with Red Hat elfutils except the Non-GPL Code 37cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng covered by this exception. If you modify this file, you may extend this 38cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng exception to your version of the file, but you are not obligated to do 39cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng so. If you do not wish to provide this exception without modification, 40cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng you must delete this exception statement from your version and license 41cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng this file solely under the GPL without exception. 42cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 43cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Red Hat elfutils is an included package of the Open Invention Network. 44cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng An included package of the Open Invention Network is a package for which 45cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Open Invention Network licensees cross-license their patents. No patent 46cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng license is granted, either expressly or impliedly, by designation as an 47cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng included package. Should you wish to participate in the Open Invention 48cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Network licensing program, please visit www.openinventionnetwork.com 49cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng <http://www.openinventionnetwork.com>. */ 50441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 51441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#ifndef _LIBDWP_H 52441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define _LIBDWP_H 1 53441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 54441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <libintl.h> 55441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <stdbool.h> 56441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 57441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <libdw.h> 58441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 59441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 60441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* gettext helper macros. */ 61441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define _(Str) dgettext ("elfutils", Str) 62441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 63441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 64441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Version of the DWARF specification we support. */ 65cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#define DWARF_VERSION 3 66441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 67441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Version of the CIE format. */ 68441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define CIE_VERSION 1 69441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 70441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 71cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Known location expressions already decoded. */ 72441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectstruct loc_s 73441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 74441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project void *addr; 75cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Dwarf_Op *loc; 76441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t nloc; 77441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project}; 78441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 79441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Valid indeces for the section data. */ 80441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectenum 81441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 82441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_info = 0, 83441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_abbrev, 84441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_aranges, 85441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_line, 86441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_frame, 87441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_eh_frame, 88441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_loc, 89441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_pubnames, 90441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_str, 91441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_funcnames, 92441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_typenames, 93441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_varnames, 94441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_weaknames, 95441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_macinfo, 96cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng IDX_debug_ranges, 97441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_last 98441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project }; 99441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 100441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 101441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Error values. */ 102441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectenum 103441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 104441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NOERROR = 0, 105441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_UNKNOWN_ERROR, 106441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_ACCESS, 107441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_REGFILE, 108441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_IO_ERROR, 109441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_ELF, 110441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_DWARF, 111441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NOELF, 112441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_GETEHDR_ERROR, 113441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NOMEM, 114441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_UNIMPL, 115441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_CMD, 116441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_VERSION, 117441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_FILE, 118441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_ENTRY, 119441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_DWARF, 120441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_STRING, 121441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_ADDR, 122441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_CONSTANT, 123441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_REFERENCE, 124441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_REFERENCE, 125441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_DEBUG_LINE, 126441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_DEBUG_LINE, 127441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_TOO_BIG, 128441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_VERSION, 129441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_DIR_IDX, 130441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_ADDR_OUTOFRANGE, 131441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_LOCLIST, 132441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_BLOCK, 133441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_LINE_IDX, 134441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_ARANGE_IDX, 135441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_MATCH, 136441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_FLAG, 137cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng DWARF_E_INVALID_OFFSET, 138cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng DWARF_E_NO_DEBUG_RANGES, 139441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project}; 140441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 141441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 142441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* This is the structure representing the debugging state. */ 143441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectstruct Dwarf 144441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 145441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* The underlying ELF file. */ 146441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Elf *elf; 147441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 148441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* The section data. */ 149441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Elf_Data *sectiondata[IDX_last]; 150441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 151441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* True if the file has a byte order different from the host. */ 152441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project bool other_byte_order; 153441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 154441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* If true, we allocated the ELF descriptor ourselves. */ 155441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project bool free_elf; 156441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 157441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Information for traversing the .debug_pubnames section. This is 158441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project an array and separately allocated with malloc. */ 159441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project struct pubnames_s 160441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 161441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Off cu_offset; 162441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Off set_start; 163441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int cu_header_size; 164441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project int address_len; 165441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } *pubnames_sets; 166441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t pubnames_nsets; 167441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 168441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Search tree for the CUs. */ 169441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project void *cu_tree; 170441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Off next_cu_offset; 171441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 172441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Address ranges. */ 173441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Aranges *aranges; 174441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 175441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Internal memory handling. This is basically a simplified 176441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project reimplementation of obstacks. Unfortunately the standard obstack 177441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project implementation is not usable in libraries. */ 178441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project struct libdw_memblock 179441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 180441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t size; 181441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t remaining; 182441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project struct libdw_memblock *prev; 183441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project char mem[0]; 184441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } *mem_tail; 185441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 186441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Default size of allocated memory blocks. */ 187441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t mem_default_size; 188441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 189441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Registered OOM handler. */ 190441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_OOM oom_handler; 191441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project}; 192441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 193441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 194441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Abbreviation representation. */ 195441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectstruct Dwarf_Abbrev 196441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 197441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int code; 198441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int tag; 199441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project int has_children; 200441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int attrcnt; 201441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned char *attrp; 202441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Off offset; 203441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project}; 204441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 205441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include "dwarf_abbrev_hash.h" 206441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 207441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 208441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Files in line information records. */ 209441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectstruct Dwarf_Files_s 210441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 211441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf *dbg; 212cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng unsigned int ndirs; 213441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int nfiles; 214441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project struct Dwarf_Fileinfo_s 215441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 216441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project char *name; 217441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Word mtime; 218441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Word length; 219441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } info[0]; 220cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng /* nfiles of those, followed by char *[ndirs]. */ 221441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project }; 222441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct Dwarf_Fileinfo_s Dwarf_Fileinfo; 223441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 224441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 225441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Representation of a row in the line table. */ 226441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectstruct Dwarf_Lines_s 227441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 228441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t nlines; 229441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 230441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project struct Dwarf_Line_s 231441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 232441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Addr addr; 233441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int file; 234441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project int line; 235441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned short int column; 236441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int is_stmt:1; 237441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int basic_block:1; 238441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int end_sequence:1; 239441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int prologue_end:1; 240441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int epilogue_begin:1; 241441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 242441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Files *files; 243441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } info[0]; 244441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project }; 245441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 246441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 247441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Representation of address ranges. */ 248441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectstruct Dwarf_Aranges_s 249441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 250441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf *dbg; 251441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t naranges; 252441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 253441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project struct Dwarf_Arange_s 254441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 255441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Addr addr; 256441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Word length; 257441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Off offset; 258441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } info[0]; 259441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project}; 260441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 261441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 262441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* CU representation. */ 263441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectstruct Dwarf_CU 264441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 265441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf *dbg; 266441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Off start; 267441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Off end; 268441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project uint8_t address_size; 269441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project uint8_t offset_size; 270cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng uint16_t version; 271441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 272441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Hash table for the abbreviations. */ 273441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Abbrev_Hash abbrev_hash; 274441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Offset of the first abbreviation. */ 275441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t orig_abbrev_offset; 276441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Offset past last read abbreviation. */ 277441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t last_abbrev_offset; 278441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 279441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* The srcline information. */ 280441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Lines *lines; 281441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 282441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* The source file information. */ 283441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Files *files; 284441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 285441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Known location lists. */ 286441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project void *locs; 287441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project}; 288441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 289cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Compute the offset of a CU's first DIE from its offset. This 290cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng is either: 291cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng LEN VER OFFSET ADDR 292cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 4-bytes + 2-bytes + 4-bytes + 1-byte for 32-bit dwarf 293cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 12-bytes + 2-bytes + 8-bytes + 1-byte for 64-bit dwarf 294cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 295cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Note the trick in the computation. If the offset_size is 4 296cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng the '- 4' term changes the '3 *' into a '2 *'. If the 297cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng offset_size is 8 it accounts for the 4-byte escape value 298cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng used at the start of the length. */ 299cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#define DIE_OFFSET_FROM_CU_OFFSET(cu_offset, offset_size) \ 300cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng ((cu_offset) + 3 * (offset_size) - 4 + 3) 301cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 302cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng#define CUDIE(fromcu) \ 303cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng ((Dwarf_Die) \ 304cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng { \ 305cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng .cu = (fromcu), \ 306cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng .addr = ((char *) (fromcu)->dbg->sectiondata[IDX_debug_info]->d_buf \ 307cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng + (fromcu)->start + 3 * (fromcu)->offset_size - 4 + 3), \ 308cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng }) 309cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 310cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 311cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Macro information. */ 312cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengstruct Dwarf_Macro_s 313cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng{ 314cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng unsigned int opcode; 315cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Dwarf_Word param1; 316cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng union 317cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng { 318cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Dwarf_Word u; 319cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng const char *s; 320cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng } param2; 321cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng}; 322cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 323441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 324441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* We have to include the file at this point because the inline 325441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project functions access internals of the Dwarf structure. */ 326441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include "memory-access.h" 327441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 328441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 329441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Set error value. */ 330441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern void __libdw_seterrno (int value) internal_function; 331441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 332441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 333441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Memory handling, the easy parts. This macro does not do any locking. */ 334441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define libdw_alloc(dbg, type, tsize, cnt) \ 335441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ({ struct libdw_memblock *_tail = (dbg)->mem_tail; \ 336441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t _required = (tsize) * (cnt); \ 337441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project type *_result = (type *) (_tail->mem + (_tail->size - _tail->remaining));\ 338441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t _padding = ((__alignof (type) \ 339441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project - ((uintptr_t) _result & (__alignof (type) - 1))) \ 340441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project & (__alignof (type) - 1)); \ 341441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project if (unlikely (_tail->remaining < _required + _padding)) \ 342cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng _result = (type *) __libdw_allocate (dbg, _required, __alignof (type));\ 343441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project else \ 344441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { \ 345441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project _required += _padding; \ 346441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project _result = (type *) ((char *) _result + _padding); \ 347cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng _tail->remaining -= _required; \ 348441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } \ 349441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project _result; }) 350441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 351441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define libdw_typed_alloc(dbg, type) \ 352441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project libdw_alloc (dbg, type, sizeof (type), 1) 353441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 354441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Callback to allocate more. */ 355cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern void *__libdw_allocate (Dwarf *dbg, size_t minsize, size_t align) 356441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project __attribute__ ((__malloc__)) __nonnull_attribute__ (1); 357441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 358441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Default OOM handler. */ 359441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern void __libdw_oom (void) __attribute ((noreturn, visibility ("hidden"))); 360441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 361441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Find CU for given offset. */ 362441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern struct Dwarf_CU *__libdw_findcu (Dwarf *dbg, Dwarf_Off offset) 363441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project __nonnull_attribute__ (1) internal_function; 364441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 365441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return tag of given DIE. */ 366441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Dwarf_Abbrev *__libdw_findabbrev (struct Dwarf_CU *cu, 367441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int code) 368441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project __nonnull_attribute__ (1) internal_function; 369441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 370441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get abbreviation at given offset. */ 371441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Dwarf_Abbrev *__libdw_getabbrev (Dwarf *dbg, struct Dwarf_CU *cu, 372441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Off offset, size_t *lengthp, 373441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Abbrev *result) 374441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project __nonnull_attribute__ (1) internal_function; 375441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 376441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Helper functions for form handling. */ 377441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern size_t __libdw_form_val_len (Dwarf *dbg, struct Dwarf_CU *cu, 378cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng unsigned int form, 379cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng const unsigned char *valp) 380441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project __nonnull_attribute__ (1, 2, 4) internal_function; 381441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 382cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Helper function for DW_FORM_ref* handling. */ 383cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int __libdw_formref (Dwarf_Attribute *attr, Dwarf_Off *return_offset) 384cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng __nonnull_attribute__ (1, 2) internal_function; 385cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 386cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 387441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Helper function to locate attribute. */ 388441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern unsigned char *__libdw_find_attr (Dwarf_Die *die, 389441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int search_name, 390441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int *codep, 391441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int *formp) 392441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project __nonnull_attribute__ (1) internal_function; 393441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 394cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Helper function to access integer attribute. */ 395cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int __libdw_attr_intval (Dwarf_Die *die, int *valp, int attval) 396cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng __nonnull_attribute__ (1, 2) internal_function; 397cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 398cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Helper function to walk scopes. */ 399cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengstruct Dwarf_Die_Chain 400cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng{ 401cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Dwarf_Die die; 402cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng struct Dwarf_Die_Chain *parent; 403cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng bool prune; /* The PREVISIT function can set this. */ 404cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng}; 405cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int __libdw_visit_scopes (unsigned int depth, 406cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng struct Dwarf_Die_Chain *root, 407cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng int (*previsit) (unsigned int depth, 408cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng struct Dwarf_Die_Chain *, 409cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng void *arg), 410cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng int (*postvisit) (unsigned int depth, 411cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng struct Dwarf_Die_Chain *, 412cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng void *arg), 413cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng void *arg) 414cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng __nonnull_attribute__ (2, 3) internal_function; 415cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 416cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return error code of last failing function call. This value is kept 417cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng separately for each thread. */ 418cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int __dwarf_errno_internal (void); 419cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 420cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 421cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Aliases to avoid PLTs. */ 422cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_attr) 423cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_attr_integrate) 424cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_begin_elf) 425cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_child) 426cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_dieoffset) 427cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_diename) 428cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_end) 429cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_entrypc) 430cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_errmsg) 431cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_formaddr) 432cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_formblock) 433cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_formref_die) 434cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_formsdata) 435cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_formstring) 436cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_formudata) 437cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_getarange_addr) 438cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_getarangeinfo) 439cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_getaranges) 440cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_getsrcfiles) 441cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_getsrclines) 442cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_hasattr) 443cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_haschildren) 444cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_haspc) 445cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_highpc) 446cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_lowpc) 447cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_nextcu) 448cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_offdie) 449cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_ranges) 450cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_siblingof) 451cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben ChengINTDECL (dwarf_tag) 452cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 453441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#endif /* libdwP.h */ 454