tracing/uprobes: Do not print '0x (null)' when offset is 0
authorWang Nan <wangnan0@huawei.com>
Wed, 26 Aug 2015 10:57:46 +0000 (10:57 +0000)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 26 Aug 2015 13:43:01 +0000 (10:43 -0300)
When manually added uprobe point with zero address, 'uprobe_events'
output '(null)' instead of 0x00000000:

  # echo p:probe_libc/abs_0 /path/to/lib.bin:0x0 arg1=%ax > \
            /sys/kernel/debug/tracing/uprobe_events

  # cat /sys/kernel/debug/tracing/uprobe_events
    p:probe_libc/abs_0 /path/to/lib.bin:0x          (null) arg1=%ax

 This patch fixes this behavior:

  # cat /sys/kernel/debug/tracing/uprobe_events
  p:probe_libc/abs_0 /path/to/lib.bin:0x0000000000000000

Signed-off-by: Wang Nan <wangnan0@huawei.com>
Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/1440586666-235233-8-git-send-email-wangnan0@huawei.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
kernel/trace/trace_uprobe.c

index f97479f1ce3523783df853d4fd0f2c76ba4ae129..d2f6d0be35034569ba2022f59dee5fb60e4d31d2 100644 (file)
@@ -601,7 +601,22 @@ static int probes_seq_show(struct seq_file *m, void *v)
 
        seq_printf(m, "%c:%s/%s", c, tu->tp.call.class->system,
                        trace_event_name(&tu->tp.call));
-       seq_printf(m, " %s:0x%p", tu->filename, (void *)tu->offset);
+       seq_printf(m, " %s:", tu->filename);
+
+       /* Don't print "0x  (null)" when offset is 0 */
+       if (tu->offset) {
+               seq_printf(m, "0x%p", (void *)tu->offset);
+       } else {
+               switch (sizeof(void *)) {
+               case 4:
+                       seq_printf(m, "0x00000000");
+                       break;
+               case 8:
+               default:
+                       seq_printf(m, "0x0000000000000000");
+                       break;
+               }
+       }
 
        for (i = 0; i < tu->tp.nr_args; i++)
                seq_printf(m, " %s=%s", tu->tp.args[i].name, tu->tp.args[i].comm);