[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CALAqxLVnv0Pp=eNxLaeAk00Bv=Y_mAWZjpaChp5SV-Sgk2FtPA@mail.gmail.com>
Date: Mon, 11 May 2015 16:23:03 -0700
From: John Stultz <john.stultz@...aro.org>
To: Darren Hart <dvhart@...ux.intel.com>
Cc: Shuah Khan <shuahkh@....samsung.com>,
Linux API <linux-api@...r.kernel.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
Ingo Molnar <mingo@...e.hu>,
Peter Zijlstra <peterz@...radead.org>,
Thomas Gleixner <tglx@...utronix.de>,
Davidlohr Bueso <dave@...olabs.net>,
KOSAKI Motohiro <kosaki.motohiro@...fujitsu.com>
Subject: Re: [PATCH 1/5] selftests: Add futex functional tests
On Mon, May 11, 2015 at 4:07 PM, Darren Hart <dvhart@...ux.intel.com> wrote:
> On 5/11/15, 3:21 PM, "Shuah Khan" <shuahkh@....samsung.com> 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
>>>>><builtin>: 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@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists