loader.4th revision 222417
1\ Copyright (c) 1999 Daniel C. Sobral <dcs@freebsd.org> 2\ All rights reserved. 3\ 4\ Redistribution and use in source and binary forms, with or without 5\ modification, are permitted provided that the following conditions 6\ are met: 7\ 1. Redistributions of source code must retain the above copyright 8\ notice, this list of conditions and the following disclaimer. 9\ 2. Redistributions in binary form must reproduce the above copyright 10\ notice, this list of conditions and the following disclaimer in the 11\ documentation and/or other materials provided with the distribution. 12\ 13\ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14\ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15\ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16\ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17\ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18\ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19\ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20\ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21\ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22\ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23\ SUCH DAMAGE. 24\ 25\ $FreeBSD: head/sys/boot/forth/loader.4th 222417 2011-05-28 08:50:38Z julian $ 26 27s" arch-i386" environment? [if] [if] 28 s" loader_version" environment? [if] 29 11 < [if] 30 .( Loader version 1.1+ required) cr 31 abort 32 [then] 33 [else] 34 .( Could not get loader version!) cr 35 abort 36 [then] 37[then] [then] 38 39256 dictthreshold ! \ 256 cells minimum free space 402048 dictincrease ! \ 2048 additional cells each time 41 42include /boot/support.4th 43 44\ ***** boot-conf 45\ 46\ Prepares to boot as specified by loaded configuration files. 47 48only forth also support-functions also builtins definitions 49 50: boot 51 0= if ( interpreted ) get_arguments then 52 53 \ Unload only if a path was passed 54 dup if 55 >r over r> swap 56 c@ [char] - <> if 57 0 1 unload drop 58 else 59 s" kernelname" getenv? if ( a kernel has been loaded ) 60 1 boot exit 61 then 62 load_kernel_and_modules 63 ?dup if exit then 64 0 1 boot exit 65 then 66 else 67 s" kernelname" getenv? if ( a kernel has been loaded ) 68 1 boot exit 69 then 70 load_kernel_and_modules 71 ?dup if exit then 72 0 1 boot exit 73 then 74 load_kernel_and_modules 75 ?dup 0= if 0 1 boot then 76; 77 78: boot-conf 79 0= if ( interpreted ) get_arguments then 80 0 1 unload drop 81 load_kernel_and_modules 82 ?dup 0= if 0 1 autoboot then 83; 84 85also forth definitions also builtins 86 87builtin: boot 88builtin: boot-conf 89 90only forth definitions also support-functions 91 92include /boot/check-password.4th 93 94\ ***** start 95\ 96\ Initializes support.4th global variables, sets loader_conf_files, 97\ process conf files, and, if any one such file was succesfully 98\ read to the end, load kernel and modules. 99 100: start ( -- ) ( throws: abort & user-defined ) 101 s" /boot/defaults/loader.conf" initialize 102 include_conf_files 103 include_nextboot_file 104 \ Will *NOT* try to load kernel and modules if no configuration file 105 \ was succesfully loaded! 106 any_conf_read? if 107 load_kernel 108 load_modules 109 then 110; 111 112\ ***** initialize 113\ 114\ Overrides support.4th initialization word with one that does 115\ everything start one does, short of loading the kernel and 116\ modules. Returns a flag 117 118: initialize ( -- flag ) 119 s" /boot/defaults/loader.conf" initialize 120 include_conf_files 121 include_nextboot_file 122 any_conf_read? 123; 124 125\ ***** read-conf 126\ 127\ Read a configuration file, whose name was specified on the command 128\ line, if interpreted, or given on the stack, if compiled in. 129 130: (read-conf) ( addr len -- ) 131 conf_files string= 132 include_conf_files \ Will recurse on new loader_conf_files definitions 133; 134 135: read-conf ( <filename> | addr len -- ) ( throws: abort & user-defined ) 136 state @ if 137 \ Compiling 138 postpone (read-conf) 139 else 140 \ Interpreting 141 bl parse (read-conf) 142 then 143; immediate 144 145\ show, enable, disable, toggle module loading. They all take module from 146\ the next word 147 148: set-module-flag ( module_addr val -- ) \ set and print flag 149 over module.flag ! 150 dup module.name strtype 151 module.flag @ if ." will be loaded" else ." will not be loaded" then cr 152; 153 154: enable-module find-module ?dup if true set-module-flag then ; 155 156: disable-module find-module ?dup if false set-module-flag then ; 157 158: toggle-module find-module ?dup if dup module.flag @ 0= set-module-flag then ; 159 160\ ***** show-module 161\ 162\ Show loading information about a module. 163 164: show-module ( <module> -- ) find-module ?dup if show-one-module then ; 165 166\ Words to be used inside configuration files 167 168: retry false ; \ For use in load error commands 169: ignore true ; \ For use in load error commands 170 171\ Return to strict forth vocabulary 172 173: #type 174 over - >r 175 type 176 r> spaces 177; 178 179: .? 2 spaces 2swap 15 #type 2 spaces type cr ; 180 181: ? 182 ['] ? execute 183 s" boot-conf" s" load kernel and modules, then autoboot" .? 184 s" read-conf" s" read a configuration file" .? 185 s" enable-module" s" enable loading of a module" .? 186 s" disable-module" s" disable loading of a module" .? 187 s" toggle-module" s" toggle loading of a module" .? 188 s" show-module" s" show module load data" .? 189; 190 191only forth also 192 193