Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: vm: pkeys: fix multilib builds for x86

This ensures that both 32-bit and 64-bit binaries are generated when this
is built on a x86_64 system. Most of the changes have been borrowed from
tools/testing/selftests/x86/Makefile.

Signed-off-by: Sandipan Das <sandipan@linux.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Tested-by: Dave Hansen <dave.hansen@intel.com>
Acked-by: Dave Hansen <dave.hansen@intel.com>
Cc: "Desnes A. Nunes do Rosario" <desnesn@linux.vnet.ibm.com>
Cc: Florian Weimer <fweimer@redhat.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Ram Pai <linuxram@us.ibm.com>
Cc: Thiago Jung Bauermann <bauerman@linux.ibm.com>
Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Michal Hocko <mhocko@kernel.org>
Cc: Michal Suchanek <msuchanek@suse.de>
Cc: Shuah Khan <shuah@kernel.org>
Link: http://lkml.kernel.org/r/0326a442214d7a1b970d38296e63df3b217f5912.1585646528.git.sandipan@linux.ibm.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Sandipan Das and committed by
Linus Torvalds
f21fda8f 473c3cc8

+73 -1
+73 -1
tools/testing/selftests/vm/Makefile
··· 15 15 TEST_GEN_FILES += map_populate 16 16 TEST_GEN_FILES += mlock-random-test 17 17 TEST_GEN_FILES += mlock2-tests 18 - TEST_GEN_FILES += protection_keys 19 18 TEST_GEN_FILES += mremap_dontunmap 20 19 TEST_GEN_FILES += on-fault-limit 21 20 TEST_GEN_FILES += thuge-gen 22 21 TEST_GEN_FILES += transhuge-stress 23 22 TEST_GEN_FILES += userfaultfd 24 23 TEST_GEN_FILES += khugepaged 24 + 25 + ifeq ($(ARCH),x86_64) 26 + CAN_BUILD_I386 := $(shell ./../x86/check_cc.sh $(CC) ../x86/trivial_32bit_program.c -m32) 27 + CAN_BUILD_X86_64 := $(shell ./../x86/check_cc.sh $(CC) ../x86/trivial_64bit_program.c) 28 + CAN_BUILD_WITH_NOPIE := $(shell ./../x86/check_cc.sh $(CC) ../x86/trivial_program.c -no-pie) 29 + 30 + TARGETS := protection_keys 31 + BINARIES_32 := $(TARGETS:%=%_32) 32 + BINARIES_64 := $(TARGETS:%=%_64) 33 + 34 + ifeq ($(CAN_BUILD_WITH_NOPIE),1) 35 + CFLAGS += -no-pie 36 + endif 37 + 38 + ifeq ($(CAN_BUILD_I386),1) 39 + TEST_GEN_FILES += $(BINARIES_32) 40 + endif 41 + 42 + ifeq ($(CAN_BUILD_X86_64),1) 43 + TEST_GEN_FILES += $(BINARIES_64) 44 + endif 45 + else 46 + TEST_GEN_FILES += protection_keys 47 + endif 25 48 26 49 ifneq (,$(filter $(MACHINE),arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64 sparc64 x86_64)) 27 50 TEST_GEN_FILES += va_128TBswitch ··· 60 37 include ../lib.mk 61 38 62 39 $(OUTPUT)/hmm-tests: LDLIBS += -lhugetlbfs -lpthread 40 + 41 + ifeq ($(ARCH),x86_64) 42 + BINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32)) 43 + BINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64)) 44 + 45 + define gen-target-rule-32 46 + $(1) $(1)_32: $(OUTPUT)/$(1)_32 47 + .PHONY: $(1) $(1)_32 48 + endef 49 + 50 + define gen-target-rule-64 51 + $(1) $(1)_64: $(OUTPUT)/$(1)_64 52 + .PHONY: $(1) $(1)_64 53 + endef 54 + 55 + ifeq ($(CAN_BUILD_I386),1) 56 + $(BINARIES_32): CFLAGS += -m32 57 + $(BINARIES_32): LDLIBS += -lrt -ldl -lm 58 + $(BINARIES_32): %_32: %.c 59 + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@ 60 + $(foreach t,$(TARGETS),$(eval $(call gen-target-rule-32,$(t)))) 61 + endif 62 + 63 + ifeq ($(CAN_BUILD_X86_64),1) 64 + $(BINARIES_64): CFLAGS += -m64 65 + $(BINARIES_64): LDLIBS += -lrt -ldl 66 + $(BINARIES_64): %_64: %.c 67 + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@ 68 + $(foreach t,$(TARGETS),$(eval $(call gen-target-rule-64,$(t)))) 69 + endif 70 + 71 + # x86_64 users should be encouraged to install 32-bit libraries 72 + ifeq ($(CAN_BUILD_I386)$(CAN_BUILD_X86_64),01) 73 + all: warn_32bit_failure 74 + 75 + warn_32bit_failure: 76 + @echo "Warning: you seem to have a broken 32-bit build" 2>&1; \ 77 + echo "environment. This will reduce test coverage of 64-bit" 2>&1; \ 78 + echo "kernels. If you are using a Debian-like distribution," 2>&1; \ 79 + echo "try:"; 2>&1; \ 80 + echo ""; \ 81 + echo " apt-get install gcc-multilib libc6-i386 libc6-dev-i386"; \ 82 + echo ""; \ 83 + echo "If you are using a Fedora-like distribution, try:"; \ 84 + echo ""; \ 85 + echo " yum install glibc-devel.*i686"; \ 86 + exit 0; 87 + endif 88 + endif 63 89 64 90 $(OUTPUT)/userfaultfd: LDLIBS += -lpthread 65 91