From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 7A1043858C27; Fri, 4 Aug 2023 00:21:07 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7A1043858C27 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1691108467; bh=CQyHSL+EmM5YJt0hEOnQ3wApXamV9GAiFNuV5PLEo/8=; h=From:To:Subject:Date:From; b=iCABHHmZiYwUAd6p+22gmr/s7k+JspkjVA6OMP5vWRYjdHAKJQZO451CXhO9l9lKv jwJdBqk9Kf0b8mWjASw9koFBpxSRIa7wYSEvkskBDsDOZ8Hcc7hDksfW85YzsM3gX/ Ve8A5rvC7Ty//eEJQZI81Ms6xIIAuX9PJ51vV7iE= From: "vries at gcc dot gnu.org" To: gdb-prs@sourceware.org Subject: [Bug symtab/30718] New: [gdb/symtab] More index-cache data races Date: Fri, 04 Aug 2023 00:21:06 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gdb X-Bugzilla-Component: symtab X-Bugzilla-Version: HEAD X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: vries at gcc dot gnu.org X-Bugzilla-Status: NEW X-Bugzilla-Resolution: X-Bugzilla-Priority: P2 X-Bugzilla-Assigned-To: unassigned at sourceware dot org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: bug_id short_desc product version bug_status bug_severity priority component assigned_to reporter target_milestone Message-ID: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://sourceware.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 List-Id: https://sourceware.org/bugzilla/show_bug.cgi?id=3D30718 Bug ID: 30718 Summary: [gdb/symtab] More index-cache data races Product: gdb Version: HEAD Status: NEW Severity: normal Priority: P2 Component: symtab Assignee: unassigned at sourceware dot org Reporter: vries at gcc dot gnu.org Target Milestone: --- With this ( https://sourceware.org/pipermail/gdb-patches/2023-August/201335.html ) patch series applied, I still run into data races with the index-cache. Consider: ... $ cat ~/data/hello.c #include int main (void) { printf ("hello\n"); return 0; } ... Reproducer: ... $ rm -f ~/.cache/gdb/* ; TSAN_OPTIONS=3Dhistory_size=3D7 gdb -q -batch -iex= "set index-cache enabled on" ./a.out -ex "print foo" =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D WARNING: ThreadSanitizer: data race (pid=3D21912) Write of size 1 at 0x7b200000410d by main thread: #0 dw_expand_symtabs_matching_file_matcher(dwarf2_per_objfile*, gdb::function_view) /data/vries/gdb/src/gdb/dwarf2/read.c:3077 (gdb+0x88b365) #1 cooked_index_functions::expand_symtabs_matching(objfile*, gdb::function_view, lookup_name_info const*, gdb::function_view, gdb::function_view, enum_flags, domain_enum, search_domain) /data/vries/gdb/src/gdb/dwarf2/read.c:16812 (gdb+0x8c1c27) #2 objfile::map_symtabs_matching_filename(char const*, char const*, gdb::function_view) /data/vries/gdb/src/gdb/symfile-debug.c= :219 (gdb+0xf38b11) #3 iterate_over_symtabs(char const*, gdb::function_view) /data/vries/gdb/src/gdb/symtab.c:648 (gdb+0xf60869) #4 lookup_symtab(char const*) /data/vries/gdb/src/gdb/symtab.c:662 (gdb+0xf6099a) #5 classify_name /data/vries/gdb/src/gdb/c-exp.y:3083 (gdb+0x68781d) #6 c_yylex /data/vries/gdb/src/gdb/c-exp.y:3251 (gdb+0x688000) #7 c_yyparse() /data/vries/gdb/leap-15-4/build/gdb/c-exp.c.tmp:1988 (gdb+0x67b4a8) #8 c_parse(parser_state*) /data/vries/gdb/src/gdb/c-exp.y:3417 (gdb+0x68910c) #9 language_defn::parser(parser_state*) const /data/vries/gdb/src/gdb/language.c:598 (gdb+0xab90be) #10 parse_exp_in_context /data/vries/gdb/src/gdb/parse.c:414 (gdb+0xc66= f13) #11 parse_expression(char const*, innermost_block_tracker*, enum_flags) /data/vries/gdb/src/gdb/parse.c:462 (gdb+0xc671e8) #12 process_print_command_args /data/vries/gdb/src/gdb/printcmd.c:1321 (gdb+0xca34dc) #13 print_command_1 /data/vries/gdb/src/gdb/printcmd.c:1335 (gdb+0xca35= b9) #14 print_command /data/vries/gdb/src/gdb/printcmd.c:1468 (gdb+0xca3b0a) #15 do_simple_func /data/vries/gdb/src/gdb/cli/cli-decode.c:95 (gdb+0x6d949c) #16 cmd_func(cmd_list_element*, char const*, int) /data/vries/gdb/src/gdb/cli/cli-decode.c:2735 (gdb+0x6e0edd) #17 execute_command(char const*, int) /data/vries/gdb/src/gdb/top.c:575 (gdb+0xff380e) #18 catch_command_errors /data/vries/gdb/src/gdb/main.c:518 (gdb+0xb5ae= 43) #19 execute_cmdargs /data/vries/gdb/src/gdb/main.c:617 (gdb+0xb5b130) #20 captured_main_1 /data/vries/gdb/src/gdb/main.c:1289 (gdb+0xb5cc25) #21 captured_main /data/vries/gdb/src/gdb/main.c:1310 (gdb+0xb5ce68) #22 gdb_main(captured_main_args*) /data/vries/gdb/src/gdb/main.c:1339 (gdb+0xb5cf1c) #23 main /data/vries/gdb/src/gdb/gdb.c:39 (gdb+0x4167ab) Previous read of size 1 at 0x7b200000410d by thread T11: #0 write_gdbindex /data/vries/gdb/src/gdb/dwarf2/index-write.c:1214 (gdb+0x831548) #1 write_dwarf_index(dwarf2_per_bfd*, char const*, char const*, char const*, dw_index_kind) /data/vries/gdb/src/gdb/dwarf2/index-write.c:1469 (gdb+0x8327af) #2 index_cache::store(dwarf2_per_bfd*, index_cache_store_context const&) /data/vries/gdb/src/gdb/dwarf2/index-cache.c:173 (gdb+0x82daa9) #3 cooked_index::maybe_write_index(dwarf2_per_bfd*, index_cache_store_context const&) /data/vries/gdb/src/gdb/dwarf2/cooked-index.c:642 (gdb+0x7f1ca5) #4 operator() /data/vries/gdb/src/gdb/dwarf2/cooked-index.c:471 (gdb+0x7f0ea5) #5 _M_invoke /usr/include/c++/7/bits/std_function.h:316 (gdb+0x7f296f) #6 std::function::operator()() const /usr/include/c++/7/bits/std_function.h:706 (gdb+0x7008c6) #7 void std::__invoke_impl&>(std::__invoke_other, std::function&) /usr/include/c++/7/bits/invoke.h:60 (gdb+0x738114) #8 std::__invoke_result&>::type std::__invoke&>(std::function&) /usr/include/c++/7/bits/invoke.h:95 (gdb+0x737e05) #9 std::__future_base::_Task_state, std::allocator, void ()>::_M_run()::{lambda()#1}::operator()() const /usr/include/c++/7/future:1421 (gdb+0x737acd) #10 std::__future_base::_Task_setter, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state, std::allocator, void ()>::_M_run()::{lambda()#1}, void>::operator()() const /usr/include/c++/7/future:1362 (gdb+0x7385d4) #11 std::_Function_handler (), std::__future_base::_Task_setter, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state, std::allocator, void ()>::_M_run()::{lambda()#1}, void> >::_M_invoke(std::_Any_data const&) /usr/include/c++/7/bits/std_function.h:302 (gdb+0x7381d0) #12 std::function ()>::operator()() const /usr/include/c++/7/bits/std_function.h:706 (gdb+0x733597) #13 std::__future_base::_State_baseV2::_M_do_set(std::function ()>*, bool*) /usr/include/c++/7/future:561 (gdb+0x732b53) #14 void std::__invoke_impl ()>*, bool*), std::__future_base::_State_baseV2*, std::function ()>*, bool*>(std::__invoke_memfun_deref, void (std::__future_base::_State_baseV2::*&&)(std::function ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function ()>*&&, bool*&&) /usr/include/c++/7/bits/invoke.h:73 (gdb+0x734bc3) #15 std::__invoke_result ()>*, bool*), std::__future_base::_State_baseV2*, std::function ()>*, bool*>::type std::__invoke ()>*, bool*), std::__future_base::_State_baseV2*, std::function ()>*, bool*>(void (std::__future_base::_State_baseV2::*&&)(std::function ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function ()>*&&, bool*&&) /usr/include/c++/7/bits/invoke.h:95 (gdb+0x733b39) #16 std::call_once ()>*, bool*), std::__future_base::_State_baseV2*, std::function ()>*, bool*>(std::once_flag&, v= oid (std::__future_base::_State_baseV2::*&&)(std::function ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function ()>*&&, bool*&&)::{lambda()#1}::operator()() const /usr/include/c++/7/mutex:672 (gdb+0x732f81) #17 std::call_once ()>*, bool*), std::__future_base::_State_baseV2*, std::function ()>*, bool*>(std::once_flag&, v= oid (std::__future_base::_State_baseV2::*&&)(std::function ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function ()>*&&, bool*&&)::{lambda()#2}::operator()() const /usr/include/c++/7/mutex:677 (gdb+0x733026) #18 std::call_once ()>*, bool*), std::__future_base::_State_baseV2*, std::function ()>*, bool*>(std::once_flag&, v= oid (std::__future_base::_State_baseV2::*&&)(std::function ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function ()>*&&, bool*&&)::{lambda()#2}::_FUN() /usr/include/c++/7/mutex:677 (gdb+0x733066) #19 pthread_once (libtsan.so.0+0x4457c) #20 __gthread_once /usr/include/c++/7/x86_64-suse-linux/bits/gthr-default.h:699 (gdb+0x72f551) #21 void std::call_once ()>*, bool*), std::__future_base::_State_baseV2*, std::function ()>*, bool*>(std::once_flag&, v= oid (std::__future_base::_State_baseV2::*&&)(std::function ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function ()>*&&, bool*&&) /usr/include/c++/7/mutex:684 (gdb+0x733198) #22 std::__future_base::_State_baseV2::_M_set_result(std::function ()>, bool) /usr/include/c++/7/future:401 (gdb+0x7327c6) #23 std::__future_base::_Task_state, std::allocator, void ()>::_M_run() /usr/include/c++/7/future:1423 (gdb+0x737b63) #24 std::packaged_task::operator()() /usr/include/c++/7/future:1556 (gdb+0x1dad270) #25 gdb::thread_pool::thread_function() /data/vries/gdb/src/gdbsupport/thread-pool.cc:242 (gdb+0x1dacb92) #26 void std::__invoke_impl(std::__invoke_memfun_deref, void (gdb::thread_pool::*&&)= (), gdb::thread_pool*&&) /usr/include/c++/7/bits/invoke.h:73 (gdb+0x1dadc41) #27 std::__invoke_result::type std::__invoke(void (gdb::thread_pool::*&&)(), gdb::thread_pool*&&) /usr/include/c++/7/bits/invoke.h:95 (gdb+0x1dad072) #28 decltype (__invoke((_S_declval<0ul>)(), (_S_declval<1ul>)())) std::thread::_Invoker >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/include/c++/7/thread:234 (gdb+0x1db03a4) #29 std::thread::_Invoker >::operator()() /usr/include/c++/7/thread:243 (gdb+0x1db032f) #30 std::thread::_State_impl > >::_M_run() /usr/include/c++/7/thread:186 (gdb+0x1db02e4) #31 (libstdc++.so.6+0xdcac2) Location is heap block of size 120 at 0x7b2000004100 allocated by main thread: #0 operator new(unsigned long) (libtsan.so.0+0x8c57c) #1 dwarf2_per_bfd::allocate_per_cu() /data/vries/gdb/src/gdb/dwarf2/read.c:1804 (gdb+0x8862bc) #2 read_comp_units_from_section /data/vries/gdb/src/gdb/dwarf2/read.c:5= 232 (gdb+0x892ab9) #3 create_all_units /data/vries/gdb/src/gdb/dwarf2/read.c:5289 (gdb+0x893025) #4 dwarf2_build_psymtabs_hard /data/vries/gdb/src/gdb/dwarf2/read.c:5102 (gdb+0x89230b) #5 dwarf2_build_psymtabs /data/vries/gdb/src/gdb/dwarf2/read.c:3461 (gdb+0x88c9cf) #6 cooked_index_functions::read_partial_symbols(objfile*) /data/vries/gdb/src/gdb/dwarf2/read.c:16715 (gdb+0x8e7378) #7 objfile::require_partial_symbols(bool) /data/vries/gdb/src/gdb/symfile-debug.c:553 (gdb+0xf3a6cd) #8 read_symbols /data/vries/gdb/src/gdb/symfile.c:794 (gdb+0xf40002) #9 syms_from_objfile_1 /data/vries/gdb/src/gdb/symfile.c:966 (gdb+0xf40= 801) #10 syms_from_objfile /data/vries/gdb/src/gdb/symfile.c:983 (gdb+0xf408= f2) #11 symbol_file_add_with_addrs /data/vries/gdb/src/gdb/symfile.c:1086 (gdb+0xf40f2d) #12 symbol_file_add_from_bfd(gdb::ref_ptr cons= t&, char const*, enum_flags, std::vector >*, enum_flags, objfile*) /data/vries/gdb/src/gdb/symfile.c:1167 (gdb+0xf414a7) #13 symbol_file_add(char const*, enum_flags, std::vector >*, enum_flags) /data/vries/gdb/src/gdb/symfile.c:1180 (gdb+0xf41= 527) #14 symbol_file_add_main_1 /data/vries/gdb/src/gdb/symfile.c:1203 (gdb+0xf41633) #15 symbol_file_add_main(char const*, enum_flags) /data/vries/gdb/src/gdb/symfile.c:1194 (gdb+0xf415af) #16 symbol_file_add_main_adapter /data/vries/gdb/src/gdb/main.c:549 (gdb+0xb5af44) #17 catch_command_errors /data/vries/gdb/src/gdb/main.c:518 (gdb+0xb5ae= 43) #18 captured_main_1 /data/vries/gdb/src/gdb/main.c:1203 (gdb+0xb5c6bb) #19 captured_main /data/vries/gdb/src/gdb/main.c:1310 (gdb+0xb5ce68) #20 gdb_main(captured_main_args*) /data/vries/gdb/src/gdb/main.c:1339 (gdb+0xb5cf1c) #21 main /data/vries/gdb/src/gdb/gdb.c:39 (gdb+0x4167ab) Thread T11 'gdb worker' (tid=3D21926, running) created by main thread at: #0 pthread_create (libtsan.so.0+0x5ed75) #1 std::thread::_M_start_thread(std::unique_ptr >, void (*)()) (libstdc++.so.6+0xdce3b) #2 gdb::thread_pool::set_thread_count(unsigned long) /data/vries/gdb/src/gdbsupport/thread-pool.cc:168 (gdb+0x1dac81b) #3 update_thread_pool_size /data/vries/gdb/src/gdb/maint.c:857 (gdb+0xb68dc6) #4 _initialize_maint_cmds() /data/vries/gdb/src/gdb/maint.c:1478 (gdb+0xb6a845) #5 initialize_all_files() /data/vries/gdb/leap-15-4/build/gdb/init.c:728 (gdb+0x11866a6) #6 gdb_init() /data/vries/gdb/src/gdb/top.c:2313 (gdb+0xff83b8) #7 captured_main_1 /data/vries/gdb/src/gdb/main.c:1032 (gdb+0xb5bd82) #8 captured_main /data/vries/gdb/src/gdb/main.c:1310 (gdb+0xb5ce68) #9 gdb_main(captured_main_args*) /data/vries/gdb/src/gdb/main.c:1339 (gdb+0xb5cf1c) #10 main /data/vries/gdb/src/gdb/gdb.c:39 (gdb+0x4167ab) SUMMARY: ThreadSanitizer: data race /data/vries/gdb/src/gdb/dwarf2/read.c:3= 077 in dw_expand_symtabs_matching_file_matcher(dwarf2_per_objfile*, gdb::function_view) =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D No symbol "foo" in current context. ThreadSanitizer: reported 1 warnings ... --=20 You are receiving this mail because: You are on the CC list for the bug.=