All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1] perf build: Don't compile demangle-cxx.cpp if not necessary
@ 2023-04-17 19:25 Ian Rogers
  2023-04-27  5:27 ` Ian Rogers
  0 siblings, 1 reply; 3+ messages in thread
From: Ian Rogers @ 2023-04-17 19:25 UTC (permalink / raw)
  To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
	Ian Rogers, Adrian Hunter, Ravi Bangoria, Qi Liu, Leo Yan,
	linux-perf-users, linux-kernel

demangle-cxx.cpp requires a C++ compiler, but feature checks may fail
because of the absence of this. Add a CONFIG_CXX_DEMANGLE so that the
source isn't built if not supported. Copy libbfd and cplus demangle
variants to a weak symbol-elf.c version so they aren't dependent on
C++. These variants are only built with the build option
BUILD_NONDISTRO=1.

Signed-off-by: Ian Rogers <irogers@google.com>
---
 tools/perf/Makefile.config   |  1 +
 tools/perf/util/Build        |  2 +-
 tools/perf/util/symbol-elf.c | 27 +++++++++++++++++++++++++++
 3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index 71442c54c25f..5f0f24b56f50 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -923,6 +923,7 @@ ifndef NO_DEMANGLE
     EXTLIBS += -lstdc++
     CFLAGS += -DHAVE_CXA_DEMANGLE_SUPPORT
     CXXFLAGS += -DHAVE_CXA_DEMANGLE_SUPPORT
+    $(call detected,CONFIG_CXX_DEMANGLE)
   endif
   ifdef BUILD_NONDISTRO
     ifeq ($(filter -liberty,$(EXTLIBS)),)
diff --git a/tools/perf/util/Build b/tools/perf/util/Build
index bd18fe5f2719..f9df1df1eec0 100644
--- a/tools/perf/util/Build
+++ b/tools/perf/util/Build
@@ -214,7 +214,7 @@ perf-$(CONFIG_ZSTD) += zstd.o
 
 perf-$(CONFIG_LIBCAP) += cap.o
 
-perf-y += demangle-cxx.o
+perf-$(CONFIG_CXX_DEMANGLE) += demangle-cxx.o
 perf-y += demangle-ocaml.o
 perf-y += demangle-java.o
 perf-y += demangle-rust.o
diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c
index 35724f6a84fa..cd08bdb9824f 100644
--- a/tools/perf/util/symbol-elf.c
+++ b/tools/perf/util/symbol-elf.c
@@ -31,6 +31,13 @@
 #include <bfd.h>
 #endif
 
+#if defined(HAVE_LIBBFD_SUPPORT) || defined(HAVE_CPLUS_DEMANGLE_SUPPORT)
+#ifndef DMGL_PARAMS
+#define DMGL_PARAMS     (1 << 0)  /* Include function args */
+#define DMGL_ANSI       (1 << 1)  /* Include const, volatile, etc */
+#endif
+#endif
+
 #ifndef EM_AARCH64
 #define EM_AARCH64	183  /* ARM 64 bit */
 #endif
@@ -271,6 +278,26 @@ static bool want_demangle(bool is_kernel_sym)
 	return is_kernel_sym ? symbol_conf.demangle_kernel : symbol_conf.demangle;
 }
 
+/*
+ * Demangle C++ function signature, typically replaced by demangle-cxx.cpp
+ * version.
+ */
+__weak char *cxx_demangle_sym(const char *str __maybe_unused, bool params __maybe_unused,
+			      bool modifiers __maybe_unused)
+{
+#ifdef HAVE_LIBBFD_SUPPORT
+	int flags = (params ? DMGL_PARAMS : 0) | (modifiers ? DMGL_ANSI : 0);
+
+	return bfd_demangle(NULL, str, flags);
+#elif defined(HAVE_CPLUS_DEMANGLE_SUPPORT)
+	int flags = (params ? DMGL_PARAMS : 0) | (modifiers ? DMGL_ANSI : 0);
+
+	return cplus_demangle(str, flags);
+#else
+	return NULL;
+#endif
+}
+
 static char *demangle_sym(struct dso *dso, int kmodule, const char *elf_name)
 {
 	char *demangled = NULL;
-- 
2.40.0.634.g4ca3ef3211-goog


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v1] perf build: Don't compile demangle-cxx.cpp if not necessary
  2023-04-17 19:25 [PATCH v1] perf build: Don't compile demangle-cxx.cpp if not necessary Ian Rogers
@ 2023-04-27  5:27 ` Ian Rogers
  2023-05-26 18:26   ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 3+ messages in thread
From: Ian Rogers @ 2023-04-27  5:27 UTC (permalink / raw)
  To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim,
	Ian Rogers, Adrian Hunter, Ravi Bangoria, Qi Liu, Leo Yan,
	linux-perf-users, linux-kernel

