xref: /illumos-gate/usr/src/lib/libdwarf/common/dwarf_gdbindex.h (revision 4d9fdb46b215739778ebc12079842c9905586999)
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