parent_map (parent_map &&) = default;
parent_map &operator= (parent_map &&) = default;
- /* A reasonably opaque type that is used here to combine a section
- offset and the 'dwz' flag into a single value. */
+ /* A reasonably opaque type that is used as part of a DIE range. */
enum addr_type : CORE_ADDR { };
/* Turn a section offset into a value that can be used in a parent
map. */
- static addr_type form_addr (sect_offset offset, bool is_dwz)
+ static addr_type form_addr (const gdb_byte *info_ptr)
{
- CORE_ADDR value = to_underlying (offset);
- if (is_dwz)
- value |= ((CORE_ADDR) 1) << (8 * sizeof (CORE_ADDR) - 1);
- return addr_type (value);
+ static_assert (sizeof (addr_type) >= sizeof (uintptr_t));
+ return (addr_type) (uintptr_t) info_ptr;
}
/* Add a new entry to this map. DIEs from START to END, inclusive,
with a NULL result when when we see a reference to a
DIE in another CU that we may or may not have
imported locally. */
- parent_map::addr_type addr
- = parent_map::form_addr (origin_offset, origin_is_dwz);
+ parent_map::addr_type addr = parent_map::form_addr (new_info_ptr);
if (new_reader->cu != reader->cu || new_info_ptr > watermark_ptr)
*maybe_defer = addr;
else
/* Both start and end are inclusive, so use both "+ 1" and "- 1" to
limit the range to the children of parent_entry. */
parent_map::addr_type start
- = parent_map::form_addr (parent_entry->die_offset + 1,
- reader->cu->per_cu->is_dwz);
- parent_map::addr_type end
- = parent_map::form_addr (sect_offset (info_ptr - 1 - reader->buffer),
- reader->cu->per_cu->is_dwz);
+ = parent_map::form_addr (reader->buffer
+ + to_underlying (parent_entry->die_offset)
+ + 1);
+ parent_map::addr_type end = parent_map::form_addr (info_ptr - 1);
m_die_range_map->add_entry (start, end, parent_entry);
}