*offset = addr - symbols_address(low);
return namebuf;
}
-
-/* Replace "%s" in format with address, or returns -errno. */
-void __print_symbol(const char *fmt, unsigned long address)
-{
- const char *name;
- unsigned long offset, size, flags;
-
- static DEFINE_SPINLOCK(lock);
- static char namebuf[KSYM_NAME_LEN+1];
-#define BUFFER_SIZE sizeof("%s+%#lx/%#lx [%s]") + KSYM_NAME_LEN + \
- 2*(BITS_PER_LONG*3/10) + 1
- static char buffer[BUFFER_SIZE];
-
- spin_lock_irqsave(&lock, flags);
-
- name = symbols_lookup(address, &size, &offset, namebuf);
-
- if (!name)
- snprintf(buffer, BUFFER_SIZE, "???");
- else
- snprintf(buffer, BUFFER_SIZE, "%s+%#lx/%#lx", name, offset, size);
-
- printk(fmt, buffer);
-
- spin_unlock_irqrestore(&lock, flags);
-}
static void dump_timer(struct timer *t, s_time_t now)
{
- printk(" ex=%8"PRId64"us timer=%p cb=%p(%p)",
+ printk(" ex=%12"PRId64"us timer=%p cb=%ps(%p)\n",
(t->expires - now) / 1000, t, t->function, t->data);
- print_symbol(" %s\n", (unsigned long)t->function);
}
static void dump_timerq(unsigned char key)
unsigned long *offset,
char *namebuf);
-/* Replace "%s" in format with address, if found */
-void __print_symbol(const char *fmt, unsigned long address);
-
-/* This macro allows us to keep printk typechecking */
-static void __check_printsym_format(const char *fmt, ...)
- __attribute__((format(printf,1,2)));
- static inline void __check_printsym_format(const char *fmt, ...)
-{
-}
-
-#if 0
-#define print_fn_descriptor_symbol(fmt, addr) \
- print_symbol(fmt, *(unsigned long *)addr)
-#else
-#define print_fn_descriptor_symbol(fmt, addr) print_symbol(fmt, addr)
-#endif
-
-#define print_symbol(fmt, addr) \
-do { \
- __check_printsym_format(fmt, ""); \
- __print_symbol(fmt, addr); \
-} while(0)
-
#endif /*_XEN_SYMBOLS_H*/