> On Feb 19, 2018, at 4:32 PM, Warner Losh <i...@bsdimp.com> wrote:
> 
> 
> 
>> On Mon, Feb 19, 2018 at 2:57 PM, Devin Teske <dte...@freebsd.org> wrote:
>> 
>> 
>> > On Feb 19, 2018, at 2:21 PM, Kyle Evans <kev...@freebsd.org> wrote:
>> >
>> > It seems that the Forth loader might be doing something sneaky and
>> > replacing the standard common "boot" with a Forth boot that handles
>> > this a lot better. CC'ing dteske@ so they can confirm.
>> 
>> I can indeed confirm this as fact.
>> 
>> Not able to help much because I am driving cross-country (San Francisco to 
>> Orlando) right now with the spouse and dog.
>> 
>> We get back March 3rd, but I will be checking-in from time to time for 
>> sporadic responses during downtime.
> 
> The command in loader.4th is defined as:
> 
> : boot
>   0= if ( interpreted ) get_arguments then
> 
>   \ Unload only if a path was passed
>   dup if
>     >r over r> swap
>     c@ [char] - <> if
>       0 1 unload drop
>     else
>       s" kernelname" getenv? if ( a kernel has been loaded )
>         try-menu-unset
>         bootmsg 1 boot exit
>       then
>       load_kernel_and_modules
>       ?dup if exit then
>       try-menu-unset
>       bootmsg 0 1 boot exit
>     then
>   else
>     s" kernelname" getenv? if ( a kernel has been loaded )
>       try-menu-unset
>       bootmsg 1 boot exit
>     then
>     load_kernel_and_modules
>     ?dup if exit then
>     try-menu-unset
>     bootmsg 0 1 boot exit
>   then
>   load_kernel_and_modules
>   ?dup 0= if bootmsg 0 1 boot then
> ; 
> 
> The thing to know here is when you see 'boot' as part of above script, it's 
> calling the 'boot' cli command, not itself recursively.
> 

What is actually going on is that when the “boot” function is compiled, the 
reference to “boot” inside it is to the already-existing word defined 
previously. Forth allows you to have multiply-defined names. The “boot” command 
inside the “boot” function is replaced with the address of previous boot during 
function compilation because the function is m not defined and given an address 
in the dictionary until it is completed (last line compiled).
— 
Devin
_______________________________________________
freebsd-current@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to