Linux Perf Users
 help / color / mirror / Atom feed
* [PATCH v2 0/3] perf: build: Minor fixes for build failures
@ 2024-08-06 11:47 Yang Jihong
  2024-08-06 11:47 ` [PATCH v2 1/3] perf: build: Fix static compilation error when libdw is not installed Yang Jihong
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Yang Jihong @ 2024-08-06 11:47 UTC (permalink / raw)
  To: peterz, mingo, acme, namhyung, mark.rutland, alexander.shishkin,
	jolsa, irogers, adrian.hunter, kan.liang, linux-perf-users,
	linux-kernel
  Cc: yangjihong

This patchset contains minor fixes for build failures when statically compiling in Ubuntu 20.04.

Changes since v1:
 - patch3: Remove UTF-8 characters from build failure logs

Yang Jihong (3):
  perf: build: Fix static compilation error when libdw is not installed
  perf: build: Fix build feature-dwarf_getlocations fail for old libdw
  perf dwarf-aux: Fix build fail when HAVE_DWARF_GETLOCATIONS_SUPPORT
    undefined

 tools/build/feature/Makefile | 4 ++--
 tools/perf/Makefile.config   | 2 +-
 tools/perf/util/dwarf-aux.h  | 1 +
 3 files changed, 4 insertions(+), 3 deletions(-)

-- 
2.25.1


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

* [PATCH v2 1/3] perf: build: Fix static compilation error when libdw is not installed
  2024-08-06 11:47 [PATCH v2 0/3] perf: build: Minor fixes for build failures Yang Jihong
@ 2024-08-06 11:47 ` Yang Jihong
  2024-08-06 21:00   ` Leo Yan
  2024-08-06 11:48 ` [PATCH v2 2/3] perf: build: Fix build feature-dwarf_getlocations fail for old libdw Yang Jihong
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 11+ messages in thread
From: Yang Jihong @ 2024-08-06 11:47 UTC (permalink / raw)
  To: peterz, mingo, acme, namhyung, mark.rutland, alexander.shishkin,
	jolsa, irogers, adrian.hunter, kan.liang, linux-perf-users,
	linux-kernel
  Cc: yangjihong

If libdw is not installed in build environment, the output of
'pkg-config --modversion libdw' is empty, causing LIBDW_VERSION_2
to be empty and the shell test will have the following error:

  /bin/sh: 1: test: -lt: unexpected operator

Before:

  $ pkg-config --modversion libdw
  Package libdw was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libdw.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libdw' found
  $ make LDFLAGS=-static -j16
    BUILD:   Doing 'make -j20' parallel build
  <SNIP>
  Package libdw was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libdw.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libdw' found
  /bin/sh: 1: test: -lt: unexpected operator

After:

  1. libdw is not installed:

  $ pkg-config --modversion libdw
  Package libdw was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libdw.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libdw' found
  $ make LDFLAGS=-static -j16
    BUILD:   Doing 'make -j20' parallel build
  <SNIP>
  Package libdw was not found in the pkg-config search path.
  Perhaps you should add the directory containing `libdw.pc'
  to the PKG_CONFIG_PATH environment variable
  No package 'libdw' found
  Makefile.config:473: No libdw DWARF unwind found, Please install elfutils-devel/libdw-dev >= 0.158 and/or set LIBDW_DIR

  2. libdw version is lower than 0.177

  $ pkg-config --modversion libdw
  0.176
  $ make LDFLAGS=-static -j16
    BUILD:   Doing 'make -j20' parallel build
  <SNIP>

  Auto-detecting system features:
  ...                                   dwarf: [ on  ]
  <SNIP>
    INSTALL libsubcmd_headers
    INSTALL libapi_headers
    INSTALL libperf_headers
    INSTALL libsymbol_headers
    INSTALL libbpf_headers
    LINK    perf

  3. libdw version is higher than 0.177

  $ pkg-config --modversion libdw
  0.186
  $ make LDFLAGS=-static -j16
    BUILD:   Doing 'make -j20' parallel build
  <SNIP>

  Auto-detecting system features:
  ...                                   dwarf: [ on  ]
  <SNIP>
    CC      util/bpf-utils.o
    CC      util/pfm.o
    LD      util/perf-util-in.o
    LD      perf-util-in.o
    AR      libperf-util.a
    LINK    perf

Fixes: 536661da6ea1 ("perf: build: Only link libebl.a for old libdw")
Signed-off-by: Yang Jihong <yangjihong@bytedance.com>
---
 tools/build/feature/Makefile | 2 +-
 tools/perf/Makefile.config   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
index 12796808f07a..b18513ec4da6 100644
--- a/tools/build/feature/Makefile
+++ b/tools/build/feature/Makefile
@@ -178,7 +178,7 @@ ifeq ($(findstring -static,${LDFLAGS}),-static)
 
   # Elfutils merged libebl.a into libdw.a starting from version 0.177,
   # Link libebl.a only if libdw is older than this version.
-  ifeq ($(shell test $(LIBDW_VERSION_2) -lt 177; echo $$?),0)
+  ifeq ($(shell test $(LIBDW_VERSION_2)0 -lt 1770; echo $$?),0)
     DWARFLIBS += -lebl
   endif
 endif
diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index fa679db61f62..7d1003d2efb2 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -160,7 +160,7 @@ ifeq ($(findstring -static,${LDFLAGS}),-static)
 
   # Elfutils merged libebl.a into libdw.a starting from version 0.177,
   # Link libebl.a only if libdw is older than this version.
-  ifeq ($(shell test $(LIBDW_VERSION_2) -lt 177; echo $$?),0)
+  ifeq ($(shell test $(LIBDW_VERSION_2)0 -lt 1770; echo $$?),0)
     DWARFLIBS += -lebl
   endif
 endif
-- 
2.25.1


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

* [PATCH v2 2/3] perf: build: Fix build feature-dwarf_getlocations fail for old libdw
  2024-08-06 11:47 [PATCH v2 0/3] perf: build: Minor fixes for build failures Yang Jihong
  2024-08-06 11:47 ` [PATCH v2 1/3] perf: build: Fix static compilation error when libdw is not installed Yang Jihong
@ 2024-08-06 11:48 ` Yang Jihong
  2024-08-06 21:28   ` Leo Yan
  2024-08-06 11:48 ` [PATCH v2 3/3] perf dwarf-aux: Fix build fail when HAVE_DWARF_GETLOCATIONS_SUPPORT undefined Yang Jihong
  2024-08-06 17:58 ` [PATCH v2 0/3] perf: build: Minor fixes for build failures Namhyung Kim
  3 siblings, 1 reply; 11+ messages in thread
From: Yang Jihong @ 2024-08-06 11:48 UTC (permalink / raw)
  To: peterz, mingo, acme, namhyung, mark.rutland, alexander.shishkin,
	jolsa, irogers, adrian.hunter, kan.liang, linux-perf-users,
	linux-kernel
  Cc: yangjihong

For libdw versions below 0.177, need to link libdl.a in addition to
libbebl.a during static compilation, otherwise feature-dwarf_getlocations
compilation will fail.

Before:

  $ make LDFLAGS=-static
    BUILD:   Doing 'make -j20' parallel build
  <SNIP>
  Makefile.config:483: Old libdw.h, finding variables at given 'perf probe' point will not work, install elfutils-devel/libdw-dev >= 0.157
  <SNIP>

  $ cat ../build/feature/test-dwarf_getlocations.make.output
  /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libebl.a(eblclosebackend.o): in function `ebl_closebackend':
  (.text+0x20): undefined reference to `dlclose'
  collect2: error: ld returned 1 exit status

After:

  $ make LDFLAGS=-static
  <SNIP>
    Auto-detecting system features:
  ...                                   dwarf: [ on  ]
  <SNIP>

    $ ./perf probe
   Usage: perf probe [<options>] 'PROBEDEF' ['PROBEDEF' ...]
      or: perf probe [<options>] --add 'PROBEDEF' [--add 'PROBEDEF' ...]
      or: perf probe [<options>] --del '[GROUP:]EVENT' ...
      or: perf probe --list [GROUP:]EVENT ...
  <SNIP>

Fixes: 536661da6ea1 ("perf: build: Only link libebl.a for old libdw")
Signed-off-by: Yang Jihong <yangjihong@bytedance.com>
---
 tools/build/feature/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
index b18513ec4da6..1fc651cae9e5 100644
--- a/tools/build/feature/Makefile
+++ b/tools/build/feature/Makefile
@@ -179,7 +179,7 @@ ifeq ($(findstring -static,${LDFLAGS}),-static)
   # Elfutils merged libebl.a into libdw.a starting from version 0.177,
   # Link libebl.a only if libdw is older than this version.
   ifeq ($(shell test $(LIBDW_VERSION_2)0 -lt 1770; echo $$?),0)
-    DWARFLIBS += -lebl
+    DWARFLIBS += -lebl -ldl
   endif
 endif
 
-- 
2.25.1


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

* [PATCH v2 3/3] perf dwarf-aux: Fix build fail when HAVE_DWARF_GETLOCATIONS_SUPPORT undefined
  2024-08-06 11:47 [PATCH v2 0/3] perf: build: Minor fixes for build failures Yang Jihong
  2024-08-06 11:47 ` [PATCH v2 1/3] perf: build: Fix static compilation error when libdw is not installed Yang Jihong
  2024-08-06 11:48 ` [PATCH v2 2/3] perf: build: Fix build feature-dwarf_getlocations fail for old libdw Yang Jihong
