Re: [PATCH 3/5] selftests: Fix the .S and .S -> .o rules

2017-02-13 Thread Bamvor Zhang Jian
Tested-by: Bamvor Jian Zhang 

On 9 February 2017 at 16:56, Michael Ellerman  wrote:
> Both these rules incorrectly use $< (first prerequisite) rather than
> $^ (all prerequisites), meaning they don't work if we're using more than
> one .S file as input. Switch them to using $^.
>
> They also don't include $(CPPFLAGS) and other variables used in the
> default rules, which breaks targets that require those. Fix that by
> using the builtin $(COMPILE.S) and $(LINK.S) rules.
>
> Fixes: a8ba798bc8ec ("selftests: enable O and KBUILD_OUTPUT")
> Signed-off-by: Michael Ellerman 
> ---
>  tools/testing/selftests/lib.mk | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk
> index 98841c54763a..ce96d80ad64f 100644
> --- a/tools/testing/selftests/lib.mk
> +++ b/tools/testing/selftests/lib.mk
> @@ -54,9 +54,9 @@ $(OUTPUT)/%:%.c
> $(LINK.c) $^ $(LDLIBS) -o $@
>
>  $(OUTPUT)/%.o:%.S
> -   $(CC) $(ASFLAGS) -c $< -o $@
> +   $(COMPILE.S) $^ -o $@
>
>  $(OUTPUT)/%:%.S
> -   $(CC) $(ASFLAGS) $< -o $@
> +   $(LINK.S) $^ $(LDLIBS) -o $@
>
>  .PHONY: run_tests all clean install emit_tests
> --
> 2.7.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-api" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/5] selftests: Fix the .c linking rule

2017-02-13 Thread Bamvor Zhang Jian
Tested-by: Bamvor Jian Zhang 

On 9 February 2017 at 16:56, Michael Ellerman  wrote:
> Currently we can't build some tests, for example:
>
>   $ make -C tools/testing/selftests/ TARGETS=vm
>   ...
>   gcc -Wall -I ../../../../usr/include   -lrt -lpthread 
> ../../../../usr/include/linux/kernel.h userfaultfd.c -o 
> tools/testing/selftests/vm/userfaultfd
>   /tmp/ccmOkQSM.o: In function `stress':
>   userfaultfd.c:(.text+0xc60): undefined reference to `pthread_create'
>   userfaultfd.c:(.text+0xca5): undefined reference to `pthread_create'
>   userfaultfd.c:(.text+0xcee): undefined reference to `pthread_create'
>   userfaultfd.c:(.text+0xd30): undefined reference to `pthread_create'
>   userfaultfd.c:(.text+0xd77): undefined reference to `pthread_join'
>   userfaultfd.c:(.text+0xe7d): undefined reference to `pthread_join'
>   userfaultfd.c:(.text+0xe9f): undefined reference to `pthread_cancel'
>   userfaultfd.c:(.text+0xec6): undefined reference to `pthread_join'
>   userfaultfd.c:(.text+0xf14): undefined reference to `pthread_join'
>   /tmp/ccmOkQSM.o: In function `userfaultfd_stress':
>   userfaultfd.c:(.text+0x13e2): undefined reference to 
> `pthread_attr_setstacksize'
>   collect2: error: ld returned 1 exit status
>
> This is because the rule for linking .c files to binaries is incorrect.
>
> The first bug is that it uses $< (first prerequisite) instead of $^ (all
> preqrequisites), fix it by using ^$.
>
> Secondly the ordering of the prerequisites vs $(LDLIBS) is wrong,
> meaning on toolchains that use --as-needed we fail to link (as above).
> Fix that by placing $(LDLIBS) *after* ^$.
>
> Finally switch to using the default rule $(LINK.c), so that we get
> $(CPPFLAGS) etc. included.
>
> Fixes: a8ba798bc8ec ("selftests: enable O and KBUILD_OUTPUT")
> Signed-off-by: Michael Ellerman 
> ---
>  tools/testing/selftests/lib.mk | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk
> index 17ed4bbe3963..98841c54763a 100644
> --- a/tools/testing/selftests/lib.mk
> +++ b/tools/testing/selftests/lib.mk
> @@ -51,7 +51,7 @@ clean:
> $(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) 
> $(TEST_GEN_FILES) $(EXTRA_CLEAN)
>
>  $(OUTPUT)/%:%.c
> -   $(CC) $(CFLAGS) $(LDFLAGS) $(LDLIBS) $< -o $@
> +   $(LINK.c) $^ $(LDLIBS) -o $@
>
>  $(OUTPUT)/%.o:%.S
> $(CC) $(ASFLAGS) -c $< -o $@
> --
> 2.7.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-api" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/5] selftests: Fix selftests build to just build, not run tests

