rc.subr: boottrace annotations

When enabled, have the framework use the boottrace(8) utility to execute
each rc script, generating trace entries for the entire suite of
scripts.

Reviewed by:	0mp (slightly earlier version)
Sponsored by:	NetApp, Inc.
Sponsored by:	Klara, Inc.
Differential Revision:	https://reviews.freebsd.org/D31930
This commit is contained in:
Mitchell Horne 2021-01-17 18:56:59 -04:00
parent 13ec1e3155
commit 318d0db5fe

View file

@ -1411,7 +1411,9 @@ run_rc_script()
;;
*) # run in subshell
if [ -x $_file ]; then
if [ -n "$rc_fast_and_loose" ]; then
if [ -n "$rc_boottrace" ]; then
boottrace_fn "$_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 @@ run_rc_script()
esac
}
boottrace_fn()
{
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.boottrace="$1"
}
#
# load_rc_config [service]
# Source in the configuration file(s) for a given service.
@ -2195,3 +2217,8 @@ _echoonce()
if kenv -q rc.debug > /dev/null ; then
rc_debug=YES
fi
boottrace_cmd=`command -v boottrace`
if [ -n "$boottrace_cmd" ] && [ "`${SYSCTL_N} -q kern.boottrace.enabled`" = "1" ]; then
rc_boottrace=YES
fi