| #!/bin/sh |
| # Copyright (C) 2011 O.S. Systems Software LTDA. |
| # Licensed on MIT |
| |
| # Adds support to dynamic debugging of initramfs using bootparam in |
| # following format: |
| # shell : starts a shell before and after each module |
| # shell=before:<module> : starts a shell before <module> is loaded and run |
| # shell=after:<module> : starts a shell after <module> is loaded and run |
| # |
| # shell-debug : run set -x as soon as possible |
| # shell-debug=before:<module> : run set -x before <module> is loaded and run |
| # shell-debug=after:<module> : run set -x after <module> is loaded and run |
| |
| DEBUG_SHELL="false" |
| |
| debug_hook_handler() { |
| status=$1 |
| module=$2 |
| |
| if [ -n "$bootparam_shell" ] && [ "$bootparam_shell" != "true" ]; then |
| shell_wanted_status=`expr $bootparam_shell : '\(.*\):.*'` |
| shell_wanted_module=`expr $bootparam_shell : '.*:\(.*\)'` |
| |
| if [ "$shell_wanted_status" = "before" ]; then |
| shell_wanted_status=pre |
| else |
| shell_wanted_status=post |
| fi |
| fi |
| |
| if [ "$bootparam_shell" = "true" ] || |
| ( [ "$status" = "$shell_wanted_status" ] && |
| [ "$module" = "$shell_wanted_module" ] ); then |
| if [ "$status" = "pre" ]; then |
| status_msg="before" |
| else |
| status_msg="after" |
| fi |
| |
| msg "Starting shell $status_msg $module..." |
| sh |
| fi |
| |
| if [ -n "$bootparam_shell_debug" ] && [ "$bootparam_shell_debug" != "true" ]; then |
| shell_debug_wanted_status=`expr $bootparam_shell_debug : '\(.*\):.*'` |
| shell_debug_wanted_module=`expr $bootparam_shell_debug : '.*:\(.*\)'` |
| |
| if [ "$shell_debug_wanted_status" = "before" ]; then |
| shell_debug_wanted_status=pre |
| else |
| shell_debug_wanted_status=post |
| fi |
| fi |
| |
| if [ "$bootparam_shell_debug" = "true" ] || |
| ( [ "$status" = "$shell_debug_wanted_status" ] && |
| [ "$module" = "$shell_debug_wanted_module" ] ); then |
| if [ "$DEBUG_SHELL" = "true" ]; then |
| return 0 |
| fi |
| |
| if [ "$status" = "pre" ]; then |
| status_msg="before" |
| else |
| status_msg="after" |
| fi |
| |
| msg "Starting shell debugging $status_msg $module..." |
| DEBUG_SHELL="true" |
| set -x |
| fi |
| } |
| |
| debug_enabled() { |
| return 0 |
| } |
| |
| debug_run() { |
| add_module_pre_hook "debug_hook_handler" |
| add_module_post_hook "debug_hook_handler" |
| } |