public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] bpftool: Fix failure with static linkage
@ 2024-12-04 21:30 Leo Yan
  2024-12-04 21:36 ` Namhyung Kim
  2024-12-05 19:24 ` Stanislav Fomichev
  0 siblings, 2 replies; 10+ messages in thread
From: Leo Yan @ 2024-12-04 21:30 UTC (permalink / raw)
  To: Quentin Monnet, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Martin KaFai Lau, Eduard Zingerman, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, Nick Terrell, bpf, linux-perf-users,
	linux-kernel
  Cc: Leo Yan

When building perf with static linkage:

  make O=/build LDFLAGS="-static" -C tools/perf VF=1 DEBUG=1
  ...
  LINK    /build/util/bpf_skel/.tmp/bootstrap/bpftool
  /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_compress':
  (.text+0x113): undefined reference to `ZSTD_createCCtx'
  /usr/bin/ld: (.text+0x2a9): undefined reference to `ZSTD_compressStream2'
  /usr/bin/ld: (.text+0x2b4): undefined reference to `ZSTD_isError'
  /usr/bin/ld: (.text+0x2db): undefined reference to `ZSTD_freeCCtx'
  /usr/bin/ld: (.text+0x5a0): undefined reference to `ZSTD_compressStream2'
  /usr/bin/ld: (.text+0x5ab): undefined reference to `ZSTD_isError'
  /usr/bin/ld: (.text+0x6b9): undefined reference to `ZSTD_freeCCtx'
  /usr/bin/ld: (.text+0x835): undefined reference to `ZSTD_freeCCtx'
  /usr/bin/ld: (.text+0x86f): undefined reference to `ZSTD_freeCCtx'
  /usr/bin/ld: (.text+0x91b): undefined reference to `ZSTD_freeCCtx'
  /usr/bin/ld: (.text+0xa12): undefined reference to `ZSTD_freeCCtx'
  /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_decompress':
  (.text+0xbfc): undefined reference to `ZSTD_decompress'
  /usr/bin/ld: (.text+0xc04): undefined reference to `ZSTD_isError'
  /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_decompress_elf':
  (.text+0xd45): undefined reference to `ZSTD_decompress'
  /usr/bin/ld: (.text+0xd4d): undefined reference to `ZSTD_isError'
  collect2: error: ld returned 1 exit status

Building bpftool with static linkage also fails with the same errors:

  make O=/build -C tools/bpf/bpftool/ V=1

To fix the issue, explicitly link libzstd.

Signed-off-by: Leo Yan <leo.yan@arm.com>
---
 tools/bpf/bpftool/Makefile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile
index a4263dfb5e03..65b2671941e0 100644
--- a/tools/bpf/bpftool/Makefile
+++ b/tools/bpf/bpftool/Makefile
@@ -130,8 +130,8 @@ include $(FEATURES_DUMP)
 endif
 endif
 
-LIBS = $(LIBBPF) -lelf -lz
-LIBS_BOOTSTRAP = $(LIBBPF_BOOTSTRAP) -lelf -lz
+LIBS = $(LIBBPF) -lelf -lz -lzstd
+LIBS_BOOTSTRAP = $(LIBBPF_BOOTSTRAP) -lelf -lz -lzstd
 ifeq ($(feature-libcap), 1)
 CFLAGS += -DUSE_LIBCAP
 LIBS += -lcap
-- 
2.34.1


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

* Re: [PATCH] bpftool: Fix failure with static linkage
  2024-12-04 21:30 [PATCH] bpftool: Fix failure with static linkage Leo Yan
@ 2024-12-04 21:36 ` Namhyung Kim
  2024-12-04 22:08   ` Quentin Monnet
  2024-12-05 19:24 ` Stanislav Fomichev
  1 sibling, 1 reply; 10+ messages in thread
From: Namhyung Kim @ 2024-12-04 21:36 UTC (permalink / raw)
  To: Leo Yan
  Cc: Quentin Monnet, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Martin KaFai Lau, Eduard Zingerman, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, Nick Terrell, bpf, linux-perf-users,
	linux-kernel

Hi Leo,

