This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: mips gdbserver reports R0 != 0
- From: Daniel Jacobowitz <drow at mvista dot com>
- To: Atsushi Nemoto <anemo at mba dot ocn dot ne dot jp>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Tue, 27 Jan 2004 09:17:18 -0500
- Subject: Re: mips gdbserver reports R0 != 0
- References: <20040127.193715.116346446.nemoto@toshiba-tops.co.jp>
On Tue, Jan 27, 2004 at 07:37:15PM +0900, Atsushi Nemoto wrote:
> When I run gdbserver with multi-thread programs on Linux/MIPS, I
> noticed sometimes 'step' or 'next' do not work correctly. I found
> that a value of R0 register in 'info reg' output was not 0
> (0x30303030) when this problem happen.
>
> > (gdb) c
> > Continuing.
> > [New Thread 1026]
> > [Switching to Thread 1026]
> >
> > Breakpoint 2, function1 (arg=0x0) at next.c:30
> > 30 if (func1() == 0) {
> > (gdb) info reg
> > zero at v0 v1 a0 a1 a2 a3
> > R0 30303030 30048401 004009c8 00000001 00000000 00000000 7f7ffd28 00000000
>
> I could not see the reason (maybe regcache?), but this patch fixed my
> problem.
Did it fix the stepping problem, or did it fix the value displayed for
$zero?
The register at that address is actually a saved flag used for syscall
restarting. I have some local patches to support it properly, but I
haven't had time to do anything with them :( Partly because of the
number of gross hacks involved.
> --- gdb-6.0/gdb/gdbserver/linux-mips-low.c.org Wed Jun 12 02:32:39 2002
> +++ gdb-6.0/gdb/gdbserver/linux-mips-low.c Tue Jan 27 19:31:58 2004
> @@ -69,9 +69,6 @@
> if (mips_regmap[regno] == -1)
> return 1;
>
> - if (find_regno ("zero") == regno)
> - return 1;
> -
> return 0;
> }
>
> ---
> Atsushi Nemoto
>
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer