perf unwind: Use 'struct map_symbol' in 'struct unwind_entry'
authorArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 4 Nov 2019 14:58:21 +0000 (11:58 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 12 Nov 2019 11:20:53 +0000 (08:20 -0300)
To help in passing that info around to callchain routines that, for the
same reason, are moving to use 'struct map_symbol'.

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lkml.kernel.org/n/tip-epsiibeprpxa8qpwji47uskc@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/tests/dwarf-unwind.c
tools/perf/util/machine.c
tools/perf/util/unwind-libdw.c
tools/perf/util/unwind-libunwind-local.c
tools/perf/util/unwind.h

index 4f4ecbcbe87e7c9538bcd30d873ec009ad13c035..779ce280a0e9d330869e4e20a0e8791a2893756d 100644 (file)
@@ -59,7 +59,7 @@ int test_dwarf_unwind__krava_1(struct thread *thread);
 static int unwind_entry(struct unwind_entry *entry, void *arg)
 {
        unsigned long *cnt = (unsigned long *) arg;
-       char *symbol = entry->sym ? entry->sym->name : NULL;
+       char *symbol = entry->ms.sym ? entry->ms.sym->name : NULL;
        static const char *funcs[MAX_STACK] = {
                "test__arch_unwind_sample",
                "test_dwarf_unwind__thread",
index e768ef24633f34740b2e00d80a2eef2d6bb8607f..3874bb89ac79e1474d6757774ace112a9657d29f 100644 (file)
@@ -2448,9 +2448,10 @@ check_calls:
        return 0;
 }
 
-static int append_inlines(struct callchain_cursor *cursor,
-                         struct map *map, struct symbol *sym, u64 ip)
+static int append_inlines(struct callchain_cursor *cursor, struct map_symbol *ms, u64 ip)
 {
+       struct symbol *sym = ms->sym;
+       struct map *map = ms->map;
        struct inline_node *inline_node;
        struct inline_list *ilist;
        u64 addr;
@@ -2488,22 +2489,22 @@ static int unwind_entry(struct unwind_entry *entry, void *arg)
        const char *srcline = NULL;
        u64 addr = entry->ip;
 
-       if (symbol_conf.hide_unresolved && entry->sym == NULL)
+       if (symbol_conf.hide_unresolved && entry->ms.sym == NULL)
                return 0;
 
-       if (append_inlines(cursor, entry->map, entry->sym, entry->ip) == 0)
+       if (append_inlines(cursor, &entry->ms, entry->ip) == 0)
                return 0;
 
        /*
         * Convert entry->ip from a virtual address to an offset in
         * its corresponding binary.
         */
-       if (entry->map)
-               addr = map__map_ip(entry->map, entry->ip);
+       if (entry->ms.map)
+               addr = map__map_ip(entry->ms.map, entry->ip);
 
-       srcline = callchain_srcline(entry->map, entry->sym, addr);
+       srcline = callchain_srcline(entry->ms.map, entry->ms.sym, addr);
        return callchain_cursor_append(cursor, entry->ip,
-                                      entry->map, entry->sym,
+                                      entry->ms.map, entry->ms.sym,
                                       false, NULL, 0, 0, 0, srcline);
 }
 
index 15f6e46d712432f891860d91f0aa9d3f8de46abc..73c00d776a5fdd33449350d6cf3bf1c12e64c47c 100644 (file)
@@ -80,9 +80,9 @@ static int entry(u64 ip, struct unwind_info *ui)
        if (__report_module(&al, ip, ui))
                return -1;
 
-       e->ip  = ip;
-       e->map = al.map;
-       e->sym = al.sym;
+       e->ip     = ip;
+       e->ms.map = al.map;
+       e->ms.sym = al.sym;
 
        pr_debug("unwind: %s:ip = 0x%" PRIx64 " (0x%" PRIx64 ")\n",
                 al.sym ? al.sym->name : "''",
index 1800887b22556e1ab337e35e4d74467b2323f9fe..6e3873dd9a3187e73b9036cb7f2abff5f324d70a 100644 (file)
@@ -575,9 +575,9 @@ static int entry(u64 ip, struct thread *thread,
        struct unwind_entry e;
        struct addr_location al;
 
-       e.sym = thread__find_symbol(thread, PERF_RECORD_MISC_USER, ip, &al);
-       e.ip  = ip;
-       e.map = al.map;
+       e.ms.sym = thread__find_symbol(thread, PERF_RECORD_MISC_USER, ip, &al);
+       e.ip     = ip;
+       e.ms.map = al.map;
 
        pr_debug("unwind: %s:ip = 0x%" PRIx64 " (0x%" PRIx64 ")\n",
                 al.sym ? al.sym->name : "''",
index 3a7d00c20d86227f18943833408c9957680a9de6..50337c966979c9c1abd2201b2480bde1972510e7 100644 (file)
@@ -4,17 +4,15 @@
 
 #include <linux/compiler.h>
 #include <linux/types.h>
+#include "util/map_symbol.h"
 
-struct map;
 struct map_groups;
 struct perf_sample;
-struct symbol;
 struct thread;
 
 struct unwind_entry {
-       struct map      *map;
-       struct symbol   *sym;
-       u64             ip;
+       struct map_symbol ms;
+       u64               ip;
 };
 
 typedef int (*unwind_entry_cb_t)(struct unwind_entry *entry, void *arg);