]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
[gdb/symtab] Fix data race in get_die_type_at_offset
authorTom de Vries <tdevries@suse.de>
Fri, 15 Jul 2022 15:10:20 +0000 (17:10 +0200)
committerTom de Vries <tdevries@suse.de>
Thu, 21 Jul 2022 13:06:40 +0000 (15:06 +0200)
commitb0a46c96e426d48f8923091817701e3491dac20b
tree1131d5420882abc87fe10c5f96ee5bfe36accff6
parent19947698dedfb490ec4abde00fe8b659a1e6949f
[gdb/symtab] Fix data race in get_die_type_at_offset

Data race between:
...
==================
WARNING: ThreadSanitizer: data race (pid=28142)
  Read of size 4 at 0x7b1c0004b978 by thread T2:
    #0 htab_find_with_hash libiberty/hashtab.c:591 (gdb+0x1c5a254)
    #1 htab_find libiberty/hashtab.c:621 (gdb+0x1c5a44d)
    #2 get_die_type_at_offset gdb/dwarf2/read.c:23877 (gdb+0x872004)
    #3 get_die_type gdb/dwarf2/read.c:23890 (gdb+0x8720d0)
    #4 read_type_die gdb/dwarf2/read.c:21460 (gdb+0x8698e4)
    #5 process_die gdb/dwarf2/read.c:8674 (gdb+0x839f6e)
    #6 read_file_scope gdb/dwarf2/read.c:9610 (gdb+0x83ca5d)
    #7 process_die gdb/dwarf2/read.c:8614 (gdb+0x839e1f)
    #8 process_full_comp_unit gdb/dwarf2/read.c:8383 (gdb+0x83945e)
    #9 process_queue_item gdb/dwarf2/read.c:7592 (gdb+0x83597d)
...
and:
...
  Previous write of size 4 at 0x7b1c0004b978 by thread T1:
    #0 htab_find_with_hash libiberty/hashtab.c:591 (gdb+0x1c5a26e)
    #1 htab_find libiberty/hashtab.c:621 (gdb+0x1c5a44d)
    #2 get_die_type_at_offset gdb/dwarf2/read.c:23877 (gdb+0x872004)
    #3 get_die_type gdb/dwarf2/read.c:23890 (gdb+0x8720d0)
    #4 process_structure_scope gdb/dwarf2/read.c:14845 (gdb+0x851c12)
    #5 process_die gdb/dwarf2/read.c:8643 (gdb+0x839f24)
    #6 read_file_scope gdb/dwarf2/read.c:9610 (gdb+0x83ca5d)
    #7 process_die gdb/dwarf2/read.c:8614 (gdb+0x839e1f)
    #8 process_full_comp_unit gdb/dwarf2/read.c:8383 (gdb+0x83945e)
    #9 process_queue_item gdb/dwarf2/read.c:7592 (gdb+0x83597d)
...

Fix by using lock, also in set_die_type.
gdb/dwarf2/read.c