@ 2024-08-06 11:48 ` Yang Jihong
  2024-08-06 21:34   ` Leo Yan
  2024-08-06 17:58 ` [PATCH v2 0/3] perf: build: Minor fixes for build failures Namhyung Kim
  3 siblings, 1 reply; 11+ messages in thread
From: Yang Jihong @ 2024-08-06 11:48 UTC (permalink / raw)
  To: peterz, mingo, acme, namhyung, mark.rutland, alexander.shishkin,
	jolsa, irogers, adrian.hunter, kan.liang, linux-perf-users,
	linux-kernel
  Cc: yangjihong

commit 3796eba7c137 move #else block of #ifdef HAVE_DWARF_GETLOCATIONS_SUPPORT
code from dwarf-aux.c to dwarf-aux.h, in which die_get_var_range() used ENOTSUP
macro, but dwarf-aux.h was not self-contained and did not include file errno.h.

As a result, the build failed when HAVE_DWARF_GETLOCATIONS_SUPPORT macro was not
defined, and the error log is as follows:

  In file included from util/disasm.h:8,
                   from util/annotate.h:16,
                   from builtin-top.c:23:
  util/dwarf-aux.h: In function 'die_get_var_range':
  util/dwarf-aux.h:184:10: error: 'ENOTSUP' undeclared (first use in this function)
    184 |  return -ENOTSUP;
        |          ^~~~~~~
  util/dwarf-aux.h:184:10: note: each undeclared identifier is reported only once for each function it appears

Fixes: 3796eba7c137 ("perf dwarf-aux: Move #else block of #ifdef HAVE_DWARF_GETLOCATIONS_SUPPORT code to the header file")
Signed-off-by: Yang Jihong <yangjihong@bytedance.com>
---
 tools/perf/util/dwarf-aux.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tools/perf/util/dwarf-aux.h b/tools/perf/util/dwarf-aux.h
index 24446412b869..d2903894538e 100644
--- a/tools/perf/util/dwarf-aux.h
+++ b/tools/perf/util/dwarf-aux.h
@@ -5,6 +5,7 @@
  * dwarf-aux.h : libdw auxiliary interfaces
  */
 
+#include <errno.h>
 #include <dwarf.h>
 #include <elfutils/libdw.h>
 #include <elfutils/libdwfl.h>
-- 
2.25.1


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

* Re: [PATCH v2 0/3] perf: build: Minor fixes for build failures
  2024-08-06 11:47 [PATCH v2 0/3] perf: build: Minor fixes for build failures Yang Jihong
                   ` (2 preceding siblings ...)
  2024-08-06 11:48 ` [PATCH v2 3/3] perf dwarf-aux: Fix build fail when HAVE_DWARF_GETLOCATIONS_SUPPORT undefined Yang Jihong
@ 2024-08-06 17:58 ` Namhyung Kim
  3 siblings, 0 replies; 11+ messages in thread
From: Namhyung Kim @ 2024-08-06 17:58 UTC (permalink / raw)
  To: Yang Jihong
  Cc: peterz, mingo, acme, mark.rutland, alexander.shishkin, jolsa,
	irogers, adrian.hunter, kan.liang, linux-perf-users, linux-kernel,
	Leo Yan

Add Leo to Cc.

On Tue, Aug 6, 2024 at 4:48 AM Yang Jihong <yangjihong@bytedance.com> wrote:
>
> This patchset contains minor fixes for build failures when statically compiling in Ubuntu 20.04.
>
> Changes since v1:
>  - patch3: Remove UTF-8 characters from build failure logs
>
> Yang Jihong (3):
>   perf: build: Fix static compilation error when libdw is not installed
>   perf: build: Fix build feature-dwarf_getlocations fail for old libdw
>   perf dwarf-aux: Fix build fail when HAVE_DWARF_GETLOCATIONS_SUPPORT
>     undefined
>
>  tools/build/feature/Makefile | 4 ++--
>  tools/perf/Makefile.config   | 2 +-
>  tools/perf/util/dwarf-aux.h  | 1 +
>  3 files changed, 4 insertions(+), 3 deletions(-)
>
> --
> 2.25.1
>

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

