|
@@ -50,42 +50,31 @@ Symbols/Function Pointers
|
|
|
|
|
|
::
|
|
|
|
|
|
+ %pS versatile_init+0x0/0x110
|
|
|
+ %ps versatile_init
|
|
|
%pF versatile_init+0x0/0x110
|
|
|
%pf versatile_init
|
|
|
- %pS versatile_init+0x0/0x110
|
|
|
%pSR versatile_init+0x9/0x110
|
|
|
(with __builtin_extract_return_addr() translation)
|
|
|
- %ps versatile_init
|
|
|
%pB prev_fn_of_versatile_init+0x88/0x88
|
|
|
|
|
|
-The ``F`` and ``f`` specifiers are for printing function pointers,
|
|
|
-for example, f->func, &gettimeofday. They have the same result as
|
|
|
-``S`` and ``s`` specifiers. But they do an extra conversion on
|
|
|
-ia64, ppc64 and parisc64 architectures where the function pointers
|
|
|
-are actually function descriptors.
|
|
|
+The ``S`` and ``s`` specifiers are used for printing a pointer in symbolic
|
|
|
+format. They result in the symbol name with (``S``) or without (``s``)
|
|
|
+offsets. If KALLSYMS are disabled then the symbol address is printed instead.
|
|
|
|
|
|
-The ``S`` and ``s`` specifiers can be used for printing symbols
|
|
|
-from direct addresses, for example, __builtin_return_address(0),
|
|
|
-(void *)regs->ip. They result in the symbol name with (``S``) or
|
|
|
-without (``s``) offsets. If KALLSYMS are disabled then the symbol
|
|
|
-address is printed instead.
|
|
|
+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.
|
|
|
|
|
|
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
|
|
|
when tail-call``s are used and marked with the noreturn GCC attribute.
|
|
|
|
|
|
-Examples::
|
|
|
-
|
|
|
- printk("Going to call: %pF\n", gettimeofday);
|
|
|
- printk("Going to call: %pF\n", p->func);
|
|
|
- printk("%s: called from %pS\n", __func__, (void *)_RET_IP_);
|
|
|
- printk("%s: called from %pS\n", __func__,
|
|
|
- (void *)__builtin_return_address(0));
|
|
|
- printk("Faulted at %pS\n", (void *)regs->ip);
|
|
|
- printk(" %s%pB\n", (reliable ? "" : "? "), (void *)*stack);
|
|
|
-
|
|
|
-
|
|
|
Kernel Pointers
|
|
|
===============
|
|
|
|