149d3bc91SRichard Lowe /*
2*4d9fdb46SRobert Mustacchi    Copyright (C) 2000 Silicon Graphics, Inc.  All Rights Reserved.
3*4d9fdb46SRobert Mustacchi    Portions Copyright (C) 2008-2019  David Anderson. All Rights Reserved.
449d3bc91SRichard Lowe 
5*4d9fdb46SRobert Mustacchi    This program is free software; you can redistribute it
6*4d9fdb46SRobert Mustacchi    and/or modify it under the terms of version 2.1 of the
7*4d9fdb46SRobert Mustacchi    GNU Lesser General Public License as published by the Free
8*4d9fdb46SRobert Mustacchi    Software Foundation.
949d3bc91SRichard Lowe 
10*4d9fdb46SRobert Mustacchi    This program is distributed in the hope that it would be
11*4d9fdb46SRobert Mustacchi    useful, but WITHOUT ANY WARRANTY; without even the implied
12*4d9fdb46SRobert Mustacchi    warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
13*4d9fdb46SRobert Mustacchi    PURPOSE.
1449d3bc91SRichard Lowe 
15*4d9fdb46SRobert Mustacchi    Further, this software is distributed without any warranty
16*4d9fdb46SRobert Mustacchi    that it is free of the rightful claim of any third person
17*4d9fdb46SRobert Mustacchi    regarding infringement or the like.  Any license provided
18*4d9fdb46SRobert Mustacchi    herein, whether implied or otherwise, applies only to this
19*4d9fdb46SRobert Mustacchi    software file.  Patent licenses, if any, provided herein
20*4d9fdb46SRobert Mustacchi    do not apply to combinations of this program with other
21*4d9fdb46SRobert Mustacchi    software, or any other product whatsoever.
2249d3bc91SRichard Lowe 
23*4d9fdb46SRobert Mustacchi    You should have received a copy of the GNU Lesser General
24*4d9fdb46SRobert Mustacchi    Public License along with this program; if not, write
25*4d9fdb46SRobert Mustacchi    the Free Software Foundation, Inc., 51 Franklin Street -
26*4d9fdb46SRobert Mustacchi    Fifth Floor, Boston MA 02110-1301, USA.
2749d3bc91SRichard Lowe 
2849d3bc91SRichard Lowe */
2949d3bc91SRichard Lowe 
3049d3bc91SRichard Lowe 
3149d3bc91SRichard Lowe 
3249d3bc91SRichard Lowe 
33*4d9fdb46SRobert Mustacchi /*  In a given CU, one of these is (eventually) set up
34*4d9fdb46SRobert Mustacchi     for every abbreviation we need to find (and for all.
35*4d9fdb46SRobert Mustacchi     those ealier in the abbreviations for that CU).
36*4d9fdb46SRobert Mustacchi     So we don't want elements needlessly big.
3707dc1947SRichard Lowe */
3849d3bc91SRichard Lowe struct Dwarf_Abbrev_s {
39*4d9fdb46SRobert Mustacchi     /*  No TAG should exceed DW_TAG_hi_user, 0xffff, but
40*4d9fdb46SRobert Mustacchi         we do allow a larger value here. */
41*4d9fdb46SRobert Mustacchi     Dwarf_Unsigned dab_tag;
42*4d9fdb46SRobert Mustacchi     /*  Abbreviations are numbered (normally sequentially from
43*4d9fdb46SRobert Mustacchi         1 and so 16 bits is not enough!  */
44*4d9fdb46SRobert Mustacchi     Dwarf_Unsigned dab_code;
45*4d9fdb46SRobert Mustacchi     Dwarf_Small dab_has_child;
46*4d9fdb46SRobert Mustacchi     /*  dab_abbrev_ptr points to the abbreviations
47*4d9fdb46SRobert Mustacchi         themselves in memory, the list of attr/form
48*4d9fdb46SRobert Mustacchi         integers terminated by 0,0. */
49*4d9fdb46SRobert Mustacchi     Dwarf_Byte_Ptr dab_abbrev_ptr;
50*4d9fdb46SRobert Mustacchi     Dwarf_Debug dab_dbg;
51*4d9fdb46SRobert Mustacchi 
52*4d9fdb46SRobert Mustacchi     /* Section global offset of the abbrev. */
53*4d9fdb46SRobert Mustacchi     Dwarf_Off    dab_goffset;
54*4d9fdb46SRobert Mustacchi     /* dab_count is the number of attr/form uleb pairs */
55*4d9fdb46SRobert Mustacchi     Dwarf_Off    dab_count;
56*4d9fdb46SRobert Mustacchi 
57*4d9fdb46SRobert Mustacchi     /*  When the caller cycles through attr/form pairs
58*4d9fdb46SRobert Mustacchi         by index from zero this lets the code read just one
59*4d9fdb46SRobert Mustacchi         pair to work. */
60*4d9fdb46SRobert Mustacchi     Dwarf_Byte_Ptr dab_next_ptr;
61*4d9fdb46SRobert Mustacchi     Dwarf_Unsigned dab_next_index;
6249d3bc91SRichard Lowe };
63*4d9fdb46SRobert Mustacchi 
64*4d9fdb46SRobert Mustacchi int _dwarf_count_abbrev_entries(Dwarf_Debug dbg,
65*4d9fdb46SRobert Mustacchi     Dwarf_Byte_Ptr abbrev_ptr,
66*4d9fdb46SRobert Mustacchi     Dwarf_Byte_Ptr abbrev_section_end,
67*4d9fdb46SRobert Mustacchi     Dwarf_Unsigned *abbrev_count_out,
68*4d9fdb46SRobert Mustacchi     Dwarf_Byte_Ptr *abbrev_ptr_out,
69*4d9fdb46SRobert Mustacchi     Dwarf_Error *error);
70