Subject: port-i386/5145: "panic: ptdi" when debugging large program
To: None <firstname.lastname@example.org>
From: Andreas Gustafsson <email@example.com>
Date: 03/10/1998 22:35:53
>Synopsis: "panic: ptdi" when debugging large program
>Responsible: gnats-admin (GNATS administrator)
>Arrival-Date: Tue Mar 10 12:50:00 1998
>Originator: Andreas Gustafsson
Araneus Information Systems Oy
System: NetBSD guava.araneus.fi 1.3 NetBSD 1.3 (GUAVA) #0: Thu Feb 12 12:46:34 EET 1998 firstname.lastname@example.org:/z/src/sys/arch/i386/compile/GUAVA i386
Debugging a large program with gdb consistently causes NetBSD 1.3
(i386) to panic with "panic: ptdi".
In a message on the port-i386 list, Mark Brinicombe <email@example.com>
gave the following analysis of what appears to be the same bug:
The problem is that procfs_domem tries to fault in the page directly with
vm_fault(). However with the old pmap (pre UVM) pmap_enter() required that
a page table already existed for the page being mapped. In the fault
handler in trap.c a specific check is made and if a page table does not
exist an additional vm_fault() call is made to obtain a page table prior
to the vm_fault() call to map the actual faulting page. procfs_domem()
misses this code so a panic situation can arise.
With UVM pmap_enter() can handling mapping the page table if it does not
exist (I believe) so this problem goes away.
Attempt to debug the pigiRpc program from the Ptolemy distribution, as
in the following session log.
ptolemy@guava% which pigiRpc
ptolemy@guava% size /x/ptolemy/bin.nbsd.386/pigiRpc
text data bss dec hex
6152192 131072 679020 6962284 6a3c6c
ptolemy@guava% gdb pigiRpc
GDB is free software and you are welcome to distribute copies of it
under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.16 (i386-netbsd), Copyright 1996 Free Software Foundation, Inc...
(no debugging symbols found)...
Starting program: /x/ptolemy/bin.nbsd.386/pigiRpc
panic: ptdi 35ef063
Stoped at _Debugger0x4: leave
_Debugger(...) at _Debugger+0x4
_panic(...) at _panic+0x46
_pmap_enter(...) at _pmap_enter+0x55
_vm_fault(...) at _vm_fault+0xbca
gcc2_compiled.(...) at gcc2_compiled.+0x136
_procfs_domem(...) at _procfs_domem+0x51
_sys_ptrace(...) at _sys_ptrace+0x2b0
_syscall() at _syscall+238
--- syscall (number 26) ---
The pigiRpc binary and kernel dump are available upon request, but I
suspect any sufficiently large program will suffice to repeat the