printk-formats.rst 13.7 KB
Newer Older
1 2 3 4 5 6 7
=========================================
How to get printk format specifiers right
=========================================

:Author: Randy Dunlap <rdunlap@infradead.org>
:Author: Andrew Murray <amurray@mpc-data.co.uk>

8

9 10 11 12 13 14 15
Integer types
=============

::

	If variable is of Type,		use printk format specifier:
	------------------------------------------------------------
16 17 18 19
		char			%hhd or %hhx
		unsigned char		%hhu or %hhx
		short int		%hd or %hx
		unsigned short int	%hu or %hx
R
Randy Dunlap 已提交
20 21 22 23 24 25 26 27
		int			%d or %x
		unsigned int		%u or %x
		long			%ld or %lx
		unsigned long		%lu or %lx
		long long		%lld or %llx
		unsigned long long	%llu or %llx
		size_t			%zu or %zx
		ssize_t			%zd or %zx
28 29 30 31
		s8			%hhd or %hhx
		u8			%hhu or %hhx
		s16			%hd or %hx
		u16			%hu or %hx
32 33 34 35 36
		s32			%d or %x
		u32			%u or %x
		s64			%lld or %llx
		u64			%llu or %llx

37 38 39 40

If <type> is dependent on a config option for its size (e.g., sector_t,
blkcnt_t) or is architecture-dependent for its size (e.g., tcflag_t), use a
format specifier of its largest possible type and explicitly cast to it.
41 42

Example::
43 44 45 46

	printk("test: sector number/total blocks: %llu/%llu\n",
		(unsigned long long)sector, (unsigned long long)blockcount);

47
Reminder: sizeof() returns type size_t.
48

49 50
The kernel's printf does not support %n. Floating point formats (%e, %f,
%g, %a) are also not recognized, for obvious reasons. Use of any
51
unsupported specifier or length qualifier results in a WARN and early
52
return from vsnprintf().
53

54
Pointer types
55 56
=============

57 58 59 60
A raw pointer value may be printed with %p which will hash the address
before printing. The kernel also supports extended specifiers for printing
pointers of different types.

61 62 63 64 65 66
Some of the extended specifiers print the data on the given address instead
of printing the address itself. In this case, the following error messages
might be printed instead of the unreachable information::

	(null)	 data on plain NULL address
	(efault) data on invalid address
67
	(einval) invalid data on a valid address
68

69 70
Plain Pointers
--------------
71 72 73 74 75

::

	%p	abcdef12 or 00000000abcdef12

76 77 78
Pointers printed without a specifier extension (i.e unadorned %p) are
hashed to prevent leaking information about the kernel memory layout. This
has the added benefit of providing a unique identifier. On 64-bit machines
79 80
the first 32 bits are zeroed. The kernel will print ``(ptrval)`` until it
gathers enough entropy. If you *really* want the address see %px below.
81

82
Symbols/Function Pointers
83
-------------------------
84 85

::
86

87 88
	%pS	versatile_init+0x0/0x110
	%ps	versatile_init
89 90
	%pF	versatile_init+0x0/0x110
	%pf	versatile_init
91 92
	%pSR	versatile_init+0x9/0x110
		(with __builtin_extract_return_addr() translation)
93 94
	%pB	prev_fn_of_versatile_init+0x88/0x88

95

96
The ``S`` and ``s`` specifiers are used for printing a pointer in symbolic
97
format. They result in the symbol name with (S) or without (s)
98
offsets. If KALLSYMS are disabled then the symbol address is printed instead.
99

100 101 102 103 104 105 106
Note, that the ``F`` and ``f`` specifiers are identical to ``S`` (``s``)
and thus deprecated. We have ``F`` and ``f`` because on ia64, ppc64 and
parisc64 function pointers are indirect and, in fact, are function
descriptors, which require additional dereferencing before we can lookup
the symbol. As of now, ``S`` and ``s`` perform dereferencing on those
platforms (when needed), so ``F`` and ``f`` exist for compatibility
reasons only.
107 108 109 110

The ``B`` specifier results in the symbol name with offsets and should be
used when printing stack backtraces. The specifier takes into
consideration the effect of compiler optimisations which may occur
111
when tail-calls are used and marked with the noreturn GCC attribute.
112

113
Kernel Pointers
114
---------------
115

116
::
117

118
	%pK	01234567 or 0123456789abcdef
119

