205-backtrace_module_info.patch 873 B

12345678910111213141516171819202122232425262728293031323334
  1. --- a/lib/vsprintf.c
  2. +++ b/lib/vsprintf.c
  3. @@ -669,8 +669,10 @@ char *symbol_string(char *buf, char *end
  4. struct printf_spec spec, const char *fmt)
  5. {
  6. unsigned long value;
  7. -#ifdef CONFIG_KALLSYMS
  8. char sym[KSYM_SYMBOL_LEN];
  9. +#ifndef CONFIG_KALLSYMS
  10. + struct module *mod;
  11. + int len;
  12. #endif
  13. if (fmt[1] == 'R')
  14. @@ -684,11 +686,16 @@ char *symbol_string(char *buf, char *end
  15. sprint_symbol(sym, value);
  16. else
  17. sprint_symbol_no_offset(sym, value);
  18. -
  19. - return string(buf, end, sym, spec);
  20. #else
  21. - return special_hex_number(buf, end, value, sizeof(void *));
  22. + len = snprintf(sym, sizeof(sym), "0x%lx", value);
  23. +
  24. + mod = __module_address(value);
  25. + if (mod)
  26. + snprintf(sym + len, sizeof(sym) - len, " [%s@%p+0x%x]",
  27. + mod->name, mod->core_layout.base,
  28. + mod->core_layout.size);
  29. #endif
  30. + return string(buf, end, sym, spec);
  31. }
  32. static noinline_for_stack