Index: libexec/rc/rc.subr =================================================================== --- libexec/rc/rc.subr +++ libexec/rc/rc.subr @@ -1411,7 +1411,9 @@ ;; *) # run in subshell if [ -x $_file ]; then - if [ -n "$rc_fast_and_loose" ]; then + if [ -n "$rc_boottrace" ]; then + boottrace ${_file} ${_arg} + elif [ -n "$rc_fast_and_loose" ]; then set $_arg; . $_file else ( trap "echo Script $_file interrupted >&2 ; kill -QUIT $$" 3 @@ -1424,6 +1426,26 @@ esac } +boottrace() +{ + local _file _arg + _file=$1 + _arg=$2 + + if [ -n "$rc_fast_and_loose" ]; then + boottrace_sysctl "${_file} start" + set $_arg; . $_file + boottrace_sysctl "${_file} done" + else + $boottrace_cmd "$_file" "$_arg" + fi +} + +boottrace_sysctl() +{ + ${SYSCTL} kern.boottrace.boottimes="$1" +} + # # load_rc_config [service] # Source in the configuration file(s) for a given service. @@ -2195,3 +2217,8 @@ if kenv -q rc.debug > /dev/null ; then rc_debug=YES fi + +boottrace_cmd=`command -v boottrace` +if [ -n "$boottrace_cmd" ] && [ "`${SYSCTL_N} kern.boottrace.enabled`" = "1" ]; then + rc_boottrace=YES +fi