changeset 18795:5ed5688cf19c

8986 loader: try_multiple_kernels does not try multiple kernels
author Toomas Soome <tsoome@me.com>
date Wed, 24 Jan 2018 16:18:00 +0200
parents 1b9f225f53c2
children ca553a1f31f0
files usr/src/boot/sys/boot/forth/support.4th
diffstat 1 files changed, 13 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/boot/sys/boot/forth/support.4th	Thu Jan 18 19:09:30 2018 +0200
+++ b/usr/src/boot/sys/boot/forth/support.4th	Wed Jan 24 16:18:00 2018 +0200
@@ -1553,17 +1553,6 @@
 
 \ Parse filename from a semicolon-separated list
 
-\ replacement, not working yet
-: newparse-; { addr len | a1 -- a' len-x addr x }
-  addr len [char] ; strchr dup if	( a1 len1 )
-    swap to a1	( store address )
-    1 - a1 @ 1 + swap ( remove match )
-    addr a1 addr -
-  else
-    0 0 addr len
-  then
-;
-
 : parse-; ( addr len -- addr' len-x addr x )
   over 0 2swap			( addr 0 addr len )
   begin
@@ -1594,11 +1583,19 @@
       dup 2 = if ." Flags      : " >r 2over type r> cr then
     then
     \ if it's xen, the xen kernel is loaded, unix needs to be loaded as module
-    s" xen_kernel" getenv -1 = if
-      1 load				\ normal kernel
-    else
-      drop
-      >r s" kernel" s" -t " r> 2 + 1 load
+    s" xen_kernel" getenv -1 <> if
+      drop			\ drop address from getenv
+      >r			\ argument count to R
+      s" kernel" s" -t "	\ push 2 strings into the stack
+      r> 2 +			\ increment argument count
+    then
+
+    1 ['] load catch dup if
+      ( addr0 len0 addr1 len1 ... args 1 error )
+      >r			\ error code to R
+      drop			\ drop 1
+      0 do 2drop loop		\ drop addr len pairs
+      r>			\ set flag for while
     then
   while
     dup 0=