Author: mcayland Date: Mon May 12 17:44:01 2014 New Revision: 1297 URL: http://tracker.coreboot.org/trac/openbios/changeset/1297
Log: ciface.fs: handle buggy callers to test-method
SPARC64 *BSDs accidentally call test-method with an ihandle rather than a phandle which causes OpenBIOS to crash. Work around this by checking to ensure that the phandle exists within the tree before trying to use it.
Signed-off-by: Mark Cave-Ayland mark.cave-ayland@ilande.co.uk
Modified: trunk/openbios-devel/forth/system/ciface.fs
Modified: trunk/openbios-devel/forth/system/ciface.fs ============================================================================== --- trunk/openbios-devel/forth/system/ciface.fs Mon May 12 17:43:57 2014 (r1296) +++ trunk/openbios-devel/forth/system/ciface.fs Mon May 12 17:44:01 2014 (r1297) @@ -55,6 +55,17 @@ ." <" dup cstrlen dup 20 < if type else 2drop ." BAD" then ." >" ;
+: phandle-exists? ( phandle -- found? ) + false swap 0 + begin iterate-tree ?dup while + ( found? find-ph current-ph ) + over over = if + rot drop true -rot + then + repeat + drop +; + \ ------------------------------------------------------------- \ public interface \ ------------------------------------------------------------- @@ -318,11 +329,15 @@ outer-interpreter ;
-( cstring-method phandle -- missing ) - -: test-method - swap dup cstrlen rot - find-method 0= if -1 else drop 0 then +: test-method ( cstring-method phandle -- missing? ) + swap dup cstrlen rot + + \ Check for incorrect phandle + dup phandle-exists? false = if + -1 throw + then + + find-method 0= if -1 else drop 0 then ;
finish-device