On Wed, Dec 04, 2024 at 09:30:59PM +0000, Leo Yan wrote:
> When building perf with static linkage:
> 
>   make O=/build LDFLAGS="-static" -C tools/perf VF=1 DEBUG=1
>   ...
>   LINK    /build/util/bpf_skel/.tmp/bootstrap/bpftool
>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_compress':
>   (.text+0x113): undefined reference to `ZSTD_createCCtx'
>   /usr/bin/ld: (.text+0x2a9): undefined reference to `ZSTD_compressStream2'
>   /usr/bin/ld: (.text+0x2b4): undefined reference to `ZSTD_isError'
>   /usr/bin/ld: (.text+0x2db): undefined reference to `ZSTD_freeCCtx'
>   /usr/bin/ld: (.text+0x5a0): undefined reference to `ZSTD_compressStream2'
>   /usr/bin/ld: (.text+0x5ab): undefined reference to `ZSTD_isError'
>   /usr/bin/ld: (.text+0x6b9): undefined reference to `ZSTD_freeCCtx'
>   /usr/bin/ld: (.text+0x835): undefined reference to `ZSTD_freeCCtx'
>   /usr/bin/ld: (.text+0x86f): undefined reference to `ZSTD_freeCCtx'
>   /usr/bin/ld: (.text+0x91b): undefined reference to `ZSTD_freeCCtx'
>   /usr/bin/ld: (.text+0xa12): undefined reference to `ZSTD_freeCCtx'
>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_decompress':
>   (.text+0xbfc): undefined reference to `ZSTD_decompress'
>   /usr/bin/ld: (.text+0xc04): undefined reference to `ZSTD_isError'
>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_decompress_elf':
>   (.text+0xd45): undefined reference to `ZSTD_decompress'
>   /usr/bin/ld: (.text+0xd4d): undefined reference to `ZSTD_isError'
>   collect2: error: ld returned 1 exit status
> 
> Building bpftool with static linkage also fails with the same errors:
> 
>   make O=/build -C tools/bpf/bpftool/ V=1
> 
> To fix the issue, explicitly link libzstd.

I was about to report exactly the same. :)

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

Tested-by: Namhyung Kim <namhyung@kernel.org>

Thanks,
Namhyung

> ---
>  tools/bpf/bpftool/Makefile | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile
> index a4263dfb5e03..65b2671941e0 100644
> --- a/tools/bpf/bpftool/Makefile
> +++ b/tools/bpf/bpftool/Makefile
> @@ -130,8 +130,8 @@ include $(FEATURES_DUMP)
>  endif
>  endif
>  
> -LIBS = $(LIBBPF) -lelf -lz
> -LIBS_BOOTSTRAP = $(LIBBPF_BOOTSTRAP) -lelf -lz
> +LIBS = $(LIBBPF) -lelf -lz -lzstd
> +LIBS_BOOTSTRAP = $(LIBBPF_BOOTSTRAP) -lelf -lz -lzstd
>  ifeq ($(feature-libcap), 1)
>  CFLAGS += -DUSE_LIBCAP
>  LIBS += -lcap
> -- 
> 2.34.1
> 

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

* Re: [PATCH] bpftool: Fix failure with static linkage
  2024-12-04 21:36 ` Namhyung Kim
