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: default avatarSteven Rostedt (VMware) <rostedt@goodmis.org>
parent d0ba52f1
...@@ -340,31 +340,41 @@ static inline const char *kretprobed(const char *name) ...@@ -340,31 +340,41 @@ static inline const char *kretprobed(const char *name)
static void static void
seq_print_sym_short(struct trace_seq *s, const char *fmt, unsigned long address) seq_print_sym_short(struct trace_seq *s, const char *fmt, unsigned long address)
{ {
#ifdef CONFIG_KALLSYMS
char str[KSYM_SYMBOL_LEN]; char str[KSYM_SYMBOL_LEN];
#ifdef CONFIG_KALLSYMS
const char *name; const char *name;
kallsyms_lookup(address, NULL, NULL, NULL, str); kallsyms_lookup(address, NULL, NULL, NULL, str);
name = kretprobed(str); name = kretprobed(str);
trace_seq_printf(s, fmt, name); if (name && strlen(name)) {
trace_seq_printf(s, fmt, name);
return;
}
#endif #endif
snprintf(str, KSYM_SYMBOL_LEN, "0x%08lx", address);
trace_seq_printf(s, fmt, str);
} }
static void static void
seq_print_sym_offset(struct trace_seq *s, const char *fmt, seq_print_sym_offset(struct trace_seq *s, const char *fmt,
unsigned long address) unsigned long address)
{ {
#ifdef CONFIG_KALLSYMS
char str[KSYM_SYMBOL_LEN]; char str[KSYM_SYMBOL_LEN];
#ifdef CONFIG_KALLSYMS
const char *name; const char *name;
sprint_symbol(str, address); sprint_symbol(str, address);
name = kretprobed(str); name = kretprobed(str);
trace_seq_printf(s, fmt, name); if (name && strlen(name)) {
trace_seq_printf(s, fmt, name);
return;
}
#endif #endif
snprintf(str, KSYM_SYMBOL_LEN, "0x%08lx", address);
trace_seq_printf(s, fmt, str);
} }
#ifndef CONFIG_64BIT #ifndef CONFIG_64BIT
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment