* [Bug gdb/27899] [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs
2021-05-22 17:22 [Bug gdb/27899] New: [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs koachan+sourceware at protonmail dot com
@ 2021-05-22 17:23 ` koachan+sourceware at protonmail dot com
2021-05-23 11:54 ` simark at simark dot ca
` (8 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: koachan+sourceware at protonmail dot com @ 2021-05-22 17:23 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=27899
--- Comment #1 from Koakuma <koachan+sourceware at protonmail dot com> ---
Created attachment 13466
--> https://sourceware.org/bugzilla/attachment.cgi?id=13466&action=edit
Statically-compiled binary of the test case, made with GCC 9.3.0
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug gdb/27899] [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs
2021-05-22 17:22 [Bug gdb/27899] New: [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs koachan+sourceware at protonmail dot com
2021-05-22 17:23 ` [Bug gdb/27899] " koachan+sourceware at protonmail dot com
@ 2021-05-23 11:54 ` simark at simark dot ca
2021-05-23 11:54 ` simark at simark dot ca
` (7 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: simark at simark dot ca @ 2021-05-23 11:54 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=27899
Simon Marchi <simark at simark dot ca> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |simark at simark dot ca
--- Comment #2 from Simon Marchi <simark at simark dot ca> ---
I can confirm. Backtrace is:
#0 0xffff8001017dc004 in __GI___poll (fds=0x100012cf730, nfds=4,
timeout=<optimized out>) at ../sysdeps/unix/sysv/linux/poll.c:29
#1 0x0000010000abb004 in gdb_wait_for_event (block=1) at
/home/simark/src/binutils-gdb/gdbsupport/event-loop.cc:613
#2 0x0000010000ab9bbc in gdb_do_one_event () at
/home/simark/src/binutils-gdb/gdbsupport/event-loop.cc:237
#3 0x0000010000834d70 in gdb_readline_wrapper (prompt=0x100012cf620
"/home/simark/src/binutils-gdb/gdb/thread.c:1346: internal-error: void
switch_to_thread(thread_info*): Assertion `thr != NULL' failed.\nA problem
internal to GDB has been detected,\nfurther debugging may"...) at
/home/simark/src/binutils-gdb/gdb/top.c:1110
#4 0x00000100008eac48 in defaulted_query (ctlstr=0x10000c29670 "%s\nQuit this
debugging session? ", defchar=0 '\000', args=0x7feff97cad8) at
/home/simark/src/binutils-gdb/gdb/utils.c:893
#5 0x00000100008eb010 in query (ctlstr=0x10000c29670 "%s\nQuit this debugging
session? ") at /home/simark/src/binutils-gdb/gdb/utils.c:985
#6 0x00000100008e95dc in internal_vproblem (problem=0x10000f8b2d0
<internal_error_problem>, file=0x10000bfca20
"/home/simark/src/binutils-gdb/gdb/thread.c", line=1346, fmt=0x10000bfc918 "%s:
Assertion `%s' failed.", ap=0x7feff97cd78) at
/home/simark/src/binutils-gdb/gdb/utils.c:373
#7 0x00000100008e9a68 in internal_verror (file=0x10000bfca20
"/home/simark/src/binutils-gdb/gdb/thread.c", line=1346, fmt=0x10000bfc918 "%s:
Assertion `%s' failed.", ap=0x7feff97cd78) at
/home/simark/src/binutils-gdb/gdb/utils.c:439
#8 0x0000010000ab9968 in internal_error (file=0x10000bfca20
"/home/simark/src/binutils-gdb/gdb/thread.c", line=1346, fmt=0x10000bfc918 "%s:
Assertion `%s' failed.") at
/home/simark/src/binutils-gdb/gdbsupport/errors.cc:55
#9 0x0000010000827f3c in switch_to_thread (thr=0x0) at
/home/simark/src/binutils-gdb/gdb/thread.c:1346
#10 0x0000010000753444 in sparc_fetch_inferior_registers
(proc_target=0x10000fa8cb0 <the_sparc64_linux_nat_target>,
regcache=0x10000ff03c0, regnum=-1) at
/home/simark/src/binutils-gdb/gdb/sparc-nat.c:175
#11 0x000001000075b908 in sparc64_linux_nat_target::fetch_registers
(this=0x10000fa8cb0 <the_sparc64_linux_nat_target>, regcache=0x10000ff03c0,
regnum=-1) at /home/simark/src/binutils-gdb/gdb/sparc64-linux-nat.c:38
#12 0x00000100007fe6f4 in target_ops::fetch_registers (this=0x10000f7feb0
<the_thread_db_target>, arg0=0x10000ff03c0, arg1=-1) at
/home/simark/src/binutils-gdb/gdb/target-delegates.c:496
#13 0x00000100008162a0 in target_fetch_registers (regcache=0x10000ff03c0,
regno=-1) at /home/simark/src/binutils-gdb/gdb/target.c:3287
#14 0x000001000060a4bc in ps_lgetregs (ph=0x10001264368, lwpid=458727,
gregset=0x7feff97d388) at /home/simark/src/binutils-gdb/gdb/proc-service.c:158
#15 0xffff800103e32420 in __td_ta_lookup_th_unique (ta_arg=0x100012d7080,
lwpid=<optimized out>, th=0x7feff97d7c8) at td_ta_map_lwp2thr.c:119
#16 0xffff800103e32604 in td_ta_map_lwp2thr (ta_arg=0x100012d7080,
lwpid=<optimized out>, th=0x7feff97d7c8) at td_ta_map_lwp2thr.c:207
#17 0x000001000051fee8 in thread_from_lwp (stopped=0x100011a3650, ptid=...) at
/home/simark/src/binutils-gdb/gdb/linux-thread-db.c:415
#18 0x0000010000520150 in thread_db_notice_clone (parent=..., child=...) at
/home/simark/src/binutils-gdb/gdb/linux-thread-db.c:446
#19 0x00000100005068a8 in linux_handle_extended_wait (lp=0x10001230700,
status=4479) at /home/simark/src/binutils-gdb/gdb/linux-nat.c:1978
#20 0x000001000050a278 in linux_nat_filter_event (lwpid=458724, status=198015)
at /home/simark/src/binutils-gdb/gdb/linux-nat.c:2913
#21 0x000001000050b818 in linux_nat_wait_1 (ptid=..., ourstatus=0x7feff97e8d0,
target_options=...) at /home/simark/src/binutils-gdb/gdb/linux-nat.c:3194
#22 0x000001000050ca4c in linux_nat_target::wait (this=0x10000fa8cb0
<the_sparc64_linux_nat_target>, ptid=..., ourstatus=0x7feff97e8d0,
target_options=...) at /home/simark/src/binutils-gdb/gdb/linux-nat.c:3432
#23 0x00000100005237ec in thread_db_target::wait (this=0x10000f7feb0
<the_thread_db_target>, ptid=..., ourstatus=0x7feff97e8d0, options=...) at
/home/simark/src/binutils-gdb/gdb/linux-thread-db.c:1379
#24 0x00000100007fa668 in target_wait (ptid=..., status=0x7feff97e8d0,
options=...) at /home/simark/src/binutils-gdb/gdb/target.c:2000
#25 0x00000100004adb0c in do_target_wait_1 (inf=0x10001173170, ptid=...,
status=0x7feff97e8d0, options=...) at
/home/simark/src/binutils-gdb/gdb/infrun.c:3464
#26 0x00000100004add48 in operator() (__closure=0x7feff97e658,
inf=0x10001173170) at /home/simark/src/binutils-gdb/gdb/infrun.c:3527
#27 0x00000100004ae15c in do_target_wait (wait_ptid=..., ecs=0x7feff97e8a8,
options=...) at /home/simark/src/binutils-gdb/gdb/infrun.c:3540
#28 0x00000100004af254 in fetch_inferior_event () at
/home/simark/src/binutils-gdb/gdb/infrun.c:3880
#29 0x0000010000486ef8 in inferior_event_handler (event_type=INF_REG_EVENT) at
/home/simark/src/binutils-gdb/gdb/inf-loop.c:42
#30 0x000001000050ec10 in handle_target_event (error=0, client_data=0x0) at
/home/simark/src/binutils-gdb/gdb/linux-nat.c:4060
#31 0x0000010000abaed4 in handle_file_event (file_ptr=0x10001259500,
ready_mask=1) at /home/simark/src/binutils-gdb/gdbsupport/event-loop.cc:575
#32 0x0000010000abb57c in gdb_wait_for_event (block=0) at
/home/simark/src/binutils-gdb/gdbsupport/event-loop.cc:701
#33 0x0000010000ab9ac4 in gdb_do_one_event () at
/home/simark/src/binutils-gdb/gdbsupport/event-loop.cc:212
#34 0x0000010000543ee0 in start_event_loop () at
/home/simark/src/binutils-gdb/gdb/main.c:348
#35 0x00000100005440f4 in captured_command_loop () at
/home/simark/src/binutils-gdb/gdb/main.c:408
#36 0x00000100005466fc in captured_main (data=0x7feff97f168) at
/home/simark/src/binutils-gdb/gdb/main.c:1242
#37 0x00000100005467a4 in gdb_main (args=0x7feff97f168) at
/home/simark/src/binutils-gdb/gdb/main.c:1257
#38 0x00000100000c20f4 in main (argc=6, argv=0x7feff97f528) at
/home/simark/src/binutils-gdb/gdb/gdb.c:32
This is cause by my commit here:
gdb: set current thread in sparc_{fetch,collect}_inferior_registers (PR
gdb/27147)
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=d1e93af64a6b74921cca9bca8a7043855f9da10d
That commit made sparc_{fetch,collect}_inferior_registers look up the
thread_info for the given ptid and switch to that thread. However, as seen in
the stack trace, sparc_fetch_inferior_registers is called before a thread_info
exists: we are creating a regcache while creating that thread_info.
The only immediate solution I see it to directly set inferior_ptid, instead of
using switch_to_thread.
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug gdb/27899] [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs
2021-05-22 17:22 [Bug gdb/27899] New: [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs koachan+sourceware at protonmail dot com
2021-05-22 17:23 ` [Bug gdb/27899] " koachan+sourceware at protonmail dot com
2021-05-23 11:54 ` simark at simark dot ca
@ 2021-05-23 11:54 ` simark at simark dot ca
2021-05-23 13:09 ` simark at simark dot ca
` (6 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: simark at simark dot ca @ 2021-05-23 11:54 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=27899
Simon Marchi <simark at simark dot ca> changed:
What |Removed |Added
----------------------------------------------------------------------------
Ever confirmed|0 |1
Last reconfirmed| |2021-05-23
Status|UNCONFIRMED |NEW
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug gdb/27899] [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs
2021-05-22 17:22 [Bug gdb/27899] New: [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs koachan+sourceware at protonmail dot com
` (2 preceding siblings ...)
2021-05-23 11:54 ` simark at simark dot ca
@ 2021-05-23 13:09 ` simark at simark dot ca
2021-05-23 15:42 ` koachan+sourceware at protonmail dot com
` (5 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: simark at simark dot ca @ 2021-05-23 13:09 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=27899
--- Comment #3 from Simon Marchi <simark at simark dot ca> ---
Here's a patch, can you give it a try?
>From 5ba17db11ad88ae2a26183f8dd5c558b696d1c3e Mon Sep 17 00:00:00 2001
From: Simon Marchi <simon.marchi@polymtl.ca>
Date: Sun, 23 May 2021 07:48:34 -0400
Subject: [PATCH] fix
Change-Id: I0b6ddb3af9b11f67b10ee46a734fb82ecc6462d5
---
gdb/sparc-nat.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/gdb/sparc-nat.c b/gdb/sparc-nat.c
index fa3b32cee184..7f09a60420db 100644
--- a/gdb/sparc-nat.c
+++ b/gdb/sparc-nat.c
@@ -170,9 +170,8 @@ sparc_fetch_inferior_registers (process_stratum_target
*proc_target,
/* Deep down, sparc_supply_rwindow reads memory, so needs the global
thread context to be set. */
- thread_info *thread = find_thread_ptid (proc_target, ptid);
- scoped_restore_current_thread restore_thread;
- switch_to_thread (thread);
+ scoped_restore restore_inferior_ptid
+ = make_scoped_restore (&inferior_ptid, ptid);
sparc_supply_gregset (sparc_gregmap, regcache, -1, ®s);
if (regnum != -1)
@@ -219,9 +218,8 @@ sparc_store_inferior_registers (process_stratum_target
*proc_target,
/* Deep down, sparc_collect_rwindow writes memory, so needs the
global
thread context to be set. */
- thread_info *thread = find_thread_ptid (proc_target, ptid);
- scoped_restore_current_thread restore_thread;
- switch_to_thread (thread);
+ scoped_restore restore_inferior_ptid
+ = make_scoped_restore (&inferior_ptid, ptid);
sparc_collect_rwindow (regcache, sp, regnum);
}
--
2.31.1
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug gdb/27899] [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs
2021-05-22 17:22 [Bug gdb/27899] New: [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs koachan+sourceware at protonmail dot com
` (3 preceding siblings ...)
2021-05-23 13:09 ` simark at simark dot ca
@ 2021-05-23 15:42 ` koachan+sourceware at protonmail dot com
2021-05-25 14:10 ` koachan+sourceware at protonmail dot com
` (4 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: koachan+sourceware at protonmail dot com @ 2021-05-23 15:42 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=27899
--- Comment #4 from Koakuma <koachan+sourceware at protonmail dot com> ---
(In reply to Simon Marchi from comment #3)
> Here's a patch, can you give it a try?
Hmm, yeah, the patch works for me, at least for the test case.
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug gdb/27899] [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs
2021-05-22 17:22 [Bug gdb/27899] New: [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs koachan+sourceware at protonmail dot com
` (4 preceding siblings ...)
2021-05-23 15:42 ` koachan+sourceware at protonmail dot com
@ 2021-05-25 14:10 ` koachan+sourceware at protonmail dot com
2021-05-27 2:34 ` simark at simark dot ca
` (3 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: koachan+sourceware at protonmail dot com @ 2021-05-25 14:10 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=27899
--- Comment #5 from Koakuma <koachan+sourceware at protonmail dot com> ---
I've tried the patch on several other binaries, and it seems to work on them
too, thanks!
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug gdb/27899] [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs
2021-05-22 17:22 [Bug gdb/27899] New: [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs koachan+sourceware at protonmail dot com
` (5 preceding siblings ...)
2021-05-25 14:10 ` koachan+sourceware at protonmail dot com
@ 2021-05-27 2:34 ` simark at simark dot ca
2021-05-31 1:17 ` simark at simark dot ca
` (2 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: simark at simark dot ca @ 2021-05-27 2:34 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=27899
Simon Marchi <simark at simark dot ca> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|--- |11.1
Status|NEW |ASSIGNED
--- Comment #6 from Simon Marchi <simark at simark dot ca> ---
Marking target milestone GDB 11 so we remember to fix this for GDB 11.
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug gdb/27899] [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs
2021-05-22 17:22 [Bug gdb/27899] New: [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs koachan+sourceware at protonmail dot com
` (6 preceding siblings ...)
2021-05-27 2:34 ` simark at simark dot ca
@ 2021-05-31 1:17 ` simark at simark dot ca
2021-06-07 15:03 ` cvs-commit at gcc dot gnu.org
2021-06-07 15:04 ` simark at simark dot ca
9 siblings, 0 replies; 11+ messages in thread
From: simark at simark dot ca @ 2021-05-31 1:17 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=27899
--- Comment #7 from Simon Marchi <simark at simark dot ca> ---
Patch posted here:
https://sourceware.org/pipermail/gdb-patches/2021-May/179382.html
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug gdb/27899] [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs
2021-05-22 17:22 [Bug gdb/27899] New: [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs koachan+sourceware at protonmail dot com
` (7 preceding siblings ...)
2021-05-31 1:17 ` simark at simark dot ca
@ 2021-06-07 15:03 ` cvs-commit at gcc dot gnu.org
2021-06-07 15:04 ` simark at simark dot ca
9 siblings, 0 replies; 11+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2021-06-07 15:03 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=27899
--- Comment #8 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Simon Marchi <simark@sourceware.org>:
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=cfa8e270c9dce83e89b03bc5d793835027731891
commit cfa8e270c9dce83e89b03bc5d793835027731891
Author: Simon Marchi <simon.marchi@polymtl.ca>
Date: Mon Jun 7 11:03:04 2021 -0400
gdb: set only inferior_ptid in sparc_{fetch,store}_inferior_registers
The past commit d1e93af64a6b ("gdb: set current thread in
sparc_{fetch,collect}_inferior_registers (PR gdb/27147)") changed
sparc_fetch_inferior_registers and sparc_store_inferior_registers to
look up the thread corresponding to the regcache's ptid and make it the
current thread. The reason being that down the call chain, some
functions (like sparc_supply_rwindow) can do some memory reads or write,
through target_read_memory/target_write_memory, and those rely on the
current global context.
There is one small problem with this approach: when debugging a
multi-threaded program, the regcache for a new thread is created just
before the corresponding thread_info is created. In fact, the regcache
is created somewhere during the call to thread_from_lwp, which is
responsible for creating the thread_info:
#8 0x0000010000ab9968 in internal_error (file=0x10000bfca20
"/home/simark/src/binutils-gdb/gdb/thread.c", line=1346, fmt=0x10000bfc918 "%s:
Assertion `%s' failed.") at
/home/simark/src/binutils-gdb/gdbsupport/errors.cc:55
#9 0x0000010000827f3c in switch_to_thread (thr=0x0) at
/home/simark/src/binutils-gdb/gdb/thread.c:1346
#10 0x0000010000753444 in sparc_fetch_inferior_registers
(proc_target=0x10000fa8cb0 <the_sparc64_linux_nat_target>,
regcache=0x10000ff03c0, regnum=-1) at
/home/simark/src/binutils-gdb/gdb/sparc-nat.c:175
#11 0x000001000075b908 in sparc64_linux_nat_target::fetch_registers
(this=0x10000fa8cb0 <the_sparc64_linux_nat_target>, regcache=0x10000ff03c0,
regnum=-1) at /home/simark/src/binutils-gdb/gdb/sparc64-linux-nat.c:38
#12 0x00000100007fe6f4 in target_ops::fetch_registers
(this=0x10000f7feb0 <the_thread_db_target>, arg0=0x10000ff03c0, arg1=-1) at
/home/simark/src/binutils-gdb/gdb/target-delegates.c:496
#13 0x00000100008162a0 in target_fetch_registers
(regcache=0x10000ff03c0, regno=-1) at
/home/simark/src/binutils-gdb/gdb/target.c:3287
#14 0x000001000060a4bc in ps_lgetregs (ph=0x10001264368, lwpid=458727,
gregset=0x7feff97d388) at /home/simark/src/binutils-gdb/gdb/proc-service.c:158
#15 0xffff800103e32420 in __td_ta_lookup_th_unique
(ta_arg=0x100012d7080, lwpid=<optimized out>, th=0x7feff97d7c8) at
td_ta_map_lwp2thr.c:119
#16 0xffff800103e32604 in td_ta_map_lwp2thr (ta_arg=0x100012d7080,
lwpid=<optimized out>, th=0x7feff97d7c8) at td_ta_map_lwp2thr.c:207
#17 0x000001000051fee8 in thread_from_lwp (stopped=0x100011a3650,
ptid=...) at /home/simark/src/binutils-gdb/gdb/linux-thread-db.c:415
#18 0x0000010000520150 in thread_db_notice_clone (parent=...,
child=...) at /home/simark/src/binutils-gdb/gdb/linux-thread-db.c:446
#19 0x00000100005068a8 in linux_handle_extended_wait (lp=0x10001230700,
status=4479) at /home/simark/src/binutils-gdb/gdb/linux-nat.c:1978
#20 0x000001000050a278 in linux_nat_filter_event (lwpid=458724,
status=198015) at /home/simark/src/binutils-gdb/gdb/linux-nat.c:2913
#21 0x000001000050b818 in linux_nat_wait_1 (ptid=...,
ourstatus=0x7feff97e8d0, target_options=...) at
/home/simark/src/binutils-gdb/gdb/linux-nat.c:3194
#22 0x000001000050ca4c in linux_nat_target::wait (this=0x10000fa8cb0
<the_sparc64_linux_nat_target>, ptid=..., ourstatus=0x7feff97e8d0,
target_options=...) at /home/simark/src/binutils-gdb/gdb/linux-nat.c:3432
#23 0x00000100005237ec in thread_db_target::wait (this=0x10000f7feb0
<the_thread_db_target>, ptid=..., ourstatus=0x7feff97e8d0, options=...) at
/home/simark/src/binutils-gdb/gdb/linux-thread-db.c:1379
#24 0x00000100007fa668 in target_wait (ptid=..., status=0x7feff97e8d0,
options=...) at /home/simark/src/binutils-gdb/gdb/target.c:2000
#25 0x00000100004adb0c in do_target_wait_1 (inf=0x10001173170,
ptid=..., status=0x7feff97e8d0, options=...) at
/home/simark/src/binutils-gdb/gdb/infrun.c:3464
#26 0x00000100004add48 in operator() (__closure=0x7feff97e658,
inf=0x10001173170) at /home/simark/src/binutils-gdb/gdb/infrun.c:3527
#27 0x00000100004ae15c in do_target_wait (wait_ptid=...,
ecs=0x7feff97e8a8, options=...) at
/home/simark/src/binutils-gdb/gdb/infrun.c:3540
#28 0x00000100004af254 in fetch_inferior_event () at
/home/simark/src/binutils-gdb/gdb/infrun.c:3880
#29 0x0000010000486ef8 in inferior_event_handler
(event_type=INF_REG_EVENT) at /home/simark/src/binutils-gdb/gdb/inf-loop.c:42
The problem is that while sparc_fetch_inferior_registers runs and is
asked to read the registers of a given ptid, there isn't a thread_info
with that ptid yet. So, find_thread_ptid returns nullptr, and
switch_to_thread gives an internal error.
Fix this by only setting inferior_ptid, instead of the whole global
context, as switch_to_thread does. This is sufficient for
target_read_memory / target_write_memory to work down the line.
Ideally, it would be nice to be able to pass the ptid down the whole
call chain and to target_read_memory / target_write_memory, so that this
setting of inferior_ptid would not be necessary. But this is not going
to happen soon.
This fixes running a multi-threaded program, which would hit the
internal error show in the call stack above.
gdb/ChangeLog:
PR gdb/27899
* sparc-nat.c (sparc_fetch_inferior_registers): Set
inferior_ptid instead of using switch_to_thread.
(sparc_store_inferior_registers): Likewise.
Change-Id: I0b6ddb3af9b11f67b10ee46a734fb82ecc6462d5
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug gdb/27899] [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs
2021-05-22 17:22 [Bug gdb/27899] New: [GNU/Linux, sparc64] GDB crashes when debugging multithreaded programs koachan+sourceware at protonmail dot com
` (8 preceding siblings ...)
2021-06-07 15:03 ` cvs-commit at gcc dot gnu.org
@ 2021-06-07 15:04 ` simark at simark dot ca
9 siblings, 0 replies; 11+ messages in thread
From: simark at simark dot ca @ 2021-06-07 15:04 UTC (permalink / raw)
To: gdb-prs
https://sourceware.org/bugzilla/show_bug.cgi?id=27899
Simon Marchi <simark at simark dot ca> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
Resolution|--- |FIXED
--- Comment #9 from Simon Marchi <simark at simark dot ca> ---
Fixed in master.
--
You are receiving this mail because:
You are on the CC list for the bug.
^ permalink raw reply [flat|nested] 11+ messages in thread