--- zzzz-none-000/linux-2.6.13.1/kernel/kallsyms.c 2005-09-10 02:42:58.000000000 +0000 +++ ohio-7170-487/linux-2.6.13.1/kernel/kallsyms.c 2006-04-27 12:13:19.000000000 +0000 @@ -253,6 +253,26 @@ printk(fmt, buffer); } +/* Replace "%s" in format with address, or returns -errno. */ +void __sprint_symbol(char *buffer, unsigned long address) +{ + char *modname; + const char *name; + unsigned long offset, size; + char namebuf[KSYM_NAME_LEN+1]; + + name = kallsyms_lookup(address, &size, &offset, &modname, namebuf); + + if (!name) + sprintf(buffer, "0x%lx", address); + else { + if (modname) + sprintf(buffer, "%s+%#lx/%#lx [%s]", name, offset, size, modname); + else + sprintf(buffer, "%s+%#lx/%#lx", name, offset, size); + } +} + /* To avoid using get_symbol_offset for every symbol, we carry prefix along. */ struct kallsym_iter {