Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 May 2003 16:24:52 +1000 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Ian Dowse <iedowse@maths.tcd.ie>
Cc:        current@freebsd.org
Subject:   Re: kgdb missing stack frames
Message-ID:  <20030519161526.T22357@gamplex.bde.org>
In-Reply-To: <200305182227.aa40061@salmon.maths.tcd.ie>
References:  <200305182227.aa40061@salmon.maths.tcd.ie>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 18 May 2003, Ian Dowse wrote:

> Support for decoding i386 trap frames in kgdb appears to have been
> lost by revision 1.3 of contrib/gdb/gdb/config/i386/tm-fbsd.h, since
> FRAME_SAVED_PC() is defined there in terms of i386bsd_frame_saved_pc(),
> so fbsd_kern_frame_saved_pc() in gnu/usr.bin/binutils/gdb/kvm-fbsd.c
> never gets called. A simple way to see this is to run
>
> 	gdb -k kernel.debug /dev/mem
>
> and get a backtrace from the idle process:
>
> 	(kgdb) proc 11
> 	(kgdb) bt
> 	#0  mi_switch () at ../../../kern/kern_synch.c:530
> 	#1  0xc01edb92 in ithread_schedule (ithread=0xc1898280, do_switch=1)
> 	    at ../../../kern/kern_intr.c:402
> 	#2  0xc034ad43 in sched_ithd (cookie=0xc1894d80)
> 	    at ../../../i386/isa/ithread.c:77
> 	#3  0xc03380cc in Xintr14 () at {standard input}:382
> 	#4  0xc01ed16c in idle_proc (dummy=0x0) at ../../../kern/kern_idle.c:114
> 	#5  0xc01ecea0 in fork_exit (callout=0xc01ed130 <idle_proc>, arg=0x0,
> 	    frame=0x0) at ../../../kern/kern_fork.c:792
>
> This is what it should look like:
>
> 	(kgdb) proc 11
> 	(kgdb) bt
> 	#0  mi_switch () at ../../../kern/kern_synch.c:530
> 	#1  0xc01edb92 in ithread_schedule (ithread=0xc1898280, do_switch=1)
> 	    at ../../../kern/kern_intr.c:402
> 	#2  0xc034ad43 in sched_ithd (cookie=0xc1898280)
> 	    at ../../../i386/isa/ithread.c:77
> 	#3  0xc033e242 in cpu_idle () at ../../../i386/i386/machdep.c:1074
> 	#4  0xc01ed16c in idle_proc (dummy=0x0) at ../../../kern/kern_idle.c:114
> 	#5  0xc01ecea0 in fork_exit (callout=0xc01ed130 <idle_proc>, arg=0x0,
> 	    frame=0x0) at ../../../kern/kern_fork.c:792
>
> i.e, the cpu_idle() frame now appears instead of Xintr14().

This is no better, since it loses Xintr14()'s frame instead of cpu_idle()'s
frame.

OTOH, it wouldnt hurt in most cases to lose all the frames below
cpu_idle() and above idle_proc(), since they are not really associated
with the process.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030519161526.T22357>