[gdb/symtab] Make per_cu->unit_type atomic
authorTom de Vries <tdevries@suse.de>
Thu, 14 Jul 2022 06:19:00 +0000 (08:19 +0200)
committerTom de Vries <tdevries@suse.de>
Thu, 14 Jul 2022 06:19:00 +0000 (08:19 +0200)
commitb35bd7d552f80518ad90e81f592b73ee2ef736d7
tree5e6e89287d05742cc65f54c10e4aa90d45c4522b
parent4f92e10cda142fd1f213e01a53ca687e38cddf22
[gdb/symtab] Make per_cu->unit_type atomic

With gdb with -fsanitize=thread and test-case gdb.ada/array_bounds.exp, I run
into a data race between:
...
  Read of size 1 at 0x7b2000025f0f by main thread:
    #0 packed<dwarf_unit_type, 1ul>::operator dwarf_unit_type() const packed.h:54
    #1 dwarf2_per_cu_data::set_unit_type(dwarf_unit_type) read.h:339
...
and:
...
  Previous write of size 1 at 0x7b2000025f0f by thread T3:
    #0 dwarf2_per_cu_data::set_unit_type(dwarf_unit_type) read.h:341
...

Fix this by making per_cu->unit_type atomic.

Tested on x86_64-linux.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29286
gdb/dwarf2/read.h