Print this page
11581 'debug' loader option is a little obscure
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Rob Johnston <rob.johnston@joyent.com>


   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 \ Copyright 2015 Toomas Soome <tsoome@me.com>
  26 \ Copyright 2019 OmniOS Community Edition (OmniOSce) Association.

  27 
  28 marker task-menu-commands.4th
  29 
  30 include /boot/forth/menusets.4th
  31 
  32 only forth definitions
  33 
  34 variable osconsole_state
  35 variable acpi_state
  36 variable kernel_state
  37 variable root_state
  38 variable kmdb_state
  39 variable debug_state
  40 0 kmdb_state !
  41 0 debug_state !
  42 0 osconsole_state !
  43 0 acpi_state !
  44 0 kernel_state !
  45 0 root_state !
  46 
  47 also menu-namespace also menu-command-helpers
  48 
  49 \
  50 \ Boot
  51 \
  52 
  53 : init_boot ( N -- N )
  54         dup
  55         s" smartos" getenv? if
  56                 s" set menu_keycode[N]=98" \ base command to execute
  57         else
  58                 s" boot_single" getenv -1 <> if
  59                         drop ( n n c-addr -- n n ) \ unused
  60                         toggle_menuitem ( n n -- n n )
  61                         s" set menu_keycode[N]=115" \ base command to execute


 183 
 184         TRUE \ loop menu again
 185 ;
 186 
 187 \
 188 \ kmdb
 189 \
 190 
 191 : kmdb_enabled? ( -- flag )
 192         s" boot_kmdb" getenv -1 <> dup if
 193                 swap drop ( c-addr flag -- flag )
 194         then
 195 ;
 196 
 197 : kmdb_enable ( -- )
 198         s" set boot_kmdb=YES" evaluate
 199 ;
 200 
 201 : kmdb_disable ( -- )
 202         s" boot_kmdb" unsetenv
 203         s" boot_debug" unsetenv
 204 ;
 205 
 206 : init_kmdb ( N -- N )
 207         dup kmdb_state !                \ store entry number for kmdb+debug
 208         kmdb_enabled? if
 209                 toggle_menuitem ( n -- n )
 210         then
 211 ;
 212 
 213 : toggle_kmdb ( N -- N TRUE )
 214         toggle_menuitem
 215         dup toggle_stateN @ 0= if ( kmdb is not set )
 216                 debug_state @ if ( debug is set? )
 217                         debug_state @ toggle_stateN @ if ( debug is enabled? )
 218                                 debug_state @ toggle_menuitem drop
 219                         then
 220                 then
 221         then
 222         menu-redraw
 223 
 224         \ Now we're going to make the change effective
 225 
 226         dup toggle_stateN @ 0= if
 227                 kmdb_disable
 228         else
 229                 kmdb_enable
 230         then
 231 
 232         TRUE \ loop menu again
 233 ;
 234 
 235 \
 236 \ kmdb + debug
 237 \
 238 
 239 : debug_disable ( -- )
 240         s" boot_debug" unsetenv
 241 ;
 242 
 243 : debug_enabled? ( -- flag )
 244         \ -d is only allowed with -k
 245         s" boot_debug" getenv -1 <> kmdb_enabled? and dup if
 246                 swap drop ( c-addr flag -- flag )
 247         else
 248                 debug_disable           \ make sure env is not set
 249         then
 250 ;
 251 
 252 : debug_enable ( -- )
 253         kmdb_enable
 254         s" set boot_debug=YES" evaluate
 255 ;
 256 
 257 : init_debug ( N -- N )
 258         dup debug_state !               \ store entry number for kmdb
 259         kmdb_enabled? debug_enabled? and if
 260                 toggle_menuitem ( n -- n )
 261         then
 262 ;
 263 
 264 : toggle_debug ( N -- N TRUE )
 265         toggle_menuitem
 266         kmdb_enabled? 0= if
 267                 kmdb_state @ toggle_menuitem drop
 268         then
 269         menu-redraw
 270 
 271         \ Now we're going to make the change effective
 272 
 273         dup toggle_stateN @ 0= if
 274                 debug_disable
 275         else
 276                 debug_enable
 277         then
 278 
 279         TRUE \ loop menu again
 280 ;
 281 
 282 \
 283 \ Reconfiguration boot
 284 \
 285 
 286 : reconfigure_enabled? ( -- flag )
 287         s" boot_reconfigure" getenv -1 <> dup if
 288                 swap drop ( c-addr flag -- flag )
 289         then
 290 ;
 291 
 292 : reconfigure_enable ( -- )
 293         s" set boot_reconfigure=YES" evaluate
 294 ;
 295 
 296 : reconfigure_disable ( -- )


 506 \
 507 
 508 : goto_menu ( N M -- N TRUE )
 509         menu-unset
 510         menuset-loadsetnum ( n m -- n )
 511         menu-redraw
 512         TRUE \ Loop menu again
 513 ;
 514 
 515 \
 516 \ Defaults
 517 \
 518 
 519 : unset_boot_options
 520         0 acpi_state !
 521         s" acpi-user-options" unsetenv
 522         s" boot-args" unsetenv
 523         s" boot_ask" unsetenv
 524         singleuser_disable
 525         verbose_disable
 526         kmdb_disable            \ disables debug as well
 527         reconfigure_disable
 528 ;
 529 
 530 : set_default_boot_options ( N -- N TRUE )
 531         unset_boot_options
 532         2 goto_menu
 533 ;
 534 
 535 \
 536 \ Set boot environment defaults
 537 \
 538 
 539 
 540 : init_bootenv ( -- )
 541         s" set menu_caption[1]=${bemenu_current}${zfs_be_active}" evaluate
 542         s" set ansi_caption[1]=${beansi_current}${zfs_be_active}" evaluate
 543         s" set menu_caption[2]=${bemenu_bootfs}${currdev}" evaluate
 544         s" set ansi_caption[2]=${beansi_bootfs}${currdev}" evaluate
 545         s" set menu_caption[3]=${bemenu_page}${zfs_be_currpage}${bemenu_pageof}${zfs_be_pages}" evaluate
 546         s" set ansi_caption[3]=${beansi_page}${zfs_be_currpage}${bemenu_pageof}${zfs_be_pages}" evaluate




   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 \ Copyright 2015 Toomas Soome <tsoome@me.com>
  26 \ Copyright 2019 OmniOS Community Edition (OmniOSce) Association.
  27 \ Copyright 2019 Joyent, Inc.
  28 
  29 marker task-menu-commands.4th
  30 
  31 include /boot/forth/menusets.4th
  32 
  33 only forth definitions
  34 
  35 variable osconsole_state
  36 variable acpi_state
  37 variable kernel_state
  38 variable root_state
  39 variable kmdb_state
  40 variable drop_into_kmdb_state
  41 0 kmdb_state !
  42 0 drop_into_kmdb_state !
  43 0 osconsole_state !
  44 0 acpi_state !
  45 0 kernel_state !
  46 0 root_state !
  47 
  48 also menu-namespace also menu-command-helpers
  49 
  50 \
  51 \ Boot
  52 \
  53 
  54 : init_boot ( N -- N )
  55         dup
  56         s" smartos" getenv? if
  57                 s" set menu_keycode[N]=98" \ base command to execute
  58         else
  59                 s" boot_single" getenv -1 <> if
  60                         drop ( n n c-addr -- n n ) \ unused
  61                         toggle_menuitem ( n n -- n n )
  62                         s" set menu_keycode[N]=115" \ base command to execute


 184 
 185         TRUE \ loop menu again
 186 ;
 187 
 188 \
 189 \ kmdb
 190 \
 191 
 192 : kmdb_enabled? ( -- flag )
 193         s" boot_kmdb" getenv -1 <> dup if
 194                 swap drop ( c-addr flag -- flag )
 195         then
 196 ;
 197 
 198 : kmdb_enable ( -- )
 199         s" set boot_kmdb=YES" evaluate
 200 ;
 201 
 202 : kmdb_disable ( -- )
 203         s" boot_kmdb" unsetenv
 204         s" boot_drop_into_kmdb" unsetenv
 205 ;
 206 
 207 : init_kmdb ( N -- N )
 208         dup kmdb_state !                \ store entry number for kmdb+drop_into_kmdb
 209         kmdb_enabled? if
 210                 toggle_menuitem ( n -- n )
 211         then
 212 ;
 213 
 214 : toggle_kmdb ( N -- N TRUE )
 215         toggle_menuitem
 216         dup toggle_stateN @ 0= if ( kmdb is not set )
 217                 drop_into_kmdb_state @ if ( drop_into_kmdb is set? )
 218                         drop_into_kmdb_state @ toggle_stateN @ if ( drop_into_kmdb is enabled? )
 219                                 drop_into_kmdb_state @ toggle_menuitem drop
 220                         then
 221                 then
 222         then
 223         menu-redraw
 224 
 225         \ Now we're going to make the change effective
 226 
 227         dup toggle_stateN @ 0= if
 228                 kmdb_disable
 229         else
 230                 kmdb_enable
 231         then
 232 
 233         TRUE \ loop menu again
 234 ;
 235 
 236 \
 237 \ drop into kmdb
 238 \
 239 
 240 : drop_into_kmdb_disable ( -- )
 241         s" boot_drop_into_kmdb" unsetenv
 242 ;
 243 
 244 : drop_into_kmdb_enabled? ( -- flag )
 245         \ -d is only allowed with -k
 246         s" boot_drop_into_kmdb" getenv -1 <> kmdb_enabled? and dup if
 247                 swap drop ( c-addr flag -- flag )
 248         else
 249                 drop_into_kmdb_disable          \ make sure env is not set
 250         then
 251 ;
 252 
 253 : drop_into_kmdb_enable ( -- )
 254         kmdb_enable
 255         s" set boot_drop_into_kmdb=YES" evaluate
 256 ;
 257 
 258 : init_drop_into_kmdb ( N -- N )
 259         dup drop_into_kmdb_state !              \ store entry number for kmdb
 260         kmdb_enabled? drop_into_kmdb_enabled? and if
 261                 toggle_menuitem ( n -- n )
 262         then
 263 ;
 264 
 265 : toggle_drop_into_kmdb ( N -- N TRUE )
 266         toggle_menuitem
 267         kmdb_enabled? 0= if
 268                 kmdb_state @ toggle_menuitem drop
 269         then
 270         menu-redraw
 271 
 272         \ Now we're going to make the change effective
 273 
 274         dup toggle_stateN @ 0= if
 275                 drop_into_kmdb_disable
 276         else
 277                 drop_into_kmdb_enable
 278         then
 279 
 280         TRUE \ loop menu again
 281 ;
 282 
 283 \
 284 \ Reconfiguration boot
 285 \
 286 
 287 : reconfigure_enabled? ( -- flag )
 288         s" boot_reconfigure" getenv -1 <> dup if
 289                 swap drop ( c-addr flag -- flag )
 290         then
 291 ;
 292 
 293 : reconfigure_enable ( -- )
 294         s" set boot_reconfigure=YES" evaluate
 295 ;
 296 
 297 : reconfigure_disable ( -- )


 507 \
 508 
 509 : goto_menu ( N M -- N TRUE )
 510         menu-unset
 511         menuset-loadsetnum ( n m -- n )
 512         menu-redraw
 513         TRUE \ Loop menu again
 514 ;
 515 
 516 \
 517 \ Defaults
 518 \
 519 
 520 : unset_boot_options
 521         0 acpi_state !
 522         s" acpi-user-options" unsetenv
 523         s" boot-args" unsetenv
 524         s" boot_ask" unsetenv
 525         singleuser_disable
 526         verbose_disable
 527         kmdb_disable            \ disables drop_into_kmdb as well
 528         reconfigure_disable
 529 ;
 530 
 531 : set_default_boot_options ( N -- N TRUE )
 532         unset_boot_options
 533         2 goto_menu
 534 ;
 535 
 536 \
 537 \ Set boot environment defaults
 538 \
 539 
 540 
 541 : init_bootenv ( -- )
 542         s" set menu_caption[1]=${bemenu_current}${zfs_be_active}" evaluate
 543         s" set ansi_caption[1]=${beansi_current}${zfs_be_active}" evaluate
 544         s" set menu_caption[2]=${bemenu_bootfs}${currdev}" evaluate
 545         s" set ansi_caption[2]=${beansi_bootfs}${currdev}" evaluate
 546         s" set menu_caption[3]=${bemenu_page}${zfs_be_currpage}${bemenu_pageof}${zfs_be_pages}" evaluate
 547         s" set ansi_caption[3]=${beansi_page}${zfs_be_currpage}${bemenu_pageof}${zfs_be_pages}" evaluate