Re: mips gdbserver reports R0 != 0

Daniel Jacobowitz
2004-01-27T14:17:22Z

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