1441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Internal definitions for libdwarf. 2441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Copyright (C) 2002, 2003, 2004 Red Hat, Inc. 3441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Written by Ulrich Drepper <drepper@redhat.com>, 2002. 4441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 5441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project This program is Open Source software; you can redistribute it and/or 6441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project modify it under the terms of the Open Software License version 1.0 as 7441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project published by the Open Source Initiative. 8441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 9441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project You should have received a copy of the Open Software License along 10441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project with this program; if not, you may obtain a copy of the Open Software 11441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project License version 1.0 from http://www.opensource.org/licenses/osl.php or 12441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project by writing the Open Source Initiative c/o Lawrence Rosen, Esq., 13441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 3001 King Ranch Road, Ukiah, CA 95482. */ 14441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 15441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#ifndef _LIBDWP_H 16441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define _LIBDWP_H 1 17441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 18441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <libintl.h> 19441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <stdbool.h> 20441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 21441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <libdw.h> 22441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 23441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 24441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* gettext helper macros. */ 25441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define _(Str) dgettext ("elfutils", Str) 26441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 27441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 28441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Version of the DWARF specification we support. */ 29441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define DWARF_VERSION 2 30441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 31441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Version of the CIE format. */ 32441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define CIE_VERSION 1 33441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 34441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 35441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Known location lists. */ 36441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectstruct loc_s 37441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 38441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project void *addr; 39441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Loc *loc; 40441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t nloc; 41441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project}; 42441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 43441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Valid indeces for the section data. */ 44441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectenum 45441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 46441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_info = 0, 47441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_abbrev, 48441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_aranges, 49441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_line, 50441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_frame, 51441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_eh_frame, 52441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_loc, 53441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_pubnames, 54441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_str, 55441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_funcnames, 56441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_typenames, 57441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_varnames, 58441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_weaknames, 59441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_debug_macinfo, 60441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project IDX_last 61441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project }; 62441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 63441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 64441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Error values. */ 65441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectenum 66441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 67441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NOERROR = 0, 68441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_UNKNOWN_ERROR, 69441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_ACCESS, 70441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_REGFILE, 71441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_IO_ERROR, 72441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_ELF, 73441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_DWARF, 74441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NOELF, 75441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_GETEHDR_ERROR, 76441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NOMEM, 77441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_UNIMPL, 78441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_CMD, 79441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_VERSION, 80441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_FILE, 81441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_ENTRY, 82441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_DWARF, 83441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_STRING, 84441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_ADDR, 85441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_CONSTANT, 86441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_REFERENCE, 87441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_REFERENCE, 88441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_DEBUG_LINE, 89441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_DEBUG_LINE, 90441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_TOO_BIG, 91441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_VERSION, 92441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_DIR_IDX, 93441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_ADDR_OUTOFRANGE, 94441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_LOCLIST, 95441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_BLOCK, 96441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_LINE_IDX, 97441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_INVALID_ARANGE_IDX, 98441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_MATCH, 99441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project DWARF_E_NO_FLAG, 100441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project}; 101441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 102441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 103441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* This is the structure representing the debugging state. */ 104441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectstruct Dwarf 105441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 106441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* The underlying ELF file. */ 107441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Elf *elf; 108441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 109441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* The section data. */ 110441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Elf_Data *sectiondata[IDX_last]; 111441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 112441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* True if the file has a byte order different from the host. */ 113441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project bool other_byte_order; 114441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 115441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* If true, we allocated the ELF descriptor ourselves. */ 116441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project bool free_elf; 117441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 118441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Information for traversing the .debug_pubnames section. This is 119441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project an array and separately allocated with malloc. */ 120441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project struct pubnames_s 121441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 122441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Off cu_offset; 123441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Off set_start; 124441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int cu_header_size; 125441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project int address_len; 126441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } *pubnames_sets; 127441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t pubnames_nsets; 128441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 129441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Search tree for the CUs. */ 130441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project void *cu_tree; 131441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Off next_cu_offset; 132441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 133441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Address ranges. */ 134441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Aranges *aranges; 135441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 136441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Internal memory handling. This is basically a simplified 137441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project reimplementation of obstacks. Unfortunately the standard obstack 138441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project implementation is not usable in libraries. */ 139441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project struct libdw_memblock 140441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 141441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t size; 142441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t remaining; 143441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project struct libdw_memblock *prev; 144441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project char mem[0]; 145441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } *mem_tail; 146441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 147441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Default size of allocated memory blocks. */ 148441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t mem_default_size; 149441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 150441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Registered OOM handler. */ 151441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_OOM oom_handler; 152441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project}; 153441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 154441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 155441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Abbreviation representation. */ 156441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectstruct Dwarf_Abbrev 157441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 158441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int code; 159441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int tag; 160441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project int has_children; 161441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int attrcnt; 162441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned char *attrp; 163441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Off offset; 164441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project}; 165441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 166441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include "dwarf_abbrev_hash.h" 167441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 168441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 169441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Files in line information records. */ 170441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectstruct Dwarf_Files_s 171441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 172441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf *dbg; 173441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int nfiles; 174441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project struct Dwarf_Fileinfo_s 175441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 176441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project char *name; 177441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Word mtime; 178441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Word length; 179441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } info[0]; 180441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project }; 181441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct Dwarf_Fileinfo_s Dwarf_Fileinfo; 182441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 183441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 184441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Representation of a row in the line table. */ 185441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectstruct Dwarf_Lines_s 186441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 187441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t nlines; 188441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 189441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project struct Dwarf_Line_s 190441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 191441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Addr addr; 192441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int file; 193441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project int line; 194441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned short int column; 195441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int is_stmt:1; 196441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int basic_block:1; 197441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int end_sequence:1; 198441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int prologue_end:1; 199441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int epilogue_begin:1; 200441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 201441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Files *files; 202441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } info[0]; 203441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project }; 204441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 205441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 206441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Representation of address ranges. */ 207441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectstruct Dwarf_Aranges_s 208441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 209441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf *dbg; 210441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t naranges; 211441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 212441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project struct Dwarf_Arange_s 213441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 214441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Addr addr; 215441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Word length; 216441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Off offset; 217441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } info[0]; 218441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project}; 219441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 220441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 221441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* CU representation. */ 222441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectstruct Dwarf_CU 223441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 224441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf *dbg; 225441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Off start; 226441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Off end; 227441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project uint8_t address_size; 228441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project uint8_t offset_size; 229441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 230441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Hash table for the abbreviations. */ 231441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Abbrev_Hash abbrev_hash; 232441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Offset of the first abbreviation. */ 233441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t orig_abbrev_offset; 234441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Offset past last read abbreviation. */ 235441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t last_abbrev_offset; 236441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 237441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* The srcline information. */ 238441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Lines *lines; 239441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 240441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* The source file information. */ 241441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Files *files; 242441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 243441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Known location lists. */ 244441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project void *locs; 245441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project}; 246441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 247441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 248441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* We have to include the file at this point because the inline 249441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project functions access internals of the Dwarf structure. */ 250441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include "memory-access.h" 251441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 252441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 253441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Set error value. */ 254441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern void __libdw_seterrno (int value) internal_function; 255441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 256441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 257441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Memory handling, the easy parts. This macro does not do any locking. */ 258441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define libdw_alloc(dbg, type, tsize, cnt) \ 259441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ({ struct libdw_memblock *_tail = (dbg)->mem_tail; \ 260441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t _required = (tsize) * (cnt); \ 261441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project type *_result = (type *) (_tail->mem + (_tail->size - _tail->remaining));\ 262441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t _padding = ((__alignof (type) \ 263441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project - ((uintptr_t) _result & (__alignof (type) - 1))) \ 264441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project & (__alignof (type) - 1)); \ 265441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project if (unlikely (_tail->remaining < _required + _padding)) \ 266441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { \ 267441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project _result = (type *) __libdw_allocate (dbg, _required); \ 268441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project _tail = (dbg)->mem_tail; \ 269441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } \ 270441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project else \ 271441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { \ 272441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project _required += _padding; \ 273441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project _result = (type *) ((char *) _result + _padding); \ 274441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } \ 275441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project _tail->remaining -= _required; \ 276441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project _result; }) 277441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 278441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define libdw_typed_alloc(dbg, type) \ 279441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project libdw_alloc (dbg, type, sizeof (type), 1) 280441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 281441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Callback to allocate more. */ 282441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern void *__libdw_allocate (Dwarf *dbg, size_t minsize) 283441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project __attribute__ ((__malloc__)) __nonnull_attribute__ (1); 284441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 285441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Default OOM handler. */ 286441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern void __libdw_oom (void) __attribute ((noreturn, visibility ("hidden"))); 287441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 288441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Find CU for given offset. */ 289441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern struct Dwarf_CU *__libdw_findcu (Dwarf *dbg, Dwarf_Off offset) 290441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project __nonnull_attribute__ (1) internal_function; 291441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 292441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return tag of given DIE. */ 293441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Dwarf_Abbrev *__libdw_findabbrev (struct Dwarf_CU *cu, 294441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int code) 295441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project __nonnull_attribute__ (1) internal_function; 296441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 297441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get abbreviation at given offset. */ 298441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Dwarf_Abbrev *__libdw_getabbrev (Dwarf *dbg, struct Dwarf_CU *cu, 299441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Off offset, size_t *lengthp, 300441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Dwarf_Abbrev *result) 301441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project __nonnull_attribute__ (1) internal_function; 302441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 303441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Helper functions for form handling. */ 304441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern size_t __libdw_form_val_len (Dwarf *dbg, struct Dwarf_CU *cu, 305441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int form, unsigned char *valp) 306441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project __nonnull_attribute__ (1, 2, 4) internal_function; 307441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 308441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Helper function to locate attribute. */ 309441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern unsigned char *__libdw_find_attr (Dwarf_Die *die, 310441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int search_name, 311441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int *codep, 312441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int *formp) 313441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project __nonnull_attribute__ (1) internal_function; 314441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 315441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#endif /* libdwP.h */ 316