The prctl Makefile builds nothing when CROSS_COMPILE is set, even when
the target is x86, and it lists its compiled programs in TEST_PROGS,
which lib.mk treats as source-tree scripts. The binaries are therefore
built into the source directory rather than OUTPUT. The architecture
check also restricts set-anon-vma-name-test and set-process-name to x86
although neither depends on the architecture.

Build the programs as TEST_GEN_PROGS, build the two generic tests on
every architecture, and keep only the TSC tests x86 specific. Select
them from the target ARCH when it is given and from the host's SUBARCH
otherwise, using a private ARCH_PROCESSED instead of overriding ARCH.
The override added by commit 5a1292137e89 ("selftests: fix ARCH
normalization to handle command-line argument") changed the value that
lib.mk uses to choose the clang target: leaving ARCH unset again lets
lib.mk use the compiler's native triple. A command-line ARCH such as
x86_64 is still normalized for the TSC test selection, while an ARCH
spelling that lib.mk does not know, such as i686 with LLVM=1, is
rejected in the same way as for the other selftests.

Fixes: f59514b6a8c5 ("Documentation/prctl: don't build tsc tests when cross 
compiling")
Fixes: 5290586186d2 ("selftests: prctl: Add new prctl test for PR_SET_VMA 
action")
Fixes: e0606daeaab4 ("selftests: prctl: Add new prctl test for PR_SET_NAME")
Signed-off-by: Sasha Levin <[email protected]>
---
 tools/testing/selftests/prctl/Makefile | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/tools/testing/selftests/prctl/Makefile 
b/tools/testing/selftests/prctl/Makefile
index e770e86fad9ac..123f884e9dfa5 100644
--- a/tools/testing/selftests/prctl/Makefile
+++ b/tools/testing/selftests/prctl/Makefile
@@ -1,14 +1,12 @@
 # SPDX-License-Identifier: GPL-2.0
-ifndef CROSS_COMPILE
-ARCH ?= $(shell uname -m 2>/dev/null || echo not)
-override ARCH := $(shell echo $(ARCH) | sed -e s/i.86/x86/ -e s/x86_64/x86/)
+top_srcdir = ../../../..
+include $(top_srcdir)/scripts/subarch.include
+ARCH_PROCESSED := $(shell echo $(or $(ARCH),$(SUBARCH)) | sed -e s/i.86/x86/ 
-e s/x86_64/x86/)
 
-ifeq ($(ARCH),x86)
-TEST_PROGS := disable-tsc-ctxt-sw-stress-test disable-tsc-on-off-stress-test \
-               disable-tsc-test set-anon-vma-name-test set-process-name
-all: $(TEST_PROGS)
+TEST_GEN_PROGS := set-anon-vma-name-test set-process-name
+ifeq ($(ARCH_PROCESSED),x86)
+TEST_GEN_PROGS += disable-tsc-ctxt-sw-stress-test 
disable-tsc-on-off-stress-test \
+               disable-tsc-test
+endif
 
 include ../lib.mk
-
-endif
-endif
-- 
2.53.0


Reply via email to