[parisc-linux] Re: Kernel faults on boot
Richard Hirst
rhirst@linuxcare.com
Mon, 11 Jun 2001 13:16:36 +0100
On Mon, Jun 11, 2001 at 01:17:39PM +0200, Peter Weilbacher wrote:
> Hmm, it seems that the numbers change every time, but here are the
> ones from the last instance:
>
> Kernel Fault: Code=15 regs=1051ca80 (Addr=1dc0ce18)
>
> YZrvWESTHLNXBCVMcbcbcbcbOGFRQPDI
> PSW: 00000000000001000000000000001111
> r0-3o 00000000 10236000 10193d70 1dc0cd18
> r4-7o 146fc000 102fe13c 00000001 00000100
> r8-11o 4020b1a8 00000000 00000004 146ff000
> r12-15o 00000100 00000030 00003000 102fe138
> r16-19o 00000080 1051c908 00000001 14786000
> r20-23o 146fc000 102959f8 101da1d4 00000000
> r24-27o 000000ff 1dc0ce18 146fc000 10268010
> r28-31o 00001920 00000004 1051ccc0 10192c78
> sr0-3o 00000000 0000012a 00000000 0000012a
> sr4-7o 00000000 00000000 00000000 00000000
>
> IASQ: 00000000 00000000 IAOQ: 10236234 10236238
> IIR: 0f221033 ISR: 00000000 IOR: 1dc0ce18
> ORIG_R28: 1005f210
>
> Phew, quite a work to type all this stuff, I am glad that you are
> not interested in the stack... Perhaps this is useful.
The 'o' chars are actually tabs, which are supposed to make the register
dump line up.
IAOQ is the most important. You can look up the value in the
sti/sys_map file on the CD:
...
10236204 T bcopy
10236228 T memcpy
1023624c T memmove
...
so it crashed in memcpy. r2 is often the return address, so back to sys_map:
...
10193a98 T vc_allocate
10193bc8 T vc_resize
10193ed8 t .L1003
10193f40 t .L1043
10193fcc T vc_disallocate
...
looks like memcpy was called from vc_resize().
r236,r25,r24,r23 are the call params, if they havn't been overwritten.
memcpy() disassembles as
00000000 <memcpy>:
0: 37 18 3f ff ldo -1(r24),r24
4: 87 1f 20 20 cmpib,= -1,r24,1c <memcpy+0x1c>
8: 08 1a 02 54 copy r26,r20
c: 0f 22 10 33 ldb,ma 1(sr0,r25),r19
10: 37 18 3f ff ldo -1(r24),r24
14: 8f 1f 3f e5 cmpib,<> -1,r24,c <memcpy+0xc>
18: 0e 93 12 22 stb,ma r19,1(sr0,r20)
1c: e8 40 c0 00 bv r0(rp)
20: 08 1a 02 5c copy r26,ret0
r26 = r20, so it failed on the first byte of the move, so call was
memcpy(0x146fc000,0x1dc0ce18,0x100);
with 0x1dc0ce18 being an invalid address.
I guess that comes from this loop in drivers/char/screen.c:
while (ol < scr_end) {
scr_memcpyw((unsigned short *) nl, (unsigned short *) ol, rlth);
if (rrem)
scr_memsetw((void *)(nl + rlth), video_erase_char, rrem);
ol += osr;
nl += sr;
}
At this point I'll stop and hope Helge can comment...
> In the meantime I noticed that about every 6th time it boots up
> without crashing, but the keyboard setting from the installation
> (German) was obviously not saved.
Correct, keyboard config is broken in the release sti image. If you
manage to boot you could try
mv /bin/loadkeys /bin/loadkeys.old
mv /bin/dumpkeys /bin/dumpkeys.old
mv /etc/console-tools /etc/console-tools.old
apt-get install console-data console-common console-tools console-tools-libs
If that works, let me know and I'll add it to the errata.
Richard