diff options
| -rw-r--r-- | drivers/base/power/main.c | 2 | ||||
| -rw-r--r-- | drivers/pci/quirks.c | 3 | ||||
| -rw-r--r-- | drivers/pnp/quirks.c | 3 | ||||
| -rw-r--r-- | include/linux/kallsyms.h | 24 | ||||
| -rw-r--r-- | init/main.c | 9 |
5 files changed, 20 insertions, 21 deletions
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index 7b76fd3b93a4..45cc3d9eacb8 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c | |||
| @@ -418,7 +418,7 @@ void __suspend_report_result(const char *function, void *fn, int ret) | |||
| 418 | { | 418 | { |
| 419 | if (ret) { | 419 | if (ret) { |
| 420 | printk(KERN_ERR "%s(): ", function); | 420 | printk(KERN_ERR "%s(): ", function); |
| 421 | print_fn_descriptor_symbol("%s() returns ", (unsigned long)fn); | 421 | print_fn_descriptor_symbol("%s returns ", fn); |
| 422 | printk("%d\n", ret); | 422 | printk("%d\n", ret); |
| 423 | } | 423 | } |
| 424 | } | 424 | } |
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index f2d9c770f51a..dabb563f51d9 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
| @@ -1503,8 +1503,7 @@ static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f, struct pci_f | |||
| 1503 | (f->device == dev->device || f->device == (u16) PCI_ANY_ID)) { | 1503 | (f->device == dev->device || f->device == (u16) PCI_ANY_ID)) { |
| 1504 | #ifdef DEBUG | 1504 | #ifdef DEBUG |
| 1505 | dev_dbg(&dev->dev, "calling "); | 1505 | dev_dbg(&dev->dev, "calling "); |
| 1506 | print_fn_descriptor_symbol("%s()\n", | 1506 | print_fn_descriptor_symbol("%s\n", f->hook); |
| 1507 | (unsigned long) f->hook); | ||
| 1508 | #endif | 1507 | #endif |
| 1509 | f->hook(dev); | 1508 | f->hook(dev); |
| 1510 | } | 1509 | } |
diff --git a/drivers/pnp/quirks.c b/drivers/pnp/quirks.c index ffdb12a59c40..e2b7de4cb05e 100644 --- a/drivers/pnp/quirks.c +++ b/drivers/pnp/quirks.c | |||
| @@ -331,8 +331,7 @@ void pnp_fixup_device(struct pnp_dev *dev) | |||
| 331 | continue; | 331 | continue; |
| 332 | #ifdef DEBUG | 332 | #ifdef DEBUG |
| 333 | dev_dbg(&dev->dev, "%s: calling ", f->id); | 333 | dev_dbg(&dev->dev, "%s: calling ", f->id); |
| 334 | print_fn_descriptor_symbol("%s\n", | 334 | print_fn_descriptor_symbol("%s\n", f->quirk_function); |
| 335 | (unsigned long) f->quirk_function); | ||
| 336 | #endif | 335 | #endif |
| 337 | f->quirk_function(dev); | 336 | f->quirk_function(dev); |
| 338 | } | 337 | } |
diff --git a/include/linux/kallsyms.h b/include/linux/kallsyms.h index 82de2fb62cb7..00c1801099fa 100644 --- a/include/linux/kallsyms.h +++ b/include/linux/kallsyms.h | |||
| @@ -83,16 +83,6 @@ __attribute__((format(printf,1,2))); | |||
| 83 | static inline void __check_printsym_format(const char *fmt, ...) | 83 | static inline void __check_printsym_format(const char *fmt, ...) |
| 84 | { | 84 | { |
| 85 | } | 85 | } |
| 86 | /* ia64 and ppc64 use function descriptors, which contain the real address */ | ||
| 87 | #if defined(CONFIG_IA64) || defined(CONFIG_PPC64) | ||
| 88 | #define print_fn_descriptor_symbol(fmt, addr) \ | ||
| 89 | do { \ | ||
| 90 | unsigned long *__faddr = (unsigned long*) addr; \ | ||
| 91 | print_symbol(fmt, __faddr[0]); \ | ||
| 92 | } while (0) | ||
| 93 | #else | ||
| 94 | #define print_fn_descriptor_symbol(fmt, addr) print_symbol(fmt, addr) | ||
| 95 | #endif | ||
| 96 | 86 | ||
| 97 | static inline void print_symbol(const char *fmt, unsigned long addr) | 87 | static inline void print_symbol(const char *fmt, unsigned long addr) |
| 98 | { | 88 | { |
| @@ -101,6 +91,20 @@ static inline void print_symbol(const char *fmt, unsigned long addr) | |||
| 101 | __builtin_extract_return_addr((void *)addr)); | 91 | __builtin_extract_return_addr((void *)addr)); |
| 102 | } | 92 | } |
| 103 | 93 | ||
| 94 | /* | ||
| 95 | * Pretty-print a function pointer. | ||
| 96 | * | ||
| 97 | * ia64 and ppc64 function pointers are really function descriptors, | ||
| 98 | * which contain a pointer the real address. | ||
| 99 | */ | ||
| 100 | static inline void print_fn_descriptor_symbol(const char *fmt, void *addr) | ||
| 101 | { | ||
| 102 | #if defined(CONFIG_IA64) || defined(CONFIG_PPC64) | ||
| 103 | addr = *(void **)addr; | ||
| 104 | #endif | ||
| 105 | print_symbol(fmt, (unsigned long)addr); | ||
| 106 | } | ||
| 107 | |||
| 104 | #ifndef CONFIG_64BIT | 108 | #ifndef CONFIG_64BIT |
| 105 | #define print_ip_sym(ip) \ | 109 | #define print_ip_sym(ip) \ |
| 106 | do { \ | 110 | do { \ |
diff --git a/init/main.c b/init/main.c index f406fefa626c..c62215146a80 100644 --- a/init/main.c +++ b/init/main.c | |||
| @@ -706,8 +706,7 @@ static void __init do_initcalls(void) | |||
| 706 | int result; | 706 | int result; |
| 707 | 707 | ||
| 708 | if (initcall_debug) { | 708 | if (initcall_debug) { |
| 709 | print_fn_descriptor_symbol("calling %s()\n", | 709 | print_fn_descriptor_symbol("calling %s\n", *call); |
| 710 | (unsigned long) *call); | ||
| 711 | t0 = ktime_get(); | 710 | t0 = ktime_get(); |
| 712 | } | 711 | } |
| 713 | 712 | ||
| @@ -717,8 +716,7 @@ static void __init do_initcalls(void) | |||
| 717 | t1 = ktime_get(); | 716 | t1 = ktime_get(); |
| 718 | delta = ktime_sub(t1, t0); | 717 | delta = ktime_sub(t1, t0); |
| 719 | 718 | ||
| 720 | print_fn_descriptor_symbol("initcall %s()", | 719 | print_fn_descriptor_symbol("initcall %s", *call); |
| 721 | (unsigned long) *call); | ||
| 722 | printk(" returned %d after %Ld msecs\n", result, | 720 | printk(" returned %d after %Ld msecs\n", result, |
| 723 | (unsigned long long) delta.tv64 >> 20); | 721 | (unsigned long long) delta.tv64 >> 20); |
| 724 | } | 722 | } |
| @@ -737,8 +735,7 @@ static void __init do_initcalls(void) | |||
| 737 | local_irq_enable(); | 735 | local_irq_enable(); |
| 738 | } | 736 | } |
| 739 | if (msgbuf[0]) { | 737 | if (msgbuf[0]) { |
| 740 | print_fn_descriptor_symbol(KERN_WARNING "initcall %s()", | 738 | print_fn_descriptor_symbol(KERN_WARNING "initcall %s", *call); |
| 741 | (unsigned long) *call); | ||
| 742 | printk(" returned with %s\n", msgbuf); | 739 | printk(" returned with %s\n", msgbuf); |
| 743 | } | 740 | } |
| 744 | } | 741 | } |