2017-02-13 Thread Bamvor Zhang Jian
Tested by: Bamvor Jian Zhang 

On 9 February 2017 at 16:56, Michael Ellerman  wrote:
> In commit 88baa78d1f31 ("selftests: remove duplicated all and clean
> target"), the "all" target was removed from individual Makefiles and
> added to lib.mk.
>
> However the "all" target was added to lib.mk *after* the existing
> "runtests" target. This means "runtests" becomes the first (default)
> target for most of our Makefiles.
>
> This has the effect of causing a plain "make" to build *and run* the
> tests. Which is at best rude, but depending on which tests are run could
> oops someone's build machine.
>
>   $ make -C tools/testing/selftests/
>   ...
>   make[1]: Entering directory 'tools/testing/selftests/bpf'
>   gcc -Wall -O2 -I../../../../usr/include   test_verifier.c -o 
> tools/testing/selftests/bpf/test_verifier
>   gcc -Wall -O2 -I../../../../usr/include   test_maps.c -o 
> tools/testing/selftests/bpf/test_maps
>   gcc -Wall -O2 -I../../../../usr/include   test_lru_map.c -o 
> tools/testing/selftests/bpf/test_lru_map
>   #0 add+sub+mul FAIL
>   Failed to load prog 'Function not implemented'!
>   #1 unreachable FAIL
>   Unexpected error message!
>   #2 unreachable2 FAIL
>   ...
>
> Fix it by moving the "all" target to the start of lib.mk, making it the
> default target.
>
> Fixes: 88baa78d1f31 ("selftests: remove duplicated all and clean target")
> Signed-off-by: Michael Ellerman 
> ---
>  tools/testing/selftests/lib.mk | 10 +-
>  1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/tools/testing/selftests/lib.mk b/tools/testing/selftests/lib.mk
> index 01bb7782a35e..17ed4bbe3963 100644
> --- a/tools/testing/selftests/lib.mk
> +++ b/tools/testing/selftests/lib.mk
> @@ -2,6 +2,11 @@
>  # Makefile can operate with or without the kbuild infrastructure.
>  CC := $(CROSS_COMPILE)gcc
>
> +TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS))
> +TEST_GEN_FILES := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_FILES))
> +
> +all: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES)
> +
>  define RUN_TESTS
> @for TEST in $(TEST_GEN_PROGS) $(TEST_PROGS); do \
> BASENAME_TEST=`basename $$TEST`;\
> @@ -42,11 +47,6 @@ endef
>  emit_tests:
> $(EMIT_TESTS)
>
> -TEST_GEN_PROGS := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_PROGS))
> -TEST_GEN_FILES := $(patsubst %,$(OUTPUT)/%,$(TEST_GEN_FILES))
> -
> -all: $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) $(TEST_GEN_FILES)
> -
>  clean:
> $(RM) -r $(TEST_GEN_PROGS) $(TEST_GEN_PROGS_EXTENDED) 
> $(TEST_GEN_FILES) $(EXTRA_CLEAN)
>
> --
> 2.7.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-api" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html