Re: [PATCH v2 06/10] selftests/bpf: Allow test_progs to link with a partial object set
From: bot+bpf-ci
Date: Fri Apr 03 2026 - 11:39:48 EST
> diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile
> index 6a3835a58f87..ca64a7678dfe 100644
> --- a/tools/testing/selftests/bpf/Makefile
> +++ b/tools/testing/selftests/bpf/Makefile
[ ... ]
> -$(OUTPUT)/$(TRUNNER_BINARY): $(TRUNNER_TEST_OBJS) \
> - $(TRUNNER_EXTRA_OBJS) $$(BPFOBJ) \
> +$(OUTPUT)/$(TRUNNER_BINARY): $(TRUNNER_EXTRA_OBJS) $$(BPFOBJ) \
> $(TRUNNER_LIB_OBJS) \
> $(TRUNNER_BPFTOOL) \
> $(OUTPUT)/veristat \
> - | $(TRUNNER_BINARY)-extras
> + | $(TRUNNER_BINARY)-extras \
> + $(TRUNNER_TEST_OBJS)
> $$(call msg,BINARY,,$$@)
> - $(Q)$$(CC) $$(CFLAGS) $$(filter %.a %.o,$$^) $$(LDLIBS) $$(LLVM_LDLIBS) $$(LDFLAGS) $$(LLVM_LDFLAGS) -o $$@
> + $(Q)$$(CC) $$(CFLAGS) $$(filter %.a %.o,$$^ $$(wildcard $(TRUNNER_TEST_OBJS))) $$(LDLIBS) $$(LLVM_LDLIBS) $$(LDFLAGS) $$(LLVM_LDFLAGS) -o $$@
Does this change the link order in a way that breaks GNU ld builds?
Before this patch, $^ expanded to:
TRUNNER_TEST_OBJS TRUNNER_EXTRA_OBJS BPFOBJ TRUNNER_LIB_OBJS ...
After the filter, the linker saw:
test*.test.o extra*.o libbpf.a lib*.o
After this patch, the filter over "$^ $(wildcard TEST_OBJS)" produces:
extra*.o libbpf.a lib*.o test*.test.o
BPFOBJ is libbpf/libbpf.a (a static archive). GNU ld scans archives
once, left to right, pulling in only the members that resolve symbols
unresolved at that point. With the new ordering, libbpf.a is scanned
before any test object is seen, so libbpf symbols referenced
exclusively by test objects will remain unresolved.
For example, ring_buffer__new() (in libbpf's ringbuf.c) is called by
prog_tests/ringbuf.c, prog_tests/test_ima.c, and others, but is not
referenced by any TRUNNER_EXTRA_SOURCES file. With this link order,
the ringbuf.o archive member is never pulled in and the link fails
with unresolved symbols.
There is no --start-group or --whole-archive in the link flags, and
LDLIBS (-lelf -lz -lrt -lpthread) does not provide libbpf symbols.
One possible fix would be to append $$(BPFOBJ) after the wildcard
expansion in the filter expression, or to place the test objects
before libbpf.a in the argument list.
---
AI reviewed your patch. Please fix the bug or email reply why it's not a bug.
See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md
CI run summary: https://github.com/kernel-patches/bpf/actions/runs/23951016185