@ 2024-12-04 22:08   ` Quentin Monnet
  2024-12-04 22:25     ` Namhyung Kim
  2024-12-10 18:26     ` Andrii Nakryiko
  0 siblings, 2 replies; 10+ messages in thread
From: Quentin Monnet @ 2024-12-04 22:08 UTC (permalink / raw)
  To: Namhyung Kim, Leo Yan
  Cc: Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
	Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
	John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
	Nick Terrell, bpf, linux-perf-users, linux-kernel, Mahe Tardy

2024-12-04 13:36 UTC-0800 ~ Namhyung Kim <namhyung@kernel.org>
> Hi Leo,
> 
> On Wed, Dec 04, 2024 at 09:30:59PM +0000, Leo Yan wrote:
>> When building perf with static linkage:
>>
>>   make O=/build LDFLAGS="-static" -C tools/perf VF=1 DEBUG=1
>>   ...
>>   LINK    /build/util/bpf_skel/.tmp/bootstrap/bpftool
>>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_compress':
>>   (.text+0x113): undefined reference to `ZSTD_createCCtx'
>>   /usr/bin/ld: (.text+0x2a9): undefined reference to `ZSTD_compressStream2'
>>   /usr/bin/ld: (.text+0x2b4): undefined reference to `ZSTD_isError'
>>   /usr/bin/ld: (.text+0x2db): undefined reference to `ZSTD_freeCCtx'
>>   /usr/bin/ld: (.text+0x5a0): undefined reference to `ZSTD_compressStream2'
>>   /usr/bin/ld: (.text+0x5ab): undefined reference to `ZSTD_isError'
>>   /usr/bin/ld: (.text+0x6b9): undefined reference to `ZSTD_freeCCtx'
>>   /usr/bin/ld: (.text+0x835): undefined reference to `ZSTD_freeCCtx'
>>   /usr/bin/ld: (.text+0x86f): undefined reference to `ZSTD_freeCCtx'
>>   /usr/bin/ld: (.text+0x91b): undefined reference to `ZSTD_freeCCtx'
>>   /usr/bin/ld: (.text+0xa12): undefined reference to `ZSTD_freeCCtx'
>>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_decompress':
>>   (.text+0xbfc): undefined reference to `ZSTD_decompress'
>>   /usr/bin/ld: (.text+0xc04): undefined reference to `ZSTD_isError'
>>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_decompress_elf':
>>   (.text+0xd45): undefined reference to `ZSTD_decompress'
>>   /usr/bin/ld: (.text+0xd4d): undefined reference to `ZSTD_isError'
>>   collect2: error: ld returned 1 exit status
>>
>> Building bpftool with static linkage also fails with the same errors:
>>
>>   make O=/build -C tools/bpf/bpftool/ V=1
>>
>> To fix the issue, explicitly link libzstd.
> 
> I was about to report exactly the same. :)

Thank you both. This has been reported before [0] but I didn't find the
time to look into a proper fix.

The tricky part is that static linkage works well without libzstd for
older versions of elfutils [1], but newer versions now require this
library. Which means that we don't want to link against libzstd
unconditionally, or users trying to build bpftool may have to install
unnecessary dependencies. Instead we should add a new probe under
tools/build/feature (Note that we already have several combinations in
there, libbfd, libbfd-liberty, libbfd-liberty-z, and I'm not sure what's
the best approach in terms of new combinations).

Thanks,
Quentin


[0] https://github.com/libbpf/bpftool/issues/152
[1] https://github.com/libbpf/bpftool/issues/152#issuecomment-2343131810

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

* Re: [PATCH] bpftool: Fix failure with static linkage
  2024-12-04 22:08   ` Quentin Monnet
@ 2024-12-04 22:25     ` Namhyung Kim
  2024-12-04 22:55       ` Quentin Monnet
  2024-12-10 18:26     ` Andrii Nakryiko
  1 sibling, 1 reply; 10+ messages in thread
From: Namhyung Kim @ 2024-12-04 22:25 UTC (permalink / raw)
  To: Quentin Monnet
  Cc: Leo Yan, Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
	Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
	John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
	Nick Terrell, bpf, linux-perf-users, linux-kernel, Mahe Tardy

Hello,

