If function is marked as static and compiler decies to lnline function with or without inline keyword, the function has no symbol. We just know symbol located near the address of the inline function by %pS type that shows symbol and offset. But we don't know function name. The real address let us extract the function name and location of source code by debugging tools such as addr2line. This is helpful to debug.
Signed-off-by: Haesung Kim <[email protected]> --- kernel/stacktrace.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/kernel/stacktrace.c b/kernel/stacktrace.c index 946f44a..b7168c5 100644 --- a/kernel/stacktrace.c +++ b/kernel/stacktrace.c @@ -24,12 +24,15 @@ void stack_trace_print(const unsigned long *entries, unsigned int nr_entries, int spaces) { unsigned int i; + unsigned long ip; if (WARN_ON(!entries)) return; for (i = 0; i < nr_entries; i++) - printk("%*c%pS\n", 1 + spaces, ' ', (void *)entries[i]); + ip = entries[i]; + printk("%*c[<%px>] %pS\n", + 1 + spaces, ' ', (void *) ip, (void *) ip); } EXPORT_SYMBOL_GPL(stack_trace_print); @@ -47,13 +50,15 @@ int stack_trace_snprint(char *buf, size_t size, const unsigned long *entries, unsigned int nr_entries, int spaces) { unsigned int generated, i, total = 0; + unsigned long ip; if (WARN_ON(!entries)) return 0; for (i = 0; i < nr_entries && size; i++) { - generated = snprintf(buf, size, "%*c%pS\n", 1 + spaces, ' ', - (void *)entries[i]); + ip = entries[i]; + generated = snprintf(buf, size, "%*c[<%px>] %pS\n", + 1 + spaces, ' ', (void *) ip, (void *) ip); total += generated; if (generated >= size) { -- 2.7.4

