aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Horne <mhorne@FreeBSD.org>2021-01-17 22:56:59 +0000
committerMitchell Horne <mhorne@FreeBSD.org>2022-02-22 00:16:12 +0000
commit318d0db5fe8a25321321d27dfcbe42d36996876c (patch)
tree76aaaf6b51f5229e426db81b0fbd2a0ee35d297e
parent13ec1e3155c7e9bf037b12af186351b7fa9b9450 (diff)
downloadsrc-318d0db5fe8a.tar.gz
src-318d0db5fe8a.zip
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
-rw-r--r--libexec/rc/rc.subr29
1 files changed, 28 insertions, 1 deletions
diff --git a/libexec/rc/rc.subr b/libexec/rc/rc.subr
index 7144c3cbfce9..76f878c11e29 100644
--- a/libexec/rc/rc.subr
+++ b/libexec/rc/rc.subr
@@ -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