On Wed, Dec 04, 2024 at 10:08:15PM +0000, Quentin Monnet wrote:
> 2024-12-04 13:36 UTC-0800 ~ Namhyung Kim <namhyung@kernel.org>
> > Hi Leo,
> > 
> > On Wed, Dec 04, 2024 at 09:30:59PM +0000, Leo Yan wrote:
> >> When building perf with static linkage:
> >>
> >>   make O=/build LDFLAGS="-static" -C tools/perf VF=1 DEBUG=1
> >>   ...
> >>   LINK    /build/util/bpf_skel/.tmp/bootstrap/bpftool
> >>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_compress':
> >>   (.text+0x113): undefined reference to `ZSTD_createCCtx'
> >>   /usr/bin/ld: (.text+0x2a9): undefined reference to `ZSTD_compressStream2'
> >>   /usr/bin/ld: (.text+0x2b4): undefined reference to `ZSTD_isError'
> >>   /usr/bin/ld: (.text+0x2db): undefined reference to `ZSTD_freeCCtx'
> >>   /usr/bin/ld: (.text+0x5a0): undefined reference to `ZSTD_compressStream2'
> >>   /usr/bin/ld: (.text+0x5ab): undefined reference to `ZSTD_isError'
> >>   /usr/bin/ld: (.text+0x6b9): undefined reference to `ZSTD_freeCCtx'
> >>   /usr/bin/ld: (.text+0x835): undefined reference to `ZSTD_freeCCtx'
> >>   /usr/bin/ld: (.text+0x86f): undefined reference to `ZSTD_freeCCtx'
> >>   /usr/bin/ld: (.text+0x91b): undefined reference to `ZSTD_freeCCtx'
> >>   /usr/bin/ld: (.text+0xa12): undefined reference to `ZSTD_freeCCtx'
> >>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_decompress':
> >>   (.text+0xbfc): undefined reference to `ZSTD_decompress'
> >>   /usr/bin/ld: (.text+0xc04): undefined reference to `ZSTD_isError'
> >>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_decompress_elf':
> >>   (.text+0xd45): undefined reference to `ZSTD_decompress'
> >>   /usr/bin/ld: (.text+0xd4d): undefined reference to `ZSTD_isError'
> >>   collect2: error: ld returned 1 exit status
> >>
> >> Building bpftool with static linkage also fails with the same errors:
> >>
> >>   make O=/build -C tools/bpf/bpftool/ V=1
> >>
> >> To fix the issue, explicitly link libzstd.
> > 
> > I was about to report exactly the same. :)
> 
> Thank you both. This has been reported before [0] but I didn't find the
> time to look into a proper fix.
> 
> The tricky part is that static linkage works well without libzstd for
> older versions of elfutils [1], but newer versions now require this
> library. Which means that we don't want to link against libzstd
> unconditionally, or users trying to build bpftool may have to install
> unnecessary dependencies. Instead we should add a new probe under
> tools/build/feature (Note that we already have several combinations in
> there, libbfd, libbfd-liberty, libbfd-liberty-z, and I'm not sure what's
> the best approach in terms of new combinations).

I think you can use pkg-config if available.

  $ pkg-config --static --libs libelf
  -lelf -lz -lzstd -pthread 

Thanks,
Namhyung

> 
> [0] https://github.com/libbpf/bpftool/issues/152
> [1] https://github.com/libbpf/bpftool/issues/152#issuecomment-2343131810

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

* Re: [PATCH] bpftool: Fix failure with static linkage
  2024-12-04 22:25     ` Namhyung Kim
@ 2024-12-04 22:55       ` Quentin Monnet
  2024-12-05 10:23         ` Leo Yan
  0 siblings, 1 reply; 10+ messages in thread
From: Quentin Monnet @ 2024-12-04 22:55 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: Leo Yan, Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko,
	Martin KaFai Lau, Eduard Zingerman, Song Liu, Yonghong Song,
	John Fastabend, KP Singh, Stanislav Fomichev, Hao Luo, Jiri Olsa,
	Nick Terrell, bpf, linux-perf-users, linux-kernel, Mahe Tardy