* Re: [PATCH v2 1/3] perf: build: Fix static compilation error when libdw is not installed
  2024-08-06 11:47 ` [PATCH v2 1/3] perf: build: Fix static compilation error when libdw is not installed Yang Jihong
@ 2024-08-06 21:00   ` Leo Yan
  2024-08-07  3:16     ` Yang Jihong
  0 siblings, 1 reply; 11+ messages in thread
From: Leo Yan @ 2024-08-06 21:00 UTC (permalink / raw)
  To: Yang Jihong, peterz, mingo, acme, namhyung, mark.rutland,
	alexander.shishkin, jolsa, irogers, adrian.hunter, kan.liang,
	linux-perf-users, linux-kernel

On 8/6/2024 12:47 PM, Yang Jihong wrote:
> If libdw is not installed in build environment, the output of
> 'pkg-config --modversion libdw' is empty, causing LIBDW_VERSION_2
> to be empty and the shell test will have the following error:
> 
>   /bin/sh: 1: test: -lt: unexpected operator
> 
> Before:
> 
>   $ pkg-config --modversion libdw
>   Package libdw was not found in the pkg-config search path.
>   Perhaps you should add the directory containing `libdw.pc'
>   to the PKG_CONFIG_PATH environment variable
>   No package 'libdw' found
>   $ make LDFLAGS=-static -j16
>     BUILD:   Doing 'make -j20' parallel build
>   <SNIP>
>   Package libdw was not found in the pkg-config search path.
>   Perhaps you should add the directory containing `libdw.pc'
>   to the PKG_CONFIG_PATH environment variable
>   No package 'libdw' found
>   /bin/sh: 1: test: -lt: unexpected operator
> 
> After:
> 
>   1. libdw is not installed:
> 
>   $ pkg-config --modversion libdw
>   Package libdw was not found in the pkg-config search path.
>   Perhaps you should add the directory containing `libdw.pc'
>   to the PKG_CONFIG_PATH environment variable
>   No package 'libdw' found
>   $ make LDFLAGS=-static -j16
>     BUILD:   Doing 'make -j20' parallel build
>   <SNIP>
>   Package libdw was not found in the pkg-config search path.
>   Perhaps you should add the directory containing `libdw.pc'
>   to the PKG_CONFIG_PATH environment variable
>   No package 'libdw' found
>   Makefile.config:473: No libdw DWARF unwind found, Please install elfutils-devel/libdw-dev >= 0.158 and/or set LIBDW_DIR
> 
>   2. libdw version is lower than 0.177
> 
>   $ pkg-config --modversion libdw
>   0.176
>   $ make LDFLAGS=-static -j16
>     BUILD:   Doing 'make -j20' parallel build
>   <SNIP>
> 
>   Auto-detecting system features:
>   ...                                   dwarf: [ on  ]
>   <SNIP>
>     INSTALL libsubcmd_headers
>     INSTALL libapi_headers
>     INSTALL libperf_headers
>     INSTALL libsymbol_headers
>     INSTALL libbpf_headers
>     LINK    perf
> 
>   3. libdw version is higher than 0.177
> 
>   $ pkg-config --modversion libdw
>   0.186
>   $ make LDFLAGS=-static -j16
>     BUILD:   Doing 'make -j20' parallel build
>   <SNIP>
> 
>   Auto-detecting system features:
>   ...                                   dwarf: [ on  ]
>   <SNIP>
>     CC      util/bpf-utils.o
>     CC      util/pfm.o
>     LD      util/perf-util-in.o
>     LD      perf-util-in.o
>     AR      libperf-util.a
>     LINK    perf
> 
> Fixes: 536661da6ea1 ("perf: build: Only link libebl.a for old libdw")
> Signed-off-by: Yang Jihong <yangjihong@bytedance.com>
> ---
>  tools/build/feature/Makefile | 2 +-
>  tools/perf/Makefile.config   | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> index 12796808f07a..b18513ec4da6 100644
> --- a/tools/build/feature/Makefile
> +++ b/tools/build/feature/Makefile
> @@ -178,7 +178,7 @@ ifeq ($(findstring -static,${LDFLAGS}),-static)
> 
>    # Elfutils merged libebl.a into libdw.a starting from version 0.177,
>    # Link libebl.a only if libdw is older than this version.
> -  ifeq ($(shell test $(LIBDW_VERSION_2) -lt 177; echo $$?),0)
> +  ifeq ($(shell test $(LIBDW_VERSION_2)0 -lt 1770; echo $$?),0)

I would like to follow up the style of LIBTRACEEVENT_VERSION and
LIBTRACEFS_VERSION, so change LIBDW_VERSION as below:

  LIBDW_VERSION := $(shell $(PKG_CONFIG) --modversion libdw).0.0

Does this work for you?

Thanks,
Leo

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

* Re: [PATCH v2 2/3] perf: build: Fix build feature-dwarf_getlocations fail for old libdw
  2024-08-06 11:48 ` [PATCH v2 2/3] perf: build: Fix build feature-dwarf_getlocations fail for old libdw Yang Jihong
