1*4d9fdb46SRobert Mustacchi /* 2*4d9fdb46SRobert Mustacchi Copyright (C) 2017-2017 David Anderson. All Rights Reserved. 3*4d9fdb46SRobert Mustacchi 4*4d9fdb46SRobert Mustacchi This program is free software; you can redistribute it and/or modify it 5*4d9fdb46SRobert Mustacchi under the terms of version 2.1 of the GNU Lesser General Public License 6*4d9fdb46SRobert Mustacchi as published by the Free Software Foundation. 7*4d9fdb46SRobert Mustacchi 8*4d9fdb46SRobert Mustacchi This program is distributed in the hope that it would be useful, but 9*4d9fdb46SRobert Mustacchi WITHOUT ANY WARRANTY; without even the implied warranty of 10*4d9fdb46SRobert Mustacchi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11*4d9fdb46SRobert Mustacchi 12*4d9fdb46SRobert Mustacchi Further, this software is distributed without any warranty that it is 13*4d9fdb46SRobert Mustacchi free of the rightful claim of any third person regarding infringement 14*4d9fdb46SRobert Mustacchi or the like. Any license provided herein, whether implied or 15*4d9fdb46SRobert Mustacchi otherwise, applies only to this software file. Patent licenses, if 16*4d9fdb46SRobert Mustacchi any, provided herein do not apply to combinations of this program with 17*4d9fdb46SRobert Mustacchi other software, or any other product whatsoever. 18*4d9fdb46SRobert Mustacchi 19*4d9fdb46SRobert Mustacchi You should have received a copy of the GNU Lesser General Public 20*4d9fdb46SRobert Mustacchi License along with this program; if not, write the Free Software 21*4d9fdb46SRobert Mustacchi Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301, 22*4d9fdb46SRobert Mustacchi USA. 23*4d9fdb46SRobert Mustacchi 24*4d9fdb46SRobert Mustacchi */ 25*4d9fdb46SRobert Mustacchi 26*4d9fdb46SRobert Mustacchi /* Only 5 abbrev DW_IDX defined, we 27*4d9fdb46SRobert Mustacchi allow three user defined (arbitrarily) */ 28*4d9fdb46SRobert Mustacchi #define ABB_PAIRS_MAX 8 29*4d9fdb46SRobert Mustacchi 30*4d9fdb46SRobert Mustacchi struct abbrev_pair_s { 31*4d9fdb46SRobert Mustacchi unsigned ap_index; 32*4d9fdb46SRobert Mustacchi unsigned ap_form; 33*4d9fdb46SRobert Mustacchi }; 34*4d9fdb46SRobert Mustacchi 35*4d9fdb46SRobert Mustacchi struct Dwarf_D_Abbrev_s { 36*4d9fdb46SRobert Mustacchi struct Dwarf_D_Abbrev_s * da_next; 37*4d9fdb46SRobert Mustacchi unsigned da_abbrev_code; 38*4d9fdb46SRobert Mustacchi unsigned da_tag; 39*4d9fdb46SRobert Mustacchi unsigned da_pairs_count; 40*4d9fdb46SRobert Mustacchi struct abbrev_pair_s da_pairs[ABB_PAIRS_MAX]; 41*4d9fdb46SRobert Mustacchi }; 42*4d9fdb46SRobert Mustacchi 43*4d9fdb46SRobert Mustacchi 44*4d9fdb46SRobert Mustacchi #define DWARF_DNAMES_VERSION5 5 45*4d9fdb46SRobert Mustacchi 46*4d9fdb46SRobert Mustacchi struct Dwarf_Dnames_index_header_s { 47*4d9fdb46SRobert Mustacchi Dwarf_Debug din_dbg; 48*4d9fdb46SRobert Mustacchi struct Dwarf_Dnames_index_header_s *din_next; 49*4d9fdb46SRobert Mustacchi 50*4d9fdb46SRobert Mustacchi /* The .debug_names section offset of 1st byte 51*4d9fdb46SRobert Mustacchi of a header record. */ 52*4d9fdb46SRobert Mustacchi Dwarf_Unsigned din_section_offset; 53*4d9fdb46SRobert Mustacchi 54*4d9fdb46SRobert Mustacchi /* For offset and pointer sanity calculations. */ 55*4d9fdb46SRobert Mustacchi Dwarf_Small * din_indextable_data; 56*4d9fdb46SRobert Mustacchi Dwarf_Unsigned din_indextable_length; 57*4d9fdb46SRobert Mustacchi unsigned din_offset_size; 58*4d9fdb46SRobert Mustacchi 59*4d9fdb46SRobert Mustacchi Dwarf_Unsigned din_version; 60*4d9fdb46SRobert Mustacchi Dwarf_Unsigned din_comp_unit_count; 61*4d9fdb46SRobert Mustacchi Dwarf_Unsigned din_local_type_unit_count; 62*4d9fdb46SRobert Mustacchi Dwarf_Unsigned din_foreign_type_unit_count; 63*4d9fdb46SRobert Mustacchi Dwarf_Unsigned din_bucket_count; 64*4d9fdb46SRobert Mustacchi Dwarf_Unsigned din_name_count; 65*4d9fdb46SRobert Mustacchi Dwarf_Unsigned din_abbrev_table_size; /* bytes */ 66*4d9fdb46SRobert Mustacchi Dwarf_Unsigned din_entry_pool_size; /* bytes */ 67*4d9fdb46SRobert Mustacchi 68*4d9fdb46SRobert Mustacchi Dwarf_Unsigned din_augmentation_string_size; 69*4d9fdb46SRobert Mustacchi 70*4d9fdb46SRobert Mustacchi /* Since we cannot assume the string is NUL 71*4d9fdb46SRobert Mustacchi terminated we allocate a sufficient 72*4d9fdb46SRobert Mustacchi string space and NUL terminate the string. 73*4d9fdb46SRobert Mustacchi The DWARF5 standard does not specify 74*4d9fdb46SRobert Mustacchi it as null-terminated. We copy it into 75*4d9fdb46SRobert Mustacchi calloc area so not 'const' */ 76*4d9fdb46SRobert Mustacchi char * din_augmentation_string; 77*4d9fdb46SRobert Mustacchi 78*4d9fdb46SRobert Mustacchi Dwarf_Small * din_cu_list; 79*4d9fdb46SRobert Mustacchi Dwarf_Small * din_local_tu_list; 80*4d9fdb46SRobert Mustacchi Dwarf_Small * din_foreign_tu_list; 81*4d9fdb46SRobert Mustacchi Dwarf_Small * din_buckets; 82*4d9fdb46SRobert Mustacchi Dwarf_Small * din_hash_table; 83*4d9fdb46SRobert Mustacchi Dwarf_Small * din_string_offsets; 84*4d9fdb46SRobert Mustacchi Dwarf_Small * din_entry_offsets; 85*4d9fdb46SRobert Mustacchi Dwarf_Small * din_abbreviations; 86*4d9fdb46SRobert Mustacchi Dwarf_Small * din_entry_pool; 87*4d9fdb46SRobert Mustacchi 88*4d9fdb46SRobert Mustacchi unsigned din_abbrev_list_count; 89*4d9fdb46SRobert Mustacchi /* An array of size din_abbrev_list_count. */ 90*4d9fdb46SRobert Mustacchi struct Dwarf_D_Abbrev_s * din_abbrev_list; 91*4d9fdb46SRobert Mustacchi 92*4d9fdb46SRobert Mustacchi }; 93*4d9fdb46SRobert Mustacchi 94*4d9fdb46SRobert Mustacchi 95*4d9fdb46SRobert Mustacchi struct Dwarf_Dnames_Head_s { 96*4d9fdb46SRobert Mustacchi Dwarf_Debug dn_dbg; 97*4d9fdb46SRobert Mustacchi Dwarf_Small * dn_section_data; 98*4d9fdb46SRobert Mustacchi Dwarf_Small * dn_section_end; 99*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dn_section_size; 100*4d9fdb46SRobert Mustacchi unsigned dn_inhdr_count; 101*4d9fdb46SRobert Mustacchi 102*4d9fdb46SRobert Mustacchi /* Becomes an array of these structs, dn_inhdr_count 103*4d9fdb46SRobert Mustacchi of them. */ 104*4d9fdb46SRobert Mustacchi struct Dwarf_Dnames_index_header_s * dn_inhdr_first; 105*4d9fdb46SRobert Mustacchi }; 106*4d9fdb46SRobert Mustacchi 107*4d9fdb46SRobert Mustacchi void _dwarf_debugnames_destructor(void *m); 108