Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Documentation: update printk-formats.txt

This patch updates the incomplete documentation concerning the printk
extended format specifiers.

Signed-off-by: Andrew Murray <amurray@mpc-data.co.uk>
Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Andrew Murray and committed by
Linus Torvalds
04c55715 a1b6ae8e

+117 -2
+117 -2
Documentation/printk-formats.txt
··· 9 9 size_t %zu or %zx 10 10 ssize_t %zd or %zx 11 11 12 - Raw pointer value SHOULD be printed with %p. 12 + Raw pointer value SHOULD be printed with %p. The kernel supports 13 + the following extended format specifiers for pointer types: 14 + 15 + Symbols/Function Pointers: 16 + 17 + %pF versatile_init+0x0/0x110 18 + %pf versatile_init 19 + %pS versatile_init+0x0/0x110 20 + %ps versatile_init 21 + %pB prev_fn_of_versatile_init+0x88/0x88 22 + 23 + For printing symbols and function pointers. The 'S' and 's' specifiers 24 + result in the symbol name with ('S') or without ('s') offsets. Where 25 + this is used on a kernel without KALLSYMS - the symbol address is 26 + printed instead. 27 + 28 + The 'B' specifier results in the symbol name with offsets and should be 29 + used when printing stack backtraces. The specifier takes into 30 + consideration the effect of compiler optimisations which may occur 31 + when tail-call's are used and marked with the noreturn GCC attribute. 32 + 33 + On ia64, ppc64 and parisc64 architectures function pointers are 34 + actually function descriptors which must first be resolved. The 'F' and 35 + 'f' specifiers perform this resolution and then provide the same 36 + functionality as the 'S' and 's' specifiers. 37 + 38 + Kernel Pointers: 39 + 40 + %pK 0x01234567 or 0x0123456789abcdef 41 + 42 + For printing kernel pointers which should be hidden from unprivileged 43 + users. The behaviour of %pK depends on the kptr_restrict sysctl - see 44 + Documentation/sysctl/kernel.txt for more details. 45 + 46 + Struct Resources: 47 + 48 + %pr [mem 0x60000000-0x6fffffff flags 0x2200] or 49 + [mem 0x0000000060000000-0x000000006fffffff flags 0x2200] 50 + %pR [mem 0x60000000-0x6fffffff pref] or 51 + [mem 0x0000000060000000-0x000000006fffffff pref] 52 + 53 + For printing struct resources. The 'R' and 'r' specifiers result in a 54 + printed resource with ('R') or without ('r') a decoded flags member. 55 + 56 + MAC/FDDI addresses: 57 + 58 + %pM 00:01:02:03:04:05 59 + %pMF 00-01-02-03-04-05 60 + %pm 000102030405 61 + 62 + For printing 6-byte MAC/FDDI addresses in hex notation. The 'M' and 'm' 63 + specifiers result in a printed address with ('M') or without ('m') byte 64 + separators. The default byte separator is the colon (':'). 65 + 66 + Where FDDI addresses are concerned the 'F' specifier can be used after 67 + the 'M' specifier to use dash ('-') separators instead of the default 68 + separator. 69 + 70 + IPv4 addresses: 71 + 72 + %pI4 1.2.3.4 73 + %pi4 001.002.003.004 74 + %p[Ii][hnbl] 75 + 76 + For printing IPv4 dot-separated decimal addresses. The 'I4' and 'i4' 77 + specifiers result in a printed address with ('i4') or without ('I4') 78 + leading zeros. 79 + 80 + The additional 'h', 'n', 'b', and 'l' specifiers are used to specify 81 + host, network, big or little endian order addresses respectively. Where 82 + no specifier is provided the default network/big endian order is used. 83 + 84 + IPv6 addresses: 85 + 86 + %pI6 0001:0002:0003:0004:0005:0006:0007:0008 87 + %pi6 00010002000300040005000600070008 88 + %pI6c 1:2:3:4:5:6:7:8 89 + 90 + For printing IPv6 network-order 16-bit hex addresses. The 'I6' and 'i6' 91 + specifiers result in a printed address with ('I6') or without ('i6') 92 + colon-separators. Leading zeros are always used. 93 + 94 + The additional 'c' specifier can be used with the 'I' specifier to 95 + print a compressed IPv6 address as described by 96 + http://tools.ietf.org/html/rfc5952 97 + 98 + UUID/GUID addresses: 99 + 100 + %pUb 00010203-0405-0607-0809-0a0b0c0d0e0f 101 + %pUB 00010203-0405-0607-0809-0A0B0C0D0E0F 102 + %pUl 03020100-0504-0706-0809-0a0b0c0e0e0f 103 + %pUL 03020100-0504-0706-0809-0A0B0C0E0E0F 104 + 105 + For printing 16-byte UUID/GUIDs addresses. The additional 'l', 'L', 106 + 'b' and 'B' specifiers are used to specify a little endian order in 107 + lower ('l') or upper case ('L') hex characters - and big endian order 108 + in lower ('b') or upper case ('B') hex characters. 109 + 110 + Where no additional specifiers are used the default little endian 111 + order with lower case hex characters will be printed. 112 + 113 + struct va_format: 114 + 115 + %pV 116 + 117 + For printing struct va_format structures. These contain a format string 118 + and va_list as follows: 119 + 120 + struct va_format { 121 + const char *fmt; 122 + va_list *va; 123 + }; 124 + 125 + Do not use this feature without some mechanism to verify the 126 + correctness of the format string and va_list arguments. 13 127 14 128 u64 SHOULD be printed with %llu/%llx, (unsigned long long): 15 129 ··· 146 32 Thank you for your cooperation and attention. 147 33 148 34 149 - By Randy Dunlap <rdunlap@xenotime.net> 35 + By Randy Dunlap <rdunlap@xenotime.net> and 36 + Andrew Murray <amurray@mpc-data.co.uk>