* [PATCH bpf-next] bpf, vmtest: Build test_progs and friends as statically linked
@ 2023-05-26 22:47 Daniel Borkmann
2023-05-31 19:02 ` Andrii Nakryiko
0 siblings, 1 reply; 6+ messages in thread
From: Daniel Borkmann @ 2023-05-26 22:47 UTC (permalink / raw)
To: andrii; +Cc: bpf, Daniel Borkmann
Small fix for vmtest.sh that I've been carrying locally for quite a while
now in order to work around the following linker issue:
# ./vmtest.sh -- ./test_progs -t lsm
[...]
+ ip link set lo up
+ [ -x /etc/rcS.d/S50-startup ]
+ /etc/rcS.d/S50-startup
./test_progs -t lsm
./test_progs: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by ./test_progs)
./test_progs: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./test_progs)
[ 1.356497] ACPI: PM: Preparing to enter system sleep state S5
[ 1.358950] reboot: Power down
[...]
With the specified TRUNNER_LDFLAGS out of vmtest to force static linking
runners like test_progs/test_maps/etc work just fine.
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
---
tools/testing/selftests/bpf/Makefile | 2 +-
tools/testing/selftests/bpf/vmtest.sh | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
index cd2426cca3d0..4005d001f46c 100644
--- a/tools/testing/selftests/bpf/Makefile
+++ b/tools/testing/selftests/bpf/Makefile
@@ -547,7 +547,7 @@ $(OUTPUT)/$(TRUNNER_BINARY): $(TRUNNER_TEST_OBJS) \
$(TRUNNER_BPFTOOL) \
| $(TRUNNER_BINARY)-extras
$$(call msg,BINARY,,$$@)
- $(Q)$$(CC) $$(CFLAGS) $$(filter %.a %.o,$$^) $$(LDLIBS) -o $$@
+ $(Q)$$(CC) $$(CFLAGS) $(TRUNNER_LDFLAGS) $$(filter %.a %.o,$$^) $$(LDLIBS) -o $$@
$(Q)$(RESOLVE_BTFIDS) --btf $(TRUNNER_OUTPUT)/btf_data.bpf.o $$@
$(Q)ln -sf $(if $2,..,.)/tools/build/bpftool/$(USE_BOOTSTRAP)bpftool \
$(OUTPUT)/$(if $2,$2/)bpftool
diff --git a/tools/testing/selftests/bpf/vmtest.sh b/tools/testing/selftests/bpf/vmtest.sh
index 685034528018..455518745cf9 100755
--- a/tools/testing/selftests/bpf/vmtest.sh
+++ b/tools/testing/selftests/bpf/vmtest.sh
@@ -160,7 +160,7 @@ update_selftests()
local selftests_dir="${kernel_checkout}/tools/testing/selftests/bpf"
cd "${selftests_dir}"
- ${make_command}
+ TRUNNER_LDFLAGS=-static ${make_command}
# Mount the image and copy the selftests to the image.
mount_image
--
2.21.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH bpf-next] bpf, vmtest: Build test_progs and friends as statically linked
2023-05-26 22:47 [PATCH bpf-next] bpf, vmtest: Build test_progs and friends as statically linked Daniel Borkmann
@ 2023-05-31 19:02 ` Andrii Nakryiko
2023-05-31 19:53 ` Daniel Borkmann
0 siblings, 1 reply; 6+ messages in thread
From: Andrii Nakryiko @ 2023-05-31 19:02 UTC (permalink / raw)
To: Daniel Borkmann; +Cc: andrii, bpf
On Fri, May 26, 2023 at 3:47 PM Daniel Borkmann <daniel@iogearbox.net> wrote:
>
> Small fix for vmtest.sh that I've been carrying locally for quite a while
> now in order to work around the following linker issue:
>
> # ./vmtest.sh -- ./test_progs -t lsm
> [...]
> + ip link set lo up
> + [ -x /etc/rcS.d/S50-startup ]
> + /etc/rcS.d/S50-startup
> ./test_progs -t lsm
> ./test_progs: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by ./test_progs)
> ./test_progs: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./test_progs)
> [ 1.356497] ACPI: PM: Preparing to enter system sleep state S5
> [ 1.358950] reboot: Power down
> [...]
>
> With the specified TRUNNER_LDFLAGS out of vmtest to force static linking
> runners like test_progs/test_maps/etc work just fine.
>
Should we make this a command line option to the vmtest.sh script
instead? I, for one, can't even successfully build on my machine with
this, probably due to missing some -static library package (though I
did install libzstd-static). I'm getting:
make: *** [Makefile:598:
/data/users/andriin/linux/tools/testing/selftests/bpf/test_maps] Error
1
make: *** Waiting for unfinished jobs....
/opt/rh/gcc-toolset-11/root/usr/bin/ld:
/lib/../lib64/libelf.a(elf_compress.o): in function
`__libelf_compress':
(.text[.text.group]+0x2c1): undefined reference to `ZSTD_createCCtx'
/opt/rh/gcc-toolset-11/root/usr/bin/ld: (.text[.text.group]+0x436):
undefined reference to `ZSTD_compressStream2'
/opt/rh/gcc-toolset-11/root/usr/bin/ld: (.text[.text.group]+0x441):
undefined reference to `ZSTD_isError'
/opt/rh/gcc-toolset-11/root/usr/bin/ld: (.text[.text.group]+0x468):
undefined reference to `ZSTD_freeCCtx'
/opt/rh/gcc-toolset-11/root/usr/bin/ld: (.text[.text.group]+0x626):
undefined reference to `ZSTD_freeCCtx'
/opt/rh/gcc-toolset-11/root/usr/bin/ld: (.text[.text.group]+0x6a1):
undefined reference to `ZSTD_freeCCtx'
/opt/rh/gcc-toolset-11/root/usr/bin/ld: (.text[.text.group]+0x6d1):
undefined reference to `ZSTD_freeCCtx'
/opt/rh/gcc-toolset-11/root/usr/bin/ld: (.text[.text.group]+0x6fd):
undefined reference to `ZSTD_freeCCtx'
/opt/rh/gcc-toolset-11/root/usr/bin/ld:
/lib/../lib64/libelf.a(elf_compress.o):(.text[.text.group]+0x771):
more undefined references to `ZSTD_freeCCtx' follow
/opt/rh/gcc-toolset-11/root/usr/bin/ld:
/lib/../lib64/libelf.a(elf_compress.o): in function
`__libelf_decompress':
(.text[.text.group]+0xa42): undefined reference to `ZSTD_decompress'
> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
> ---
> tools/testing/selftests/bpf/Makefile | 2 +-
> tools/testing/selftests/bpf/vmtest.sh | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
> index cd2426cca3d0..4005d001f46c 100644
> --- a/tools/testing/selftests/bpf/Makefile
> +++ b/tools/testing/selftests/bpf/Makefile
> @@ -547,7 +547,7 @@ $(OUTPUT)/$(TRUNNER_BINARY): $(TRUNNER_TEST_OBJS) \
> $(TRUNNER_BPFTOOL) \
> | $(TRUNNER_BINARY)-extras
> $$(call msg,BINARY,,$$@)
> - $(Q)$$(CC) $$(CFLAGS) $$(filter %.a %.o,$$^) $$(LDLIBS) -o $$@
> + $(Q)$$(CC) $$(CFLAGS) $(TRUNNER_LDFLAGS) $$(filter %.a %.o,$$^) $$(LDLIBS) -o $$@
> $(Q)$(RESOLVE_BTFIDS) --btf $(TRUNNER_OUTPUT)/btf_data.bpf.o $$@
> $(Q)ln -sf $(if $2,..,.)/tools/build/bpftool/$(USE_BOOTSTRAP)bpftool \
> $(OUTPUT)/$(if $2,$2/)bpftool
> diff --git a/tools/testing/selftests/bpf/vmtest.sh b/tools/testing/selftests/bpf/vmtest.sh
> index 685034528018..455518745cf9 100755
> --- a/tools/testing/selftests/bpf/vmtest.sh
> +++ b/tools/testing/selftests/bpf/vmtest.sh
> @@ -160,7 +160,7 @@ update_selftests()
> local selftests_dir="${kernel_checkout}/tools/testing/selftests/bpf"
>
> cd "${selftests_dir}"
> - ${make_command}
> + TRUNNER_LDFLAGS=-static ${make_command}
>
> # Mount the image and copy the selftests to the image.
> mount_image
> --
> 2.21.0
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH bpf-next] bpf, vmtest: Build test_progs and friends as statically linked
2023-05-31 19:02 ` Andrii Nakryiko
@ 2023-05-31 19:53 ` Daniel Borkmann
2023-07-11 20:15 ` Daniel Xu
0 siblings, 1 reply; 6+ messages in thread
From: Daniel Borkmann @ 2023-05-31 19:53 UTC (permalink / raw)
To: Andrii Nakryiko; +Cc: andrii, bpf
On 5/31/23 9:02 PM, Andrii Nakryiko wrote:
> On Fri, May 26, 2023 at 3:47 PM Daniel Borkmann <daniel@iogearbox.net> wrote:
>>
>> Small fix for vmtest.sh that I've been carrying locally for quite a while
>> now in order to work around the following linker issue:
>>
>> # ./vmtest.sh -- ./test_progs -t lsm
>> [...]
>> + ip link set lo up
>> + [ -x /etc/rcS.d/S50-startup ]
>> + /etc/rcS.d/S50-startup
>> ./test_progs -t lsm
>> ./test_progs: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by ./test_progs)
>> ./test_progs: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./test_progs)
>> [ 1.356497] ACPI: PM: Preparing to enter system sleep state S5
>> [ 1.358950] reboot: Power down
>> [...]
>>
>> With the specified TRUNNER_LDFLAGS out of vmtest to force static linking
>> runners like test_progs/test_maps/etc work just fine.
>
> Should we make this a command line option to the vmtest.sh script
> instead? I, for one, can't even successfully build on my machine with
> this, probably due to missing some -static library package (though I
> did install libzstd-static). I'm getting:
Interesting, in my case it's the other way round, but yeah that could work
as well.
Thanks,
Daniel
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH bpf-next] bpf, vmtest: Build test_progs and friends as statically linked
2023-05-31 19:53 ` Daniel Borkmann
@ 2023-07-11 20:15 ` Daniel Xu
2023-07-12 12:38 ` Daniel Borkmann
0 siblings, 1 reply; 6+ messages in thread
From: Daniel Xu @ 2023-07-11 20:15 UTC (permalink / raw)
To: Daniel Borkmann; +Cc: Andrii Nakryiko, andrii, bpf
Hi,
On Wed, May 31, 2023 at 09:53:57PM +0200, Daniel Borkmann wrote:
> On 5/31/23 9:02 PM, Andrii Nakryiko wrote:
> > On Fri, May 26, 2023 at 3:47 PM Daniel Borkmann <daniel@iogearbox.net> wrote:
> > >
> > > Small fix for vmtest.sh that I've been carrying locally for quite a while
> > > now in order to work around the following linker issue:
> > >
> > > # ./vmtest.sh -- ./test_progs -t lsm
> > > [...]
> > > + ip link set lo up
> > > + [ -x /etc/rcS.d/S50-startup ]
> > > + /etc/rcS.d/S50-startup
> > > ./test_progs -t lsm
> > > ./test_progs: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by ./test_progs)
> > > ./test_progs: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./test_progs)
> > > [ 1.356497] ACPI: PM: Preparing to enter system sleep state S5
> > > [ 1.358950] reboot: Power down
> > > [...]
> > >
> > > With the specified TRUNNER_LDFLAGS out of vmtest to force static linking
> > > runners like test_progs/test_maps/etc work just fine.
> >
> > Should we make this a command line option to the vmtest.sh script
> > instead? I, for one, can't even successfully build on my machine with
> > this, probably due to missing some -static library package (though I
> > did install libzstd-static). I'm getting:
>
> Interesting, in my case it's the other way round, but yeah that could work
> as well.
>
> Thanks,
> Daniel
>
I had the same zstd linker error. This hacky change fixes it:
```
diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
index 9706e7e5e698..c0d8809fd002 100644
--- a/tools/testing/selftests/bpf/Makefile
+++ b/tools/testing/selftests/bpf/Makefile
@@ -31,7 +31,7 @@ CFLAGS += -g -O0 -rdynamic -Wall -Werror $(GENFLAGS) $(SAN_CFLAGS) \
-I$(CURDIR) -I$(INCLUDE_DIR) -I$(GENDIR) -I$(LIBDIR) \
-I$(TOOLSINCDIR) -I$(APIDIR) -I$(OUTPUT)
LDFLAGS += $(SAN_LDFLAGS)
-LDLIBS += -lelf -lz -lrt -lpthread
+LDLIBS += -lelf -lz -lrt -lpthread -lzstd
# Silence some warnings when compiled with clang
ifneq ($(LLVM),)
```
Would be good to get some variant of this patch in.
Thanks,
Daniel
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH bpf-next] bpf, vmtest: Build test_progs and friends as statically linked
2023-07-11 20:15 ` Daniel Xu
@ 2023-07-12 12:38 ` Daniel Borkmann
2023-07-12 16:42 ` Daniel Xu
0 siblings, 1 reply; 6+ messages in thread
From: Daniel Borkmann @ 2023-07-12 12:38 UTC (permalink / raw)
To: Daniel Xu; +Cc: Andrii Nakryiko, andrii, bpf
On 7/11/23 10:15 PM, Daniel Xu wrote:
> On Wed, May 31, 2023 at 09:53:57PM +0200, Daniel Borkmann wrote:
>> On 5/31/23 9:02 PM, Andrii Nakryiko wrote:
>>> On Fri, May 26, 2023 at 3:47 PM Daniel Borkmann <daniel@iogearbox.net> wrote:
>>>>
>>>> Small fix for vmtest.sh that I've been carrying locally for quite a while
>>>> now in order to work around the following linker issue:
>>>>
>>>> # ./vmtest.sh -- ./test_progs -t lsm
>>>> [...]
>>>> + ip link set lo up
>>>> + [ -x /etc/rcS.d/S50-startup ]
>>>> + /etc/rcS.d/S50-startup
>>>> ./test_progs -t lsm
>>>> ./test_progs: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by ./test_progs)
>>>> ./test_progs: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./test_progs)
>>>> [ 1.356497] ACPI: PM: Preparing to enter system sleep state S5
>>>> [ 1.358950] reboot: Power down
>>>> [...]
>>>>
>>>> With the specified TRUNNER_LDFLAGS out of vmtest to force static linking
>>>> runners like test_progs/test_maps/etc work just fine.
>>>
>>> Should we make this a command line option to the vmtest.sh script
>>> instead? I, for one, can't even successfully build on my machine with
>>> this, probably due to missing some -static library package (though I
>>> did install libzstd-static). I'm getting:
>>
>> Interesting, in my case it's the other way round, but yeah that could work
>> as well.
>
> I had the same zstd linker error. This hacky change fixes it:
>
> ```
> diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
> index 9706e7e5e698..c0d8809fd002 100644
> --- a/tools/testing/selftests/bpf/Makefile
> +++ b/tools/testing/selftests/bpf/Makefile
> @@ -31,7 +31,7 @@ CFLAGS += -g -O0 -rdynamic -Wall -Werror $(GENFLAGS) $(SAN_CFLAGS) \
> -I$(CURDIR) -I$(INCLUDE_DIR) -I$(GENDIR) -I$(LIBDIR) \
> -I$(TOOLSINCDIR) -I$(APIDIR) -I$(OUTPUT)
> LDFLAGS += $(SAN_LDFLAGS)
> -LDLIBS += -lelf -lz -lrt -lpthread
> +LDLIBS += -lelf -lz -lrt -lpthread -lzstd
>
> # Silence some warnings when compiled with clang
> ifneq ($(LLVM),)
> ```
>
> Would be good to get some variant of this patch in.
The above doesn't work for my env, getting same error with adding the -lzstd.
Btw, did the patch from above work for you?
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH bpf-next] bpf, vmtest: Build test_progs and friends as statically linked
2023-07-12 12:38 ` Daniel Borkmann
@ 2023-07-12 16:42 ` Daniel Xu
0 siblings, 0 replies; 6+ messages in thread
From: Daniel Xu @ 2023-07-12 16:42 UTC (permalink / raw)
To: Daniel Borkmann; +Cc: Andrii Nakryiko, andrii, bpf
Hi Daniel,
On Wed, Jul 12, 2023 at 02:38:50PM +0200, Daniel Borkmann wrote:
> On 7/11/23 10:15 PM, Daniel Xu wrote:
> > On Wed, May 31, 2023 at 09:53:57PM +0200, Daniel Borkmann wrote:
> > > On 5/31/23 9:02 PM, Andrii Nakryiko wrote:
> > > > On Fri, May 26, 2023 at 3:47 PM Daniel Borkmann <daniel@iogearbox.net> wrote:
> > > > >
> > > > > Small fix for vmtest.sh that I've been carrying locally for quite a while
> > > > > now in order to work around the following linker issue:
> > > > >
> > > > > # ./vmtest.sh -- ./test_progs -t lsm
> > > > > [...]
> > > > > + ip link set lo up
> > > > > + [ -x /etc/rcS.d/S50-startup ]
> > > > > + /etc/rcS.d/S50-startup
> > > > > ./test_progs -t lsm
> > > > > ./test_progs: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by ./test_progs)
> > > > > ./test_progs: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./test_progs)
> > > > > [ 1.356497] ACPI: PM: Preparing to enter system sleep state S5
> > > > > [ 1.358950] reboot: Power down
> > > > > [...]
> > > > >
> > > > > With the specified TRUNNER_LDFLAGS out of vmtest to force static linking
> > > > > runners like test_progs/test_maps/etc work just fine.
> > > >
> > > > Should we make this a command line option to the vmtest.sh script
> > > > instead? I, for one, can't even successfully build on my machine with
> > > > this, probably due to missing some -static library package (though I
> > > > did install libzstd-static). I'm getting:
> > >
> > > Interesting, in my case it's the other way round, but yeah that could work
> > > as well.
> >
> > I had the same zstd linker error. This hacky change fixes it:
> >
> > ```
> > diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
> > index 9706e7e5e698..c0d8809fd002 100644
> > --- a/tools/testing/selftests/bpf/Makefile
> > +++ b/tools/testing/selftests/bpf/Makefile
> > @@ -31,7 +31,7 @@ CFLAGS += -g -O0 -rdynamic -Wall -Werror $(GENFLAGS) $(SAN_CFLAGS) \
> > -I$(CURDIR) -I$(INCLUDE_DIR) -I$(GENDIR) -I$(LIBDIR) \
> > -I$(TOOLSINCDIR) -I$(APIDIR) -I$(OUTPUT)
> > LDFLAGS += $(SAN_LDFLAGS)
> > -LDLIBS += -lelf -lz -lrt -lpthread
> > +LDLIBS += -lelf -lz -lrt -lpthread -lzstd
> >
> > # Silence some warnings when compiled with clang
> > ifneq ($(LLVM),)
> > ```
> >
> > Would be good to get some variant of this patch in.
>
> The above doesn't work for my env, getting same error with adding the -lzstd.
> Btw, did the patch from above work for you?
Your original patch did not work for me (libelf missing zstd symbols).
But with the patch I sent applied, it builds correctly.
What is the error you're getting with `-lzstd`? My guess is that your
distro's libelf.a has zstd symbols statically linked in already. Perhaps
check what pkg-config says about your libelf? Mine is:
```
$ pkg-config --static --libs libelf
-lelf -lz -lzstd
```
Also, perhaps the build should be using pkg-config instead of hardcoding
deps in LDLIBS. That might make the static build more reliable across
different systems.
Thanks,
Daniel
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-07-12 16:42 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-26 22:47 [PATCH bpf-next] bpf, vmtest: Build test_progs and friends as statically linked Daniel Borkmann
2023-05-31 19:02 ` Andrii Nakryiko
2023-05-31 19:53 ` Daniel Borkmann
2023-07-11 20:15 ` Daniel Xu
2023-07-12 12:38 ` Daniel Borkmann
2023-07-12 16:42 ` Daniel Xu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).