@ 2024-08-06 21:28   ` Leo Yan
  2024-08-07  3:18     ` Yang Jihong
  0 siblings, 1 reply; 11+ messages in thread
From: Leo Yan @ 2024-08-06 21:28 UTC (permalink / raw)
  To: Yang Jihong, peterz, mingo, acme, namhyung, mark.rutland,
	alexander.shishkin, jolsa, irogers, adrian.hunter, kan.liang,
	linux-perf-users, linux-kernel

On 8/6/2024 12:48 PM, Yang Jihong wrote:
> 
> For libdw versions below 0.177, need to link libdl.a in addition to
> libbebl.a during static compilation, otherwise feature-dwarf_getlocations
> compilation will fail.
> 
> Before:
> 
>   $ make LDFLAGS=-static
>     BUILD:   Doing 'make -j20' parallel build
>   <SNIP>
>   Makefile.config:483: Old libdw.h, finding variables at given 'perf probe' point will not work, install elfutils-devel/libdw-dev >= 0.157
>   <SNIP>
> 
>   $ cat ../build/feature/test-dwarf_getlocations.make.output
>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libebl.a(eblclosebackend.o): in function `ebl_closebackend':
>   (.text+0x20): undefined reference to `dlclose'
>   collect2: error: ld returned 1 exit status

Indeed. Thanks for pointing out this.

> After:
> 
>   $ make LDFLAGS=-static
>   <SNIP>
>     Auto-detecting system features:
>   ...                                   dwarf: [ on  ]
>   <SNIP>
> 
>     $ ./perf probe
>    Usage: perf probe [<options>] 'PROBEDEF' ['PROBEDEF' ...]
>       or: perf probe [<options>] --add 'PROBEDEF' [--add 'PROBEDEF' ...]
>       or: perf probe [<options>] --del '[GROUP:]EVENT' ...
>       or: perf probe --list [GROUP:]EVENT ...
>   <SNIP>
> 
> Fixes: 536661da6ea1 ("perf: build: Only link libebl.a for old libdw")
> Signed-off-by: Yang Jihong <yangjihong@bytedance.com>
> ---
>  tools/build/feature/Makefile | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
> index b18513ec4da6..1fc651cae9e5 100644
> --- a/tools/build/feature/Makefile
> +++ b/tools/build/feature/Makefile
> @@ -179,7 +179,7 @@ ifeq ($(findstring -static,${LDFLAGS}),-static)
>    # Elfutils merged libebl.a into libdw.a starting from version 0.177,
>    # Link libebl.a only if libdw is older than this version.
>    ifeq ($(shell test $(LIBDW_VERSION_2)0 -lt 1770; echo $$?),0)
> -    DWARFLIBS += -lebl
> +    DWARFLIBS += -lebl -ldl
>    endif

One critical thing is the ordering of libs. We must put libdl after libebl,
otherwise, the building still fails (based on my test).

Given libdl is a general lib, I think it is good to add a line after the
`endif` wrapper and with a comment, something like:

   ifeq ($(shell test $(LIBDW_VERSION_2)0 -lt 1770; echo $$?),0)
      DWARFLIBS += -lebl
   endif

   # Must put -ldl after -lebl for dependency
   DWARFLIBS += -ldl

Please update the file tools/perf/Makefile.config for consistency.

Thanks,
Leo

>  endif
> 
> --
> 2.25.1
> 
> 

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

* Re: [PATCH v2 3/3] perf dwarf-aux: Fix build fail when HAVE_DWARF_GETLOCATIONS_SUPPORT undefined
  2024-08-06 11:48 ` [PATCH v2 3/3] perf dwarf-aux: Fix build fail when HAVE_DWARF_GETLOCATIONS_SUPPORT undefined Yang Jihong
@ 2024-08-06 21:34   ` Leo Yan
  2024-08-07  3:19     ` Yang Jihong
  0 siblings, 1 reply; 11+ messages in thread
From: Leo Yan @ 2024-08-06 21:34 UTC (permalink / raw)
  To: Yang Jihong, peterz, mingo, acme, namhyung, mark.rutland,
	alexander.shishkin, jolsa, irogers, adrian.hunter, kan.liang,
	linux-perf-users, linux-kernel

On 8/6/2024 12:48 PM, Yang Jihong wrote:
> commit 3796eba7c137 move #else block of #ifdef HAVE_DWARF_GETLOCATIONS_SUPPORT
> code from dwarf-aux.c to dwarf-aux.h, in which die_get_var_range() used ENOTSUP
> macro, but dwarf-aux.h was not self-contained and did not include file errno.h.
> 
> As a result, the build failed when HAVE_DWARF_GETLOCATIONS_SUPPORT macro was not
> defined, and the error log is as follows:
> 
>   In file included from util/disasm.h:8,
>                    from util/annotate.h:16,
>                    from builtin-top.c:23:
>   util/dwarf-aux.h: In function 'die_get_var_range':
>   util/dwarf-aux.h:184:10: error: 'ENOTSUP' undeclared (first use in this function)
>     184 |  return -ENOTSUP;
>         |          ^~~~~~~
>   util/dwarf-aux.h:184:10: note: each undeclared identifier is reported only once for each function it appears
> 
> Fixes: 3796eba7c137 ("perf dwarf-aux: Move #else block of #ifdef HAVE_DWARF_GETLOCATIONS_SUPPORT code to the header file")
> Signed-off-by: Yang Jihong <yangjihong@bytedance.com>
> ---
>  tools/perf/util/dwarf-aux.h | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/tools/perf/util/dwarf-aux.h b/tools/perf/util/dwarf-aux.h
> index 24446412b869..d2903894538e 100644
> --- a/tools/perf/util/dwarf-aux.h
> +++ b/tools/perf/util/dwarf-aux.h
> @@ -5,6 +5,7 @@
>   * dwarf-aux.h : libdw auxiliary interfaces
>   */
> 
> +#include <errno.h>
>  #include <dwarf.h>

Please alphabet ordering. With it:

Reviewed-by: Leo Yan <leo.yan@arm.com>

>  #include <elfutils/libdw.h>
>  #include <elfutils/libdwfl.h>
> --
> 2.25.1
> 
> 

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

* Re: [PATCH v2 1/3] perf: build: Fix static compilation error when libdw is not installed
  2024-08-06 21:00   ` Leo Yan
@ 2024-08-07  3:16     ` Yang Jihong
  0 siblings, 0 replies; 11+ messages in thread
From: Yang Jihong @ 2024-08-07  3:16 UTC (permalink / raw)
  To: Leo Yan
  Cc: peterz, mingo, acme, namhyung, mark.rutland, alexander.shishkin,
	jolsa, irogers, adrian.hunter, kan.liang, linux-perf-users,
	linux-kernel

Hello,

On 8/7/24 05:00, Leo Yan wrote:
> On 8/6/2024 12:47 PM, Yang Jihong wrote:
>> If libdw is not installed in build environment, the output of
>> 'pkg-config --modversion libdw' is empty, causing LIBDW_VERSION_2
>> to be empty and the shell test will have the following error:
>>
>>    /bin/sh: 1: test: -lt: unexpected operator
>>
>> Before:
>>
>>    $ pkg-config --modversion libdw
>>    Package libdw was not found in the pkg-config search path.
>>    Perhaps you should add the directory containing `libdw.pc'
>>    to the PKG_CONFIG_PATH environment variable
>>    No package 'libdw' found
>>    $ make LDFLAGS=-static -j16
>>      BUILD:   Doing 'make -j20' parallel build
>>    <SNIP>
>>    Package libdw was not found in the pkg-config search path.
>>    Perhaps you should add the directory containing `libdw.pc'
>>    to the PKG_CONFIG_PATH environment variable
>>    No package 'libdw' found
>>    /bin/sh: 1: test: -lt: unexpected operator
>>
>> After:
>>
>>    1. libdw is not installed:
>>
>>    $ pkg-config --modversion libdw
>>    Package libdw was not found in the pkg-config search path.
>>    Perhaps you should add the directory containing `libdw.pc'
>>    to the PKG_CONFIG_PATH environment variable
>>    No package 'libdw' found
>>    $ make LDFLAGS=-static -j16
>>      BUILD:   Doing 'make -j20' parallel build
>>    <SNIP>
>>    Package libdw was not found in the pkg-config search path.
>>    Perhaps you should add the directory containing `libdw.pc'
>>    to the PKG_CONFIG_PATH environment variable
>>    No package 'libdw' found
>>    Makefile.config:473: No libdw DWARF unwind found, Please install elfutils-devel/libdw-dev >= 0.158 and/or set LIBDW_DIR
>>
>>    2. libdw version is lower than 0.177
>>
>>    $ pkg-config --modversion libdw
>>    0.176
>>    $ make LDFLAGS=-static -j16
>>      BUILD:   Doing 'make -j20' parallel build
>>    <SNIP>
>>
>>    Auto-detecting system features:
>>    ...                                   dwarf: [ on  ]
>>    <SNIP>
>>      INSTALL libsubcmd_headers
>>      INSTALL libapi_headers
>>      INSTALL libperf_headers
>>      INSTALL libsymbol_headers
>>      INSTALL libbpf_headers
>>      LINK    perf
>>
>>    3. libdw version is higher than 0.177
>>
>>    $ pkg-config --modversion libdw
>>    0.186
>>    $ make LDFLAGS=-static -j16
>>      BUILD:   Doing 'make -j20' parallel build
>>    <SNIP>
>>
>>    Auto-detecting system features:
>>    ...                                   dwarf: [ on  ]
>>    <SNIP>
>>      CC      util/bpf-utils.o
>>      CC      util/pfm.o
>>      LD      util/perf-util-in.o
>>      LD      perf-util-in.o
>>      AR      libperf-util.a
>>      LINK    perf
>>
>> Fixes: 536661da6ea1 ("perf: build: Only link libebl.a for old libdw")
>> Signed-off-by: Yang Jihong <yangjihong@bytedance.com>
>> ---
>>   tools/build/feature/Makefile | 2 +-
>>   tools/perf/Makefile.config   | 2 +-
>>   2 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
>> index 12796808f07a..b18513ec4da6 100644
>> --- a/tools/build/feature/Makefile
>> +++ b/tools/build/feature/Makefile
>> @@ -178,7 +178,7 @@ ifeq ($(findstring -static,${LDFLAGS}),-static)
>>
>>     # Elfutils merged libebl.a into libdw.a starting from version 0.177,
>>     # Link libebl.a only if libdw is older than this version.
>> -  ifeq ($(shell test $(LIBDW_VERSION_2) -lt 177; echo $$?),0)
>> +  ifeq ($(shell test $(LIBDW_VERSION_2)0 -lt 1770; echo $$?),0)
> 
> I would like to follow up the style of LIBTRACEEVENT_VERSION and
> LIBTRACEFS_VERSION, so change LIBDW_VERSION as below:
> 
>    LIBDW_VERSION := $(shell $(PKG_CONFIG) --modversion libdw).0.0
> 
> Does this work for you?
Yes, have tested it in my environment and it works for me.
OK, will change in next version.

Thanks,
Yang

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

* Re: [PATCH v2 2/3] perf: build: Fix build feature-dwarf_getlocations fail for old libdw
  2024-08-06 21:28   ` Leo Yan
