[OpenBIOS] More work on Solaris 8 SPARC32 crash
Mark Cave-Ayland
mark.cave-ayland at siriusit.co.uk
Sun Feb 13 21:30:40 CET 2011
On 13/02/11 14:31, Mark Cave-Ayland wrote:
> My current feeling is that maybe OpenBIOS isn't doing something right
> with PIL state somewhere, or we're reading back a zero value from either
> the clock (or a missing OpenBIOS property) which is causing us to die in
> the division in cbe_enable(). And another thing, what does cbe actually
> stand for?
Finally I finally have made some progress! :) Firstly here is the gdb
session with OpenBIOS from SVN trunk at the point where we hit the
division by zero:
build at zeno:~/src/openbios/openbios-git/openbios-devel$ sparc64-linux-gdb
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-unknown-linux-gnu
--target=sparc64-linux".
(gdb) target remote :1234
Remote debugging using :1234
[New Thread 1]
0x00000000 in ?? ()
(gdb) file ../../ss5
A program is being debugged already.
Are you sure you want to change the file? (y or n) y
Reading symbols from /home/build/src/openbios/ss5...(no debugging
symbols found)...done.
(gdb) break *0xf00a3f2c
Breakpoint 1 at 0xf00a3f2c
(gdb) cont
Continuing.
Breakpoint 1, 0xf00a3f2c in ?? ()
(gdb) stepi
0xf00a3f30 in ?? ()
(gdb)
0xf0062cf0 in __div64 ()
(gdb)
0xf0062cf4 in __div64 ()
(gdb)
0xf0062cf8 in __div64 ()
(gdb) info regi i0
i0 0x0 0
(gdb) info regi i1
i1 0x3e60c 255500
(gdb) info regi i2
i2 0x0 0
(gdb) info regi i3
i3 0x0 0
(gdb)
Browsing around the Linux source code, I saw some comments mentioning
that the level 14 timer was handled by OBP, so I made the following
experimental change in drivers/obio.c:
counter_regs->cpu_timers[0].l14_timer_limit = 0x55555555;
And now I don't get the divide by zero error any more:
build at zeno:~/src/openbios/openbios-git/openbios-devel$ sparc64-linux-gdb
GNU gdb 6.8
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-unknown-linux-gnu
--target=sparc64-linux".
(gdb) target remote :1234
Remote debugging using :1234
[New Thread 1]
0x00000000 in ?? ()
(gdb) file ../../ss5
A program is being debugged already.
Are you sure you want to change the file? (y or n) y
Reading symbols from /home/build/src/openbios/ss5...(no debugging
symbols found)...done.
(gdb) break *0xf00a3f2c
Breakpoint 1 at 0xf00a3f2c
(gdb) cont
Continuing.
Breakpoint 1, 0xf00a3f2c in ?? ()
(gdb) stepi
0xf00a3f30 in ?? ()
(gdb)
0xf0062cf0 in __div64 ()
(gdb)
0xf0062cf4 in __div64 ()
(gdb)
0xf0062cf8 in __div64 ()
(gdb) info regi i0
i0 0x0 0
(gdb) info regi i1
i1 0x7a6fc 501500
(gdb) info regi i2
i2 0x0 0
(gdb) info regi i3
i3 0x53555408 1398101000
(gdb)
However I still don't get much further with the boot because I now get
stuck in another loop which keeps outputting the following onto the QEMU
console:
spurious interrupt at processor level 10
spurious interrupt at processor level 10
spurious interrupt at processor level 10
...etc...
So my next question is that if OpenBIOS is supposed to handle the level
14 timer, what should it doing with it? And is there a relationship
between the level 14 timer and level 10 timer which causes one to
trigger the other?
ATB,
Mark.
--
Mark Cave-Ayland - Senior Technical Architect
PostgreSQL - PostGIS
Sirius Corporation plc - control through freedom
http://www.siriusit.co.uk
t: +44 870 608 0063
Sirius Labs: http://www.siriusit.co.uk/labs
More information about the OpenBIOS
mailing list