2024-12-04 14:25 UTC-0800 ~ Namhyung Kim <namhyung@kernel.org>
> Hello,
> 
> On Wed, Dec 04, 2024 at 10:08:15PM +0000, Quentin Monnet wrote:
>> 2024-12-04 13:36 UTC-0800 ~ Namhyung Kim <namhyung@kernel.org>
>>> Hi Leo,
>>>
>>> On Wed, Dec 04, 2024 at 09:30:59PM +0000, Leo Yan wrote:
>>>> When building perf with static linkage:
>>>>
>>>>   make O=/build LDFLAGS="-static" -C tools/perf VF=1 DEBUG=1
>>>>   ...
>>>>   LINK    /build/util/bpf_skel/.tmp/bootstrap/bpftool
>>>>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_compress':
>>>>   (.text+0x113): undefined reference to `ZSTD_createCCtx'
>>>>   /usr/bin/ld: (.text+0x2a9): undefined reference to `ZSTD_compressStream2'
>>>>   /usr/bin/ld: (.text+0x2b4): undefined reference to `ZSTD_isError'
>>>>   /usr/bin/ld: (.text+0x2db): undefined reference to `ZSTD_freeCCtx'
>>>>   /usr/bin/ld: (.text+0x5a0): undefined reference to `ZSTD_compressStream2'
>>>>   /usr/bin/ld: (.text+0x5ab): undefined reference to `ZSTD_isError'
>>>>   /usr/bin/ld: (.text+0x6b9): undefined reference to `ZSTD_freeCCtx'
>>>>   /usr/bin/ld: (.text+0x835): undefined reference to `ZSTD_freeCCtx'
>>>>   /usr/bin/ld: (.text+0x86f): undefined reference to `ZSTD_freeCCtx'
>>>>   /usr/bin/ld: (.text+0x91b): undefined reference to `ZSTD_freeCCtx'
>>>>   /usr/bin/ld: (.text+0xa12): undefined reference to `ZSTD_freeCCtx'
>>>>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_decompress':
>>>>   (.text+0xbfc): undefined reference to `ZSTD_decompress'
>>>>   /usr/bin/ld: (.text+0xc04): undefined reference to `ZSTD_isError'
>>>>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_decompress_elf':
>>>>   (.text+0xd45): undefined reference to `ZSTD_decompress'
>>>>   /usr/bin/ld: (.text+0xd4d): undefined reference to `ZSTD_isError'
>>>>   collect2: error: ld returned 1 exit status
>>>>
>>>> Building bpftool with static linkage also fails with the same errors:
>>>>
>>>>   make O=/build -C tools/bpf/bpftool/ V=1
>>>>
>>>> To fix the issue, explicitly link libzstd.
>>>
>>> I was about to report exactly the same. :)
>>
>> Thank you both. This has been reported before [0] but I didn't find the
>> time to look into a proper fix.
>>
>> The tricky part is that static linkage works well without libzstd for
>> older versions of elfutils [1], but newer versions now require this
>> library. Which means that we don't want to link against libzstd
>> unconditionally, or users trying to build bpftool may have to install
>> unnecessary dependencies. Instead we should add a new probe under
>> tools/build/feature (Note that we already have several combinations in
>> there, libbfd, libbfd-liberty, libbfd-liberty-z, and I'm not sure what's
>> the best approach in terms of new combinations).
> 
> I think you can use pkg-config if available.
> 
>   $ pkg-config --static --libs libelf
>   -lelf -lz -lzstd -pthread 
> 


That's another dependency that I'd like to avoid if I can :)

Quentin

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

* Re: [PATCH] bpftool: Fix failure with static linkage
  2024-12-04 22:55       ` Quentin Monnet
@ 2024-12-05 10:23         ` Leo Yan
  2024-12-05 10:58           ` Quentin Monnet
  0 siblings, 1 reply; 10+ messages in thread
From: Leo Yan @ 2024-12-05 10:23 UTC (permalink / raw)
  To: Quentin Monnet
  Cc: Namhyung Kim, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Martin KaFai Lau, Eduard Zingerman, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, Nick Terrell, bpf, linux-perf-users,
	linux-kernel, Mahe Tardy

On Wed, Dec 04, 2024 at 10:55:32PM +0000, Quentin Monnet wrote:

[...]

> >>> I was about to report exactly the same. :)
> >>
> >> Thank you both. This has been reported before [0] but I didn't find the
> >> time to look into a proper fix.
> >>
> >> The tricky part is that static linkage works well without libzstd for
> >> older versions of elfutils [1], but newer versions now require this
> >> library. Which means that we don't want to link against libzstd
> >> unconditionally, or users trying to build bpftool may have to install
> >> unnecessary dependencies. Instead we should add a new probe under
> >> tools/build/feature (Note that we already have several combinations in
> >> there, libbfd, libbfd-liberty, libbfd-liberty-z, and I'm not sure what's
> >> the best approach in terms of new combinations).
> >
> > I think you can use pkg-config if available.
> >
> >   $ pkg-config --static --libs libelf
> >   -lelf -lz -lzstd -pthread
> 
> That's another dependency that I'd like to avoid if I can :)

Seems to me, pkg-config is the right tool for doing such kind thing -
not only it is nature for local building, it is also friendly for build
system (e.g. buildroot, OpenEmbedded / Yocto).  Though I have no deep
knowledge for building.

I am a bit confused why this issue is related to build features libbfd,
libbfd-liberty, libbfd-liberty-z.  Should not the issue is related to
libelf?  build/feature has several libelf checking, maybe we can add new
one libelf-zstd?

Thanks,
Leo

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

