[OpenBIOS] next-property

Olivier Danet odanet at caramail.com
Fri Jan 3 20:16:27 CET 2014


On 03/01/2014 17:09, Artyom Tarasenko wrote:
> On Thu, Jan 2, 2014 at 2:43 AM, Olivier Danet <odanet at caramail.com> wrote:
>> I may have found a bug in OpenBIOS.
>>
>> An OS uses the "nextprop" iterator to scan device properties, and eventually
>>    asks about nonexistant properties.
>> "const char *obp_nextprop(int node, const char *name)"
>> (arch/sparc32/romvec.c)
>>    calls the "next-property" forth code, then pops the result.
>> According to the standard, next-property should return 0 if the property
>> selected
>>    is the last _OR_ if the property does not exist.
>> The current code in forth/admin/devices.fs returns nothing when the property
>> does
>>    not exit.
>>
>> For example (SPARC 32) :
>>
>> cd screen
>> " name" ?active-package next-property drop cr type
>>   --> returns "device_type"
>>
>> " interrupts" ?active-package next-property
>>   --> returns 0, this is the last property.
>>
>> " bozo" ?active-package next-property
>>   --> returns nothing. Which, imho, is wrong.
> Actually this matches pretty much with what OBP does:
>
> ok showstack
> ok " model" current-device next-property
> fffe61e8 4 ffffffffffffffff ok drop type
> name
> ok " bozo" current-device next-property
> ok
>
> Artyom
>
>> Here is a patch, I am not quite sure about it (debuting Forth)
>>    but it helps the target OS :
>>
>> Index: forth/device/property.fs
>> ===================================================================
>> --- forth/device/property.fs    (révision 1246)
>> +++ forth/device/property.fs    (copie de travail)
>> @@ -70,7 +70,7 @@
>>       2drop r> >dn.properties @
>>     else
>>       r> find-property dup if @ then
>> -    ?dup if >prop.next @ then
>> +    dup if >prop.next @ then
>>     then
>>
>>     ?dup if
>> ===================================================================
>>
>> The standard asks for a pointer to a zero lenght string instead of zero,
>>    the C code obp_nextprop() expects a zero. I don't know if it makes a
>>    difference.
>>
>> Olivier
>> (Btw, the OS is NetBSD :-)
>>
>>
>> --
>> OpenBIOS                 http://openbios.org/
>> Mailinglist:  http://lists.openbios.org/mailman/listinfo
>> Free your System - May the Forth be with you
>
>
You are right.
I tried on an Ultra 10 with OpenBoot 3.12.

next-property returns nothing when the property is unknown and also when 
the property is the last one.
This contradicts Sun own documentation "Writing FCode 3.x Programs".

Puzzled, I tried then on a Apple iBook G3 :
dev screen
" <something>" active-package next-property

This laptop returns :
  - true and a forth string when the property is not the last one
  - true and "0 0" when the property is the last one
  - false when the property does not exist.

Anyway, whatever method is chosen (return nothing, return zero...), 
OpenBIOS forth and/or C code ("opb_nextprop()") should be modifed to 
avoid page faults.

Olivier



More information about the OpenBIOS mailing list