120
For printing kernel pointers which should be hidden from unprivileged
121
users. The behaviour of %pK depends on the kptr_restrict sysctl - see
122 123
Documentation/sysctl/kernel.txt for more details.

124
Unmodified Addresses
125
--------------------
126 127 128 129 130

::

	%px	01234567 or 0123456789abcdef

131
For printing pointers when you *really* want to print the address. Please
132
consider whether or not you are leaking sensitive information about the
133 134 135 136
kernel memory layout before printing pointers with %px. %px is functionally
equivalent to %lx (or %lu). %px is preferred because it is more uniquely
grep'able. If in the future we need to modify the way the kernel handles
printing pointers we will be better equipped to find the call sites.
137

138
Struct Resources
139
----------------
140

141
::
142 143 144 145 146 147

	%pr	[mem 0x60000000-0x6fffffff flags 0x2200] or
		[mem 0x0000000060000000-0x000000006fffffff flags 0x2200]
	%pR	[mem 0x60000000-0x6fffffff pref] or
		[mem 0x0000000060000000-0x000000006fffffff pref]

148
For printing struct resources. The ``R`` and ``r`` specifiers result in a
149 150
printed resource with (R) or without (r) a decoded flags member.

151 152
Passed by reference.

153 154
Physical address types phys_addr_t
----------------------------------
155

156
::
157

158
	%pa[p]	0x01234567 or 0x0123456789abcdef
159

160 161 162 163 164
For printing a phys_addr_t type (and its derivatives, such as
resource_size_t) which can vary based on build options, regardless of the
width of the CPU data path.

Passed by reference.
165

166 167
DMA address types dma_addr_t
----------------------------
168 169

::
170 171 172

	%pad	0x01234567 or 0x0123456789abcdef

173 174 175 176
For printing a dma_addr_t type which can vary based on build options,
regardless of the width of the CPU data path.

Passed by reference.
177 178

Raw buffer as an escaped string
179
-------------------------------
180

181
::
182 183 184

	%*pE[achnops]

185
For printing raw buffer as an escaped string. For the following buffer::
186 187 188

		1b 62 20 5c 43 07 22 90 0d 5d

189 190
A few examples show how the conversion would be done (excluding surrounding
quotes)::
191 192 193 194 195

		%*pE		"\eb \C\a"\220\r]"
		%*pEhp		"\x1bb \C\x07"\x90\x0d]"
		%*pEa		"\e\142\040\\\103\a\042\220\r\135"

196 197 198 199
The conversion rules are applied according to an optional combination
of flags (see :c:func:`string_escape_mem` kernel documentation for the
details):

200 201 202 203 204 205 206
	- a - ESCAPE_ANY
	- c - ESCAPE_SPECIAL
	- h - ESCAPE_HEX
	- n - ESCAPE_NULL
	- o - ESCAPE_OCTAL
	- p - ESCAPE_NP
	- s - ESCAPE_SPACE
207

208
By default ESCAPE_ANY_NP is used.
209

210 211
ESCAPE_ANY_NP is the sane choice for many cases, in particularly for
printing SSIDs.
212

213
If field width is omitted then 1 byte only will be escaped.
214 215

Raw buffer as a hex string
216
--------------------------
217 218

::
219

220 221 222 223 224
	%*ph	00 01 02  ...  3f
	%*phC	00:01:02: ... :3f
	%*phD	00-01-02- ... -3f
	%*phN	000102 ... 3f

225 226
For printing small buffers (up to 64 bytes long) as a hex string with a
certain separator. For larger buffers consider using
227 228 229
:c:func:`print_hex_dump`.

MAC/FDDI addresses
230
------------------
231

232
::
233 234

	%pM	00:01:02:03:04:05
235
	%pMR	05:04:03:02:01:00
236 237
	%pMF	00-01-02-03-04-05
	%pm	000102030405
238
	%pmR	050403020100
239

240
For printing 6-byte MAC/FDDI addresses in hex notation. The ``M`` and ``m``
241 242
specifiers result in a printed address with (M) or without (m) byte
separators. The default byte separator is the colon (:).
243

244
Where FDDI addresses are concerned the ``F`` specifier can be used after
245
the ``M`` specifier to use dash (-) separators instead of the default
246
separator.
247

248 249 250
For Bluetooth addresses the ``R`` specifier shall be used after the ``M``
specifier to use reversed byte order suitable for visual interpretation
of Bluetooth addresses which are in the little endian order.
251

