Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Feb 2018 20:23:47 -0600
From:      Devin Teske <dteske@freebsd.org>
To:        Warner Losh <imp@bsdimp.com>
Cc:        Kyle Evans <kevans@freebsd.org>, =?utf-8?Q?Juan_Ram=C3=B3n_Molina_Menor?= <listjm@club.fr>, FreeBSD Current <freebsd-current@freebsd.org>, dteske@FreeBSD.org
Subject:   Re: ACPI panic on boot with new Lua loader and other minor issues
Message-ID:  <DA23AB45-A40F-4514-92BD-6799244A9E4B@freebsd.org>
In-Reply-To: <CANCZdfqLxkFb3k5nZW34m-GS48WNwio1ueJLU0vgX0-N7Br36g@mail.gmail.com>
References:  <2AFF3AE4-8740-4776-9D8D-7D709EE051C6@gmail.com> <1b9e58fe-2616-b04b-13c2-fee78a33ad6e@club.fr> <CACNAnaFNv5LwDv3Z2dgPe%2Bb%2B3La%2B%2B-4CPNECug5XCdaTT_uo3A@mail.gmail.com> <6EB9705C-92AC-4952-B1F6-642DCD4701F1@freebsd.org> <CANCZdfqLxkFb3k5nZW34m-GS48WNwio1ueJLU0vgX0-N7Br36g@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help


> On Feb 19, 2018, at 4:32 PM, Warner Losh <imp@bsdimp.com> wrote:
>=20
>=20
>=20
>> On Mon, Feb 19, 2018 at 2:57 PM, Devin Teske <dteske@freebsd.org> wrote:
>>=20
>>=20
>> > On Feb 19, 2018, at 2:21 PM, Kyle Evans <kevans@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.
>>=20
>> I can indeed confirm this as fact.
>>=20
>> Not able to help much because I am driving cross-country (San Francisco t=
o Orlando) right now with the spouse and dog.
>>=20
>> We get back March 3rd, but I will be checking-in from time to time for sp=
oradic responses during downtime.
>=20
> The command in loader.4th is defined as:
>=20
> : boot
>   0=3D if ( interpreted ) get_arguments then
>=20
>   \ 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=3D if bootmsg 0 1 boot then
> ;=20
>=20
> 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.
>=20

What is actually going on is that when the =E2=80=9Cboot=E2=80=9D function i=
s compiled, the reference to =E2=80=9Cboot=E2=80=9D inside it is to the alre=
ady-existing word defined previously. Forth allows you to have multiply-defi=
ned names. The =E2=80=9Cboot=E2=80=9D command inside the =E2=80=9Cboot=E2=80=
=9D function is replaced with the address of previous boot during function c=
ompilation because the function is m not defined and given an address in the=
 dictionary until it is completed (last line compiled).
=E2=80=94=20
Devin=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?DA23AB45-A40F-4514-92BD-6799244A9E4B>