1/* DWARF abbrev table 2 3 Copyright (C) 1994-2020 Free Software Foundation, Inc. 4 5 Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, 6 Inc. with support from Florida State University (under contract 7 with the Ada Joint Program Office), and Silicon Graphics, Inc. 8 Initial contribution by Brent Benson, Harris Computer Systems, Inc., 9 based on Fred Fish's (Cygnus Support) implementation of DWARF 1 10 support. 11 12 This file is part of GDB. 13 14 This program is free software; you can redistribute it and/or modify 15 it under the terms of the GNU General Public License as published by 16 the Free Software Foundation; either version 3 of the License, or 17 (at your option) any later version. 18 19 This program is distributed in the hope that it will be useful, 20 but WITHOUT ANY WARRANTY; without even the implied warranty of 21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 GNU General Public License for more details. 23 24 You should have received a copy of the GNU General Public License 25 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 26 27#ifndef GDB_DWARF2_ABBREV_H 28#define GDB_DWARF2_ABBREV_H 29 30#include "hashtab.h" 31 32/* This data structure holds the information of an abbrev. */ 33struct abbrev_info 34 { 35 unsigned int number; /* number identifying abbrev */ 36 enum dwarf_tag tag; /* dwarf tag */ 37 unsigned short has_children; /* boolean */ 38 unsigned short num_attrs; /* number of attributes */ 39 struct attr_abbrev *attrs; /* an array of attribute descriptions */ 40 }; 41 42struct attr_abbrev 43 { 44 ENUM_BITFIELD(dwarf_attribute) name : 16; 45 ENUM_BITFIELD(dwarf_form) form : 16; 46 47 /* It is valid only if FORM is DW_FORM_implicit_const. */ 48 LONGEST implicit_const; 49 }; 50 51struct abbrev_table; 52typedef std::unique_ptr<struct abbrev_table> abbrev_table_up; 53 54/* Top level data structure to contain an abbreviation table. */ 55 56struct abbrev_table 57{ 58 static abbrev_table_up read (struct objfile *objfile, 59 struct dwarf2_section_info *section, 60 sect_offset sect_off); 61 62 /* Look up an abbrev in the table. 63 Returns NULL if the abbrev is not found. */ 64 65 struct abbrev_info *lookup_abbrev (unsigned int abbrev_number) 66 { 67 struct abbrev_info search; 68 search.number = abbrev_number; 69 70 return (struct abbrev_info *) htab_find_with_hash (m_abbrevs.get (), 71 &search, 72 abbrev_number); 73 } 74 75 /* Where the abbrev table came from. 76 This is used as a sanity check when the table is used. */ 77 const sect_offset sect_off; 78 79private: 80 81 explicit abbrev_table (sect_offset off); 82 83 DISABLE_COPY_AND_ASSIGN (abbrev_table); 84 85 /* Allocate space for a struct abbrev_info object in 86 ABBREV_TABLE. */ 87 struct abbrev_info *alloc_abbrev (); 88 89 /* Add an abbreviation to the table. */ 90 void add_abbrev (struct abbrev_info *abbrev); 91 92 /* Hash table of abbrevs. */ 93 htab_up m_abbrevs; 94 95 /* Storage for the abbrev table. */ 96 auto_obstack m_abbrev_obstack; 97}; 98 99#endif /* GDB_DWARF2_ABBREV_H */ 100