For determine the libunwind methods to use, we should get the
32bit/64bit information from maps of a thread. When a thread is newly
created, the information is not prepared. This patch moves
unwind__prepare_access() into thread__insert_map() so we can get the
information we need from maps.

Signed-off-by: He Kuang <heku...@huawei.com>
---
 tools/perf/util/thread.c           | 7 ++-----
 tools/perf/util/unwind-libunwind.c | 7 +++----
 2 files changed, 5 insertions(+), 9 deletions(-)

diff --git a/tools/perf/util/thread.c b/tools/perf/util/thread.c
index 6d3900c..045477d 100644
--- a/tools/perf/util/thread.c
+++ b/tools/perf/util/thread.c
@@ -43,11 +43,6 @@ struct thread *thread__new(pid_t pid, pid_t tid)
                thread->cpu = -1;
                INIT_LIST_HEAD(&thread->comm_list);
 
-               register_local_unwind_libunwind_ops(thread);
-
-               if (unwind__prepare_access(thread) < 0)
-                       goto err_thread;
-
                comm_str = malloc(32);
                if (!comm_str)
                        goto err_thread;
@@ -207,6 +202,8 @@ void thread__insert_map(struct thread *thread, struct map 
*map)
 {
        map_groups__fixup_overlappings(thread->mg, map, stderr);
        map_groups__insert(thread->mg, map);
+
+       unwind__prepare_access(thread);
 }
 
 static int thread__clone_map_groups(struct thread *thread,
diff --git a/tools/perf/util/unwind-libunwind.c 
b/tools/perf/util/unwind-libunwind.c
index 0277b22..93d2d8e 100644
--- a/tools/perf/util/unwind-libunwind.c
+++ b/tools/perf/util/unwind-libunwind.c
@@ -695,10 +695,9 @@ void register_local_unwind_libunwind_ops(struct thread 
*thread)
 
 int unwind__prepare_access(struct thread *thread)
 {
-       if (thread->unwind_libunwind_ops)
-               return thread->unwind_libunwind_ops->prepare_access(thread);
-       else
-               return 0;
+       register_local_unwind_libunwind_ops(thread);
+
+       return thread->unwind_libunwind_ops->prepare_access(thread);
 }
 
 void unwind__flush_access(struct thread *thread)
-- 
1.8.5.2

Reply via email to