1*4d9fdb46SRobert Mustacchi /* 2*4d9fdb46SRobert Mustacchi 3*4d9fdb46SRobert Mustacchi Copyright (C) 2014-2014 David Anderson. All Rights Reserved. 4*4d9fdb46SRobert Mustacchi 5*4d9fdb46SRobert Mustacchi This program is free software; you can redistribute it and/or modify it 6*4d9fdb46SRobert Mustacchi under the terms of version 2.1 of the GNU Lesser General Public License 7*4d9fdb46SRobert Mustacchi as published by the Free Software Foundation. 8*4d9fdb46SRobert Mustacchi 9*4d9fdb46SRobert Mustacchi This program is distributed in the hope that it would be useful, but 10*4d9fdb46SRobert Mustacchi WITHOUT ANY WARRANTY; without even the implied warranty of 11*4d9fdb46SRobert Mustacchi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12*4d9fdb46SRobert Mustacchi 13*4d9fdb46SRobert Mustacchi Further, this software is distributed without any warranty that it is 14*4d9fdb46SRobert Mustacchi free of the rightful claim of any third person regarding infringement 15*4d9fdb46SRobert Mustacchi or the like. Any license provided herein, whether implied or 16*4d9fdb46SRobert Mustacchi otherwise, applies only to this software file. Patent licenses, if 17*4d9fdb46SRobert Mustacchi any, provided herein do not apply to combinations of this program with 18*4d9fdb46SRobert Mustacchi other software, or any other product whatsoever. 19*4d9fdb46SRobert Mustacchi 20*4d9fdb46SRobert Mustacchi You should have received a copy of the GNU Lesser General Public 21*4d9fdb46SRobert Mustacchi License along with this program; if not, write the Free Software 22*4d9fdb46SRobert Mustacchi Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301, 23*4d9fdb46SRobert Mustacchi USA. 24*4d9fdb46SRobert Mustacchi 25*4d9fdb46SRobert Mustacchi 26*4d9fdb46SRobert Mustacchi */ 27*4d9fdb46SRobert Mustacchi 28*4d9fdb46SRobert Mustacchi 29*4d9fdb46SRobert Mustacchi 30*4d9fdb46SRobert Mustacchi /* The following is based on 31*4d9fdb46SRobert Mustacchi The gdb online documentation at 32*4d9fdb46SRobert Mustacchi https://sourceware.org/gdb/onlinedocs/gdb/ 33*4d9fdb46SRobert Mustacchi Appendix J, ".gdb_index section format". 34*4d9fdb46SRobert Mustacchi */ 35*4d9fdb46SRobert Mustacchi 36*4d9fdb46SRobert Mustacchi 37*4d9fdb46SRobert Mustacchi /* These are the two types .gdb_index uses. 38*4d9fdb46SRobert Mustacchi the offset_type (32 bits) and other fields 39*4d9fdb46SRobert Mustacchi defined 64 bits. We use our own Dwarf_Unsigned 40*4d9fdb46SRobert Mustacchi for all the interfaces, these are just for reading 41*4d9fdb46SRobert Mustacchi the section data. 42*4d9fdb46SRobert Mustacchi 43*4d9fdb46SRobert Mustacchi The section data is defined to be in little-endian regardless of 44*4d9fdb46SRobert Mustacchi the target machine. 45*4d9fdb46SRobert Mustacchi We use our host endianness in all interfaces. 46*4d9fdb46SRobert Mustacchi 47*4d9fdb46SRobert Mustacchi We simply assume unsigned int is 32 bits FIXME. 48*4d9fdb46SRobert Mustacchi */ 49*4d9fdb46SRobert Mustacchi 50*4d9fdb46SRobert Mustacchi typedef unsigned int gdbindex_offset_type; 51*4d9fdb46SRobert Mustacchi typedef Dwarf_Unsigned gdbindex_64; 52*4d9fdb46SRobert Mustacchi 53*4d9fdb46SRobert Mustacchi enum gdbindex_type_e { 54*4d9fdb46SRobert Mustacchi git_unknown, 55*4d9fdb46SRobert Mustacchi git_std, 56*4d9fdb46SRobert Mustacchi git_address, 57*4d9fdb46SRobert Mustacchi git_cuvec 58*4d9fdb46SRobert Mustacchi }; 59*4d9fdb46SRobert Mustacchi 60*4d9fdb46SRobert Mustacchi struct Dwarf_Gdbindex_array_instance_s { 61*4d9fdb46SRobert Mustacchi Dwarf_Small * dg_base; 62*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dg_count; 63*4d9fdb46SRobert Mustacchi /* the in_object struct size. */ 64*4d9fdb46SRobert Mustacchi Dwarf_Unsigned dg_entry_length; 65*4d9fdb46SRobert Mustacchi /* The size of a single field in the in-object struct */ 66*4d9fdb46SRobert Mustacchi int dg_fieldlen; 67*4d9fdb46SRobert Mustacchi /* The address_area type is a bit irregular. */ 68*4d9fdb46SRobert Mustacchi enum gdbindex_type_e dg_type; 69*4d9fdb46SRobert Mustacchi }; 70*4d9fdb46SRobert Mustacchi 71*4d9fdb46SRobert Mustacchi struct Dwarf_Gdbindex_s { 72*4d9fdb46SRobert Mustacchi Dwarf_Debug gi_dbg; 73*4d9fdb46SRobert Mustacchi Dwarf_Small * gi_section_data; 74*4d9fdb46SRobert Mustacchi Dwarf_Unsigned gi_section_length; 75*4d9fdb46SRobert Mustacchi 76*4d9fdb46SRobert Mustacchi Dwarf_Unsigned gi_version; 77*4d9fdb46SRobert Mustacchi Dwarf_Unsigned gi_cu_list_offset; 78*4d9fdb46SRobert Mustacchi Dwarf_Unsigned gi_types_cu_list_offset; 79*4d9fdb46SRobert Mustacchi Dwarf_Unsigned gi_address_area_offset; 80*4d9fdb46SRobert Mustacchi Dwarf_Unsigned gi_symbol_table_offset; 81*4d9fdb46SRobert Mustacchi Dwarf_Unsigned gi_constant_pool_offset; 82*4d9fdb46SRobert Mustacchi struct Dwarf_Gdbindex_array_instance_s gi_culisthdr; 83*4d9fdb46SRobert Mustacchi struct Dwarf_Gdbindex_array_instance_s gi_typesculisthdr; 84*4d9fdb46SRobert Mustacchi struct Dwarf_Gdbindex_array_instance_s gi_addressareahdr; 85*4d9fdb46SRobert Mustacchi struct Dwarf_Gdbindex_array_instance_s gi_symboltablehdr; 86*4d9fdb46SRobert Mustacchi struct Dwarf_Gdbindex_array_instance_s gi_cuvectorhdr; 87*4d9fdb46SRobert Mustacchi 88*4d9fdb46SRobert Mustacchi Dwarf_Small * gi_string_pool; 89*4d9fdb46SRobert Mustacchi }; 90