On Mon, Apr 17, 2023 at 12:25 PM Ian Rogers <irogers@google.com> wrote:
>
> demangle-cxx.cpp requires a C++ compiler, but feature checks may fail
> because of the absence of this. Add a CONFIG_CXX_DEMANGLE so that the
> source isn't built if not supported. Copy libbfd and cplus demangle
> variants to a weak symbol-elf.c version so they aren't dependent on
> C++. These variants are only built with the build option
> BUILD_NONDISTRO=1.
>
> Signed-off-by: Ian Rogers <irogers@google.com>

Testing on arm and noticed we hadn't picked this one up.

Thanks,
Ian

> ---
>  tools/perf/Makefile.config   |  1 +
>  tools/perf/util/Build        |  2 +-
>  tools/perf/util/symbol-elf.c | 27 +++++++++++++++++++++++++++
>  3 files changed, 29 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
> index 71442c54c25f..5f0f24b56f50 100644
> --- a/tools/perf/Makefile.config
> +++ b/tools/perf/Makefile.config
> @@ -923,6 +923,7 @@ ifndef NO_DEMANGLE
>      EXTLIBS += -lstdc++
>      CFLAGS += -DHAVE_CXA_DEMANGLE_SUPPORT
>      CXXFLAGS += -DHAVE_CXA_DEMANGLE_SUPPORT
> +    $(call detected,CONFIG_CXX_DEMANGLE)
>    endif
>    ifdef BUILD_NONDISTRO
>      ifeq ($(filter -liberty,$(EXTLIBS)),)
> diff --git a/tools/perf/util/Build b/tools/perf/util/Build
> index bd18fe5f2719..f9df1df1eec0 100644
> --- a/tools/perf/util/Build
> +++ b/tools/perf/util/Build
> @@ -214,7 +214,7 @@ perf-$(CONFIG_ZSTD) += zstd.o
>
>  perf-$(CONFIG_LIBCAP) += cap.o
>
> -perf-y += demangle-cxx.o
> +perf-$(CONFIG_CXX_DEMANGLE) += demangle-cxx.o
>  perf-y += demangle-ocaml.o
>  perf-y += demangle-java.o
>  perf-y += demangle-rust.o
> diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c
> index 35724f6a84fa..cd08bdb9824f 100644
> --- a/tools/perf/util/symbol-elf.c
> +++ b/tools/perf/util/symbol-elf.c
> @@ -31,6 +31,13 @@
>  #include <bfd.h>
>  #endif
>
> +#if defined(HAVE_LIBBFD_SUPPORT) || defined(HAVE_CPLUS_DEMANGLE_SUPPORT)
> +#ifndef DMGL_PARAMS
> +#define DMGL_PARAMS     (1 << 0)  /* Include function args */
> +#define DMGL_ANSI       (1 << 1)  /* Include const, volatile, etc */
> +#endif
> +#endif
> +
>  #ifndef EM_AARCH64
>  #define EM_AARCH64     183  /* ARM 64 bit */
>  #endif
> @@ -271,6 +278,26 @@ static bool want_demangle(bool is_kernel_sym)
>         return is_kernel_sym ? symbol_conf.demangle_kernel : symbol_conf.demangle;
>  }
>
> +/*
> + * Demangle C++ function signature, typically replaced by demangle-cxx.cpp
> + * version.
> + */
> +__weak char *cxx_demangle_sym(const char *str __maybe_unused, bool params __maybe_unused,
> +                             bool modifiers __maybe_unused)
> +{
> +#ifdef HAVE_LIBBFD_SUPPORT
> +       int flags = (params ? DMGL_PARAMS : 0) | (modifiers ? DMGL_ANSI : 0);
> +
> +       return bfd_demangle(NULL, str, flags);
> +#elif defined(HAVE_CPLUS_DEMANGLE_SUPPORT)
> +       int flags = (params ? DMGL_PARAMS : 0) | (modifiers ? DMGL_ANSI : 0);
> +
> +       return cplus_demangle(str, flags);
> +#else
> +       return NULL;
> +#endif
> +}
> +
>  static char *demangle_sym(struct dso *dso, int kmodule, const char *elf_name)
>  {
>         char *demangled = NULL;
> --
> 2.40.0.634.g4ca3ef3211-goog
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v1] perf build: Don't compile demangle-cxx.cpp if not necessary
  2023-04-27  5:27 ` Ian Rogers
@ 2023-05-26 18:26   ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 3+ messages in thread
From: Arnaldo Carvalho de Melo @ 2023-05-26 18:26 UTC (permalink / raw)
  To: Ian Rogers
  Cc: Peter Zijlstra, Ingo Molnar, Mark Rutland, Alexander Shishkin,
	Jiri Olsa, Namhyung Kim, Adrian Hunter, Ravi Bangoria, Qi Liu,
	Leo Yan, linux-perf-users, linux-kernel

Em Wed, Apr 26, 2023 at 10:27:42PM -0700, Ian Rogers escreveu:
> On Mon, Apr 17, 2023 at 12:25 PM Ian Rogers <irogers@google.com> wrote:
> >
> > demangle-cxx.cpp requires a C++ compiler, but feature checks may fail
> > because of the absence of this. Add a CONFIG_CXX_DEMANGLE so that the
> > source isn't built if not supported. Copy libbfd and cplus demangle
> > variants to a weak symbol-elf.c version so they aren't dependent on
> > C++. These variants are only built with the build option
> > BUILD_NONDISTRO=1.
> >
> > Signed-off-by: Ian Rogers <irogers@google.com>
> 
> Testing on arm and noticed we hadn't picked this one up.

Thanks, applied.

- Arnaldo

 
> Thanks,
> Ian
> 
> > ---
> >  tools/perf/Makefile.config   |  1 +
> >  tools/perf/util/Build        |  2 +-
> >  tools/perf/util/symbol-elf.c | 27 +++++++++++++++++++++++++++
> >  3 files changed, 29 insertions(+), 1 deletion(-)
> >
> > diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
> > index 71442c54c25f..5f0f24b56f50 100644
> > --- a/tools/perf/Makefile.config
> > +++ b/tools/perf/Makefile.config
> > @@ -923,6 +923,7 @@ ifndef NO_DEMANGLE
> >      EXTLIBS += -lstdc++
> >      CFLAGS += -DHAVE_CXA_DEMANGLE_SUPPORT
> >      CXXFLAGS += -DHAVE_CXA_DEMANGLE_SUPPORT
> > +    $(call detected,CONFIG_CXX_DEMANGLE)
> >    endif
> >    ifdef BUILD_NONDISTRO
> >      ifeq ($(filter -liberty,$(EXTLIBS)),)
> > diff --git a/tools/perf/util/Build b/tools/perf/util/Build
> > index bd18fe5f2719..f9df1df1eec0 100644
> > --- a/tools/perf/util/Build
> > +++ b/tools/perf/util/Build
> > @@ -214,7 +214,7 @@ perf-$(CONFIG_ZSTD) += zstd.o
> >
> >  perf-$(CONFIG_LIBCAP) += cap.o
> >
> > -perf-y += demangle-cxx.o
> > +perf-$(CONFIG_CXX_DEMANGLE) += demangle-cxx.o
> >  perf-y += demangle-ocaml.o
> >  perf-y += demangle-java.o
> >  perf-y += demangle-rust.o
> > diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c
> > index 35724f6a84fa..cd08bdb9824f 100644
> > --- a/tools/perf/util/symbol-elf.c
> > +++ b/tools/perf/util/symbol-elf.c
> > @@ -31,6 +31,13 @@
> >  #include <bfd.h>
> >  #endif
> >
> > +#if defined(HAVE_LIBBFD_SUPPORT) || defined(HAVE_CPLUS_DEMANGLE_SUPPORT)
> > +#ifndef DMGL_PARAMS
> > +#define DMGL_PARAMS     (1 << 0)  /* Include function args */
> > +#define DMGL_ANSI       (1 << 1)  /* Include const, volatile, etc */
> > +#endif
> > +#endif
> > +
> >  #ifndef EM_AARCH64
> >  #define EM_AARCH64     183  /* ARM 64 bit */
> >  #endif
> > @@ -271,6 +278,26 @@ static bool want_demangle(bool is_kernel_sym)
> >         return is_kernel_sym ? symbol_conf.demangle_kernel : symbol_conf.demangle;
> >  }
> >
> > +/*
> > + * Demangle C++ function signature, typically replaced by demangle-cxx.cpp
> > + * version.
> > + */
> > +__weak char *cxx_demangle_sym(const char *str __maybe_unused, bool params __maybe_unused,
> > +                             bool modifiers __maybe_unused)
> > +{
> > +#ifdef HAVE_LIBBFD_SUPPORT
> > +       int flags = (params ? DMGL_PARAMS : 0) | (modifiers ? DMGL_ANSI : 0);
> > +
> > +       return bfd_demangle(NULL, str, flags);
> > +#elif defined(HAVE_CPLUS_DEMANGLE_SUPPORT)
> > +       int flags = (params ? DMGL_PARAMS : 0) | (modifiers ? DMGL_ANSI : 0);
> > +
> > +       return cplus_demangle(str, flags);
> > +#else
> > +       return NULL;
> > +#endif
> > +}
> > +
> >  static char *demangle_sym(struct dso *dso, int kmodule, const char *elf_name)
> >  {
> >         char *demangled = NULL;
> > --
> > 2.40.0.634.g4ca3ef3211-goog
> >

-- 

- Arnaldo

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-05-26 18:27 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-17 19:25 [PATCH v1] perf build: Don't compile demangle-cxx.cpp if not necessary Ian Rogers
2023-04-27  5:27 ` Ian Rogers
2023-05-26 18:26   ` Arnaldo Carvalho de Melo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.