tracing: Show address when function names are not found
authorSteven Rostedt (VMware) <rostedt@goodmis.org>
Thu, 22 Jun 2017 21:04:55 +0000 (17:04 -0400)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Thu, 22 Jun 2017 21:10:06 +0000 (17:10 -0400)
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>
kernel/trace/trace_output.c

index 08f9bab8089e74c2acd63e0eaa7ef53f922b88c4..01ff99969ca7f7590743ce577bf4a1e07af1e7ad 100644 (file)
@@ -340,31 +340,41 @@ static inline const char *kretprobed(const char *name)
 static void
 seq_print_sym_short(struct trace_seq *s, const char *fmt, unsigned long address)
 {
-#ifdef CONFIG_KALLSYMS
        char str[KSYM_SYMBOL_LEN];
+#ifdef CONFIG_KALLSYMS
        const char *name;
 
        kallsyms_lookup(address, NULL, NULL, NULL, str);
 
        name = kretprobed(str);
 
-       trace_seq_printf(s, fmt, name);
+       if (name && strlen(name)) {
+               trace_seq_printf(s, fmt, name);
+               return;
+       }
 #endif
+       snprintf(str, KSYM_SYMBOL_LEN, "0x%08lx", address);
+       trace_seq_printf(s, fmt, str);
 }
 
 static void
 seq_print_sym_offset(struct trace_seq *s, const char *fmt,
                     unsigned long address)
 {
-#ifdef CONFIG_KALLSYMS
        char str[KSYM_SYMBOL_LEN];
+#ifdef CONFIG_KALLSYMS
        const char *name;
 
        sprint_symbol(str, address);
        name = kretprobed(str);
 
-       trace_seq_printf(s, fmt, name);
+       if (name && strlen(name)) {
+               trace_seq_printf(s, fmt, name);
+               return;
+       }
 #endif
+       snprintf(str, KSYM_SYMBOL_LEN, "0x%08lx", address);
+       trace_seq_printf(s, fmt, str);
 }
 
 #ifndef CONFIG_64BIT