From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id CAF9A3858D39; Thu, 3 Mar 2022 19:40:58 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CAF9A3858D39 From: "simon.marchi at polymtl dot ca" To: gdb-prs@sourceware.org Subject: [Bug gdb/28942] New: Problem with breakpoint condition calling a function in multi-threaded program Date: Thu, 03 Mar 2022 19:40:58 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gdb X-Bugzilla-Component: gdb X-Bugzilla-Version: HEAD X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: simon.marchi at polymtl dot ca X-Bugzilla-Status: UNCONFIRMED 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 X-BeenThere: gdb-prs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-prs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 03 Mar 2022 19:40:58 -0000 https://sourceware.org/bugzilla/show_bug.cgi?id=3D28942 Bug ID: 28942 Summary: Problem with breakpoint condition calling a function in multi-threaded program Product: gdb Version: HEAD Status: UNCONFIRMED Severity: normal Priority: P2 Component: gdb Assignee: unassigned at sourceware dot org Reporter: simon.marchi at polymtl dot ca Target Milestone: --- This program: ---8<--- #include #include static void function_that_segfaults (void) { int *p =3D 0; *p =3D 1; } static void break_here (void) {} static void * thread_func (void *p) { for (;;) sleep (1); return NULL; } static void * thread_func2 (void *p) { sleep (1); break_here (); return NULL; } int main (void) { pthread_t threads[10]; pthread_create (&threads[0], NULL, thread_func, NULL); pthread_create (&threads[1], NULL, thread_func, NULL); pthread_create (&threads[2], NULL, thread_func, NULL); pthread_create (&threads[3], NULL, thread_func, NULL); pthread_create (&threads[5], NULL, thread_func, NULL); pthread_create (&threads[6], NULL, thread_func, NULL); pthread_create (&threads[4], NULL, thread_func2, NULL); sleep (60); return function_that_segfaults !=3D 0; } --->8--- $ gcc test.c -g3 -O0 -pthread $ ./gdb -q -nx --data-directory=3Ddata-directory a.out -ex "b break_here if function_that_segfaults()" Reading symbols from a.out... Breakpoint 1 at 0x11ae: file test.c, line 13. (gdb) r Starting program: /home/smarchi/build/binutils-gdb/gdb/a.out=20 [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". [New Thread 0x7ffff7d99700 (LWP 3567019)] [New Thread 0x7ffff7598700 (LWP 3567020)] [New Thread 0x7ffff6d97700 (LWP 3567021)] [New Thread 0x7ffff6596700 (LWP 3567022)] [New Thread 0x7ffff5d95700 (LWP 3567023)] [New Thread 0x7ffff5594700 (LWP 3567024)] [New Thread 0x7ffff4d93700 (LWP 3567025)] Error in testing breakpoint condition: Couldn't get registers: No such process. An error occurred while in a function called from GDB. Evaluation of the expression containing the function (function_that_segfaults) will be abandoned. When the function is done executing, GDB will silently stop. Selected thread is running. (gdb)=20 The "Couldn't get registers: No such process." is very strange. We expect = GDB to say that the thread received a signal (SIGSEGV) while running the hand-called function. And then if you continue with: (gdb) kill=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 Kill the program being debugged? (y or n) y [Inferior 1 (process 3567034) killed] (gdb) r=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20 Starting program: /home/smarchi/build/binutils-gdb/gdb/a.out=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 /home/smarchi/src/binutils-gdb/gdb/target.c:2607: internal-error: target_wa= it: Assertion `!proc_target->commit_resumed_state' failed.=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20 A problem internal to GDB has been detected,=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20 further debugging may prove unreliable. Looking at the proceed call here: (top-gdb) bt #0 proceed (addr=3D0x555555555189, siggnal=3DGDB_SIGNAL_0) at /home/smarchi/src/binutils-gdb/gdb/infrun.c:3046 #1 0x0000558e5d95a128 in run_inferior_call (sm=3Dstd::unique_ptr =3D {...}, call_thread=3D0x61700009e= 680, real_pc=3D0x555555555189) at /home/smarchi/src/binutils-gdb/gdb/infcall.c:6= 10 #2 0x0000558e5d95ff6e in call_function_by_hand_dummy (function=3D0x6110004= 89d00, default_return_type=3D0x0, args=3D..., dummy_dtor=3D0x0, dummy_dtor_data=3D= 0x0) at /home/smarchi/src/binutils-gdb/gdb/infcall.c:1279 #3 0x0000558e5d95b4be in call_function_by_hand (function=3D0x611000489d00, default_return_type=3D0x0, args=3D...) at /home/smarchi/src/binutils-gdb/gdb/infcall.c:741 #4 0x0000558e5d609a2e in evaluate_subexp_do_call (exp=3D0x6030001579f0, noside=3DEVAL_NORMAL, callee=3D0x611000489d00, argvec=3D..., function_name= =3D0x0, default_return_type=3D0x0) at /home/smarchi/src/binutils-gdb/gdb/eval.c:674 #5 0x0000558e5d60a7c5 in expr::operation::evaluate_funcall (this=3D0x603000157ab0, expect_type=3D0x0, exp=3D0x6030001579f0, noside=3DE= VAL_NORMAL, function_name=3D0x0, args=3Dstd::__debug::vector of length 0, capacity 0) at /home/smarchi/src/binutils-gdb/gdb/eval.c:702 #6 0x0000558e5c4090aa in expr::operation::evaluate_funcall (this=3D0x603000157ab0, expect_type=3D0x0, exp=3D0x6030001579f0, noside=3DE= VAL_NORMAL, args=3Dstd::__debug::vector of length 0, capacity 0) at /home/smarchi/src/binutils-gdb/gdb/expression.h:136 #7 0x0000558e5d60ad63 in expr::var_value_operation::evaluate_funcall (this=3D0x603000157ab0, expect_type=3D0x0, exp=3D0x6030001579f0, noside=3DE= VAL_NORMAL, args=3Dstd::__debug::vector of length 0, capacity 0) at /home/smarchi/src/binutils-gdb/gdb/eval.c:714 #8 0x0000558e5cb8d2be in expr::funcall_operation::evaluate (this=3D0x607000083f80, expect_type=3D0x0, exp=3D0x6030001579f0, noside=3DE= VAL_NORMAL) at /home/smarchi/src/binutils-gdb/gdb/expop.h:2178 #9 0x0000558e5d604e00 in expression::evaluate (During symbol reading: Child DIE 0x8d876c and its abstract origin 0x8f9b2b have different parents sthis=3D0x6030001579f0, expect_type=3D0x0, noside=3DEVAL_NORMAL) at /home/smarchi/src/binutils-gdb/gdb/eval.c:101 #10 0x0000558e5d604f71 in evaluate_expression (exp=3D0x6030001579f0, expect_type=3D0x0) at /home/smarchi/src/binutils-gdb/gdb/eval.c:115 #11 0x0000558e5c8c99b9 in breakpoint_cond_eval (exp=3D0x6030001579f0) at /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:4739 #12 0x0000558e5c8d1f11 in bpstat_check_breakpoint_conditions (bs=3D0x6060001b29c0, thread=3D0x61700009e680) at /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:5303 #13 0x0000558e5c8d4b45 in bpstat_stop_status (aspace=3D0x603000045a00, bp_addr=3D0x5555555551ae, thread=3D0x61700009e680, ws=3D..., stop_chain=3D0x6060001b29c0) at /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:5475 #14 0x0000558e5da1f939 in handle_signal_stop (ecs=3D0x7fff97a4bd50) at /home/smarchi/src/binutils-gdb/gdb/infrun.c:6200 #15 0x0000558e5da19441 in handle_inferior_event (ecs=3D0x7fff97a4bd50) at /home/smarchi/src/binutils-gdb/gdb/infrun.c:5690 #16 0x0000558e5da05206 in fetch_inferior_event () at /home/smarchi/src/binutils-gdb/gdb/infrun.c:4091 #17 0x0000558e5d94fad4 in inferior_event_handler (event_type=3DINF_REG_EVEN= T) at /home/smarchi/src/binutils-gdb/gdb/inf-loop.c:41 #18 0x0000558e5dc29bdd in handle_target_event (error=3D0, client_data=3D0x0= ) at /home/smarchi/src/binutils-gdb/gdb/linux-nat.c:4096 #19 0x0000558e5f4e4dd1 in handle_file_event (file_ptr=3D0x607000016050, ready_mask=3D1) at /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:= 574 #20 0x0000558e5f4e562c in gdb_wait_for_event (block=3D0) at /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:700 #21 0x0000558e5f4e343c in gdb_do_one_event () at /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:212 #22 0x0000558e5dd29d99 in start_event_loop () at /home/smarchi/src/binutils-gdb/gdb/main.c:421 #23 0x0000558e5dd2a1df in captured_command_loop () at /home/smarchi/src/binutils-gdb/gdb/main.c:481 #24 0x0000558e5dd2fad9 in captured_main (data=3D0x7fff97a4c200) at /home/smarchi/src/binutils-gdb/gdb/main.c:1348 #25 0x0000558e5dd2fbc2 in gdb_main (args=3D0x7fff97a4c200) at /home/smarchi/src/binutils-gdb/gdb/main.c:1363 #26 0x0000558e5c3e1ddd in main (argc=3D7, argv=3D0x7fff97a4c378) at /home/smarchi/src/binutils-gdb/gdb/gdb.c:32 We find that GDB tries to resume some other threads than the event thread (= for which we evaluate the breakpoint condition), because it thinks they are not resumed. Probably because when the linux-nat target added them, they were a= dded in the non-resumed state and stayed this way. --=20 You are receiving this mail because: You are on the CC list for the bug.=