/* DIE parent maps Copyright (C) 2025 Free Software Foundation, Inc. This file is part of GDB. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include "dwarf2/cooked-index.h" #include "dwarf2/read.h" #include "dwarf2/parent-map.h" /* Dump MAP as parent_map. */ static void dump_parent_map (dwarf2_per_bfd *per_bfd, const struct addrmap *map) { auto_obstack temp_storage; auto annotate_cooked_index_entry = [&] (struct ui_file *outfile, CORE_ADDR start_addr, const void *value) { const cooked_index_entry *parent_entry = (const cooked_index_entry *)value; gdb_printf (outfile, "\n\t"); bool found = false; for (auto sections : {per_bfd->infos, per_bfd->types}) for (auto section : sections) if ((CORE_ADDR)section.buffer <= start_addr && start_addr < (CORE_ADDR) (section.buffer + section.size)) { gdb_printf (outfile, "(section: %s, offset: 0x%" PRIx64 ")", section.get_name (), start_addr - (CORE_ADDR)section.buffer); found = true; break; } if (!found) gdb_printf (outfile, "()"); if (parent_entry == nullptr) { gdb_printf (outfile, " -> ()"); return; } gdb_printf (outfile, " -> (0x%" PRIx64 ": %s)", to_underlying (parent_entry->die_offset), parent_entry->full_name (&temp_storage)); }; addrmap_dump (const_cast (map), gdb_stdlog, nullptr, annotate_cooked_index_entry); } /* See parent-map.h. */ void parent_map::dump (dwarf2_per_bfd *per_bfd) const { dump_parent_map (per_bfd, &m_map); } /* See parent-map.h. */ void parent_map_map::dump (dwarf2_per_bfd *per_bfd) const { for (const auto &iter : m_maps) { gdb_printf (gdb_stdlog, "map start:\n"); dump_parent_map (per_bfd, iter); } }