252 253 254
Passed by reference.

IPv4 addresses
255
--------------
256

257
::
258 259 260

	%pI4	1.2.3.4
	%pi4	001.002.003.004
261
	%p[Ii]4[hnbl]
262

263
For printing IPv4 dot-separated decimal addresses. The ``I4`` and ``i4``
264 265
specifiers result in a printed address with (i4) or without (I4) leading
zeros.
266

267 268 269
The additional ``h``, ``n``, ``b``, and ``l`` specifiers are used to specify
host, network, big or little endian order addresses respectively. Where
no specifier is provided the default network/big endian order is used.
270

271
Passed by reference.
272

273
IPv6 addresses
274
--------------
275 276

::
277 278 279 280 281

	%pI6	0001:0002:0003:0004:0005:0006:0007:0008
	%pi6	00010002000300040005000600070008
	%pI6c	1:2:3:4:5:6:7:8

282
For printing IPv6 network-order 16-bit hex addresses. The ``I6`` and ``i6``
283
specifiers result in a printed address with (I6) or without (i6)
284
colon-separators. Leading zeros are always used.
285

286 287 288
The additional ``c`` specifier can be used with the ``I`` specifier to
print a compressed IPv6 address as described by
http://tools.ietf.org/html/rfc5952
289

290
Passed by reference.
291

292
IPv4/IPv6 addresses (generic, with port, flowinfo, scope)
293
---------------------------------------------------------
294 295

::
296 297 298 299 300 301 302

	%pIS	1.2.3.4		or 0001:0002:0003:0004:0005:0006:0007:0008
	%piS	001.002.003.004	or 00010002000300040005000600070008
	%pISc	1.2.3.4		or 1:2:3:4:5:6:7:8
	%pISpc	1.2.3.4:12345	or [1:2:3:4:5:6:7:8]:12345
	%p[Ii]S[pfschnbl]

303 304
For printing an IP address without the need to distinguish whether it's of
type AF_INET or AF_INET6. A pointer to a valid struct sockaddr,
305
specified through ``IS`` or ``iS``, can be passed to this format specifier.
306

307 308 309
The additional ``p``, ``f``, and ``s`` specifiers are used to specify port
(IPv4, IPv6), flowinfo (IPv6) and scope (IPv6). Ports have a ``:`` prefix,
flowinfo a ``/`` and scope a ``%``, each followed by the actual value.
310

311 312 313 314 315
In case of an IPv6 address the compressed IPv6 address as described by
http://tools.ietf.org/html/rfc5952 is being used if the additional
specifier ``c`` is given. The IPv6 address is surrounded by ``[``, ``]`` in
case of additional specifiers ``p``, ``f`` or ``s`` as suggested by
https://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-07
316

317 318 319
In case of IPv4 addresses, the additional ``h``, ``n``, ``b``, and ``l``
specifiers can be used as well and are ignored in case of an IPv6
address.
320

321
Passed by reference.
322

323
Further examples::
324 325 326 327 328

	%pISfc		1.2.3.4		or [1:2:3:4:5:6:7:8]/123456789
	%pISsc		1.2.3.4		or [1:2:3:4:5:6:7:8]%1234567890
	%pISpfc		1.2.3.4:12345	or [1:2:3:4:5:6:7:8]:12345/123456789

329
UUID/GUID addresses
330
-------------------
331 332

::
333 334 335 336 337 338

	%pUb	00010203-0405-0607-0809-0a0b0c0d0e0f
	%pUB	00010203-0405-0607-0809-0A0B0C0D0E0F
	%pUl	03020100-0504-0706-0809-0a0b0c0e0e0f
	%pUL	03020100-0504-0706-0809-0A0B0C0E0E0F

339 340 341 342
For printing 16-byte UUID/GUIDs addresses. The additional ``l``, ``L``,
``b`` and ``B`` specifiers are used to specify a little endian order in
lower (l) or upper case (L) hex notation - and big endian order in lower (b)
or upper case (B) hex notation.
343

344
Where no additional specifiers are used the default big endian
345
order with lower case hex notation will be printed.
346

347 348 349
Passed by reference.

dentry names
350
------------
351

352
::
353

A
Al Viro 已提交
354 355 356
	%pd{,2,3,4}
	%pD{,2,3,4}

