summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-05-15 17:50:37 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2008-05-15 17:50:37 -0700
commita442ac512f36981182e66a427ad05f449ff6593b (patch)
tree8a99f2f4cb7f66e816163068c0c2c709c1852ac6
parent7371fd11a6e2aed99895db4f100940fa5022f7fe (diff)
Clean up 'print_fn_descriptor_symbol()' types
Everybody wants to pass it a function pointer, and in fact, that is what you _must_ pass it for it to make sense (since it knows that ia64 and ppc64 use descriptors for function pointers and fetches the actual address from there). So don't make the argument be a 'unsigned long' and force everybody to add a cast. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/base/power/main.c2
-rw-r--r--drivers/pci/quirks.c3
-rw-r--r--drivers/pnp/quirks.c3
-rw-r--r--include/linux/kallsyms.h24
-rw-r--r--init/main.c9
5 files changed, 20 insertions, 21 deletions
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index 7b76fd3b93a..45cc3d9eacb 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)
{
if (ret) {
printk(KERN_ERR "%s(): ", function);
- print_fn_descriptor_symbol("%s() returns ", (unsigned long)fn);
+ print_fn_descriptor_symbol("%s returns ", fn);
printk("%d\n", ret);
}
}
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index f2d9c770f51..dabb563f51d 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
(f->device == dev->device || f->device == (u16) PCI_ANY_ID)) {
#ifdef DEBUG
dev_dbg(&dev->dev, "calling ");
- print_fn_descriptor_symbol("%s()\n",
- (unsigned long) f->hook);
+ print_fn_descriptor_symbol("%s\n", f->hook);
#endif
f->hook(dev);
}
diff --git a/drivers/pnp/quirks.c b/drivers/pnp/quirks.c
index ffdb12a59c4..e2b7de4cb05 100644
--- a/drivers/pnp/quirks.c
+++ b/drivers/pnp/quirks.c
@@ -331,8 +331,7 @@ void pnp_fixup_device(struct pnp_dev *dev)
continue;
#ifdef DEBUG
dev_dbg(&dev->dev, "%s: calling ", f->id);
- print_fn_descriptor_symbol("%s\n",
- (unsigned long) f->quirk_function);
+ print_fn_descriptor_symbol("%s\n", f->quirk_function);
#endif
f->quirk_function(dev);
}
diff --git a/include/linux/kallsyms.h b/include/linux/kallsyms.h
index 82de2fb62cb..00c1801099f 100644
--- a/include/linux/kallsyms.h
+++ b/include/linux/kallsyms.h
@@ -83,16 +83,6 @@ __attribute__((format(printf,1,2)));
static inline void __check_printsym_format(const char *fmt, ...)
{
}
-/* ia64 and ppc64 use function descriptors, which contain the real address */
-#if defined(CONFIG_IA64) || defined(CONFIG_PPC64)
-#define print_fn_descriptor_symbol(fmt, addr) \
-do { \
- unsigned long *__faddr = (unsigned long*) addr; \
- print_symbol(fmt, __faddr[0]); \
-} while (0)
-#else
-#define print_fn_descriptor_symbol(fmt, addr) print_symbol(fmt, addr)
-#endif
static inline void print_symbol(const char *fmt, unsigned long addr)
{
@@ -101,6 +91,20 @@ static inline void print_symbol(const char *fmt, unsigned long addr)
__builtin_extract_return_addr((void *)addr));
}
+/*
+ * Pretty-print a function pointer.
+ *
+ * ia64 and ppc64 function pointers are really function descriptors,
+ * which contain a pointer the real address.
+ */
+static inline void print_fn_descriptor_symbol(const char *fmt, void *addr)
+{
+#if defined(CONFIG_IA64) || defined(CONFIG_PPC64)
+ addr = *(void **)addr;
+#endif
+ print_symbol(fmt, (unsigned long)addr);
+}
+
#ifndef CONFIG_64BIT
#define print_ip_sym(ip) \
do { \
diff --git a/init/main.c b/init/main.c
index f406fefa626..c62215146a8 100644
--- a/init/main.c
+++ b/init/main.c
@@ -706,8 +706,7 @@ static void __init do_initcalls(void)
int result;
if (initcall_debug) {
- print_fn_descriptor_symbol("calling %s()\n",
- (unsigned long) *call);
+ print_fn_descriptor_symbol("calling %s\n", *call);
t0 = ktime_get();
}
@@ -717,8 +716,7 @@ static void __init do_initcalls(void)
t1 = ktime_get();
delta = ktime_sub(t1, t0);
- print_fn_descriptor_symbol("initcall %s()",
- (unsigned long) *call);
+ print_fn_descriptor_symbol("initcall %s", *call);
printk(" returned %d after %Ld msecs\n", result,
(unsigned long long) delta.tv64 >> 20);
}
@@ -737,8 +735,7 @@ static void __init do_initcalls(void)
local_irq_enable();
}
if (msgbuf[0]) {
- print_fn_descriptor_symbol(KERN_WARNING "initcall %s()",
- (unsigned long) *call);
+ print_fn_descriptor_symbol(KERN_WARNING "initcall %s", *call);
printk(" returned with %s\n", msgbuf);
}
}