Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752376AbbEKXXI (ORCPT ); Mon, 11 May 2015 19:23:08 -0400 Received: from mail-ie0-f179.google.com ([209.85.223.179]:36143 "EHLO mail-ie0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750850AbbEKXXD (ORCPT ); Mon, 11 May 2015 19:23:03 -0400 MIME-Version: 1.0 In-Reply-To: References: <57d921b1c30e8258ca4b2f55637424527317e92f.1431121818.git.dvhart@linux.intel.com> <5550EF8D.8080403@osg.samsung.com> <5550FB2C.1000403@osg.samsung.com> <5551164E.5080409@osg.samsung.com> <55512B54.50304@osg.samsung.com> <55512B86.2040900@osg.samsung.com> Date: Mon, 11 May 2015 16:23:03 -0700 Message-ID: Subject: Re: [PATCH 1/5] selftests: Add futex functional tests From: John Stultz To: Darren Hart Cc: Shuah Khan , Linux API , Linux Kernel Mailing List , Ingo Molnar , Peter Zijlstra , Thomas Gleixner , Davidlohr Bueso , KOSAKI Motohiro 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-Length: 4572 Lines: 120 On Mon, May 11, 2015 at 4:07 PM, Darren Hart wrote: > On 5/11/15, 3:21 PM, "Shuah Khan" wrote: > >>>>>No need for a new pull request. Have you seen these errors before: >>>>> >>>>>make[2]: Entering directory >>>>>'/mnt/data/lkml/linux-kselftest/tools/testing/selftests/futex' >>>>>for DIR in functional; do make -C $DIR all ; done >>>>>make[3]: Entering directory >>>>>'/mnt/data/lkml/linux-kselftest/tools/testing/selftests/futex/functiona >>>>>l' >>>>>gcc -g -O2 -Wall -D_GNU_SOURCE -I../include -I../../ -lpthread -lrt >>>>>futex_requeue_pi.c ../include/futextest.h -o futex_requeue_pi >>>>>/tmp/cc2UgUVs.o: In function `create_rt_thread': >>>>>/mnt/data/lkml/linux-kselftest/tools/testing/selftests/futex/functional >>>>>/fu >>>>>tex_requeue_pi.c:102: >>>>>undefined reference to `pthread_create' >>>>>/tmp/cc2UgUVs.o: In function `unit_test': >>>>>/mnt/data/lkml/linux-kselftest/tools/testing/selftests/futex/functional >>>>>/fu >>>>>tex_requeue_pi.c:342: >>>>>undefined reference to `pthread_join' >>>>>/mnt/data/lkml/linux-kselftest/tools/testing/selftests/futex/functional >>>>>/fu >>>>>tex_requeue_pi.c:347: >>>>>undefined reference to `pthread_join' >>>>>/mnt/data/lkml/linux-kselftest/tools/testing/selftests/futex/functional >>>>>/fu >>>>>tex_requeue_pi.c:346: >>>>>undefined reference to `pthread_join' >>>>>collect2: error: ld returned 1 exit status >>>>>: recipe for target 'futex_requeue_pi' failed >>>>>make[3]: *** [futex_requeue_pi] Error 1 >>>>>make[3]: Leaving directory >>>>>'/mnt/data/lkml/linux-kselftest/tools/testing/selftests/futex/functiona >>>>>l' >>>>>Makefile:7: recipe for target 'all' failed >>>>> >>>>>I am running make kselftest target when I saw the above build failures. >>>>>kselftest run doesn't fail which is good, however futex tests won't >>>>>run with this failure. >>>> >>>>I have not seen these errors whilst developing with futextest for the >>>>kernel. That looks like you may be missing the pthread development >>>>headers >>>>from your build machine. >>>> >>>>Those are provided by libc6-dev on my Debian systems. >>>> >>>I do have lib6-dev installed. timers uses pthread compiles fine. >>>So does mqueue. I am not sure what is going on with futex tests >>>though. I am guessing it has to do with library link order. >>>The following fixed it for me: >>>-LDFLAGS := $(LDFLAGS) -lpthread -lrt >>>+LDFLAGS := $(LDFLAGS) -pthread -lrt >>>Could you please make this change and resend the patch series. >>>I prefer patch series over pull request. >>>thanks, >>>-- Shuah >> >>Sorry full diff: >> >> >>diff --git a/tools/testing/selftests/futex/functional/Makefile >>b/tools/testing/selftests/futex/functional/Makefile >>index e64d43b..b8a2e9b 100644 >>--- a/tools/testing/selftests/futex/functional/Makefile >>+++ b/tools/testing/selftests/futex/functional/Makefile >>@@ -1,6 +1,6 @@ >>INCLUDES := -I../include -I../../ >>CFLAGS := $(CFLAGS) -g -O2 -Wall -D_GNU_SOURCE $(INCLUDES) >>-LDFLAGS := $(LDFLAGS) -lpthread -lrt >>+LDFLAGS := $(LDFLAGS) -pthread -lrt > > > I'm happy to do that, but I would like to make sure I'm doing the right > thing. > > I'm building with: > $ gcc --version > gcc (Debian 4.9.2-10) 4.9.2 > > > What's there now works for me: > LDFLAGS := $(LDFLAGS) -lpthread -lrt > > > What you propose also works for me: > LDFLAGS := $(LDFLAGS) -pthread -lrt > > > I notice that most other test cases list -lrt first, including timers: > LDFLAGS += -lrt -lpthread > > Which works for me for timers - does that work for you? I assume so. It > also works for futexes for me. I've found references out there suggesting > -lrt should always come before -lpthread. > > I suspect you are correct as -pthread provides flags for both the > preprocessor and the linker, however, I'm still concerned about the > ordering. > > John - did you deliberately choose to use "-lrt -lpthread" ? Ooof. Possibly, but I can't say I really recall at this point. I do remember somewhere around gcc 4.6 I had to change things around since the linker arguments had to be at the end of the gcc string (where as before I was throwing them in w/ the CFLAGS). I think it was then I added the "-Wl,-no-as-needed" bit after googling around. You might look at that as well? Sorry I'm not of much help. -john -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/