* Re: [PATCH] bpftool: Fix failure with static linkage
  2024-12-05 10:23         ` Leo Yan
@ 2024-12-05 10:58           ` Quentin Monnet
  0 siblings, 0 replies; 10+ messages in thread
From: Quentin Monnet @ 2024-12-05 10:58 UTC (permalink / raw)
  To: Leo Yan
  Cc: Namhyung Kim, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Martin KaFai Lau, Eduard Zingerman, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, Nick Terrell, bpf, linux-perf-users,
	linux-kernel, Mahe Tardy

2024-12-05 10:23 UTC+0000 ~ Leo Yan <leo.yan@arm.com>
> On Wed, Dec 04, 2024 at 10:55:32PM +0000, Quentin Monnet wrote:
> 
> [...]
> 
>>>>> I was about to report exactly the same. :)
>>>>
>>>> Thank you both. This has been reported before [0] but I didn't find the
>>>> time to look into a proper fix.
>>>>
>>>> The tricky part is that static linkage works well without libzstd for
>>>> older versions of elfutils [1], but newer versions now require this
>>>> library. Which means that we don't want to link against libzstd
>>>> unconditionally, or users trying to build bpftool may have to install
>>>> unnecessary dependencies. Instead we should add a new probe under
>>>> tools/build/feature (Note that we already have several combinations in
>>>> there, libbfd, libbfd-liberty, libbfd-liberty-z, and I'm not sure what's
>>>> the best approach in terms of new combinations).
>>>
>>> I think you can use pkg-config if available.
>>>
>>>   $ pkg-config --static --libs libelf
>>>   -lelf -lz -lzstd -pthread
>>
>> That's another dependency that I'd like to avoid if I can :)
> 
> Seems to me, pkg-config is the right tool for doing such kind thing -
> not only it is nature for local building, it is also friendly for build
> system (e.g. buildroot, OpenEmbedded / Yocto).  Though I have no deep
> knowledge for building.


pkg-config would be nice but is not always installed by default. We've
been handling build options without it so far, if we can fix the current
issue without struggling too much with probes I'd just as well avoid
adding a build dependency.


> I am a bit confused why this issue is related to build features libbfd,
> libbfd-liberty, libbfd-liberty-z.  Should not the issue is related to
> libelf?  build/feature has several libelf checking, maybe we can add new
> one libelf-zstd?


Apologies, I was the one getting confused. You're correct, this affects
libelf and not libbfd, and yes libelf-zstd is likely the way to go.

Thank you,
Quentin


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

* Re: [PATCH] bpftool: Fix failure with static linkage
  2024-12-04 21:30 [PATCH] bpftool: Fix failure with static linkage Leo Yan
  2024-12-04 21:36 ` Namhyung Kim
@ 2024-12-05 19:24 ` Stanislav Fomichev
  1 sibling, 0 replies; 10+ messages in thread
From: Stanislav Fomichev @ 2024-12-05 19:24 UTC (permalink / raw)
  To: Leo Yan
  Cc: Quentin Monnet, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Martin KaFai Lau, Eduard Zingerman, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, Nick Terrell, bpf, linux-perf-users,
	linux-kernel