@ 2024-08-07  3:18     ` Yang Jihong
  0 siblings, 0 replies; 11+ messages in thread
From: Yang Jihong @ 2024-08-07  3:18 UTC (permalink / raw)
  To: Leo Yan
  Cc: peterz, mingo, acme, namhyung, mark.rutland, alexander.shishkin,
	jolsa, irogers, adrian.hunter, kan.liang, linux-perf-users,
	linux-kernel

Hello,

On 8/7/24 05:28, Leo Yan wrote:
> On 8/6/2024 12:48 PM, Yang Jihong wrote:
>>
>> For libdw versions below 0.177, need to link libdl.a in addition to
>> libbebl.a during static compilation, otherwise feature-dwarf_getlocations
>> compilation will fail.
>>
>> Before:
>>
>>    $ make LDFLAGS=-static
>>      BUILD:   Doing 'make -j20' parallel build
>>    <SNIP>
>>    Makefile.config:483: Old libdw.h, finding variables at given 'perf probe' point will not work, install elfutils-devel/libdw-dev >= 0.157
>>    <SNIP>
>>
>>    $ cat ../build/feature/test-dwarf_getlocations.make.output
>>    /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libebl.a(eblclosebackend.o): in function `ebl_closebackend':
>>    (.text+0x20): undefined reference to `dlclose'
>>    collect2: error: ld returned 1 exit status
> 
> Indeed. Thanks for pointing out this.
> 
>> After:
>>
>>    $ make LDFLAGS=-static
>>    <SNIP>
>>      Auto-detecting system features:
>>    ...                                   dwarf: [ on  ]
>>    <SNIP>
>>
>>      $ ./perf probe
>>     Usage: perf probe [<options>] 'PROBEDEF' ['PROBEDEF' ...]
>>        or: perf probe [<options>] --add 'PROBEDEF' [--add 'PROBEDEF' ...]
>>        or: perf probe [<options>] --del '[GROUP:]EVENT' ...
>>        or: perf probe --list [GROUP:]EVENT ...
>>    <SNIP>
>>
>> Fixes: 536661da6ea1 ("perf: build: Only link libebl.a for old libdw")
>> Signed-off-by: Yang Jihong <yangjihong@bytedance.com>
>> ---
>>   tools/build/feature/Makefile | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
>> index b18513ec4da6..1fc651cae9e5 100644
>> --- a/tools/build/feature/Makefile
>> +++ b/tools/build/feature/Makefile
>> @@ -179,7 +179,7 @@ ifeq ($(findstring -static,${LDFLAGS}),-static)
>>     # Elfutils merged libebl.a into libdw.a starting from version 0.177,
>>     # Link libebl.a only if libdw is older than this version.
>>     ifeq ($(shell test $(LIBDW_VERSION_2)0 -lt 1770; echo $$?),0)
>> -    DWARFLIBS += -lebl
>> +    DWARFLIBS += -lebl -ldl
>>     endif
> 
> One critical thing is the ordering of libs. We must put libdl after libebl,
> otherwise, the building still fails (based on my test).
> 
> Given libdl is a general lib, I think it is good to add a line after the
> `endif` wrapper and with a comment, something like:
> 
>     ifeq ($(shell test $(LIBDW_VERSION_2)0 -lt 1770; echo $$?),0)
>        DWARFLIBS += -lebl
>     endif
> 
>     # Must put -ldl after -lebl for dependency
>     DWARFLIBS += -ldl
> 
> Please update the file tools/perf/Makefile.config for consistency.

Okay, will change in next version.

Thanks,
Yang

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

* Re: [PATCH v2 3/3] perf dwarf-aux: Fix build fail when HAVE_DWARF_GETLOCATIONS_SUPPORT undefined
  2024-08-06 21:34   ` Leo Yan
