Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752148AbdF2HDM (ORCPT ); Thu, 29 Jun 2017 03:03:12 -0400 Received: from mail-wm0-f52.google.com ([74.125.82.52]:37091 "EHLO mail-wm0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751612AbdF2HDB (ORCPT ); Thu, 29 Jun 2017 03:03:01 -0400 MIME-Version: 1.0 In-Reply-To: References: <20170628170859.28583-1-fathi.boudra@linaro.org> <20170628170859.28583-3-fathi.boudra@linaro.org> From: Fathi Boudra Date: Thu, 29 Jun 2017 10:02:59 +0300 Message-ID: Subject: Re: [PATCH 2/3] selftests: seccomp: use LDLIBS instead of LDFLAGS To: sjpark Cc: linux-kselftest@vger.kernel.org, Shuah Khan , "linux-kernel@vger.kernel.org" , John Stultz , Denys Dmytriyenko Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by mail.home.local id v5T73RT5023780 Content-Length: 8825 Lines: 130 On 29 June 2017 at 00:40, sjpark wrote: > Hi Fathi, > > On Wed, 28 Jun 2017, Fathi Boudra wrote: > >> seccomp_bpf fails to build due to undefined reference errors: >> >> aarch64-linaro-linux-gcc --sysroot=/build/tmp-rpb-glibc/sysroots/hikey >> -O2 -pipe -g -feliminate-unused-debug-types -Wl,-no-as-needed -Wall >> -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -lpthread seccomp_bpf.c -o >> /build/tmp-rpb-glibc/work/hikey-linaro-linux/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf >> /tmp/ccrlR3MW.o: In function `tsync_sibling': >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1920: undefined reference to `sem_post' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1920: undefined reference to `sem_post' >> /tmp/ccrlR3MW.o: In function `TSYNC_setup': >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1863: undefined reference to `sem_init' >> /tmp/ccrlR3MW.o: In function `TSYNC_teardown': >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1904: undefined reference to `sem_destroy' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1897: undefined reference to `pthread_kill' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1898: undefined reference to `pthread_cancel' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1899: undefined reference to `pthread_join' >> /tmp/ccrlR3MW.o: In function `tsync_start_sibling': >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1941: undefined reference to `pthread_create' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1941: undefined reference to `pthread_create' >> /tmp/ccrlR3MW.o: In function `TSYNC_siblings_fail_prctl': >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1978: undefined reference to `sem_wait' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1990: undefined reference to `pthread_join' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1992: undefined reference to `pthread_join' >> /tmp/ccrlR3MW.o: In function `tsync_start_sibling': >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1941: undefined reference to `pthread_create' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1941: undefined reference to `pthread_create' >> /tmp/ccrlR3MW.o: In function `TSYNC_two_siblings_with_ancestor': >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:2016: undefined reference to `sem_wait' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:2032: undefined reference to `pthread_join' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:2034: undefined reference to `pthread_join' >> /tmp/ccrlR3MW.o: In function `tsync_start_sibling': >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1941: undefined reference to `pthread_create' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1941: undefined reference to `pthread_create' >> /tmp/ccrlR3MW.o: In function `TSYNC_two_sibling_want_nnp': >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:2046: undefined reference to `sem_wait' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:2058: undefined reference to `pthread_join' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:2060: undefined reference to `pthread_join' >> /tmp/ccrlR3MW.o: In function `tsync_start_sibling': >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1941: undefined reference to `pthread_create' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1941: undefined reference to `pthread_create' >> /tmp/ccrlR3MW.o: In function `TSYNC_two_siblings_with_no_filter': >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:2073: undefined reference to `sem_wait' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:2098: undefined reference to `pthread_join' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:2100: undefined reference to `pthread_join' >> /tmp/ccrlR3MW.o: In function `tsync_start_sibling': >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1941: undefined reference to `pthread_create' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1941: undefined reference to `pthread_create' >> /tmp/ccrlR3MW.o: In function `TSYNC_two_siblings_with_one_divergence': >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:2125: undefined reference to `sem_wait' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:2143: undefined reference to `pthread_join' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:2145: undefined reference to `pthread_join' >> /tmp/ccrlR3MW.o: In function `tsync_start_sibling': >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1941: undefined reference to `pthread_create' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1941: undefined reference to `pthread_create' >> /tmp/ccrlR3MW.o: In function `TSYNC_two_siblings_not_under_filter': >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:2169: undefined reference to `sem_wait' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:2202: undefined reference to `pthread_join' >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:2227: undefined reference to `pthread_join' >> /tmp/ccrlR3MW.o: In function `tsync_start_sibling': >> /usr/src/debug/kselftests/4.12-r0/linux-4.12-rc7/tools/testing/selftests/seccomp/seccomp_bpf.c:1941: undefined reference to `pthread_create' >> >> It's GNU Make and linker specific. >> >> The default Makefile rule looks like: >> >> $(CC) $(CFLAGS) $(LDFLAGS) $@ $^ $(LDLIBS) >> >> When linking is done by gcc itself, no issue, but when it needs to be passed >> to proper ld, only LDLIBS follows and then ld cannot know what libs to link >> with. >> >> More detail: >> https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html >> >> LDFLAGS >> Extra flags to give to compilers when they are supposed to invoke the linker, >> ‘ld’, such as -L. Libraries (-lfoo) should be added to the LDLIBS variable >> instead. >> >> LDLIBS >> Library flags or names given to compilers when they are supposed to invoke the >> linker, ‘ld’. LOADLIBES is a deprecated (but still supported) alternative to >> LDLIBS. Non-library linker flags, such as -L, should go in the LDFLAGS >> variable. >> >> https://lkml.org/lkml/2010/2/10/362 >> >> tools/perf: libraries must come after objects >> >> Link order matters, use LDLIBS instead of LDFLAGS to properly link against >> libpthread. >> >> Signed-off-by: Fathi Boudra >> --- >> tools/testing/selftests/seccomp/Makefile | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/tools/testing/selftests/seccomp/Makefile b/tools/testing/selftests/seccomp/Makefile >> index aeb0c805f3ca..d1c74ce70f08 100644 >> --- a/tools/testing/selftests/seccomp/Makefile >> +++ b/tools/testing/selftests/seccomp/Makefile >> @@ -1,8 +1,8 @@ >> TEST_GEN_PROGS := seccomp_bpf >> CFLAGS += -Wl,-no-as-needed -Wall >> -LDFLAGS += -lpthread >> +LDLIBS += -lpthread >> >> include ../lib.mk >> >> $(TEST_GEN_PROGS): seccomp_bpf.c ../kselftest_harness.h >> - $(CC) $(CFLAGS) $(LDFLAGS) $< -o $@ >> + $(CC) $(CFLAGS) $(LDLIBS) $< -o $@ > > Shouldn't $(LDLIBS) follow $< ? Good catch. Thanks, will add to v3. > > Thanks, > SeongJae Park > >> -- >> 2.13.0 >> >>