diff options
author | Steven Rostedt (VMware) <rostedt@goodmis.org> | 2017-06-22 17:04:55 -0400 |
---|---|---|
committer | Steven Rostedt (VMware) <rostedt@goodmis.org> | 2017-06-22 17:10:06 -0400 |
commit | feaf1283d11794b9d518fcfd54b6bf8bee1f0b4b (patch) | |
tree | 31122c0a329faf629559f7f250b605eeb988e8a0 /kernel/trace/trace_output.c | |
parent | d0ba52f1d7649a3f088e410e860559cf36d479d0 (diff) |
tracing: Show address when function names are not found
Currently, when a function is not found in kallsyms, instead of simply
showing the function address, it shows nothing at all:
# echo ':mod:kvm_intel' > /sys/kernel/tracing/set_ftrace_filter
# echo function > /sys/kernel/tracing/set_ftrace_filter
# qemu -enable-kvm /home/my-qemu-image
<Ctrl-C>
# rmmod kvm_intel
# cat /sys/kernel/tracing/trace
qemu-system-x86-2408 [001] d..2 135.013238: <-kvm_arch_hardware_enable
qemu-system-x86-2408 [001] .... 135.014574: <-kvm_arch_vm_ioctl
qemu-system-x86-2408 [001] .... 135.015420: <-kvm_vm_ioctl_check_extension
qemu-system-x86-2408 [001] .... 135.045411: <-__do_cpuid_ent
qemu-system-x86-2408 [001] .... 135.045412: <-__do_cpuid_ent
qemu-system-x86-2408 [001] .... 135.045412: <-__do_cpuid_ent
qemu-system-x86-2408 [001] .... 135.045412: <-__do_cpuid_ent
qemu-system-x86-2408 [001] ...1 135.045413: <-__do_cpuid_ent
qemu-system-x86-2408 [001] .... 135.045413: <-__do_cpuid_ent
When it should show:
qemu-system-x86-2408 [001] d..2 135.013238: 0xffffffffa02a39f0 <-kvm_arch_hardware_enable
qemu-system-x86-2408 [001] .... 135.014574: 0xffffffffa02a2ba0 <-kvm_arch_vm_ioctl
qemu-system-x86-2408 [001] .... 135.015420: 0xffffffffa029e4e0 <-kvm_vm_ioctl_check_extension
qemu-system-x86-2408 [001] .... 135.045411: 0xffffffffa02a1380 <-__do_cpuid_ent
qemu-system-x86-2408 [001] .... 135.045412: 0xffffffffa029e160 <-__do_cpuid_ent
qemu-system-x86-2408 [001] .... 135.045412: 0xffffffffa029e180 <-__do_cpuid_ent
qemu-system-x86-2408 [001] .... 135.045412: 0xffffffffa029e520 <-__do_cpuid_ent
qemu-system-x86-2408 [001] ...1 135.045413: 0xffffffffa02a13b0 <-__do_cpuid_ent
qemu-system-x86-2408 [001] .... 135.045413: 0xffffffffa02a1380 <-__do_cpuid_ent
instead.
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
Diffstat (limited to 'kernel/trace/trace_output.c')
-rw-r--r-- | kernel/trace/trace_output.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c index 08f9bab8089e..01ff99969ca7 100644 --- a/kernel/trace/trace_output.c +++ b/kernel/trace/trace_output.c | |||
@@ -340,31 +340,41 @@ static inline const char *kretprobed(const char *name) | |||
340 | static void | 340 | static void |
341 | seq_print_sym_short(struct trace_seq *s, const char *fmt, unsigned long address) | 341 | seq_print_sym_short(struct trace_seq *s, const char *fmt, unsigned long address) |
342 | { | 342 | { |
343 | #ifdef CONFIG_KALLSYMS | ||
344 | char str[KSYM_SYMBOL_LEN]; | 343 | char str[KSYM_SYMBOL_LEN]; |
344 | #ifdef CONFIG_KALLSYMS | ||
345 | const char *name; | 345 | const char *name; |
346 | 346 | ||
347 | kallsyms_lookup(address, NULL, NULL, NULL, str); | 347 | kallsyms_lookup(address, NULL, NULL, NULL, str); |
348 | 348 | ||
349 | name = kretprobed(str); | 349 | name = kretprobed(str); |
350 | 350 | ||
351 | trace_seq_printf(s, fmt, name); | 351 | if (name && strlen(name)) { |
352 | trace_seq_printf(s, fmt, name); | ||
353 | return; | ||
354 | } | ||
352 | #endif | 355 | #endif |
356 | snprintf(str, KSYM_SYMBOL_LEN, "0x%08lx", address); | ||
357 | trace_seq_printf(s, fmt, str); | ||
353 | } | 358 | } |
354 | 359 | ||
355 | static void | 360 | static void |
356 | seq_print_sym_offset(struct trace_seq *s, const char *fmt, | 361 | seq_print_sym_offset(struct trace_seq *s, const char *fmt, |
357 | unsigned long address) | 362 | unsigned long address) |
358 | { | 363 | { |
359 | #ifdef CONFIG_KALLSYMS | ||
360 | char str[KSYM_SYMBOL_LEN]; | 364 | char str[KSYM_SYMBOL_LEN]; |
365 | #ifdef CONFIG_KALLSYMS | ||
361 | const char *name; | 366 | const char *name; |
362 | 367 | ||
363 | sprint_symbol(str, address); | 368 | sprint_symbol(str, address); |
364 | name = kretprobed(str); | 369 | name = kretprobed(str); |
365 | 370 | ||
366 | trace_seq_printf(s, fmt, name); | 371 | if (name && strlen(name)) { |
372 | trace_seq_printf(s, fmt, name); | ||
373 | return; | ||
374 | } | ||
367 | #endif | 375 | #endif |
376 | snprintf(str, KSYM_SYMBOL_LEN, "0x%08lx", address); | ||
377 | trace_seq_printf(s, fmt, str); | ||
368 | } | 378 | } |
369 | 379 | ||
370 | #ifndef CONFIG_64BIT | 380 | #ifndef CONFIG_64BIT |