Win95/98 KERNEL32 Pagefaulting

joesoroka@hotmail.com joesoroka@hotmail.com
Sun Jan 31 23:52:00 GMT 1999


dj delorie wrote: 
> > Now, at least, xterm dumps core after pagefaulting.
> 
> If it dumps core, you should be able to use gdb to debug it too.

Yeah... Okay.  It took me a while to get xterm to compile on its 
own, but I finally did and this is as far as I can get..

CYGWIN1.DLL (symbols previously loaded)
... bunch of dlls loading ...
NTDLL.DLL (symbols previously loaded)

Breakpoint 1, 0x457740 in fork ()
(gdb) disassemble
Dump of assembler code for function fork
0x457740 <fork>:        jmp    *0x4658e0
0x457746 <fork+6>:      nop
0x457747 <fork+7>:      nop
End of assembler dump.
(gdb) display/i $pc
1: x/i $eip  0x457740 <fork>:   jmp    *0x4658e0
(gdb) stepi
Cannot access memory at address 0x2000000.
(gdb) stepi
Cannot access memory at address 0x2000000.
(gdb) stepi
... same thing ad infinitum until .. (note stepi's haven't moved pc)
(gdb) continue
Continuing.
    0       0 [main] C:\USR\USERS\JSOROKA\X11\XTERM\XTERM.EXE 1004 handle_exceptions:
Exception: STATUS_ACCESS_VIOLATION
    0   38949 [main] XTERM 1004 handle_exceptions: Dumping stack trace to XTERM.
EXE.core

.................................................
And a dialog:
XTERM caused an invalid page fault in
module KERNEL32.DLL at 015f:bff7a382.
Registers:
EAX=00000000 CS=015f EIP=bff7a382 EFLGS=00010216
EBX=005b0f68 SS=0167 ESP=025de198 EBP=025de1bc
ECX=004b003c DS=0167 ESI=0000001c FS=112f
EDX=004b003c ES=0167 EDI=00000078 GS=376e
Bytes at CS:EIP:
89 50 04 8d 04 33 50 ff 75 08 e8 70 fd ff ff eb 
Stack dump:
00000078 00000000 004b000c 004b0000 005b0f68 00000040 00000000 
000005b0 000005b1 025de1e4 bff7a541 004b0000 005b0f68 0000001c 
00000041 00000041 
...........................................
[back to gdb]
warning: cygwin: signal 20

at this point, I can only ctrl-alt-del and kill xterm.

If I stay out of fork and just step through spawn(), a function 
in xterm's main.c, I get the same page fault:

2115            if (!am_slave) {
(gdb)
2117                if (pipe(pc_pipe) || pipe(cp_pipe))
(gdb)
2120                if ((screen->pid = fork ()) == -1)
(gdb)
    0       0 [main] C:\USR\USERS\L\X11\XTERM\XTERM.EXE 1003 handle_exceptions:
Exception: STATUS_ACCESS_VIOLATION
    0    9608 [main] XTERM 1003 handle_exceptions: Dumping stack trace to XTERM.
EXE.core
2123                if (screen->pid == 0) {
(gdb) n
warning: cygwin: signal 20

But after selecting "close" in the pagefault dialog, I'm presented with the 
next line of source as if nothing happened.  I step along until...

1485                    if(screen->TekEmu) {
(gdb)
1488                            VTRun();
(gdb)

at which point an xterm window actually opens up.  I can type and cursor 
around this blank little window, but there is nothing "to" it, no shell.

I'm not familiar at all with gdb, but I'm assuming the reason I get 
"Cannot access memory at address 0x2000000." is because thats a windows dll
there.. I'm also assuming this is what the "WinXX w/ Debug Symbols" CDs 
from microsoft are for.  

ANyways, the other thing is..  I see xterm trying to open /dev/tty's all 
over the place. I never saw anything in any docs about setting up 
/dev/tty's with cygwin..  I kind of hoped it was just "taken care" of.
Whaddya think?


Joe SOroka
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request@cygnus.com" with one line of text: "help".



More information about the Cygwin mailing list