--- ./kernel/kallsyms.c.orig 2005-07-11 12:32:32.000000000 +0100 +++ ./kernel/kallsyms.c 2005-07-11 12:34:42.000000000 +0100 @@ -232,23 +232,21 @@ const char *kallsyms_lookup(unsigned lon /* Replace "%s" in format with address, or returns -errno. */ void __print_symbol(const char *fmt, unsigned long address) { - char *modname; + char *modname, *bufend; const char *name; unsigned long offset, size; - char namebuf[KSYM_NAME_LEN+1]; char buffer[sizeof("%s+%#lx/%#lx [%s]") + KSYM_NAME_LEN + 2*(BITS_PER_LONG*3/10) + MODULE_NAME_LEN + 1]; - name = kallsyms_lookup(address, &size, &offset, &modname, namebuf); + name = kallsyms_lookup(address, &size, &offset, &modname, buffer); if (!name) sprintf(buffer, "0x%lx", address); else { + bufend = strchr(buffer, '\0'); + bufend += sprintf(bufend, "+%#lx/%#lx", offset, size); if (modname) - sprintf(buffer, "%s+%#lx/%#lx [%s]", name, offset, - size, modname); - else - sprintf(buffer, "%s+%#lx/%#lx", name, offset, size); + sprintf(bufend, " [%s]", modname); } printk(fmt, buffer); }