On 2023-01-16 14:40, kernel test robot wrote:
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core head: 79ba1e607d68178db7d3fe4f6a4aa38f06805e7b commit: 03f5c0272d1b59343144e199becc911dae52c37e [7/28] selftests/rseq: Use ELF auxiliary vector for extensible rseq compiler: gcc-11 (Debian 11.3.0-8) 11.3.0 reproduce: # https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=03f5c... git remote add tip https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git git fetch --no-tags tip sched/core git checkout 03f5c0272d1b59343144e199becc911dae52c37e make O=/tmp/kselftest headers make O=/tmp/kselftest -C tools/testing/selftests
If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot lkp@intel.com
In order to fix this, I need to change -I../../../../usr/include/ for $(KHDR_INCLUDES) in tools/testing/selftests/rseq/Makefile
I can find 25 odd uses of the same pattern in the kernel selftests. Should I fix them all in one go ?
grep -r "../../../../usr/include/" tools/testing/selftests/ | wc -l 25
AFAIU it typically works just because the build system happens to have recent enough kernel headers installed in the root environment.
Thanks,
Mathieu
All errors (new ones prefixed by >>):
rseq.c: In function 'get_rseq_feature_size':
rseq.c:139:37: error: 'AT_RSEQ_ALIGN' undeclared (first use in this function); did you mean 'R_SH_ALIGN'?
139 | auxv_rseq_align = getauxval(AT_RSEQ_ALIGN); | ^~~~~~~~~~~~~ | R_SH_ALIGN rseq.c:139:37: note: each undeclared identifier is reported only once for each function it appears in
rseq.c:142:44: error: 'AT_RSEQ_FEATURE_SIZE' undeclared (first use in this function); did you mean 'ORIG_RSEQ_FEATURE_SIZE'?
142 | auxv_rseq_feature_size = getauxval(AT_RSEQ_FEATURE_SIZE); | ^~~~~~~~~~~~~~~~~~~~ | ORIG_RSEQ_FEATURE_SIZE
On 1/16/23 13:18, Mathieu Desnoyers wrote:
On 2023-01-16 14:40, kernel test robot wrote:
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core head: 79ba1e607d68178db7d3fe4f6a4aa38f06805e7b commit: 03f5c0272d1b59343144e199becc911dae52c37e [7/28] selftests/rseq: Use ELF auxiliary vector for extensible rseq compiler: gcc-11 (Debian 11.3.0-8) 11.3.0 reproduce: # https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=03f5c... git remote add tip https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git git fetch --no-tags tip sched/core git checkout 03f5c0272d1b59343144e199becc911dae52c37e make O=/tmp/kselftest headers make O=/tmp/kselftest -C tools/testing/selftests
If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot lkp@intel.com
In order to fix this, I need to change -I../../../../usr/include/ for $(KHDR_INCLUDES) in tools/testing/selftests/rseq/Makefile
I can find 25 odd uses of the same pattern in the kernel selftests. Should I fix them all in one go ?
kselftest build depends on headers installed in the root directory. The main makefile enforces this dependency. If this test is being built without installing headers by itself, I think the scripts that build individual tests have to makes sure headers are installed first.
thanks, -- Shuah
* Shuah Khan skhan@linuxfoundation.org wrote:
On 1/16/23 13:18, Mathieu Desnoyers wrote:
On 2023-01-16 14:40, kernel test robot wrote:
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core head: 79ba1e607d68178db7d3fe4f6a4aa38f06805e7b commit: 03f5c0272d1b59343144e199becc911dae52c37e [7/28] selftests/rseq: Use ELF auxiliary vector for extensible rseq compiler: gcc-11 (Debian 11.3.0-8) 11.3.0 reproduce: # https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=03f5c... git remote add tip https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git git fetch --no-tags tip sched/core git checkout 03f5c0272d1b59343144e199becc911dae52c37e make O=/tmp/kselftest headers make O=/tmp/kselftest -C tools/testing/selftests
If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot lkp@intel.com
In order to fix this, I need to change -I../../../../usr/include/ for $(KHDR_INCLUDES) in tools/testing/selftests/rseq/Makefile
I can find 25 odd uses of the same pattern in the kernel selftests. Should I fix them all in one go ?
kselftest build depends on headers installed in the root directory. The main makefile enforces this dependency. If this test is being built without installing headers by itself, I think the scripts that build individual tests have to makes sure headers are installed first.
Why isn't the Makefile saying anything about it & enforcing it? self-tests are usually self-sufficient to build in the individual directories.
Thanks,
Ingo
On 2023-01-17 04:06, Ingo Molnar wrote:
- Shuah Khan skhan@linuxfoundation.org wrote:
On 1/16/23 13:18, Mathieu Desnoyers wrote:
On 2023-01-16 14:40, kernel test robot wrote:
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core head: 79ba1e607d68178db7d3fe4f6a4aa38f06805e7b commit: 03f5c0272d1b59343144e199becc911dae52c37e [7/28] selftests/rseq: Use ELF auxiliary vector for extensible rseq compiler: gcc-11 (Debian 11.3.0-8) 11.3.0 reproduce: # https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=03f5c... git remote add tip https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git git fetch --no-tags tip sched/core git checkout 03f5c0272d1b59343144e199becc911dae52c37e make O=/tmp/kselftest headers make O=/tmp/kselftest -C tools/testing/selftests
If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot lkp@intel.com
In order to fix this, I need to change -I../../../../usr/include/ for $(KHDR_INCLUDES) in tools/testing/selftests/rseq/Makefile
I can find 25 odd uses of the same pattern in the kernel selftests. Should I fix them all in one go ?
kselftest build depends on headers installed in the root directory.
By "root directory", do you mean kernel sources root directory or build output root directory ?
The main makefile enforces this dependency.
How ? I figure that tools/testing/selftests/lib.mk overrides KHDR_INCLUDES if it is not defined yet:
ifeq ($(KHDR_INCLUDES),) KHDR_INCLUDES := -isystem $(top_srcdir)/usr/include endif
and selftests makefiles include ../lib.mk.
This KHDR_INCLUDES can be modified by O=... when built from the kernel top level, thus using tools/testing/selftests/Makefile:
ifneq ($(KBUILD_OUTPUT),) [...] KHDR_INCLUDES := -isystem ${abs_objtree}/usr/include else [...] KHDR_INCLUDES := -isystem ${abs_srctree}/usr/include endif
But it's up to the individual selftests to actually use $(KHDR_INCLUDES). In many cases, they hardcode -I../../../../usr/include/ which is bogus when the build root (O=...) differs from the source root.
If this test is being
built without installing headers by itself, I think the scripts that build individual tests have to makes sure headers are installed first.
The headers were previously built by "make O=/tmp/kselftest headers", as it should, it's just that the selftest makefile uses a hardcoded path that is relative to the source directory, and it appears that this pattern is repeated all across the selftests.
Why isn't the Makefile saying anything about it & enforcing it? self-tests are usually self-sufficient to build in the individual directories.
In an ideal world, we'd have a way to _remove_ the build environment kernel headers from the include search paths, because this is a problem for reproducibility of the tests.
Thanks,
Mathieu
Thanks,
Ingo
On 1/17/23 10:44, Mathieu Desnoyers wrote:
On 2023-01-17 04:06, Ingo Molnar wrote:
- Shuah Khan skhan@linuxfoundation.org wrote:
On 1/16/23 13:18, Mathieu Desnoyers wrote:
On 2023-01-16 14:40, kernel test robot wrote:
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core head: 79ba1e607d68178db7d3fe4f6a4aa38f06805e7b commit: 03f5c0272d1b59343144e199becc911dae52c37e [7/28] selftests/rseq: Use ELF auxiliary vector for extensible rseq compiler: gcc-11 (Debian 11.3.0-8) 11.3.0 reproduce: # https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=03f5c... git remote add tip https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git git fetch --no-tags tip sched/core git checkout 03f5c0272d1b59343144e199becc911dae52c37e make O=/tmp/kselftest headers make O=/tmp/kselftest -C tools/testing/selftests
If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot lkp@intel.com
In order to fix this, I need to change -I../../../../usr/include/ for $(KHDR_INCLUDES) in tools/testing/selftests/rseq/Makefile
I can find 25 odd uses of the same pattern in the kernel selftests. Should I fix them all in one go ?
kselftest build depends on headers installed in the root directory.
By "root directory", do you mean kernel sources root directory or build output root directory ?
The main makefile enforces this dependency.
How ? I figure that tools/testing/selftests/lib.mk overrides KHDR_INCLUDES if it is not defined yet:
ifeq ($(KHDR_INCLUDES),) KHDR_INCLUDES := -isystem $(top_srcdir)/usr/include endif
and selftests makefiles include ../lib.mk.
This KHDR_INCLUDES can be modified by O=... when built from the kernel top level, thus using tools/testing/selftests/Makefile:
ifneq ($(KBUILD_OUTPUT),) [...] KHDR_INCLUDES := -isystem ${abs_objtree}/usr/include else [...] KHDR_INCLUDES := -isystem ${abs_srctree}/usr/include endif
But it's up to the individual selftests to actually use $(KHDR_INCLUDES). In many cases, they hardcode -I../../../../usr/include/ which is bogus when the build root (O=...) differs from the source root.
If this test is being
built without installing headers by itself, I think the scripts that build individual tests have to makes sure headers are installed first.
The headers were previously built by "make O=/tmp/kselftest headers", as it should, it's just that the selftest makefile uses a hardcoded path that is relative to the source directory, and it appears that this pattern is repeated all across the selftests.
selftests Makefile used to install headers and there has been a recent change to have mani Makefile (root) to install it. As a result individual test builds (running make in the test directory) requires header install now.
I think the hard-coded includes are a problem and we have to fix them for all cases i.e make O=, individual test builds.
If you are still up for it, please send patch.
thanks, -- Shuah
On 2023-01-17 14:11, Shuah Khan wrote:
On 1/17/23 10:44, Mathieu Desnoyers wrote:
On 2023-01-17 04:06, Ingo Molnar wrote:
- Shuah Khan skhan@linuxfoundation.org wrote:
On 1/16/23 13:18, Mathieu Desnoyers wrote:
On 2023-01-16 14:40, kernel test robot wrote:
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core head: 79ba1e607d68178db7d3fe4f6a4aa38f06805e7b commit: 03f5c0272d1b59343144e199becc911dae52c37e [7/28] selftests/rseq: Use ELF auxiliary vector for extensible rseq compiler: gcc-11 (Debian 11.3.0-8) 11.3.0 reproduce: # https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=03f5c... git remote add tip https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git git fetch --no-tags tip sched/core git checkout 03f5c0272d1b59343144e199becc911dae52c37e make O=/tmp/kselftest headers make O=/tmp/kselftest -C tools/testing/selftests
If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot lkp@intel.com
In order to fix this, I need to change -I../../../../usr/include/ for $(KHDR_INCLUDES) in tools/testing/selftests/rseq/Makefile
I can find 25 odd uses of the same pattern in the kernel selftests. Should I fix them all in one go ?
kselftest build depends on headers installed in the root directory.
By "root directory", do you mean kernel sources root directory or build output root directory ?
The main makefile enforces this dependency.
How ? I figure that tools/testing/selftests/lib.mk overrides KHDR_INCLUDES if it is not defined yet:
ifeq ($(KHDR_INCLUDES),) KHDR_INCLUDES := -isystem $(top_srcdir)/usr/include endif
and selftests makefiles include ../lib.mk.
This KHDR_INCLUDES can be modified by O=... when built from the kernel top level, thus using tools/testing/selftests/Makefile:
ifneq ($(KBUILD_OUTPUT),) [...] KHDR_INCLUDES := -isystem ${abs_objtree}/usr/include else [...] KHDR_INCLUDES := -isystem ${abs_srctree}/usr/include endif
But it's up to the individual selftests to actually use $(KHDR_INCLUDES). In many cases, they hardcode -I../../../../usr/include/ which is bogus when the build root (O=...) differs from the source root.
If this test is being
built without installing headers by itself, I think the scripts that build individual tests have to makes sure headers are installed first.
The headers were previously built by "make O=/tmp/kselftest headers", as it should, it's just that the selftest makefile uses a hardcoded path that is relative to the source directory, and it appears that this pattern is repeated all across the selftests.
selftests Makefile used to install headers and there has been a recent change to have mani Makefile (root) to install it. As a result individual test builds (running make in the test directory) requires header install now.
I think the hard-coded includes are a problem and we have to fix them for all cases i.e make O=, individual test builds.
If you are still up for it, please send patch.
Sure.
Now that I dig a bit more, we could try using "-nostdinc" to tell the compiler not to search the standard system directories, but I've noticed that a few selftests depend on userspace library header files found in the build environment.
I'm not sure how we should approach this.
Thoughts ?
Thanks,
Mathieu
thanks, -- Shuah
linux-kselftest-mirror@lists.linaro.org