diff options
| -rw-r--r-- | lib/vsprintf.c | 19 |
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 | ||
| 577 | static char *symbol_string(char *buf, char *end, void *ptr, | 577 | static 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 | * |
