Skip to content

Commit f21fda8

Browse files
sandip4ntorvalds
authored andcommitted
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 <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Tested-by: Dave Hansen <[email protected]> Acked-by: Dave Hansen <[email protected]> Cc: "Desnes A. Nunes do Rosario" <[email protected]> Cc: Florian Weimer <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Ram Pai <[email protected]> Cc: Thiago Jung Bauermann <[email protected]> Cc: "Aneesh Kumar K.V" <[email protected]> Cc: Michael Ellerman <[email protected]> Cc: Michal Hocko <[email protected]> Cc: Michal Suchanek <[email protected]> Cc: Shuah Khan <[email protected]> Link: http://lkml.kernel.org/r/0326a442214d7a1b970d38296e63df3b217f5912.1585646528.git.sandipan@linux.ibm.com Signed-off-by: Linus Torvalds <[email protected]>
1 parent 473c3cc commit f21fda8

File tree

1 file changed

+73
-1
lines changed

1 file changed

+73
-1
lines changed

tools/testing/selftests/vm/Makefile

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,37 @@ TEST_GEN_FILES += map_fixed_noreplace
1515
TEST_GEN_FILES += map_populate
1616
TEST_GEN_FILES += mlock-random-test
1717
TEST_GEN_FILES += mlock2-tests
18-
TEST_GEN_FILES += protection_keys
1918
TEST_GEN_FILES += mremap_dontunmap
2019
TEST_GEN_FILES += on-fault-limit
2120
TEST_GEN_FILES += thuge-gen
2221
TEST_GEN_FILES += transhuge-stress
2322
TEST_GEN_FILES += userfaultfd
2423
TEST_GEN_FILES += khugepaged
2524

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
48+
2649
ifneq (,$(filter $(MACHINE),arm64 ia64 mips64 parisc64 ppc64 ppc64le riscv64 s390x sh64 sparc64 x86_64))
2750
TEST_GEN_FILES += va_128TBswitch
2851
TEST_GEN_FILES += virtual_address_range
@@ -38,6 +61,55 @@ include ../lib.mk
3861

3962
$(OUTPUT)/hmm-tests: LDLIBS += -lhugetlbfs -lpthread
4063

64+
ifeq ($(ARCH),x86_64)
65+
BINARIES_32 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_32))
66+
BINARIES_64 := $(patsubst %,$(OUTPUT)/%,$(BINARIES_64))
67+
68+
define gen-target-rule-32
69+
$(1) $(1)_32: $(OUTPUT)/$(1)_32
70+
.PHONY: $(1) $(1)_32
71+
endef
72+
73+
define gen-target-rule-64
74+
$(1) $(1)_64: $(OUTPUT)/$(1)_64
75+
.PHONY: $(1) $(1)_64
76+
endef
77+
78+
ifeq ($(CAN_BUILD_I386),1)
79+
$(BINARIES_32): CFLAGS += -m32
80+
$(BINARIES_32): LDLIBS += -lrt -ldl -lm
81+
$(BINARIES_32): %_32: %.c
82+
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
83+
$(foreach t,$(TARGETS),$(eval $(call gen-target-rule-32,$(t))))
84+
endif
85+
86+
ifeq ($(CAN_BUILD_X86_64),1)
87+
$(BINARIES_64): CFLAGS += -m64
88+
$(BINARIES_64): LDLIBS += -lrt -ldl
89+
$(BINARIES_64): %_64: %.c
90+
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(notdir $^) $(LDLIBS) -o $@
91+
$(foreach t,$(TARGETS),$(eval $(call gen-target-rule-64,$(t))))
92+
endif
93+
94+
# x86_64 users should be encouraged to install 32-bit libraries
95+
ifeq ($(CAN_BUILD_I386)$(CAN_BUILD_X86_64),01)
96+
all: warn_32bit_failure
97+
98+
warn_32bit_failure:
99+
@echo "Warning: you seem to have a broken 32-bit build" 2>&1; \
100+
echo "environment. This will reduce test coverage of 64-bit" 2>&1; \
101+
echo "kernels. If you are using a Debian-like distribution," 2>&1; \
102+
echo "try:"; 2>&1; \
103+
echo ""; \
104+
echo " apt-get install gcc-multilib libc6-i386 libc6-dev-i386"; \
105+
echo ""; \
106+
echo "If you are using a Fedora-like distribution, try:"; \
107+
echo ""; \
108+
echo " yum install glibc-devel.*i686"; \
109+
exit 0;
110+
endif
111+
endif
112+
41113
$(OUTPUT)/userfaultfd: LDLIBS += -lpthread
42114

43115
$(OUTPUT)/mlock-random-test: LDLIBS += -lcap

0 commit comments

Comments
 (0)