On 2010-5-2 7:12 PM, Mark Cave-Ayland wrote:
[...] This helps things get further, but in particular it shows that we're missing a whole set of architecture-specific Forth words for manipulating registers. The OpenSolaris kernel tries to execute the following Forth:
sync %tl-c %tstate h# 1860640 x! %g1 h# 1860648 x! %g2 h# 1860650 x! %g3 h# 1860658 x! %g4 h# 1860660 x! %g5 h# 1860668 x! %g6 h# 1860670 x! %g7 h# 1860678 x! %o0 h# 1860680 x! %o1 h# 1860688 x! %o2 h# 1860690 x! %o3 h# 1860698 x! %o4 h# 18606a0 x! %o5 h# 18606a8 x! %o6 h# 18606b0 x! %o7 h# 18606b8 x! %tl-c %tpc h# 18606c0 x! %tl-c %tnpc h# 18606c8 x! %y h# 18606d0 l! %tl-c %tt h# 1843cf8 x! sync ; warning !
(from http://src.opensolaris.org/source/xref/systemz/sirius/usr/src/uts/sun4/os/st...)
It seems that we need some Forth functions for creating/managing CPU state? I suspect I'll have to dig into the OpenBOOT source to find out how these are supposed to work.
Those are all SPARC registers. What it's doing is copying the registers to a buffer, presumably to be restored later.
It looks like the trap registers (%tstate, %tnpc, %tt) are prefixed by %tl-c - which is presumably the trap-level pointer.