aboutsummaryrefslogtreecommitdiffstats
path: root/lib/vsprintf.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/vsprintf.c')
-rw-r--r--lib/vsprintf.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index b56f6d039d21..756ccafa9cec 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -575,12 +575,15 @@ static char *string(char *buf, char *end, char *s, struct printf_spec spec)
575} 575}
576 576
577static char *symbol_string(char *buf, char *end, void *ptr, 577static char *symbol_string(char *buf, char *end, void *ptr,
578 struct printf_spec spec) 578 struct printf_spec spec, char ext)
579{ 579{
580 unsigned long value = (unsigned long) ptr; 580 unsigned long value = (unsigned long) ptr;
581#ifdef CONFIG_KALLSYMS 581#ifdef CONFIG_KALLSYMS
582 char sym[KSYM_SYMBOL_LEN]; 582 char sym[KSYM_SYMBOL_LEN];
583 sprint_symbol(sym, value); 583 if (ext != 'f')
584 sprint_symbol(sym, value);
585 else
586 kallsyms_lookup(value, NULL, NULL, NULL, sym);
584 return string(buf, end, sym, spec); 587 return string(buf, end, sym, spec);
585#else 588#else
586 spec.field_width = 2*sizeof(void *); 589 spec.field_width = 2*sizeof(void *);
@@ -692,7 +695,8 @@ static char *ip4_addr_string(char *buf, char *end, u8 *addr,
692 * 695 *
693 * Right now we handle: 696 * Right now we handle:
694 * 697 *
695 * - 'F' For symbolic function descriptor pointers 698 * - 'F' For symbolic function descriptor pointers with offset
699 * - 'f' For simple symbolic function names without offset
696 * - 'S' For symbolic direct pointers 700 * - 'S' For symbolic direct pointers
697 * - 'R' For a struct resource pointer, it prints the range of 701 * - 'R' For a struct resource pointer, it prints the range of
698 * addresses (not the name nor the flags) 702 * addresses (not the name nor the flags)
@@ -715,10 +719,11 @@ static char *pointer(const char *fmt, char *buf, char *end, void *ptr,
715 719
716 switch (*fmt) { 720 switch (*fmt) {
717 case 'F': 721 case 'F':
722 case 'f':
718 ptr = dereference_function_descriptor(ptr); 723 ptr = dereference_function_descriptor(ptr);
719 /* Fallthrough */ 724 /* Fallthrough */
720 case 'S': 725 case 'S':
721 return symbol_string(buf, end, ptr, spec); 726 return symbol_string(buf, end, ptr, spec, *fmt);
722 case 'R': 727 case 'R':
723 return resource_string(buf, end, ptr, spec); 728 return resource_string(buf, end, ptr, spec);
724 case 'm': 729 case 'm':
@@ -954,7 +959,8 @@ qualifier:
954 * 959 *
955 * This function follows C99 vsnprintf, but has some extensions: 960 * This function follows C99 vsnprintf, but has some extensions:
956 * %pS output the name of a text symbol 961 * %pS output the name of a text symbol
957 * %pF output the name of a function pointer 962 * %pF output the name of a function pointer with its offset
963 * %pf output the name of a function pointer without its offset
958 * %pR output the address range in a struct resource 964 * %pR output the address range in a struct resource
959 * 965 *
960 * The return value is the number of characters which would 966 * The return value is the number of characters which would
@@ -1412,7 +1418,8 @@ EXPORT_SYMBOL_GPL(vbin_printf);
1412 * 1418 *
1413 * The format follows C99 vsnprintf, but has some extensions: 1419 * The format follows C99 vsnprintf, but has some extensions:
1414 * %pS output the name of a text symbol 1420 * %pS output the name of a text symbol
1415 * %pF output the name of a function pointer 1421 * %pF output the name of a function pointer with its offset
1422 * %pf output the name of a function pointer without its offset
1416 * %pR output the address range in a struct resource 1423 * %pR output the address range in a struct resource
1417 * %n is ignored 1424 * %n is ignored
1418 * 1425 *