On 12/04, Leo Yan wrote:
> When building perf with static linkage:
> 
>   make O=/build LDFLAGS="-static" -C tools/perf VF=1 DEBUG=1
>   ...
>   LINK    /build/util/bpf_skel/.tmp/bootstrap/bpftool
>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_compress':
>   (.text+0x113): undefined reference to `ZSTD_createCCtx'
>   /usr/bin/ld: (.text+0x2a9): undefined reference to `ZSTD_compressStream2'
>   /usr/bin/ld: (.text+0x2b4): undefined reference to `ZSTD_isError'
>   /usr/bin/ld: (.text+0x2db): undefined reference to `ZSTD_freeCCtx'
>   /usr/bin/ld: (.text+0x5a0): undefined reference to `ZSTD_compressStream2'
>   /usr/bin/ld: (.text+0x5ab): undefined reference to `ZSTD_isError'
>   /usr/bin/ld: (.text+0x6b9): undefined reference to `ZSTD_freeCCtx'
>   /usr/bin/ld: (.text+0x835): undefined reference to `ZSTD_freeCCtx'
>   /usr/bin/ld: (.text+0x86f): undefined reference to `ZSTD_freeCCtx'
>   /usr/bin/ld: (.text+0x91b): undefined reference to `ZSTD_freeCCtx'
>   /usr/bin/ld: (.text+0xa12): undefined reference to `ZSTD_freeCCtx'
>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_decompress':
>   (.text+0xbfc): undefined reference to `ZSTD_decompress'
>   /usr/bin/ld: (.text+0xc04): undefined reference to `ZSTD_isError'
>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_decompress_elf':
>   (.text+0xd45): undefined reference to `ZSTD_decompress'
>   /usr/bin/ld: (.text+0xd4d): undefined reference to `ZSTD_isError'
>   collect2: error: ld returned 1 exit status
> 
> Building bpftool with static linkage also fails with the same errors:
> 
>   make O=/build -C tools/bpf/bpftool/ V=1
> 
> To fix the issue, explicitly link libzstd.
> 
> Signed-off-by: Leo Yan <leo.yan@arm.com>
> ---
>  tools/bpf/bpftool/Makefile | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/bpf/bpftool/Makefile b/tools/bpf/bpftool/Makefile
> index a4263dfb5e03..65b2671941e0 100644
> --- a/tools/bpf/bpftool/Makefile
> +++ b/tools/bpf/bpftool/Makefile
> @@ -130,8 +130,8 @@ include $(FEATURES_DUMP)
>  endif
>  endif
>  
> -LIBS = $(LIBBPF) -lelf -lz
> -LIBS_BOOTSTRAP = $(LIBBPF_BOOTSTRAP) -lelf -lz
> +LIBS = $(LIBBPF) -lelf -lz -lzstd
> +LIBS_BOOTSTRAP = $(LIBBPF_BOOTSTRAP) -lelf -lz -lzstd
>  ifeq ($(feature-libcap), 1)
>  CFLAGS += -DUSE_LIBCAP
>  LIBS += -lcap
> -- 
> 2.34.1
> 

I'm not sure we 'offically' support -static builds, but this seems to be
ok. Tangential: maybe time to switch to pkg-config for bpftool? IIRC,
there is some flag to query for static lib dependencies... Will leave
it up to Quentin.

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

* Re: [PATCH] bpftool: Fix failure with static linkage
  2024-12-04 22:08   ` Quentin Monnet
  2024-12-04 22:25     ` Namhyung Kim
@ 2024-12-10 18:26     ` Andrii Nakryiko
  2024-12-10 20:19       ` Leo Yan
  1 sibling, 1 reply; 10+ messages in thread
From: Andrii Nakryiko @ 2024-12-10 18:26 UTC (permalink / raw)
  To: Quentin Monnet
  Cc: Namhyung Kim, Leo Yan, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Martin KaFai Lau, Eduard Zingerman, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, Nick Terrell, bpf, linux-perf-users,
	linux-kernel, Mahe Tardy

On Wed, Dec 4, 2024 at 2:08 PM Quentin Monnet <qmo@kernel.org> wrote:
>
> 2024-12-04 13:36 UTC-0800 ~ Namhyung Kim <namhyung@kernel.org>
> > Hi Leo,
> >
> > On Wed, Dec 04, 2024 at 09:30:59PM +0000, Leo Yan wrote:
> >> When building perf with static linkage:
> >>
> >>   make O=/build LDFLAGS="-static" -C tools/perf VF=1 DEBUG=1
> >>   ...
> >>   LINK    /build/util/bpf_skel/.tmp/bootstrap/bpftool
> >>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_compress':
> >>   (.text+0x113): undefined reference to `ZSTD_createCCtx'
> >>   /usr/bin/ld: (.text+0x2a9): undefined reference to `ZSTD_compressStream2'
> >>   /usr/bin/ld: (.text+0x2b4): undefined reference to `ZSTD_isError'
> >>   /usr/bin/ld: (.text+0x2db): undefined reference to `ZSTD_freeCCtx'
> >>   /usr/bin/ld: (.text+0x5a0): undefined reference to `ZSTD_compressStream2'
> >>   /usr/bin/ld: (.text+0x5ab): undefined reference to `ZSTD_isError'
> >>   /usr/bin/ld: (.text+0x6b9): undefined reference to `ZSTD_freeCCtx'
> >>   /usr/bin/ld: (.text+0x835): undefined reference to `ZSTD_freeCCtx'
> >>   /usr/bin/ld: (.text+0x86f): undefined reference to `ZSTD_freeCCtx'
> >>   /usr/bin/ld: (.text+0x91b): undefined reference to `ZSTD_freeCCtx'
> >>   /usr/bin/ld: (.text+0xa12): undefined reference to `ZSTD_freeCCtx'
> >>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_decompress':
> >>   (.text+0xbfc): undefined reference to `ZSTD_decompress'
> >>   /usr/bin/ld: (.text+0xc04): undefined reference to `ZSTD_isError'
> >>   /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/13/../../../x86_64-linux-gnu/libelf.a(elf_compress.o): in function `__libelf_decompress_elf':
> >>   (.text+0xd45): undefined reference to `ZSTD_decompress'
> >>   /usr/bin/ld: (.text+0xd4d): undefined reference to `ZSTD_isError'
> >>   collect2: error: ld returned 1 exit status
> >>
> >> Building bpftool with static linkage also fails with the same errors:
> >>
> >>   make O=/build -C tools/bpf/bpftool/ V=1
> >>
> >> To fix the issue, explicitly link libzstd.
> >
> > I was about to report exactly the same. :)
>
> Thank you both. This has been reported before [0] but I didn't find the
> time to look into a proper fix.
>
> The tricky part is that static linkage works well without libzstd for
> older versions of elfutils [1], but newer versions now require this
> library. Which means that we don't want to link against libzstd
> unconditionally, or users trying to build bpftool may have to install
> unnecessary dependencies. Instead we should add a new probe under
> tools/build/feature (Note that we already have several combinations in
> there, libbfd, libbfd-liberty, libbfd-liberty-z, and I'm not sure what's
> the best approach in terms of new combinations).
>

So what's the conclusion here? Do we apply this as a fix, or someone
needs to add more feature probing?

> Thanks,
> Quentin
>
>
> [0] https://github.com/libbpf/bpftool/issues/152
> [1] https://github.com/libbpf/bpftool/issues/152#issuecomment-2343131810

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

* Re: [PATCH] bpftool: Fix failure with static linkage
  2024-12-10 18:26     ` Andrii Nakryiko
