Tarl Neustaedter wrote:
On 2010-8-15 9:21 AM, Mark Cave-Ayland wrote:
[...] The part I'm missing is how Fcode calling the CIF "open" word can invoke the "open" word within the /packages/ufs-file-system package which should do the right thing - anyone have any bright ideas?
There is an interpose missing in there...
Ah, yes. The scsidisk.fth does an open-package of "disk-label" (found in obp/pkg/boot/sunlabel.fth of the open-sourced openboot), which in turn does an interpose of "ufs-file-system". The interpose means that subsequent calls to open and any other functions get directed to the interposing package, which can only get to the scsidisk package by $call-parent.
Right. I've just managed to fix the memory issue I found in the Solaris 9 Fcode (it was a bug in the SPARC64 CIF implementation) and added a similar interpose behaviour described above. I'm now please to report that the Solaris 9 kernel from a Solaris 9 install CD starts to run, although it dies quite early on:
OpenBIOS for Sparc64 Configuration device id QEMU version 1 machine id 0 kernel cmdline CPUs: 1 x SUNW,UltraSPARC-IIi UUID: 00000000-0000-0000-0000-000000000000 Welcome to OpenBIOS v1.0 built on Aug 22 2010 21:23 Type 'help' for detailed information
0 > boot Trying cdrom:f... Not a bootable ELF image Not a bootable a.out image
Loading FCode image... Loaded 5936 bytes entry point is 0x4000 open isn't unique.
Jumping to entry point 0000000000100000 for type 0000000000000001... switching to new context: entry point 0x100000 stack 0x00000000ffe02b59 panic - boot: Cannot get list.
EXIT -1 >
Turning on the CIF debugging shows a couple of property lookups before this point, but nothing that gives much of a hint as to why the boot fails.