This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
PATCH: Re: [RFHelp] Linux, threads, and regsets in thread_db
- From: "H . J . Lu" <hjl at lucon dot org>
- To: Daniel Jacobowitz <dmj+ at andrew dot cmu dot edu>
- Cc: GDB <gdb at sourceware dot cygnus dot com>
- Date: Wed, 14 Nov 2001 13:45:21 -0800
- Subject: PATCH: Re: [RFHelp] Linux, threads, and regsets in thread_db
- References: <20010924212808.A20851@nevyn.them.org> <20011003170848.A30843@lucon.org> <20011003211007.A12210@nevyn.them.org>
On Wed, Oct 03, 2001 at 09:10:07PM -0400, Daniel Jacobowitz wrote:
> > >
> >
> > How far have you gone on Linux/mips? I know gdb 5.1 doesn't work with
> > threads on Linux/mips. Does your change fix it? I'd like to clean up
> > glibc for mips on this.
>
> Yes. Debugging threads works reasonably well. I'm going to do more
> work about this in the next couple of months too, I think; after I go
> back to gdbserver for a little while.
I am still having problems with threads on mips. I cannot set break
point after target has run:
(gdb) run
...
(gdb) b main
reading register sp (#29): No such process.
The problem is gdb tries to read sp register in thread mode. This patch
seems to work for me.
Another problem is when I set a break point in a thread function, only
the first thread stops. I got
(gdb) b process
Breakpoint 1 at 0x400a38: file Examples/ex1.c, line 14.
(gdb) r
Starting program: /export/build/gnu/glibc/build-mipsel-linux/linuxthreads/ex1
[New Thread 1024 (LWP 26552)]
[New Thread 2049 (LWP 26569)]
[New Thread 1026 (LWP 26570)]
[Switching to Thread 1026 (LWP 26570)]
Breakpoint 1, process (arg=0x1000) at Examples/ex1.c:14
14 fprintf (stderr, "Starting process %s\n", (char *) arg);
...
Program received signal SIGTRAP, Trace/breakpoint trap.
[Switching to Thread 1024 (LWP 26552)]
0x2ab8de24 in __syscall_rt_sigsuspend () at soinit.c:56
56 soinit.c: No such file or directory.
But it may be a kernel bug.
H.J.
---
2001-11-14 H.J. Lu (hjl@gnu.org)
* mips-tdep.c (heuristic_proc_desc): Read register only when
target is running.
--- gdb/mips-tdep.c.break Mon Aug 6 17:13:24 2001
+++ gdb/mips-tdep.c Wed Nov 14 13:28:17 2001
@@ -1860,7 +1860,12 @@ static mips_extra_func_info_t
heuristic_proc_desc (CORE_ADDR start_pc, CORE_ADDR limit_pc,
struct frame_info *next_frame)
{
- CORE_ADDR sp = read_next_frame_reg (next_frame, SP_REGNUM);
+ CORE_ADDR sp;
+
+ if (target_has_execution)
+ sp = read_next_frame_reg (next_frame, SP_REGNUM);
+ else
+ sp = 0;
if (start_pc == 0)
return NULL;