@ 2024-12-10 20:19       ` Leo Yan
  0 siblings, 0 replies; 10+ messages in thread
From: Leo Yan @ 2024-12-10 20:19 UTC (permalink / raw)
  To: Andrii Nakryiko
  Cc: Quentin Monnet, Namhyung Kim, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Martin KaFai Lau, Eduard Zingerman, Song Liu,
	Yonghong Song, John Fastabend, KP Singh, Stanislav Fomichev,
	Hao Luo, Jiri Olsa, Nick Terrell, bpf, linux-perf-users,
	linux-kernel, Mahe Tardy

Hi Andrii,

On Tue, Dec 10, 2024 at 10:26:22AM -0800, Andrii Nakryiko wrote:

[...]

> > The tricky part is that static linkage works well without libzstd for
> > older versions of elfutils [1], but newer versions now require this
> > library. Which means that we don't want to link against libzstd
> > unconditionally, or users trying to build bpftool may have to install
> > unnecessary dependencies. Instead we should add a new probe under
> > tools/build/feature (Note that we already have several combinations in
> > there, libbfd, libbfd-liberty, libbfd-liberty-z, and I'm not sure what's
> > the best approach in terms of new combinations).
> >
> 
> So what's the conclusion here? Do we apply this as a fix, or someone
> needs to add more feature probing?

I am working on a new build feature.  Based on that, it will refine for
perf build and bpftool build.  Once get ready, I will send out for
review.

Thanks,
Leo

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

end of thread, other threads:[~2024-12-10 20:20 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-04 21:30 [PATCH] bpftool: Fix failure with static linkage Leo Yan
2024-12-04 21:36 ` Namhyung Kim
2024-12-04 22:08   ` Quentin Monnet
2024-12-04 22:25     ` Namhyung Kim
2024-12-04 22:55       ` Quentin Monnet
2024-12-05 10:23         ` Leo Yan
2024-12-05 10:58           ` Quentin Monnet
2024-12-10 18:26     ` Andrii Nakryiko
2024-12-10 20:19       ` Leo Yan
2024-12-05 19:24 ` Stanislav Fomichev

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