1 /* DWARF DIEs 2 3 Copyright (C) 2003-2020 Free Software Foundation, Inc. 4 5 This file is part of GDB. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20 #ifndef GDB_DWARF2_DIE_H 21 #define GDB_DWARF2_DIE_H 22 23 /* This data structure holds a complete die structure. */ 24 struct die_info 25 { 26 /* Return the named attribute or NULL if not there, but do not 27 follow DW_AT_specification, etc. */ 28 struct attribute *attr (dwarf_attribute name) 29 { 30 for (unsigned i = 0; i < num_attrs; ++i) 31 if (attrs[i].name == name) 32 return &attrs[i]; 33 return NULL; 34 } 35 36 /* Return the address base of the compile unit, which, if exists, is 37 stored either at the attribute DW_AT_GNU_addr_base, or 38 DW_AT_addr_base. */ 39 gdb::optional<ULONGEST> addr_base () 40 { 41 for (unsigned i = 0; i < num_attrs; ++i) 42 if (attrs[i].name == DW_AT_addr_base 43 || attrs[i].name == DW_AT_GNU_addr_base) 44 { 45 /* If both exist, just use the first one. */ 46 return DW_UNSND (&attrs[i]); 47 } 48 return gdb::optional<ULONGEST> (); 49 } 50 51 /* Return range lists base of the compile unit, which, if exists, is 52 stored either at the attribute DW_AT_rnglists_base or 53 DW_AT_GNU_ranges_base. */ 54 ULONGEST ranges_base () 55 { 56 for (unsigned i = 0; i < num_attrs; ++i) 57 if (attrs[i].name == DW_AT_rnglists_base 58 || attrs[i].name == DW_AT_GNU_ranges_base) 59 { 60 /* If both exist, just use the first one. */ 61 return DW_UNSND (&attrs[i]); 62 } 63 return 0; 64 } 65 66 67 /* DWARF-2 tag for this DIE. */ 68 ENUM_BITFIELD(dwarf_tag) tag : 16; 69 70 /* Number of attributes */ 71 unsigned char num_attrs; 72 73 /* True if we're presently building the full type name for the 74 type derived from this DIE. */ 75 unsigned char building_fullname : 1; 76 77 /* True if this die is in process. PR 16581. */ 78 unsigned char in_process : 1; 79 80 /* True if this DIE has children. */ 81 unsigned char has_children : 1; 82 83 /* Abbrev number */ 84 unsigned int abbrev; 85 86 /* Offset in .debug_info or .debug_types section. */ 87 sect_offset sect_off; 88 89 /* The dies in a compilation unit form an n-ary tree. PARENT 90 points to this die's parent; CHILD points to the first child of 91 this node; and all the children of a given node are chained 92 together via their SIBLING fields. */ 93 struct die_info *child; /* Its first child, if any. */ 94 struct die_info *sibling; /* Its next sibling, if any. */ 95 struct die_info *parent; /* Its parent, if any. */ 96 97 /* An array of attributes, with NUM_ATTRS elements. There may be 98 zero, but it's not common and zero-sized arrays are not 99 sufficiently portable C. */ 100 struct attribute attrs[1]; 101 }; 102 103 #endif /* GDB_DWARF2_DIE_H */ 104