On Tue, Aug 22, 2023 at 1:52 PM Benjamin Tissoires benjamin.tissoires@redhat.com wrote:
Justin,
On Tue, Aug 22, 2023 at 10:44 PM Nick Desaulniers ndesaulniers@google.com wrote:
- Ben, author of commit dbb60c8a26da ("selftests: add tests for the
HID-bpf initial implementation")
On Tue, Aug 22, 2023 at 1:34 PM Justin Stitt justinstitt@google.com wrote:
Hi, I'd like to get some help with building the kselftest target.
I am running into some warnings within the hid tree: | progs/hid_bpf_helpers.h:9:38: error: declaration of 'struct hid_bpf_ctx' will \ | not be visible outside of this function [-Werror,-Wvisibility] | 9 | extern __u8 *hid_bpf_get_data(struct hid_bpf_ctx *ctx, | | ^ | progs/hid.c:23:35: error: incompatible pointer types passing 'struct hid_bpf_ctx *' \ | to parameter of type 'struct hid_bpf_ctx *' [-Werror,-Wincompatible-pointer-types] | 23 | __u8 *rw_data = hid_bpf_get_data(hid_ctx, 0 /* offset */, 3 /* size */);
This warning, amongst others, is due to some symbol not being included. In this case, `struct hid_bpf_ctx` is not being defined anywhere that I can see inside of the testing tree itself.
Instead, `struct hid_bpf_ctx` is defined and implemented at `include/linux/hid_bpf.h`. AFAIK, I cannot just include this header as the tools directory is a separate entity from kbuild and these tests are meant to be built/ran without relying on kernel headers. Am I correct in this assumption? At any rate, the include itself doesn't work. How can I properly include this struct definition and fix the warning(s)?
Please note that we cannot just forward declare the struct as it is being dereferenced and would then yield a completely different error/warning for an incomplete type. We need the entire implementation for the struct included.
Other symbols also defined in `include/linux/hid_bpf.h` that we need are `struct hid_report_type` and `HID_BPF_FLAG...`
Here's the invocation I am running to build kselftest: `$ make LLVM=1 ARCH=x86_64 mrproper headers && make LLVM=1 ARCH=x86_64 -j128 V=1 -C tools/testing/selftests`
I think I fixed the same issue in the script I am running to launch those tests in a VM. This was in commit f9abdcc617dad5f14bbc2ebe96ee99f3e6de0c4e (in the v6.5-rc+ series).
And in the commit log, I wrote:
According to commit 01d6c48a828b ("Documentation: kselftest: "make headers" is a prerequisite"), running the kselftests requires to run "make headers" first.
So my assumption is that you also need to run "make headers" with the proper flags before compiling the selftests themselves (I might be wrong but that's how I read the commit).
In my original email I pasted the invocation I used which includes the headers target. What are the "proper flags" in this case?
Cheers, Benjamin
If anyone is currently getting clean builds of kselftest with clang, what invocation works for you?
Link: https://github.com/ClangBuiltLinux/linux/issues/1698 Full-build-log: https://gist.github.com/JustinStitt/b217f6e47c1d762e5e1cc6c3532f1bbb (V=1)
Thanks. Justin
-- Thanks, ~Nick Desaulniers