aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2021-04-17 13:56:36 -0600
committerTom Tromey <tom@tromey.com>2021-04-17 13:56:36 -0600
commit42c2c69462fd83db2e0532ee57c44091bc1032f9 (patch)
tree13355973b52c4ffc51df5db1838a4907138e6270 /bfd
parentda314dd397ab967af558f2929a79349aa5f96ac8 (diff)
downloadgdb-42c2c69462fd83db2e0532ee57c44091bc1032f9.zip
gdb-42c2c69462fd83db2e0532ee57c44091bc1032f9.tar.gz
gdb-42c2c69462fd83db2e0532ee57c44091bc1032f9.tar.bz2
Handle unaligned mapping of .gdb_index
The .gdb_index was designed such that all data would be aligned. Unfortunately, we neglected to require this alignment in the objcopy instructions in the manual. As a result, in many cases, a .gdb_index in the wild will not be properly aligned by mmap. This yields undefined behavior, which is PR gdb/23743. This patch fixes the bug by always assuming that the mapping is unaligned, and using extract_unsigned_integer when needed. A new helper class is introduced to make this less painful. gdb/ChangeLog 2021-04-17 Tom Tromey <tom@tromey.com> PR gdb/23743: * dwarf2/read.c (class offset_view): New. (struct symbol_table_slot): Remove. (struct mapped_index) <symbol_table, constant_pool>: Change type. <symbol_name_index, symbol_vec_index>: New methods. <symbol_name_slot_invalid, symbol_name_at, symbol_name_count>: Rewrite. (read_gdb_index_from_buffer): Update. (struct dw2_symtab_iterator) <vec>: Change type. (dw2_symtab_iter_init_common, dw2_symtab_iter_init) (dw2_symtab_iter_next, dw2_expand_marked_cus): Update. * dwarf2/index-write.c (class data_buf) <append_data>: Remove. <append_array, append_offset>: New methods. (write_hash_table, add_address_entry, write_gdbindex_1) (write_debug_names): Update. * dwarf2/index-common.h (byte_swap, MAYBE_SWAP): Remove.
Diffstat (limited to 'bfd')
0 files changed, 0 insertions, 0 deletions