@ 2024-08-07  3:19     ` Yang Jihong
  0 siblings, 0 replies; 11+ messages in thread
From: Yang Jihong @ 2024-08-07  3:19 UTC (permalink / raw)
  To: Leo Yan
  Cc: peterz, mingo, acme, namhyung, mark.rutland, alexander.shishkin,
	jolsa, irogers, adrian.hunter, kan.liang, linux-perf-users,
	linux-kernel

Hello,

On 8/7/24 05:34, Leo Yan wrote:
> On 8/6/2024 12:48 PM, Yang Jihong wrote:
>> commit 3796eba7c137 move #else block of #ifdef HAVE_DWARF_GETLOCATIONS_SUPPORT
>> code from dwarf-aux.c to dwarf-aux.h, in which die_get_var_range() used ENOTSUP
>> macro, but dwarf-aux.h was not self-contained and did not include file errno.h.
>>
>> As a result, the build failed when HAVE_DWARF_GETLOCATIONS_SUPPORT macro was not
>> defined, and the error log is as follows:
>>
>>    In file included from util/disasm.h:8,
>>                     from util/annotate.h:16,
>>                     from builtin-top.c:23:
>>    util/dwarf-aux.h: In function 'die_get_var_range':
>>    util/dwarf-aux.h:184:10: error: 'ENOTSUP' undeclared (first use in this function)
>>      184 |  return -ENOTSUP;
>>          |          ^~~~~~~
>>    util/dwarf-aux.h:184:10: note: each undeclared identifier is reported only once for each function it appears
>>
>> Fixes: 3796eba7c137 ("perf dwarf-aux: Move #else block of #ifdef HAVE_DWARF_GETLOCATIONS_SUPPORT code to the header file")
>> Signed-off-by: Yang Jihong <yangjihong@bytedance.com>
>> ---
>>   tools/perf/util/dwarf-aux.h | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/tools/perf/util/dwarf-aux.h b/tools/perf/util/dwarf-aux.h
>> index 24446412b869..d2903894538e 100644
>> --- a/tools/perf/util/dwarf-aux.h
>> +++ b/tools/perf/util/dwarf-aux.h
>> @@ -5,6 +5,7 @@
>>    * dwarf-aux.h : libdw auxiliary interfaces
>>    */
>>
>> +#include <errno.h>
>>   #include <dwarf.h>
> 
> Please alphabet ordering. With it:
> 
> Reviewed-by: Leo Yan <leo.yan@arm.com>
> 
Okay, will change in next version.

Thanks,
Yang

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

end of thread, other threads:[~2024-08-07  3:19 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-06 11:47 [PATCH v2 0/3] perf: build: Minor fixes for build failures Yang Jihong
2024-08-06 11:47 ` [PATCH v2 1/3] perf: build: Fix static compilation error when libdw is not installed Yang Jihong
2024-08-06 21:00   ` Leo Yan
2024-08-07  3:16     ` Yang Jihong
2024-08-06 11:48 ` [PATCH v2 2/3] perf: build: Fix build feature-dwarf_getlocations fail for old libdw Yang Jihong
2024-08-06 21:28   ` Leo Yan
2024-08-07  3:18     ` Yang Jihong
2024-08-06 11:48 ` [PATCH v2 3/3] perf dwarf-aux: Fix build fail when HAVE_DWARF_GETLOCATIONS_SUPPORT undefined Yang Jihong
2024-08-06 21:34   ` Leo Yan
2024-08-07  3:19     ` Yang Jihong
2024-08-06 17:58 ` [PATCH v2 0/3] perf: build: Minor fixes for build failures Namhyung Kim

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox