Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1403668 > unrolled thread

[PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind

Started byHe Kuang <hekuang@huawei.com>
First post2016-05-19 13:50 +0200
Last post2016-05-20 12:00 +0200
Articles 8 — 4 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind He Kuang <hekuang@huawei.com> - 2016-05-19 13:50 +0200
    Re: [PATCH v4 2/6] perf tools: Promote proper messages for  cross-platform unwind Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-05-19 17:00 +0200
      Re: [PATCH v4 2/6] perf tools: Promote proper messages for  cross-platform unwind Jiri Olsa <jolsa@redhat.com> - 2016-05-19 18:20 +0200
        Re: [PATCH v4 2/6] perf tools: Promote proper messages for  cross-platform unwind Hekuang <hekuang@huawei.com> - 2016-05-20 05:10 +0200
    Re: [PATCH v4 2/6] perf tools: Promote proper messages for  cross-platform unwind Jiri Olsa <jolsa@redhat.com> - 2016-05-19 18:50 +0200
      Re: [PATCH v4 2/6] perf tools: Promote proper messages for  cross-platform unwind Jiri Olsa <jolsa@redhat.com> - 2016-05-19 19:20 +0200
      Re: [PATCH v4 2/6] perf tools: Promote proper messages for  cross-platform unwind Hekuang <hekuang@huawei.com> - 2016-05-20 05:10 +0200
        Re: [PATCH v4 2/6] perf tools: Promote proper messages for  cross-platform unwind Jiri Olsa <jolsa@redhat.com> - 2016-05-20 12:00 +0200

#1403668 — [PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind

FromHe Kuang <hekuang@huawei.com>
Date2016-05-19 13:50 +0200
Subject[PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind
Message-ID<rAuCJ-7Be-5@gated-at.bofh.it>
Currently, perf script uses host unwind methods to parse perf.data
callchain info regardless of the target architecture. So we get wrong
result and no promotion when unwinding callchains of x86(32-bit) on
x86(64-bit) machine.

This patch shows proper error messages when we do remote unwind
x86(32-bit) on other machines. Same thing for other platforms will be
added in next patches.

Common functions which will be used by both local unwind and remote
unwind are separated into new file 'unwind-libunwind_common.c'.

Signed-off-by: He Kuang <hekuang@huawei.com>
---
 tools/perf/arch/common.c                  |  2 +-
 tools/perf/arch/common.h                  |  1 +
 tools/perf/config/Makefile                |  6 ++++++
 tools/perf/util/Build                     |  1 +
 tools/perf/util/thread.c                  |  2 ++
 tools/perf/util/unwind-libunwind_common.c | 34 +++++++++++++++++++++++++++++++
 tools/perf/util/unwind.h                  |  5 +++++
 7 files changed, 50 insertions(+), 1 deletion(-)
 create mode 100644 tools/perf/util/unwind-libunwind_common.c

diff --git a/tools/perf/arch/common.c b/tools/perf/arch/common.c
index e83c8ce..fa090a9 100644
--- a/tools/perf/arch/common.c
+++ b/tools/perf/arch/common.c
@@ -102,7 +102,7 @@ static int lookup_triplets(const char *const *triplets, const char *name)
  * Return architecture name in a normalized form.
  * The conversion logic comes from the Makefile.
  */
-static const char *normalize_arch(char *arch)
+const char *normalize_arch(char *arch)
 {
 	if (!strcmp(arch, "x86_64"))
 		return "x86";
diff --git a/tools/perf/arch/common.h b/tools/perf/arch/common.h
index 7529cfb..6b01c73 100644
--- a/tools/perf/arch/common.h
+++ b/tools/perf/arch/common.h
@@ -6,5 +6,6 @@
 extern const char *objdump_path;
 
 int perf_env__lookup_objdump(struct perf_env *env);
+const char *normalize_arch(char *arch);
 
 #endif /* ARCH_PERF_COMMON_H */
diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
index 1e46277..a86b864 100644
--- a/tools/perf/config/Makefile
+++ b/tools/perf/config/Makefile
@@ -345,6 +345,12 @@ ifeq ($(ARCH),powerpc)
 endif
 
 ifndef NO_LIBUNWIND
+  ifeq ($(feature-libunwind-x86), 1)
+    LIBUNWIND_LIBS += -lunwind-x86
+    $(call detected,CONFIG_LIBUNWIND_X86)
+    CFLAGS += -DHAVE_LIBUNWIND_X86_SUPPORT
+  endif
+
   ifneq ($(feature-libunwind), 1)
     msg := $(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR);
     NO_LIBUNWIND := 1
diff --git a/tools/perf/util/Build b/tools/perf/util/Build
index 8c6c8a0..25c31fb 100644
--- a/tools/perf/util/Build
+++ b/tools/perf/util/Build
@@ -100,6 +100,7 @@ libperf-$(CONFIG_DWARF) += dwarf-aux.o
 
 libperf-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o
 libperf-$(CONFIG_LIBUNWIND)          += unwind-libunwind.o
+libperf-$(CONFIG_LIBUNWIND)          += unwind-libunwind_common.o
 
 libperf-$(CONFIG_LIBBABELTRACE) += data-convert-bt.o
 
diff --git a/tools/perf/util/thread.c b/tools/perf/util/thread.c
index 45fcb71..3043113 100644
--- a/tools/perf/util/thread.c
+++ b/tools/perf/util/thread.c
@@ -205,6 +205,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__get_arch(thread, map);
 }
 
 static int thread__clone_map_groups(struct thread *thread,
diff --git a/tools/perf/util/unwind-libunwind_common.c b/tools/perf/util/unwind-libunwind_common.c
new file mode 100644
index 0000000..3946c99
--- /dev/null
+++ b/tools/perf/util/unwind-libunwind_common.c
@@ -0,0 +1,34 @@
+#include "thread.h"
+#include "session.h"
+#include "unwind.h"
+#include "symbol.h"
+#include "debug.h"
+#include "arch/common.h"
+
+void unwind__get_arch(struct thread *thread, struct map *map)
+{
+	const char *arch;
+	enum dso_type dso_type;
+
+	if (!thread->mg->machine->env)
+		return;
+
+	dso_type = dso__type(map->dso, thread->mg->machine);
+	if (dso_type == DSO__TYPE_UNKNOWN)
+		return;
+
+	if (thread->addr_space)
+		pr_debug("unwind: thread map already set, 64bit is %d, dso=%s\n",
+			 dso_type == DSO__TYPE_64BIT, map->dso->name);
+
+	arch = normalize_arch(thread->mg->machine->env->arch);
+
+	if (!strcmp(arch, "x86")) {
+		if (dso_type != DSO__TYPE_64BIT)
+#ifdef HAVE_LIBUNWIND_X86_SUPPORT
+			pr_err("unwind: target platform=%s is not implemented\n", arch);
+#else
+			pr_err("unwind: target platform=%s is not supported\n", arch);
+#endif
+	}
+}
diff --git a/tools/perf/util/unwind.h b/tools/perf/util/unwind.h
index 12790cf..889d630 100644
--- a/tools/perf/util/unwind.h
+++ b/tools/perf/util/unwind.h
@@ -24,6 +24,7 @@ int libunwind__arch_reg_id(int regnum);
 int unwind__prepare_access(struct thread *thread);
 void unwind__flush_access(struct thread *thread);
 void unwind__finish_access(struct thread *thread);
+void unwind__get_arch(struct thread *thread, struct map *map);
 #else
 static inline int unwind__prepare_access(struct thread *thread __maybe_unused)
 {
@@ -32,6 +33,8 @@ static inline int unwind__prepare_access(struct thread *thread __maybe_unused)
 
 static inline void unwind__flush_access(struct thread *thread __maybe_unused) {}
 static inline void unwind__finish_access(struct thread *thread __maybe_unused) {}
+static inline void unwind__get_arch(struct thread *thread __maybe_unused,
+				    struct map *map __maybe_unused) {}
 #endif
 #else
 static inline int
@@ -51,5 +54,7 @@ static inline int unwind__prepare_access(struct thread *thread __maybe_unused)
 
 static inline void unwind__flush_access(struct thread *thread __maybe_unused) {}
 static inline void unwind__finish_access(struct thread *thread __maybe_unused) {}
+static inline void unwind__get_arch(struct thread *thread __maybe_unused,
+				    struct map *map __maybe_unused) {}
 #endif /* HAVE_DWARF_UNWIND_SUPPORT */
 #endif /* __UNWIND_H */
-- 
1.8.5.2

[toc] | [next] | [standalone]


#1403797 — Re: [PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2016-05-19 17:00 +0200
SubjectRe: [PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind
Message-ID<rAxAC-16l-25@gated-at.bofh.it>
In reply to#1403668
Em Thu, May 19, 2016 at 11:47:38AM +0000, He Kuang escreveu:
> Currently, perf script uses host unwind methods to parse perf.data
> callchain info regardless of the target architecture. So we get wrong
> result and no promotion when unwinding callchains of x86(32-bit) on

What you mean by "promotion" here? Can you use some other synonym so
that I can make sense of this description?

> x86(64-bit) machine.
> 
> This patch shows proper error messages when we do remote unwind
> x86(32-bit) on other machines. Same thing for other platforms will be
> added in next patches.
> 
> Common functions which will be used by both local unwind and remote
> unwind are separated into new file 'unwind-libunwind_common.c'.
> 
> Signed-off-by: He Kuang <hekuang@huawei.com>
> ---
>  tools/perf/arch/common.c                  |  2 +-
>  tools/perf/arch/common.h                  |  1 +
>  tools/perf/config/Makefile                |  6 ++++++
>  tools/perf/util/Build                     |  1 +
>  tools/perf/util/thread.c                  |  2 ++
>  tools/perf/util/unwind-libunwind_common.c | 34 +++++++++++++++++++++++++++++++
>  tools/perf/util/unwind.h                  |  5 +++++
>  7 files changed, 50 insertions(+), 1 deletion(-)
>  create mode 100644 tools/perf/util/unwind-libunwind_common.c
> 
> diff --git a/tools/perf/arch/common.c b/tools/perf/arch/common.c
> index e83c8ce..fa090a9 100644
> --- a/tools/perf/arch/common.c
> +++ b/tools/perf/arch/common.c
> @@ -102,7 +102,7 @@ static int lookup_triplets(const char *const *triplets, const char *name)
>   * Return architecture name in a normalized form.
>   * The conversion logic comes from the Makefile.
>   */
> -static const char *normalize_arch(char *arch)
> +const char *normalize_arch(char *arch)
>  {
>  	if (!strcmp(arch, "x86_64"))
>  		return "x86";
> diff --git a/tools/perf/arch/common.h b/tools/perf/arch/common.h
> index 7529cfb..6b01c73 100644
> --- a/tools/perf/arch/common.h
> +++ b/tools/perf/arch/common.h
> @@ -6,5 +6,6 @@
>  extern const char *objdump_path;
>  
>  int perf_env__lookup_objdump(struct perf_env *env);
> +const char *normalize_arch(char *arch);
>  
>  #endif /* ARCH_PERF_COMMON_H */
> diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
> index 1e46277..a86b864 100644
> --- a/tools/perf/config/Makefile
> +++ b/tools/perf/config/Makefile
> @@ -345,6 +345,12 @@ ifeq ($(ARCH),powerpc)
>  endif
>  
>  ifndef NO_LIBUNWIND
> +  ifeq ($(feature-libunwind-x86), 1)
> +    LIBUNWIND_LIBS += -lunwind-x86
> +    $(call detected,CONFIG_LIBUNWIND_X86)
> +    CFLAGS += -DHAVE_LIBUNWIND_X86_SUPPORT
> +  endif
> +
>    ifneq ($(feature-libunwind), 1)
>      msg := $(warning No libunwind found. Please install libunwind-dev[el] >= 1.1 and/or set LIBUNWIND_DIR);
>      NO_LIBUNWIND := 1
> diff --git a/tools/perf/util/Build b/tools/perf/util/Build
> index 8c6c8a0..25c31fb 100644
> --- a/tools/perf/util/Build
> +++ b/tools/perf/util/Build
> @@ -100,6 +100,7 @@ libperf-$(CONFIG_DWARF) += dwarf-aux.o
>  
>  libperf-$(CONFIG_LIBDW_DWARF_UNWIND) += unwind-libdw.o
>  libperf-$(CONFIG_LIBUNWIND)          += unwind-libunwind.o
> +libperf-$(CONFIG_LIBUNWIND)          += unwind-libunwind_common.o
>  
>  libperf-$(CONFIG_LIBBABELTRACE) += data-convert-bt.o
>  
> diff --git a/tools/perf/util/thread.c b/tools/perf/util/thread.c
> index 45fcb71..3043113 100644
> --- a/tools/perf/util/thread.c
> +++ b/tools/perf/util/thread.c
> @@ -205,6 +205,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__get_arch(thread, map);
>  }
>  
>  static int thread__clone_map_groups(struct thread *thread,
> diff --git a/tools/perf/util/unwind-libunwind_common.c b/tools/perf/util/unwind-libunwind_common.c
> new file mode 100644
> index 0000000..3946c99
> --- /dev/null
> +++ b/tools/perf/util/unwind-libunwind_common.c
> @@ -0,0 +1,34 @@
> +#include "thread.h"
> +#include "session.h"
> +#include "unwind.h"
> +#include "symbol.h"
> +#include "debug.h"
> +#include "arch/common.h"
> +
> +void unwind__get_arch(struct thread *thread, struct map *map)
> +{
> +	const char *arch;
> +	enum dso_type dso_type;
> +
> +	if (!thread->mg->machine->env)
> +		return;
> +
> +	dso_type = dso__type(map->dso, thread->mg->machine);
> +	if (dso_type == DSO__TYPE_UNKNOWN)
> +		return;
> +
> +	if (thread->addr_space)
> +		pr_debug("unwind: thread map already set, 64bit is %d, dso=%s\n",
> +			 dso_type == DSO__TYPE_64BIT, map->dso->name);
> +
> +	arch = normalize_arch(thread->mg->machine->env->arch);
> +
> +	if (!strcmp(arch, "x86")) {
> +		if (dso_type != DSO__TYPE_64BIT)
> +#ifdef HAVE_LIBUNWIND_X86_SUPPORT
> +			pr_err("unwind: target platform=%s is not implemented\n", arch);
> +#else
> +			pr_err("unwind: target platform=%s is not supported\n", arch);
> +#endif
> +	}
> +}
> diff --git a/tools/perf/util/unwind.h b/tools/perf/util/unwind.h
> index 12790cf..889d630 100644
> --- a/tools/perf/util/unwind.h
> +++ b/tools/perf/util/unwind.h
> @@ -24,6 +24,7 @@ int libunwind__arch_reg_id(int regnum);
>  int unwind__prepare_access(struct thread *thread);
>  void unwind__flush_access(struct thread *thread);
>  void unwind__finish_access(struct thread *thread);
> +void unwind__get_arch(struct thread *thread, struct map *map);
>  #else
>  static inline int unwind__prepare_access(struct thread *thread __maybe_unused)
>  {
> @@ -32,6 +33,8 @@ static inline int unwind__prepare_access(struct thread *thread __maybe_unused)
>  
>  static inline void unwind__flush_access(struct thread *thread __maybe_unused) {}
>  static inline void unwind__finish_access(struct thread *thread __maybe_unused) {}
> +static inline void unwind__get_arch(struct thread *thread __maybe_unused,
> +				    struct map *map __maybe_unused) {}
>  #endif
>  #else
>  static inline int
> @@ -51,5 +54,7 @@ static inline int unwind__prepare_access(struct thread *thread __maybe_unused)
>  
>  static inline void unwind__flush_access(struct thread *thread __maybe_unused) {}
>  static inline void unwind__finish_access(struct thread *thread __maybe_unused) {}
> +static inline void unwind__get_arch(struct thread *thread __maybe_unused,
> +				    struct map *map __maybe_unused) {}
>  #endif /* HAVE_DWARF_UNWIND_SUPPORT */
>  #endif /* __UNWIND_H */
> -- 
> 1.8.5.2

[toc] | [prev] | [next] | [standalone]


#1403841 — Re: [PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind

FromJiri Olsa <jolsa@redhat.com>
Date2016-05-19 18:20 +0200
SubjectRe: [PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind
Message-ID<rAyQ2-22S-25@gated-at.bofh.it>
In reply to#1403797
On Thu, May 19, 2016 at 11:50:10AM -0300, Arnaldo Carvalho de Melo wrote:
> Em Thu, May 19, 2016 at 11:47:38AM +0000, He Kuang escreveu:
> > Currently, perf script uses host unwind methods to parse perf.data
> > callchain info regardless of the target architecture. So we get wrong
> > result and no promotion when unwinding callchains of x86(32-bit) on
> 
> What you mean by "promotion" here? Can you use some other synonym so
> that I can make sense of this description?

I'd say something like: s/and no promotion/without any warning/

jirka

[toc] | [prev] | [next] | [standalone]


#1404100 — Re: [PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind

FromHekuang <hekuang@huawei.com>
Date2016-05-20 05:10 +0200
SubjectRe: [PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind
Message-ID<rAIZ4-7x-11@gated-at.bofh.it>
In reply to#1403841

在 2016/5/20 0:19, Jiri Olsa 写道:
> On Thu, May 19, 2016 at 11:50:10AM -0300, Arnaldo Carvalho de Melo wrote:
>> Em Thu, May 19, 2016 at 11:47:38AM +0000, He Kuang escreveu:
>>> Currently, perf script uses host unwind methods to parse perf.data
>>> callchain info regardless of the target architecture. So we get wrong
>>> result and no promotion when unwinding callchains of x86(32-bit) on
>> What you mean by "promotion" here? Can you use some other synonym so
>> that I can make sense of this description?
> I'd say something like: s/and no promotion/without any warning/
>
> jirka

Yes, that's what I want to express.

[toc] | [prev] | [next] | [standalone]


#1403855 — Re: [PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind

FromJiri Olsa <jolsa@redhat.com>
Date2016-05-19 18:50 +0200
SubjectRe: [PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind
Message-ID<rAzj4-2e6-15@gated-at.bofh.it>
In reply to#1403668
On Thu, May 19, 2016 at 11:47:38AM +0000, He Kuang wrote:

SNIP

>  #endif /* ARCH_PERF_COMMON_H */
> diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
> index 1e46277..a86b864 100644
> --- a/tools/perf/config/Makefile
> +++ b/tools/perf/config/Makefile
> @@ -345,6 +345,12 @@ ifeq ($(ARCH),powerpc)
>  endif
>  
>  ifndef NO_LIBUNWIND
> +  ifeq ($(feature-libunwind-x86), 1)
> +    LIBUNWIND_LIBS += -lunwind-x86
> +    $(call detected,CONFIG_LIBUNWIND_X86)
> +    CFLAGS += -DHAVE_LIBUNWIND_X86_SUPPORT
> +  endif
> +

how does one install that lirary?

thanks,
jirka

[toc] | [prev] | [next] | [standalone]


#1403872 — Re: [PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind

FromJiri Olsa <jolsa@redhat.com>
Date2016-05-19 19:20 +0200
SubjectRe: [PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind
Message-ID<rAzM5-2EV-7@gated-at.bofh.it>
In reply to#1403855
On Thu, May 19, 2016 at 06:46:09PM +0200, Jiri Olsa wrote:
> On Thu, May 19, 2016 at 11:47:38AM +0000, He Kuang wrote:
> 
> SNIP
> 
> >  #endif /* ARCH_PERF_COMMON_H */
> > diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
> > index 1e46277..a86b864 100644
> > --- a/tools/perf/config/Makefile
> > +++ b/tools/perf/config/Makefile
> > @@ -345,6 +345,12 @@ ifeq ($(ARCH),powerpc)
> >  endif
> >  
> >  ifndef NO_LIBUNWIND
> > +  ifeq ($(feature-libunwind-x86), 1)
> > +    LIBUNWIND_LIBS += -lunwind-x86
> > +    $(call detected,CONFIG_LIBUNWIND_X86)
> > +    CFLAGS += -DHAVE_LIBUNWIND_X86_SUPPORT
> > +  endif
> > +
> 
> how does one install that lirary?

had to uninstall x86_64..

[jolsa@krava perf]$ rpm -qa | grep libunw
libunwind-devel-1.1-10.fc22.i686
libunwind-1.1-10.fc22.i686
libunwind-1.1-10.fc22.x86_64


however it's still off:

[jolsa@krava perf]$ make VF=1
  BUILD:   Doing 'make -j4' parallel build

Auto-detecting system features:

SNIP

...                     libunwind: [ OFF ]

SNIP

...                 libunwind-x86: [ OFF ]
...              libunwind-x86_64: [ OFF ]
...                 libunwind-arm: [ OFF ]
...             libunwind-aarch64: [ OFF ]
...   pthread-attr-setaffinity-np: [ on  ]
...            stackprotector-all: [ on  ]
...                       timerfd: [ on  ]


thanks,
jirka

[toc] | [prev] | [next] | [standalone]


#1404101 — Re: [PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind

FromHekuang <hekuang@huawei.com>
Date2016-05-20 05:10 +0200
SubjectRe: [PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind
Message-ID<rAIZ4-7x-15@gated-at.bofh.it>
In reply to#1403855
hi

在 2016/5/20 0:46, Jiri Olsa 写道:
> On Thu, May 19, 2016 at 11:47:38AM +0000, He Kuang wrote:
>
> SNIP
>
>>   #endif /* ARCH_PERF_COMMON_H */
>> diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
>> index 1e46277..a86b864 100644
>> --- a/tools/perf/config/Makefile
>> +++ b/tools/perf/config/Makefile
>> @@ -345,6 +345,12 @@ ifeq ($(ARCH),powerpc)
>>   endif
>>   
>>   ifndef NO_LIBUNWIND
>> +  ifeq ($(feature-libunwind-x86), 1)
>> +    LIBUNWIND_LIBS += -lunwind-x86
>> +    $(call detected,CONFIG_LIBUNWIND_X86)
>> +    CFLAGS += -DHAVE_LIBUNWIND_X86_SUPPORT
>> +  endif
>> +
> how does one install that lirary?
>
> thanks,
> jirka

My work environment is on an old suse distribution, so it's
difficult to find libunwind-$arch rpm packages, so I build them
from source.

The git repository url is here:
http://git.savannah.gnu.org/r/libunwind.git(master)

Then flow the build step in README, first for i686:

   $ ./autogen.sh
   $ ./configure prefix=/xx/dst_i686 --target=i686-oe-linux 
CC=x86_64-oe-linux-gcc
   $ make && make install

Similar for aarch64:

   $ make clean
   $ ./configure prefix=/xx/dst_aarch64 --target=i686-oe-linux 
CC=x86_64-oe-linux-gcc
   $ make && make install

NOTICE: the contents in '--target' should be like
'i686-oe-linux', only give 'i686' cause strange build errors.

It looks like that libunwind don't support building for multiple
platforms at the same time, so I build them separately into
different directories.

Finally, copy the outputs into /usr/include and /usr/lib64, now
perf can detect them:

   $ make VF=1 ARCH=x86_64 CROSS_COMPILE=x86_64-oe-linux- 
EXTRA_CFLAGS="-m64"
   ...

   ...                 libunwind-x86: [ on  ]
   ...              libunwind-x86_64: [ OFF ]
   ...                 libunwind-arm: [ OFF ]
   ...             libunwind-aarch64: [ on  ]

Thanks.

[toc] | [prev] | [next] | [standalone]


#1404293 — Re: [PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind

FromJiri Olsa <jolsa@redhat.com>
Date2016-05-20 12:00 +0200
SubjectRe: [PATCH v4 2/6] perf tools: Promote proper messages for cross-platform unwind
Message-ID<rAPnP-3SW-11@gated-at.bofh.it>
In reply to#1404101
On Fri, May 20, 2016 at 10:59:05AM +0800, Hekuang wrote:
> hi
> 
> 在 2016/5/20 0:46, Jiri Olsa 写道:
> > On Thu, May 19, 2016 at 11:47:38AM +0000, He Kuang wrote:
> > 
> > SNIP
> > 
> > >   #endif /* ARCH_PERF_COMMON_H */
> > > diff --git a/tools/perf/config/Makefile b/tools/perf/config/Makefile
> > > index 1e46277..a86b864 100644
> > > --- a/tools/perf/config/Makefile
> > > +++ b/tools/perf/config/Makefile
> > > @@ -345,6 +345,12 @@ ifeq ($(ARCH),powerpc)
> > >   endif
> > >   ifndef NO_LIBUNWIND
> > > +  ifeq ($(feature-libunwind-x86), 1)
> > > +    LIBUNWIND_LIBS += -lunwind-x86
> > > +    $(call detected,CONFIG_LIBUNWIND_X86)
> > > +    CFLAGS += -DHAVE_LIBUNWIND_X86_SUPPORT
> > > +  endif
> > > +
> > how does one install that lirary?
> > 
> > thanks,
> > jirka
> 
> My work environment is on an old suse distribution, so it's
> difficult to find libunwind-$arch rpm packages, so I build them
> from source.
> 
> The git repository url is here:
> http://git.savannah.gnu.org/r/libunwind.git(master)
> 
> Then flow the build step in README, first for i686:
> 
>   $ ./autogen.sh
>   $ ./configure prefix=/xx/dst_i686 --target=i686-oe-linux
> CC=x86_64-oe-linux-gcc
>   $ make && make install
> 
> Similar for aarch64:
> 
>   $ make clean
>   $ ./configure prefix=/xx/dst_aarch64 --target=i686-oe-linux
> CC=x86_64-oe-linux-gcc
>   $ make && make install
> 
> NOTICE: the contents in '--target' should be like
> 'i686-oe-linux', only give 'i686' cause strange build errors.
> 
> It looks like that libunwind don't support building for multiple
> platforms at the same time, so I build them separately into
> different directories.
> 
> Finally, copy the outputs into /usr/include and /usr/lib64, now
> perf can detect them:

we will need to extend LIBUNWIND_DIR or add variable,
to be able to detect this from arbitrary directory

jirka

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web