Re: [PATCH v3] selftests: Fix seccomp to support relocatable build (O=objdir)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Michael and Kees,

On 3/18/20 9:15 PM, Michael Ellerman wrote:
Kees Cook <keescook@xxxxxxxxxxxx> writes:
On Mon, Mar 16, 2020 at 11:12:57PM +1100, Michael Ellerman wrote:
Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx> writes:
Fix seccomp relocatable builds. This is a simple fix to use the right
lib.mk variable TEST_GEN_PROGS with dependency on kselftest_harness.h
header, and defining LDFLAGS for pthread lib.

Removes custom clean rule which is no longer necessary with the use of
TEST_GEN_PROGS.

Uses $(OUTPUT) defined in lib.mk to handle build relocation.

The following use-cases work with this change:

In seccomp directory:
make all and make clean

 From top level from main Makefile:
make kselftest-install O=objdir ARCH=arm64 HOSTCC=gcc \
  CROSS_COMPILE=aarch64-linux-gnu- TARGETS=seccomp

Signed-off-by: Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx>
---

Changes since v2:
-- Using TEST_GEN_PROGS is sufficient to generate objects.
    Addresses review comments from Kees Cook.

  tools/testing/selftests/seccomp/Makefile | 18 ++++++++----------
  1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/tools/testing/selftests/seccomp/Makefile b/tools/testing/selftests/seccomp/Makefile
index 1760b3e39730..a0388fd2c3f2 100644
--- a/tools/testing/selftests/seccomp/Makefile
+++ b/tools/testing/selftests/seccomp/Makefile
@@ -1,17 +1,15 @@
  # SPDX-License-Identifier: GPL-2.0
-all:
-
-include ../lib.mk
+CFLAGS += -Wl,-no-as-needed -Wall
+LDFLAGS += -lpthread
.PHONY: all clean -BINARIES := seccomp_bpf seccomp_benchmark
-CFLAGS += -Wl,-no-as-needed -Wall
+include ../lib.mk
+
+# OUTPUT set by lib.mk
+TEST_GEN_PROGS := $(OUTPUT)/seccomp_bpf $(OUTPUT)/seccomp_benchmark
-seccomp_bpf: seccomp_bpf.c ../kselftest_harness.h
-	$(CC) $(CFLAGS) $(LDFLAGS) $< -lpthread -o $@
+$(TEST_GEN_PROGS): ../kselftest_harness.h
-TEST_PROGS += $(BINARIES)
-EXTRA_CLEAN := $(BINARIES)
+all: $(TEST_GEN_PROGS)
-all: $(BINARIES)


It shouldn't be that complicated. We just need to define TEST_GEN_PROGS
before including lib.mk, and then add the dependency on the harness
after we include lib.mk (so that TEST_GEN_PROGS has been updated to
prefix $(OUTPUT)).

eg:

   # SPDX-License-Identifier: GPL-2.0
   CFLAGS += -Wl,-no-as-needed -Wall
   LDFLAGS += -lpthread
TEST_GEN_PROGS := seccomp_bpf seccomp_benchmark include ../lib.mk $(TEST_GEN_PROGS): ../kselftest_harness.h

Exactly. This (with an extra comment) is precisely what I suggested during
v2 review:
https://lore.kernel.org/lkml/202003041815.B8C73DEC@keescook/

Oh sorry, I missed that.

Sorry. I missed it as well.


OK so I think we know what the right solution is.


I am picking this back up after time off.

The proposed change by you works for seccomp. There are at least 10+
tests that have dependencies on kselftest_harness.h and several that
have dependency on kselftest.h and kselftest_module.h

Enforcing this local header dependency in lib.mk makes sense so we
don't have to change the test make files.

Add dependency to libk.mk on local headers. This enforces the dependency
blindly even when a test doesn't include the file, with the benefit of a
simpler enforcement without requiring individual tests to have special
rule for it.

The following two changes work. You both have better make foo than
I do. Can you see any issues with this proposal? I can send patch
to do this, so we can do a larger test.

--------------------------------------------------------------
diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk
index 3ed0134a764d..54caa9a4ec8a 100644
--- a/tools/testing/selftests/lib.mk
+++ b/tools/testing/selftests/lib.mk
@@ -137,7 +137,7 @@ endif
 # Selftest makefiles can override those targets by setting
 # OVERRIDE_TARGETS = 1.
 ifeq ($(OVERRIDE_TARGETS),)
-$(OUTPUT)/%:%.c
+$(OUTPUT)/%:%.c ../kselftest_harness.h ../kselftest.h
        $(LINK.c) $^ $(LDLIBS) -o $@

 $(OUTPUT)/%.o:%.S


diff --git a/tools/testing/selftests/seccomp/Makefile b/tools/testing/selftests/seccomp/Makefile
index a0388fd2c3f2..0ebfe8b0e147 100644
--- a/tools/testing/selftests/seccomp/Makefile
+++ b/tools/testing/selftests/seccomp/Makefile
@@ -2,14 +2,5 @@
 CFLAGS += -Wl,-no-as-needed -Wall
 LDFLAGS += -lpthread

-.PHONY: all clean
-
+TEST_GEN_PROGS := seccomp_bpf seccomp_benchmark
 include ../lib.mk
-
-# OUTPUT set by lib.mk
-TEST_GEN_PROGS := $(OUTPUT)/seccomp_bpf $(OUTPUT)/seccomp_benchmark
-
-$(TEST_GEN_PROGS): ../kselftest_harness.h
-
-all: $(TEST_GEN_PROGS)
-
--------------------------------------------------------------

thanks,
-- Shuah





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux