xref: /dflybsd-src/share/man/man9/kprintf.9 (revision c75dbee59517eb53a425340abbc2ee13b67b2e06)
12bda9807SSascha Wildner.\"
22bda9807SSascha Wildner.\" Copyright (c) 2001 Andrew R. Reiter
32bda9807SSascha Wildner.\" Copyright (c) 2004 Joerg Wunsch
42bda9807SSascha Wildner.\" All rights reserved.
52bda9807SSascha Wildner.\"
62bda9807SSascha Wildner.\" Redistribution and use in source and binary forms, with or without
72bda9807SSascha Wildner.\" modification, are permitted provided that the following conditions
82bda9807SSascha Wildner.\" are met:
92bda9807SSascha Wildner.\" 1. Redistributions of source code must retain the above copyright
102bda9807SSascha Wildner.\"    notice, this list of conditions and the following disclaimer.
112bda9807SSascha Wildner.\" 2. Redistributions in binary form must reproduce the above copyright
122bda9807SSascha Wildner.\"    notice, this list of conditions and the following disclaimer in the
132bda9807SSascha Wildner.\"    documentation and/or other materials provided with the distribution.
142bda9807SSascha Wildner.\"
152bda9807SSascha Wildner.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
162bda9807SSascha Wildner.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
172bda9807SSascha Wildner.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
182bda9807SSascha Wildner.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
192bda9807SSascha Wildner.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
202bda9807SSascha Wildner.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
212bda9807SSascha Wildner.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
222bda9807SSascha Wildner.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
232bda9807SSascha Wildner.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
242bda9807SSascha Wildner.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
252bda9807SSascha Wildner.\" SUCH DAMAGE.
262bda9807SSascha Wildner.\"
272bda9807SSascha Wildner.\" $FreeBSD: src/share/man/man9/printf.9,v 1.8 2006/09/08 14:05:03 ru Exp $
282bda9807SSascha Wildner.\"
2919e62264SSascha Wildner.Dd March 13, 2020
302bda9807SSascha Wildner.Dt KPRINTF 9
312bda9807SSascha Wildner.Os
322bda9807SSascha Wildner.Sh NAME
332bda9807SSascha Wildner.Nm kprintf ,
342bda9807SSascha Wildner.Nm ksprintf ,
352bda9807SSascha Wildner.Nm ksnprintf ,
362bda9807SSascha Wildner.Nm kvprintf ,
372bda9807SSascha Wildner.Nm kvsprintf ,
382bda9807SSascha Wildner.Nm kvsnprintf ,
391c989a23SSascha Wildner.Nm krateprintf ,
402bda9807SSascha Wildner.Nm tprintf ,
412bda9807SSascha Wildner.Nm uprintf ,
422bda9807SSascha Wildner.Nm log
432bda9807SSascha Wildner.Nd formatted output conversion
442bda9807SSascha Wildner.Sh SYNOPSIS
452bda9807SSascha Wildner.In sys/types.h
462bda9807SSascha Wildner.In sys/systm.h
472bda9807SSascha Wildner.Ft int
482bda9807SSascha Wildner.Fn kprintf "const char *format" ...
492bda9807SSascha Wildner.Ft int
502bda9807SSascha Wildner.Fn ksprintf "char *str" "const char *format" ...
512bda9807SSascha Wildner.Ft int
522bda9807SSascha Wildner.Fn ksnprintf "char *str" "size_t size" "const char *format" ...
532bda9807SSascha Wildner.Ft int
542bda9807SSascha Wildner.Fn kvprintf "const char *format" "__va_list ap"
552bda9807SSascha Wildner.Ft int
562bda9807SSascha Wildner.Fn kvsprintf "char *str" "const char *format" "__va_list ap"
572bda9807SSascha Wildner.Ft int
582bda9807SSascha Wildner.Fn kvsnprintf "char *str" "size_t size" "const char *format" "__va_list ap"
597e0c6624SSascha Wildner.Ft int
601c989a23SSascha Wildner.Fn krateprintf "struct krate *rate" "const char *format" ...
61d0c8ddbdSSascha Wildner.Ft int
622bda9807SSascha Wildner.Fn uprintf "const char *format" ...
633e2b28a8SSascha Wildner.In sys/tprintf.h
643e2b28a8SSascha Wildner.Ft int
653e2b28a8SSascha Wildner.Fn tprintf "struct proc *p" "int pri" "const char *format" ...
6697b5e163SSascha Wildner.In sys/syslog.h
6797b5e163SSascha Wildner.Ft int
6897b5e163SSascha Wildner.Fn log "int pri" "const char *format" ...
692bda9807SSascha Wildner.Sh DESCRIPTION
702bda9807SSascha WildnerThe
712bda9807SSascha Wildner.Nm
722bda9807SSascha Wildnerfamily of functions are similar to the
732bda9807SSascha Wildner.Xr printf 3
742bda9807SSascha Wildnerfamily of functions.
752bda9807SSascha WildnerThe different functions each use a different output stream.
762bda9807SSascha WildnerThe
772bda9807SSascha Wildner.Fn uprintf
782bda9807SSascha Wildnerfunction outputs to the current process' controlling tty, while
792bda9807SSascha Wildner.Fn kprintf ,
802bda9807SSascha Wildner.Fn ksprintf ,
812bda9807SSascha Wildner.Fn ksnprintf ,
822bda9807SSascha Wildner.Fn kvprintf ,
832bda9807SSascha Wildner.Fn kvsprintf
842bda9807SSascha Wildnerand
852bda9807SSascha Wildner.Fn kvsnprintf
862bda9807SSascha Wildnerwrite to the console as well as to the logging facility.
872bda9807SSascha WildnerThe
882bda9807SSascha Wildner.Fn tprintf
892bda9807SSascha Wildnerfunction outputs to the tty associated with the process
902bda9807SSascha Wildner.Fa p
912bda9807SSascha Wildnerand the logging facility if
922bda9807SSascha Wildner.Fa pri
932bda9807SSascha Wildneris not \-1.
942bda9807SSascha WildnerThe
952bda9807SSascha Wildner.Fn log
962bda9807SSascha Wildnerfunction sends the message to the kernel logging facility, using
972bda9807SSascha Wildnerthe log level as indicated by
982bda9807SSascha Wildner.Fa pri .
992bda9807SSascha Wildner.Pp
1002bda9807SSascha WildnerEach of these related functions use the
1012bda9807SSascha Wildner.Fa format ,
1022bda9807SSascha Wildner.Fa str ,
1032bda9807SSascha Wildner.Fa size
1042bda9807SSascha Wildnerand
105*c75dbee5SSascha Wildner.Fa ap
1062bda9807SSascha Wildnerparameters in the same manner as
1072bda9807SSascha Wildner.Xr printf 3 .
1082bda9807SSascha WildnerHowever, the
1092bda9807SSascha Wildner.Nm
110e9223b63SSascha Wildnerfunctions add another conversion specifier to
1112bda9807SSascha Wildner.Fa format :
1122bda9807SSascha Wildner.Pp
1132bda9807SSascha WildnerThe
114118a6251Szrj.Cm \&%pb%i
1152bda9807SSascha Wildneridentifier expects two arguments: an
116118a6251Szrj.Vt "char *"
1172bda9807SSascha Wildnerand a
118118a6251Szrj.Vt int .
1192bda9807SSascha WildnerThese are used as a register value and a print mask for decoding bitmasks.
1202bda9807SSascha WildnerThe print mask is made up of two parts: the base and the
1212bda9807SSascha Wildnerarguments.
1222bda9807SSascha WildnerThe base value is the output base expressed as an integer value;
1232bda9807SSascha Wildnerfor example, \e10 gives octal and \e20 gives hexadecimal.
1242bda9807SSascha WildnerThe arguments are made up of a sequence of bit identifiers.
1252bda9807SSascha WildnerEach bit identifier begins with an integer value which is the number of the
1262bda9807SSascha Wildnerbit (starting from 1) this identifier describes.
1272bda9807SSascha WildnerThe rest of the identifier is a string of characters containing the name of
1282bda9807SSascha Wildnerthe bit.
1292bda9807SSascha WildnerThe string is terminated by either the bit number at the start of the next
1302bda9807SSascha Wildnerbit identifier or
1312bda9807SSascha Wildner.Dv NUL
1322bda9807SSascha Wildnerfor the last bit identifier.
1332bda9807SSascha Wildner.Pp
1342bda9807SSascha WildnerThe
1352bda9807SSascha Wildner.Fn log
1362bda9807SSascha Wildnerfunction uses
1372bda9807SSascha Wildner.Xr syslog 3
1382bda9807SSascha Wildnerlevel values
1392bda9807SSascha Wildner.Dv LOG_DEBUG
1402bda9807SSascha Wildnerthrough
1412bda9807SSascha Wildner.Dv LOG_EMERG
1422bda9807SSascha Wildnerfor its
1432bda9807SSascha Wildner.Fa pri
1442bda9807SSascha Wildnerparameter (mistakenly called
1452bda9807SSascha Wildner.Sq priority
1462bda9807SSascha Wildnerhere).
1472bda9807SSascha WildnerAlternatively, if a
1482bda9807SSascha Wildner.Fa pri
1492bda9807SSascha Wildnerof \-1 is given, the message will be appended to the last log message
1502bda9807SSascha Wildnerstarted by a previous call to
1512bda9807SSascha Wildner.Fn log .
1522bda9807SSascha WildnerAs these messages are generated by the kernel itself, the facility will
1532bda9807SSascha Wildneralways be
1542bda9807SSascha Wildner.Dv LOG_KERN .
1551c989a23SSascha Wildner.Pp
1561c989a23SSascha WildnerThe
1571c989a23SSascha Wildner.Fn krateprintf
1581c989a23SSascha Wildnerfunction is a rate controlled version of
1591c989a23SSascha Wildner.Fn kprintf .
1601c989a23SSascha WildnerThe
161d8ca90a6SSascha Wildner.Fa freq
162d8ca90a6SSascha Wildnermember of the
1631c989a23SSascha Wildner.Vt struct krate
1641c989a23SSascha Wildnerpointed to by
1651c989a23SSascha Wildner.Fa rate
1661c989a23SSascha Wildnermust be initialized with the desired reporting frequency.
167d8ca90a6SSascha WildnerA
168d8ca90a6SSascha Wildner.Fa freq
169d8ca90a6SSascha Wildnerof 0 will result in no output.
170d8ca90a6SSascha WildnerInitializing
171d8ca90a6SSascha Wildner.Fa count
172d8ca90a6SSascha Wildnerto a negative value allows an initial burst.
1732bda9807SSascha Wildner.Sh RETURN VALUES
1742bda9807SSascha WildnerThe
1752bda9807SSascha Wildner.Fn kprintf ,
1762bda9807SSascha Wildner.Fn ksprintf ,
1772bda9807SSascha Wildner.Fn ksnprintf ,
1782bda9807SSascha Wildner.Fn kvprintf ,
1792bda9807SSascha Wildner.Fn kvsprintf ,
1802bda9807SSascha Wildner.Fn kvsnprintf ,
1812bda9807SSascha Wildner.Fn tprintf ,
182d0c8ddbdSSascha Wildner.Fn uprintf ,
1832bda9807SSascha Wildnerand
184d0c8ddbdSSascha Wildner.Fn log
1852bda9807SSascha Wildnerfunctions return the number of characters displayed.
1867e0c6624SSascha Wildner.Pp
1877e0c6624SSascha WildnerThe
1887e0c6624SSascha Wildner.Fn krateprintf
1897e0c6624SSascha Wildnerfunction returns 1 or 0, depending on whether anything was printed or not,
1907e0c6624SSascha Wildnerallowing code to issue additional
1917e0c6624SSascha Wildner.Fn kprintf Ns s
1927e0c6624SSascha Wildnerif desired.
19319e62264SSascha Wildner.Sh LOADER TUNABLES
19419e62264SSascha WildnerTunables can be set at the
19519e62264SSascha Wildner.Xr loader 8
19619e62264SSascha Wildnerprompt before booting the kernel or stored in
19719e62264SSascha Wildner.Xr loader.conf 5 .
19819e62264SSascha Wildner.Bl -tag -width "xxxxxx"
19919e62264SSascha Wildner.It Va kern.kprintf_logging
20019e62264SSascha WildnerA bit mask that specifies the targets of
20119e62264SSascha Wildner.Fn kprintf .
20219e62264SSascha WildnerSupported targets are the console (0x1) and the dmesg buffer (0x4).
20319e62264SSascha WildnerThe default value is 5 (print to both).
20419e62264SSascha Wildner.It Va kern.log_console_output
20519e62264SSascha WildnerSpecifies whether console output is duplicated to the syslog.
20619e62264SSascha WildnerThe default value is 1.
20719e62264SSascha Wildner.It Va security.ptr_restrict
20819e62264SSascha WildnerSpecifying 1 masks out the upper bits of pointers printed  with %p, and
20919e62264SSascha Wildnerspecifying 2 masks out pointer values altogether.
21019e62264SSascha WildnerThe default value is 0.
21119e62264SSascha Wildner.It Va security.unprivileged_read_msgbuf
21219e62264SSascha WildnerSpecifies if unprivileged processes may read the kernel buffer.
21319e62264SSascha WildnerThe default value is 1.
21419e62264SSascha Wildner.El
21519e62264SSascha Wildner.Sh SYSCTL VARIABLES
21619e62264SSascha WildnerThe loader tunables described in
21719e62264SSascha Wildner.Sx LOADER TUNABLES
21819e62264SSascha Wildnerare also available as sysctl(8) variables of the same names.
2192bda9807SSascha Wildner.Sh EXAMPLES
2202bda9807SSascha WildnerThis example demonstrates the use of the
221118a6251Szrj.Cm \&%pb%i
222490d5310SSascha Wildnerconversion specifier.
2232bda9807SSascha WildnerThe function
2242bda9807SSascha Wildner.Bd -literal -offset indent
2252bda9807SSascha Wildnervoid
2262bda9807SSascha Wildnerkprintf_test(void)
2272bda9807SSascha Wildner{
228118a6251Szrj	kprintf("reg=%pb%i\en", "\e10\e2BITTWO\e1BITONE\en", 3);
2292bda9807SSascha Wildner}
2302bda9807SSascha Wildner.Ed
2312bda9807SSascha Wildner.Pp
2322bda9807SSascha Wildnerwill produce the following output:
2332bda9807SSascha Wildner.Bd -literal -offset indent
2342bda9807SSascha Wildnerreg=3<BITTWO,BITONE>
2352bda9807SSascha Wildner.Ed
2362bda9807SSascha Wildner.Pp
2372bda9807SSascha WildnerThe call
2382bda9807SSascha Wildner.Bd -literal -offset indent
2392bda9807SSascha Wildnerlog(LOG_DEBUG, "%s%d: been there.\en", sc->sc_name, sc->sc_unit);
2402bda9807SSascha Wildner.Ed
2412bda9807SSascha Wildner.Pp
2422bda9807SSascha Wildnerwill add the appropriate debug message at priority
2432bda9807SSascha Wildner.Dq Li kern.debug
2442bda9807SSascha Wildnerto the system log.
2452bda9807SSascha Wildner.Sh SEE ALSO
2462bda9807SSascha Wildner.Xr printf 3 ,
2472bda9807SSascha Wildner.Xr syslog 3
248