357 358 359 360
For printing dentry name; if we race with :c:func:`d_move`, the name might
be a mix of old and new ones, but it won't oops.  %pd dentry is a safer
equivalent of %s dentry->d_name.name we used to use, %pd<n> prints ``n``
last components.  %pD does the same thing for struct file.
A
Al Viro 已提交
361

362
Passed by reference.
363

364
block_device names
365
------------------
366 367

::
368 369 370

	%pg	sda, sda1 or loop0p1

371 372 373
For printing name of block_device pointers.

struct va_format
374
----------------
375

376
::
377 378 379

	%pV

380 381
For printing struct va_format structures. These contain a format string
and va_list as follows::
382 383 384 385 386 387

	struct va_format {
		const char *fmt;
		va_list *va;
	};

388
Implements a "recursive vsnprintf".
389

390 391
Do not use this feature without some mechanism to verify the
correctness of the format string and va_list arguments.
R
Randy Dunlap 已提交
392

393 394
Passed by reference.

395 396
Device tree nodes
-----------------
397 398

::
399

400
	%pOF[fnpPcCF]
401 402


403
For printing device tree node structures. Default behaviour is
404
equivalent to %pOFf.
405

406 407 408 409 410 411 412
	- f - device node full_name
	- n - device node name
	- p - device node phandle
	- P - device node path spec (name + @unit)
	- F - device node flags
	- c - major compatible string
	- C - full compatible string
413

414
The separator when using multiple arguments is ':'
415

416
Examples::
417 418 419 420 421 422 423 424 425 426 427 428

	%pOF	/foo/bar@0			- Node full name
	%pOFf	/foo/bar@0			- Same as above
	%pOFfp	/foo/bar@0:10			- Node full name + phandle
	%pOFfcF	/foo/bar@0:foo,device:--P-	- Node full name +
	                                          major compatible string +
						  node flags
							D - dynamic
							d - detached
							P - Populated
							B - Populated bus

429
Passed by reference.
430

431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448
Time and date (struct rtc_time)
-------------------------------

::

	%ptR		YYYY-mm-ddTHH:MM:SS
	%ptRd		YYYY-mm-dd
	%ptRt		HH:MM:SS
	%ptR[dt][r]

For printing date and time as represented by struct rtc_time structure in
human readable format.

By default year will be incremented by 1900 and month by 1. Use %ptRr (raw)
to suppress this behaviour.

Passed by reference.

449
struct clk
450
----------
451 452

::
453 454 455 456

	%pC	pll1
	%pCn	pll1

457 458
For printing struct clk structures. %pC and %pCn print the name of the clock
(Common Clock Framework) or a unique 32-bit ID (legacy clock framework).
459

460
Passed by reference.
461

462
bitmap and its derivatives such as cpumask and nodemask
463
-------------------------------------------------------
464 465

::
466 467 468 469

	%*pb	0779
	%*pbl	0,3-6,8-10

470
For printing bitmap and its derivatives such as cpumask and nodemask,
471
%*pb outputs the bitmap with field width as the number of bits and %*pbl
472
output the bitmap as range list with field width as the number of bits.
473

474 475 476
Passed by reference.

Flags bitfields such as page flags, gfp_flags
477
---------------------------------------------
R
Randy Dunlap 已提交
478

479
::
480 481 482 483 484

	%pGp	referenced|uptodate|lru|active|private
	%pGg	GFP_USER|GFP_DMA32|GFP_NOWARN
	%pGv	read|exec|mayread|maywrite|mayexec|denywrite

485 486 487 488 489
For printing flags bitfields as a collection of symbolic constants that
would construct the value. The type of flags is given by the third
character. Currently supported are [p]age flags, [v]ma_flags (both
expect ``unsigned long *``) and [g]fp_flags (expects ``gfp_t *``). The flag
names and print order depends on the particular	type.
490

491 492 493
Note that this format should not be used directly in the
:c:func:`TP_printk()` part of a tracepoint. Instead, use the show_*_flags()
functions from <trace/events/mmflags.h>.
494

495 496 497
Passed by reference.

Network device features
498
-----------------------
499

500
::
501 502 503

	%pNF	0x000000000000c000

504
For printing netdev_features_t.
505

506
Passed by reference.
507

508 509
Thanks
======
510

511 512
If you add other %p extensions, please extend <lib/test_printf.c> with
one or more test cases, if at all feasible.
513

R
Randy Dunlap 已提交
514
Thank you for your cooperation and attention.