Re: [PATCH] perf tools: Fix pthread_attr_setaffinity_np build error

From: Adrian Hunter
Date: Wed Feb 25 2015 - 01:50:56 EST


On 24/02/2015 4:31 p.m., Josh Boyer wrote:
On Tue, Feb 24, 2015 at 8:52 AM, Adrian Hunter <adrian.hunter@xxxxxxxxx> wrote:
On 24/02/15 15:32, Josh Boyer wrote:
On Tue, Feb 24, 2015 at 5:46 AM, Adrian Hunter <adrian.hunter@xxxxxxxxx> wrote:
Feature detection for pthread_attr_setaffinity_np was failing,
producing this error:

In file included from bench/futex-hash.c:17:0:
bench/futex.h:73:19: error: conflicting types for 'pthread_attr_setaffinity_np'
static inline int pthread_attr_setaffinity_np(pthread_attr_t *attr,
^
In file included from bench/futex.h:72:0,
from bench/futex-hash.c:17:
/usr/include/pthread.h:407:12: note: previous declaration of 'pthread_attr_setaffinity_np' was here
extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr,
^
make[3]: *** [bench/futex-hash.o] Error 1
make[2]: *** [bench] Error 2
make[2]: *** Waiting for unfinished jobs....

This was because compiling test-pthread-attr-setaffinity-np.c
failed due to the function arguments:

test-pthread-attr-setaffinity-np.c: In function 'main':
test-pthread-attr-setaffinity-np.c:11:2: warning: null argument where non-null required (argument 3) [-Wnonnull]
ret = pthread_attr_setaffinity_np(&thread_attr, 0, NULL);
^
So fix the arguments.

Erm, I sent a different fix for this a while ago. It's queued in some
-tip tree. The feature test wasn't defining _GNU_SOURCE, which is
required for pthread_attr_setaffinity_np. Once that was set (passed
via -D in the Makefile), the feature test worked fine.

Did you have to use your patch on top of the fix already queued?

Yes.

The error (warning + Werror) I got definitely seemed to be about the use of
NULL as an argument.

Hm, ok. Which compiler/glibc are you using? Curious that I'm not
seeing that issue.

4.8.2

You could also see if you have the __nonnull attribute in the header e.g.

extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr,
size_t __cpusetsize,
const cpu_set_t *__cpuset)
__THROW __nonnull ((1, 3));

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/