Tarl Neustaedter wrote:
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.
So it was a hard-coded case within /packages/disk-label after all - that explains why I couldn't figure out what was going on. Sigh.
I added a quick bit of code in packages/sun-parts.c to detect this case, but was surprised to see that it wasn't getting triggered. Some further investigation shows that device strings of the form "disk,|foo|" are being rejected by the Forth in open-dev, i.e.
s" disk" open-dev u. -> returns a valid ihandle s" disk,|foo|" open-dev u. -> returns false
I'm guessing that we should simply just split on a ',' in the same way as we would do with a ':' if it were present, i.e. and pass the remainder of the string as the package argument?