[OpenBIOS] More work on Solaris 8 SPARC32 crash

Mark Cave-Ayland mark.cave-ayland at siriusit.co.uk
Sun Feb 13 15:31:51 CET 2011

Hi all,

I've spent a bit more time today trying to figure out why this crashes 
under OpenBIOS and so decided to start working backwards through the -d 
in_asm QEMU output to try and figure out why we seem to get stuck in an 
infinite loop.

Anyhow the short version is that I've traced the series of functions 
that get called just before we get stuck in the infinite loop and it 
looks like this:

0xf0044384: cbe_set_level
0xf0063954: splr
0xf0044268: cbe_enable
0xf0062cf0: __div64

... invokes "ta 2" trap instruction

0xf004127c: sys_trap()
0xf0064658: vpanic ()
0xf0064618: panic_trigger ()
0xf005bf90: trap

... infinite loop ...

The interesting part here is that the fatal trap sequence is being 
invoked from __div64 which makes me think it is some kind of divide by 
zero error. I'm not exactly sure what the cbe_* functions are doing, but 
a quick browse of the OpenSolaris source shows that it's related to 
PIL/RTC things.

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?



Mark Cave-Ayland - Senior Technical Architect
PostgreSQL - PostGIS
Sirius Corporation plc - control through freedom
t: +44 870 608 0063

Sirius Labs: http://www.siriusit.co.uk/labs

More information about the OpenBIOS mailing list