svn commit: r228985 - head/sys/boot/forth

Sergey Kandaurov pluknet at freebsd.org
Sun Jan 8 20:35:54 UTC 2012


On 8 January 2012 00:03, Dimitry Andric <dim at freebsd.org> wrote:
> On 2011-12-30 07:24, Sergey Kandaurov wrote:
>>
>> Author: pluknet
>> Date: Fri Dec 30 06:24:59 2011
>> New Revision: 228985
>> URL: http://svn.freebsd.org/changeset/base/228985
>>
>> Log:
>>   Unset the environment variables associated with individual menu items
>>   before invoking the kernel.
>
>
> When I did a single-user mode boot to install a new world, I saw the
> following warning on the (serial) console during boot:
>
>  /boot.config: -D -S115200
>  Consoles: internal video/keyboard  serial port
>  BIOS drive A: is disk0
>  BIOS drive C: is disk1
>  BIOS 638kB/3143616kB available memory
>
>  FreeBSD/x86 bootstrap loader, Revision 1.1
>  (dim at vm-freebsd10-amd64.home.andric.com, Sat Jan  7 01:05:07 CET 2012)
>  Loading /boot/defaults/loader.conf
>  /boot/kernel/kernel data=0xb73530 data=0x11dbe0+0x2b4db8
> syms=[0x8+0xfd620+0x8+0xec6b6]
>  -
>  Hit [Enter] to boot immediately, or any other key for command prompt.
>
>
>  Type '?' for a list of commands, 'help' for more detailed help.
>  OK boot -s
>  menu-unset not found           <<-- what's this?
>  GDB: no debug ports present
>  KDB: debugger backends: ddb
>  KDB: current backend: ddb
>  [...kernel boots...]
>
> E.g, it always gives a 'menu-unset not found' warning (or maybe it's an
> error, it's not clear).  This was not the case before r228985.
>
> I have almost no knowledge about forth, but it looks like this might be
> caused by the new try-menu-unset subroutine.
>
> My loader.conf is just this:
>
>  beastie_disable="YES"
>  comconsole_speed="115200"
>  console="comconsole vidconsole"
>  kern.hz="100"

So, the problem arise when beastie_disable is set.

In this case menu.rc is not evaluated and consequently menu-unset does
not have a body yet. This results in the ficl warning "not found" when
try-menu-unset calls menu-unset. The warning cannot be handled with catch
as seen with the code in head.
Otherwise, when beastie is enabled, all works as it should.

To "fix" the problem I replaced 'catch' with 'sfind', so that we can
conditionally call menu-unset only when the definition is present.

Please try the following patch. I tested it with enabled/disabled beastie
and loader_color over serial console. I would also like to get a review
from Devin Teske to see if this change is acceptable.

%%%
Index: sys/boot/forth/loader.4th
===================================================================
--- sys/boot/forth/loader.4th   (revision 229670)
+++ sys/boot/forth/loader.4th   (working copy)
@@ -45,8 +45,10 @@

 : try-menu-unset
   s" menu-unset"
-  ['] evaluate catch if
-    2drop
+  sfind if
+    execute
+  else
+    drop
   then
 ;

%%%

[ It could be simplified with one-liner:
s" menu-unset" sfind drop execute
but ficl doesn't like this in a freestanding environment.]

-- 
wbr,
pluknet


More information about the svn-src-head mailing list