1========================================= 2How to get printk format specifiers right 3========================================= 4 5:Author: Randy Dunlap <rdunlap@infradead.org> 6:Author: Andrew Murray <amurray@mpc-data.co.uk> 7 8 9Integer types 10============= 11 12:: 13 14 If variable is of Type, use printk format specifier: 15 ------------------------------------------------------------ 16 char %hhd or %hhx 17 unsigned char %hhu or %hhx 18 short int %hd or %hx 19 unsigned short int %hu or %hx 20 int %d or %x 21 unsigned int %u or %x 22 long %ld or %lx 23 unsigned long %lu or %lx 24 long long %lld or %llx 25 unsigned long long %llu or %llx 26 size_t %zu or %zx 27 ssize_t %zd or %zx 28 s8 %hhd or %hhx 29 u8 %hhu or %hhx 30 s16 %hd or %hx 31 u16 %hu or %hx 32 s32 %d or %x 33 u32 %u or %x 34 s64 %lld or %llx 35 u64 %llu or %llx 36 37 38If <type> is dependent on a config option for its size (e.g., sector_t, 39blkcnt_t) or is architecture-dependent for its size (e.g., tcflag_t), use a 40format specifier of its largest possible type and explicitly cast to it. 41 42Example:: 43 44 printk("test: sector number/total blocks: %llu/%llu\n", 45 (unsigned long long)sector, (unsigned long long)blockcount); 46 47Reminder: sizeof() returns type size_t. 48 49The kernel's printf does not support %n. Floating point formats (%e, %f, 50%g, %a) are also not recognized, for obvious reasons. Use of any 51unsupported specifier or length qualifier results in a WARN and early 52return from vsnprintf(). 53 54Pointer types 55============= 56 57A raw pointer value may be printed with %p which will hash the address 58before printing. The kernel also supports extended specifiers for printing 59pointers of different types. 60 61Plain Pointers 62-------------- 63 64:: 65 66 %p abcdef12 or 00000000abcdef12 67 68Pointers printed without a specifier extension (i.e unadorned %p) are 69hashed to prevent leaking information about the kernel memory layout. This 70has the added benefit of providing a unique identifier. On 64-bit machines 71the first 32 bits are zeroed. The kernel will print ``(ptrval)`` until it 72gathers enough entropy. If you *really* want the address see %px below. 73 74Symbols/Function Pointers 75------------------------- 76 77:: 78 79 %pS versatile_init+0x0/0x110 80 %ps versatile_init 81 %pF versatile_init+0x0/0x110 82 %pf versatile_init 83 %pSR versatile_init+0x9/0x110 84 (with __builtin_extract_return_addr() translation) 85 %pB prev_fn_of_versatile_init+0x88/0x88 86 87 88The ``S`` and ``s`` specifiers are used for printing a pointer in symbolic 89format. They result in the symbol name with (S) or without (s) 90offsets. If KALLSYMS are disabled then the symbol address is printed instead. 91 92Note, that the ``F`` and ``f`` specifiers are identical to ``S`` (``s``) 93and thus deprecated. We have ``F`` and ``f`` because on ia64, ppc64 and 94parisc64 function pointers are indirect and, in fact, are function 95descriptors, which require additional dereferencing before we can lookup 96the symbol. As of now, ``S`` and ``s`` perform dereferencing on those 97platforms (when needed), so ``F`` and ``f`` exist for compatibility 98reasons only. 99 100The ``B`` specifier results in the symbol name with offsets and should be 101used when printing stack backtraces. The specifier takes into 102consideration the effect of compiler optimisations which may occur 103when tail-calls are used and marked with the noreturn GCC attribute. 104 105Kernel Pointers 106--------------- 107 108:: 109 110 %pK 01234567 or 0123456789abcdef 111 112For printing kernel pointers which should be hidden from unprivileged 113users. The behaviour of %pK depends on the kptr_restrict sysctl - see 114Documentation/sysctl/kernel.txt for more details. 115 116Unmodified Addresses 117-------------------- 118 119:: 120 121 %px 01234567 or 0123456789abcdef 122 123For printing pointers when you *really* want to print the address. Please 124consider whether or not you are leaking sensitive information about the 125kernel memory layout before printing pointers with %px. %px is functionally 126equivalent to %lx (or %lu). %px is preferred because it is more uniquely 127grep'able. If in the future we need to modify the way the kernel handles 128printing pointers we will be better equipped to find the call sites. 129 130Struct Resources 131---------------- 132 133:: 134 135 %pr [mem 0x60000000-0x6fffffff flags 0x2200] or 136 [mem 0x0000000060000000-0x000000006fffffff flags 0x2200] 137 %pR [mem 0x60000000-0x6fffffff pref] or 138 [mem 0x0000000060000000-0x000000006fffffff pref] 139 140For printing struct resources. The ``R`` and ``r`` specifiers result in a 141printed resource with (R) or without (r) a decoded flags member. 142 143Passed by reference. 144 145Physical address types phys_addr_t 146---------------------------------- 147 148:: 149 150 %pa[p] 0x01234567 or 0x0123456789abcdef 151 152For printing a phys_addr_t type (and its derivatives, such as 153resource_size_t) which can vary based on build options, regardless of the 154width of the CPU data path. 155 156Passed by reference. 157 158DMA address types dma_addr_t 159---------------------------- 160 161:: 162 163 %pad 0x01234567 or 0x0123456789abcdef 164 165For printing a dma_addr_t type which can vary based on build options, 166regardless of the width of the CPU data path. 167 168Passed by reference. 169 170Raw buffer as an escaped string 171------------------------------- 172 173:: 174 175 %*pE[achnops] 176 177For printing raw buffer as an escaped string. For the following buffer:: 178 179 1b 62 20 5c 43 07 22 90 0d 5d 180 181A few examples show how the conversion would be done (excluding surrounding 182quotes):: 183 184 %*pE "\eb \C\a"\220\r]" 185 %*pEhp "\x1bb \C\x07"\x90\x0d]" 186 %*pEa "\e\142\040\\\103\a\042\220\r\135" 187 188The conversion rules are applied according to an optional combination 189of flags (see :c:func:`string_escape_mem` kernel documentation for the 190details): 191 192 - a - ESCAPE_ANY 193 - c - ESCAPE_SPECIAL 194 - h - ESCAPE_HEX 195 - n - ESCAPE_NULL 196 - o - ESCAPE_OCTAL 197 - p - ESCAPE_NP 198 - s - ESCAPE_SPACE 199 200By default ESCAPE_ANY_NP is used. 201 202ESCAPE_ANY_NP is the sane choice for many cases, in particularly for 203printing SSIDs. 204 205If field width is omitted then 1 byte only will be escaped. 206 207Raw buffer as a hex string 208-------------------------- 209 210:: 211 212 %*ph 00 01 02 ... 3f 213 %*phC 00:01:02: ... :3f 214 %*phD 00-01-02- ... -3f 215 %*phN 000102 ... 3f 216 217For printing small buffers (up to 64 bytes long) as a hex string with a 218certain separator. For larger buffers consider using 219:c:func:`print_hex_dump`. 220 221MAC/FDDI addresses 222------------------ 223 224:: 225 226 %pM 00:01:02:03:04:05 227 %pMR 05:04:03:02:01:00 228 %pMF 00-01-02-03-04-05 229 %pm 000102030405 230 %pmR 050403020100 231 232For printing 6-byte MAC/FDDI addresses in hex notation. The ``M`` and ``m`` 233specifiers result in a printed address with (M) or without (m) byte 234separators. The default byte separator is the colon (:). 235 236Where FDDI addresses are concerned the ``F`` specifier can be used after 237the ``M`` specifier to use dash (-) separators instead of the default 238separator. 239 240For Bluetooth addresses the ``R`` specifier shall be used after the ``M`` 241specifier to use reversed byte order suitable for visual interpretation 242of Bluetooth addresses which are in the little endian order. 243 244Passed by reference. 245 246IPv4 addresses 247-------------- 248 249:: 250 251 %pI4 1.2.3.4 252 %pi4 001.002.003.004 253 %p[Ii]4[hnbl] 254 255For printing IPv4 dot-separated decimal addresses. The ``I4`` and ``i4`` 256specifiers result in a printed address with (i4) or without (I4) leading 257zeros. 258 259The additional ``h``, ``n``, ``b``, and ``l`` specifiers are used to specify 260host, network, big or little endian order addresses respectively. Where 261no specifier is provided the default network/big endian order is used. 262 263Passed by reference. 264 265IPv6 addresses 266-------------- 267 268:: 269 270 %pI6 0001:0002:0003:0004:0005:0006:0007:0008 271 %pi6 00010002000300040005000600070008 272 %pI6c 1:2:3:4:5:6:7:8 273 274For printing IPv6 network-order 16-bit hex addresses. The ``I6`` and ``i6`` 275specifiers result in a printed address with (I6) or without (i6) 276colon-separators. Leading zeros are always used. 277 278The additional ``c`` specifier can be used with the ``I`` specifier to 279print a compressed IPv6 address as described by 280http://tools.ietf.org/html/rfc5952 281 282Passed by reference. 283 284IPv4/IPv6 addresses (generic, with port, flowinfo, scope) 285--------------------------------------------------------- 286 287:: 288 289 %pIS 1.2.3.4 or 0001:0002:0003:0004:0005:0006:0007:0008 290 %piS 001.002.003.004 or 00010002000300040005000600070008 291 %pISc 1.2.3.4 or 1:2:3:4:5:6:7:8 292 %pISpc 1.2.3.4:12345 or [1:2:3:4:5:6:7:8]:12345 293 %p[Ii]S[pfschnbl] 294 295For printing an IP address without the need to distinguish whether it's of 296type AF_INET or AF_INET6. A pointer to a valid struct sockaddr, 297specified through ``IS`` or ``iS``, can be passed to this format specifier. 298 299The additional ``p``, ``f``, and ``s`` specifiers are used to specify port 300(IPv4, IPv6), flowinfo (IPv6) and scope (IPv6). Ports have a ``:`` prefix, 301flowinfo a ``/`` and scope a ``%``, each followed by the actual value. 302 303In case of an IPv6 address the compressed IPv6 address as described by 304http://tools.ietf.org/html/rfc5952 is being used if the additional 305specifier ``c`` is given. The IPv6 address is surrounded by ``[``, ``]`` in 306case of additional specifiers ``p``, ``f`` or ``s`` as suggested by 307https://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-07 308 309In case of IPv4 addresses, the additional ``h``, ``n``, ``b``, and ``l`` 310specifiers can be used as well and are ignored in case of an IPv6 311address. 312 313Passed by reference. 314 315Further examples:: 316 317 %pISfc 1.2.3.4 or [1:2:3:4:5:6:7:8]/123456789 318 %pISsc 1.2.3.4 or [1:2:3:4:5:6:7:8]%1234567890 319 %pISpfc 1.2.3.4:12345 or [1:2:3:4:5:6:7:8]:12345/123456789 320 321UUID/GUID addresses 322------------------- 323 324:: 325 326 %pUb 00010203-0405-0607-0809-0a0b0c0d0e0f 327 %pUB 00010203-0405-0607-0809-0A0B0C0D0E0F 328 %pUl 03020100-0504-0706-0809-0a0b0c0e0e0f 329 %pUL 03020100-0504-0706-0809-0A0B0C0E0E0F 330 331For printing 16-byte UUID/GUIDs addresses. The additional ``l``, ``L``, 332``b`` and ``B`` specifiers are used to specify a little endian order in 333lower (l) or upper case (L) hex notation - and big endian order in lower (b) 334or upper case (B) hex notation. 335 336Where no additional specifiers are used the default big endian 337order with lower case hex notation will be printed. 338 339Passed by reference. 340 341dentry names 342------------ 343 344:: 345 346 %pd{,2,3,4} 347 %pD{,2,3,4} 348 349For printing dentry name; if we race with :c:func:`d_move`, the name might 350be a mix of old and new ones, but it won't oops. %pd dentry is a safer 351equivalent of %s dentry->d_name.name we used to use, %pd<n> prints ``n`` 352last components. %pD does the same thing for struct file. 353 354Passed by reference. 355 356block_device names 357------------------ 358 359:: 360 361 %pg sda, sda1 or loop0p1 362 363For printing name of block_device pointers. 364 365struct va_format 366---------------- 367 368:: 369 370 %pV 371 372For printing struct va_format structures. These contain a format string 373and va_list as follows:: 374 375 struct va_format { 376 const char *fmt; 377 va_list *va; 378 }; 379 380Implements a "recursive vsnprintf". 381 382Do not use this feature without some mechanism to verify the 383correctness of the format string and va_list arguments. 384 385Passed by reference. 386 387Device tree nodes 388----------------- 389 390:: 391 392 %pOF[fnpPcCF] 393 394 395For printing device tree node structures. Default behaviour is 396equivalent to %pOFf. 397 398 - f - device node full_name 399 - n - device node name 400 - p - device node phandle 401 - P - device node path spec (name + @unit) 402 - F - device node flags 403 - c - major compatible string 404 - C - full compatible string 405 406The separator when using multiple arguments is ':' 407 408Examples:: 409 410 %pOF /foo/bar@0 - Node full name 411 %pOFf /foo/bar@0 - Same as above 412 %pOFfp /foo/bar@0:10 - Node full name + phandle 413 %pOFfcF /foo/bar@0:foo,device:--P- - Node full name + 414 major compatible string + 415 node flags 416 D - dynamic 417 d - detached 418 P - Populated 419 B - Populated bus 420 421Passed by reference. 422 423Time and date (struct rtc_time) 424------------------------------- 425 426:: 427 428 %ptR YYYY-mm-ddTHH:MM:SS 429 %ptRd YYYY-mm-dd 430 %ptRt HH:MM:SS 431 %ptR[dt][r] 432 433For printing date and time as represented by struct rtc_time structure in 434human readable format. 435 436By default year will be incremented by 1900 and month by 1. Use %ptRr (raw) 437to suppress this behaviour. 438 439Passed by reference. 440 441struct clk 442---------- 443 444:: 445 446 %pC pll1 447 %pCn pll1 448 449For printing struct clk structures. %pC and %pCn print the name of the clock 450(Common Clock Framework) or a unique 32-bit ID (legacy clock framework). 451 452Passed by reference. 453 454bitmap and its derivatives such as cpumask and nodemask 455------------------------------------------------------- 456 457:: 458 459 %*pb 0779 460 %*pbl 0,3-6,8-10 461 462For printing bitmap and its derivatives such as cpumask and nodemask, 463%*pb outputs the bitmap with field width as the number of bits and %*pbl 464output the bitmap as range list with field width as the number of bits. 465 466Passed by reference. 467 468Flags bitfields such as page flags, gfp_flags 469--------------------------------------------- 470 471:: 472 473 %pGp referenced|uptodate|lru|active|private 474 %pGg GFP_USER|GFP_DMA32|GFP_NOWARN 475 %pGv read|exec|mayread|maywrite|mayexec|denywrite 476 477For printing flags bitfields as a collection of symbolic constants that 478would construct the value. The type of flags is given by the third 479character. Currently supported are [p]age flags, [v]ma_flags (both 480expect ``unsigned long *``) and [g]fp_flags (expects ``gfp_t *``). The flag 481names and print order depends on the particular type. 482 483Note that this format should not be used directly in the 484:c:func:`TP_printk()` part of a tracepoint. Instead, use the show_*_flags() 485functions from <trace/events/mmflags.h>. 486 487Passed by reference. 488 489Network device features 490----------------------- 491 492:: 493 494 %pNF 0x000000000000c000 495 496For printing netdev_features_t. 497 498Passed by reference. 499 500Thanks 501====== 502 503If you add other %p extensions, please extend <lib/test_printf.c> with 504one or more test cases, if at all feasible. 505 506Thank you for your cooperation and attention. 507