]> Git Repo - linux.git/blobdiff - tools/perf/util/unwind-libunwind.c
perf tools: A thread's machine can be found via thread->mg->machine
[linux.git] / tools / perf / util / unwind-libunwind.c
index e060386165c5fad82372123e99252f577eb7eac4..29acc8cccb5643d962ef42e05734516adedf466f 100644 (file)
@@ -284,7 +284,7 @@ static struct map *find_map(unw_word_t ip, struct unwind_info *ui)
 {
        struct addr_location al;
 
-       thread__find_addr_map(ui->thread, ui->machine, PERF_RECORD_MISC_USER,
+       thread__find_addr_map(ui->thread, PERF_RECORD_MISC_USER,
                              MAP__FUNCTION, ip, &al);
        return al.map;
 }
@@ -374,7 +374,7 @@ static int access_dso_mem(struct unwind_info *ui, unw_word_t addr,
        struct addr_location al;
        ssize_t size;
 
-       thread__find_addr_map(ui->thread, ui->machine, PERF_RECORD_MISC_USER,
+       thread__find_addr_map(ui->thread, PERF_RECORD_MISC_USER,
                              MAP__FUNCTION, addr, &al);
        if (!al.map) {
                pr_debug("unwind: no map for %lx\n", (unsigned long)addr);
@@ -476,14 +476,13 @@ static void put_unwind_info(unw_addr_space_t __maybe_unused as,
        pr_debug("unwind: put_unwind_info called\n");
 }
 
-static int entry(u64 ip, struct thread *thread, struct machine *machine,
+static int entry(u64 ip, struct thread *thread,
                 unwind_entry_cb_t cb, void *arg)
 {
        struct unwind_entry e;
        struct addr_location al;
 
-       thread__find_addr_location(thread, machine,
-                                  PERF_RECORD_MISC_USER,
+       thread__find_addr_location(thread, PERF_RECORD_MISC_USER,
                                   MAP__FUNCTION, ip, &al);
 
        e.ip = ip;
@@ -539,11 +538,23 @@ int unwind__prepare_access(struct thread *thread)
                return -ENOMEM;
        }
 
+       unw_set_caching_policy(addr_space, UNW_CACHE_GLOBAL);
        thread__set_priv(thread, addr_space);
 
        return 0;
 }
 
+void unwind__flush_access(struct thread *thread)
+{
+       unw_addr_space_t addr_space;
+
+       if (callchain_param.record_mode != CALLCHAIN_DWARF)
+               return;
+
+       addr_space = thread__priv(thread);
+       unw_flush_cache(addr_space, 0, 0);
+}
+
 void unwind__finish_access(struct thread *thread)
 {
        unw_addr_space_t addr_space;
@@ -574,7 +585,7 @@ static int get_entries(struct unwind_info *ui, unwind_entry_cb_t cb,
                unw_word_t ip;
 
                unw_get_reg(&c, UNW_REG_IP, &ip);
-               ret = ip ? entry(ip, ui->thread, ui->machine, cb, arg) : 0;
+               ret = ip ? entry(ip, ui->thread, cb, arg) : 0;
        }
 
        return ret;
@@ -599,7 +610,7 @@ int unwind__get_entries(unwind_entry_cb_t cb, void *arg,
        if (ret)
                return ret;
 
-       ret = entry(ip, thread, machine, cb, arg);
+       ret = entry(ip, thread, cb, arg);
        if (ret)
                return -ENOMEM;
 
This page took 0.034122 seconds and 4 git commands to generate.