Subject: gdb/insight 5.3 buggy in kernel module debug

From: renwei <[email-masked]>
Date: Tue, 08 Jul 2003 16:00:08 +0800

Is there anyone else find the same problem?

I download the gdb/insight 5.3 , want to use 
it to debug my mipsel idt334 board.
configure as --target=mipsel-linux.

when connect to the target , it always give me
some wrong addr:

new thead xxxxxx
   0xffffffff83f28040 in ??()
something like that.
and the backtrace command can't work, also.
but my gdb5.0 for mipsel is ok.

I think that's the gdb get the pc as 64bit, but my 
board's cpu is 32bit, so it can't get the correct pc ...
The kernel addr is up to 0x80000000, so it's negative.

I trace the gdb5.3 , and find the place in 
mips-tdep.c, so I just fix the read_pc , make it 
as 32bit , now it can work, and the backtrace command 
can display the call trace .

But I'm not sure if my fix is a full one ? 
Anyone have full patch please tell me ...

                                      renc

---

From: Ralf Baechle <[email-masked]>
Date: Wed, 9 Jul 2003 14:36:57 +0200

> The kernel addr is up to 0x80000000, so it's negative.

On 64-bit processors running 32-bit code the actual values in the
registers are sign-extended to 64-bit, so that behaviour of your gdb
seems right.  Fix whatever places do return a zero-extended values.

  Ralf

---

From: renwei <[email-masked]>
Date: Fri, 11 Jul 2003 10:14:44 +0800

Here's my patch to this problem, change the read pc on mips32 cpu.

Maybe someone want it.
change mips-tdep.c
///////////////////////////////////////////////////////////////////////////////////////
766c766,772
<   return read_signed_register_pid (PC_REGNUM, ptid);
---
>   /*add by renwei , if mips 32, the pc should be some positive number,
>    or the gdb can't lookup the backtrace in kernel*/
>   LONGEST lpc = read_signed_register_pid (PC_REGNUM, ptid);
>   if(REGISTER_RAW_SIZE(PC_REGNUM) < (int)sizeof(LONGEST))
>     lpc &= 0x00000000ffffffffLL;
>   
>   return lpc;
1703c1709,1714
< 
---
>   
>   /*add by renwei , if mips 32, the pc should be some positive number,
>    or the gdb can't lookup the backtrace in kernel*/
>   if(REGISTER_RAW_SIZE(PC_REGNUM) < (int)sizeof(LONGEST))
>     saved_pc &= 0x00000000ffffffffLL;
>   
/////////////////////////////////////////////////////////////////////////////////////////////

Another problem:   insight 5.3 compile error on cygwin.
fix  tclWin32Dll.c
/////////////////////////////////////////////////////////////////////////////////
121c121,122
< static Tcl_Encoding tclWinTCharEncoding;
---
> /*change this to global*/
> Tcl_Encoding tclWinTCharEncoding;
///////////////////////////////////////////////////////////////////////////////////

                                                          renc

---

From: Ralf Baechle <[email-masked]>
Date: Fri, 11 Jul 2003 04:31:01 +0200

> Here's my patch to this problem, change the read pc on mips32 cpu.

Don't send GDB patches to me, I'm not maintaining GDB; [email-masked] is
probably a better address.

Also a standard rant - never ever send ed-style patches; any maintainer
will probably just drop them.

  Ralf

---

From: Daniel Jacobowitz <[email-masked]>
Date: Thu, 10 Jul 2003 22:43:05 -0400

> will probably just drop them.

Please don't send them to me either - send them to
[email-masked], where they belong.

Andrew will tell you that the 64-bit signed PC is correct.  The bug is
in whatever code is not sign extending, probably in the symbol reader. 
If you're using stabs try dwarf-2 instead.

-- 
Daniel Jacobowitz
MontaVista Software                         Debian GNU/Linux Developer