linux/tools/testing/selftests
Michael Ellerman 2047f1d8ba selftests: Fix the .c linking rule
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: a8ba798bc8 ("selftests: enable O and KBUILD_OUTPUT")
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Tested by: Bamvor Jian Zhang <bamvor.zhangjian@linaro.org>
Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
2017-02-14 08:01:55 -07:00
..
bpf selftests: remove duplicated all and clean target 2017-01-05 13:41:35 -07:00
breakpoints selftests: remove duplicated all and clean target 2017-01-05 13:41:35 -07:00
capabilities selftests: remove duplicated all and clean target 2017-01-05 13:41:35 -07:00
cpu-hotplug selftests: create test-specific kconfig fragments 2016-02-25 09:47:52 -07:00
cpufreq selftest: cpufreq: Add special tests 2017-01-19 10:32:27 -07:00
drivers/gpu kselftests: Exercise hw-independent mock tests for i915.ko 2016-12-08 09:34:13 -07:00
efivarfs selftests: remove duplicated all and clean target 2017-01-05 13:41:35 -07:00
exec selftests: enable O and KBUILD_OUTPUT 2017-01-05 13:42:22 -07:00
filesystems selftests: move dnotify_test from Documentation/filesystems 2016-09-20 09:09:00 -06:00
firmware selftests: create test-specific kconfig fragments 2016-02-25 09:47:52 -07:00
ftrace selftests: enable O and KBUILD_OUTPUT 2017-01-05 13:42:22 -07:00
futex selftests/futex: Add headers to makefile dependencies 2017-01-19 10:30:21 -07:00
gpio selftests: gpio add .gitignore for generated files 2017-01-11 09:50:54 -07:00
ia64 selftests: move ia64 tests from Documentation/ia64 2016-09-20 09:58:12 -06:00
intel_pstate selftests/intel_pstate: Update makefile to match new style 2017-01-19 10:30:40 -07:00
ipc selftests: ipc add missing generated file to .gitignore 2017-01-11 09:51:03 -07:00
kcmp selftests: enable O and KBUILD_OUTPUT 2017-01-05 13:42:22 -07:00
lib selftests/lib: set printf.sh executable 2016-06-27 13:17:14 -06:00
media_tests selftests: media_tests add a new video device test 2016-07-26 09:59:30 -06:00
membarrier selftests: remove duplicated all and clean target 2017-01-05 13:41:35 -07:00
memfd selftests: remove CROSS_COMPILE in dedicated Makefile 2017-01-05 13:42:11 -07:00
memory-hotplug selftests: create test-specific kconfig fragments 2016-02-25 09:47:52 -07:00
mount selftests: add default rules for c source file 2017-01-05 13:42:01 -07:00
mqueue selftests: remove duplicated all and clean target 2017-01-05 13:41:35 -07:00
net selftests: add default rules for c source file 2017-01-05 13:42:01 -07:00
networking/timestamping selftests: Move networking/timestamping from Documentation 2016-09-20 09:59:50 -06:00
nsfs selftests: remove duplicated all and clean target 2017-01-05 13:41:35 -07:00
ntb ntb_test: Add a selftest script for the NTB subsystem 2016-08-05 10:21:08 -04:00
powerpc selftests: enable O and KBUILD_OUTPUT 2017-01-05 13:42:22 -07:00
prctl selftests: move prctl tests from Documentation/prctl 2016-09-20 09:09:09 -06:00
pstore selftests: add EXTRA_CLEAN for clean target 2017-01-05 13:42:17 -07:00
ptp selftests: move ptp tests from Documentation/ptp 2016-09-20 09:54:38 -06:00
ptrace selftests: remove duplicated all and clean target 2017-01-05 13:41:35 -07:00
rcutorture torture: Prevent jitter from delaying build-only runs 2016-11-14 10:48:59 -08:00
seccomp selftests: remove duplicated all and clean target 2017-01-05 13:41:35 -07:00
sigaltstack selftests: remove duplicated all and clean target 2017-01-05 13:41:35 -07:00
size selftests: add default rules for c source file 2017-01-05 13:42:01 -07:00
static_keys selftests: create test-specific kconfig fragments 2016-02-25 09:47:52 -07:00
sync selftest: sync: improve assert() failure message 2016-12-13 07:24:34 -07:00
sysctl selftests: Add install target 2015-03-13 15:21:56 -06:00
timers selftests: remove CROSS_COMPILE in dedicated Makefile 2017-01-05 13:42:11 -07:00
user selftests: create test-specific kconfig fragments 2016-02-25 09:47:52 -07:00
vDSO selftests: move vDSO tests from Documentation/vDSO 2016-09-20 09:58:04 -06:00
vm selftests: enable O and KBUILD_OUTPUT 2017-01-05 13:42:22 -07:00
watchdog selftests: move watchdog tests from Documentation/watchdog 2016-09-20 09:58:34 -06:00
x86 selftests, x86, protection_keys: fix wrong offset in siginfo 2017-02-08 11:15:43 -07:00
zram selftests: add EXTRA_CLEAN for clean target 2017-01-05 13:42:17 -07:00
.gitignore selftests: add missing gitignore files/dirs 2016-12-08 08:51:32 -07:00
gen_kselftest_tar.sh selftests: Add tool to generate kselftest tar archive 2015-03-24 08:43:19 -06:00
kselftest_install.sh selftests: Add kselftest install tool 2015-03-24 08:43:05 -06:00
kselftest.h kselftest: Add exit code defines 2015-05-26 15:58:08 -06:00
lib.mk selftests: Fix the .c linking rule 2017-02-14 08:01:55 -07:00
Makefile selftest: cpufreq: Add support for cpufreq tests 2017-01-19 10:32:05 -07:00