aboutsummaryrefslogtreecommitdiffstats
path: root/lib/vsprintf.c
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2009-09-16 20:03:06 -0400
committerSteven Rostedt <rostedt@goodmis.org>2009-09-17 15:53:14 -0400
commit91adcd2c4b104a8ce2973e6e84b01fd48735ffc6 (patch)
tree18a97957e7881ef3e4405be940c0ebfc61873b41 /lib/vsprintf.c
parent45bd00d31de886f8425b4dd33204b911b0a466a9 (diff)
vsprintf: add %ps that is the same as %pS but is like %pf
On PowerPC64 function pointers do not point directly at the functions, but instead point to pointers to the functions. The output of %pF expects to point to a pointer to the function, whereas %pS will show the function itself. mcount returns the direct pointer to the function and not the pointer to the pointer. Thus %pS must be used to show this. The function tracer requires printing of the functions without offsets and uses the %pf instead. %pF produces run_local_timers+0x4/0x1f %pf produces just run_local_timers For PowerPC64, we need to use the direct pointer, and we only have %pS which will produce .run_local_timers+0x4/0x1f This patch creates a %ps that matches the %pf as %pS matches %pF. Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Zhao Lei <zhaolei@cn.fujitsu.com> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'lib/vsprintf.c')
-rw-r--r--lib/vsprintf.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index cb8a112030b..c8f3ed62cee 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -581,7 +581,7 @@ static char *symbol_string(char *buf, char *end, void *ptr,
581 unsigned long value = (unsigned long) ptr; 581 unsigned long value = (unsigned long) ptr;
582#ifdef CONFIG_KALLSYMS 582#ifdef CONFIG_KALLSYMS
583 char sym[KSYM_SYMBOL_LEN]; 583 char sym[KSYM_SYMBOL_LEN];
584 if (ext != 'f') 584 if (ext != 'f' && ext != 's')
585 sprint_symbol(sym, value); 585 sprint_symbol(sym, value);
586 else 586 else
587 kallsyms_lookup(value, NULL, NULL, NULL, sym); 587 kallsyms_lookup(value, NULL, NULL, NULL, sym);
@@ -822,6 +822,7 @@ static char *pointer(const char *fmt, char *buf, char *end, void *ptr,
822 case 'F': 822 case 'F':
823 case 'f': 823 case 'f':
824 ptr = dereference_function_descriptor(ptr); 824 ptr = dereference_function_descriptor(ptr);
825 case 's':
825 /* Fallthrough */ 826 /* Fallthrough */
826 case 'S': 827 case 'S':
827 return symbol_string(buf, end, ptr, spec, *fmt); 828 return symbol_string(buf, end, ptr, spec, *fmt);
@@ -1063,7 +1064,8 @@ qualifier:
1063 * @args: Arguments for the format string 1064 * @args: Arguments for the format string
1064 * 1065 *
1065 * This function follows C99 vsnprintf, but has some extensions: 1066 * This function follows C99 vsnprintf, but has some extensions:
1066 * %pS output the name of a text symbol 1067 * %pS output the name of a text symbol with offset
1068 * %ps output the name of a text symbol without offset
1067 * %pF output the name of a function pointer with its offset 1069 * %pF output the name of a function pointer with its offset
1068 * %pf output the name of a function pointer without its offset 1070 * %pf output the name of a function pointer without its offset
1069 * %pR output the address range in a struct resource 1071 * %pR output the address range in a struct resource