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