[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <aEmY259Mx92D60KG@x1>
Date: Wed, 11 Jun 2025 11:55:23 -0300
From: Arnaldo Carvalho de Melo <acme@...nel.org>
To: Sebastian Andrzej Siewior <bigeasy@...utronix.de>
Cc: Namhyung Kim <namhyung@...nel.org>, linux-kernel@...r.kernel.org,
linux-perf-users@...r.kernel.org
Subject: Re: [BUG] perf tools: Build failure in v6.16-rc1
On Wed, Jun 11, 2025 at 10:14:32AM -0300, Arnaldo Carvalho de Melo wrote:
> On Wed, Jun 11, 2025 at 11:25:42AM +0200, Sebastian Andrzej Siewior wrote:
> > On 2025-06-10 11:34:44 [-0700], Namhyung Kim wrote:
> > > Hello,
> > Hi,
> >
> > > I've updated the perf-tools-next to v6.16-rc1 and found a build error
> > > like below on alpine linux 3.18.
> > >
> > > In file included from bench/futex.c:6:
> > > /usr/include/sys/prctl.h:88:8: error: redefinition of 'struct prctl_mm_map'
> > > 88 | struct prctl_mm_map {
> > > | ^~~~~~~~~~~~
> > > In file included from bench/futex.c:5:
> > > /linux/tools/include/uapi/linux/prctl.h:134:8: note: originally defined here
> > > 134 | struct prctl_mm_map {
> > > | ^~~~~~~~~~~~
> > > make[4]: *** [/linux/tools/build/Makefile.build:86: /build/bench/futex.o] Error 1
> > >
> > > git bisect says it's the first commit introduced the failure.
> >
> > Hmm. So your /usr/include/sys/prctl.h and
> > /linux/tools/include/uapi/linux/prctl.h both provide struct
> > prctl_mm_map but their include guard must be different.
> >
> > My /usr/include/sys/prctl.h is provided by glibc and contains the
> > prctl() declaration. It includes also linux/prctl.h.
> > The tools/include/uapi/linux/prctl.h is the same as
> > /usr/include/linux/prctl.h.
> >
> > The /usr/include/sys/prctl.h on alpine linux is different. This is
> > probably coming from musl. It contains the PR_* definition and the
> > prctl() declaration. So it clashes here because now the one struct is
> > available twice.
> >
> > The man page for prctl(2) says:
> > | #include <linux/prctl.h> /* Definition of PR_* constants */
> > | #include <sys/prctl.h>
> >
> > so musl doesn't follow this.
> >
> > To align with the other builds, I guess the following help:
>
> So I noticed this as well in perf-tools/perf-tools, I'm trying with your
> patch applied, lets see...
Can I keep this as below?
With it:
toolsbuilder@...e:~$ time dm from alpine:3.16
5 130.36 alpine:3.16 : Ok gcc (Alpine 11.2.1_git20220219) 11.2.1 20220219 , Alpine clang version 13.0.1 flex 2.6.4
6 100.65 alpine:3.17 : Ok gcc (Alpine 12.2.1_git20220924-r4) 12.2.1 20220924 , Alpine clang version 15.0.7 flex 2.6.4
7 90.44 alpine:3.18 : Ok gcc (Alpine 12.2.1_git20220924-r10) 12.2.1 20220924 , Alpine clang version 16.0.6 flex 2.6.4
8 106.18 alpine:3.19 : Ok gcc (Alpine 13.2.1_git20231014) 13.2.1 20231014 , Alpine clang version 17.0.5 flex 2.6.4
9 108.16 alpine:3.20 : Ok gcc (Alpine 13.2.1_git20240309) 13.2.1 20240309 , Alpine clang version 17.0.6 flex 2.6.4
10 111.19 alpine:3.22 : Ok gcc (Alpine 14.2.0) 14.2.0 , Alpine clang version 20.1.6 flex 2.6.4
11 109.28 alpine:edge : Ok gcc (Alpine 14.2.0) 14.2.0 , Alpine clang version 19.1.4 flex 2.6.4
12 92.62 amazonlinux:2023 : Ok gcc (GCC) 11.5.0 20240719 (Red Hat 11.5.0-5) , clang version 15.0.7 (AWS 15.0.7-3.amzn2023.0.4) flex 2.6.4
13 98.43 amazonlinux:devel : Ok gcc (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4) , clang version 15.0.6 (Amazon Linux 15.0.6-3.amzn2023.0.2) flex 2.6.4
14 17.24 archlinux:base : FAIL gcc version 14.2.1 20240805 (GCC)
<command-line>: error: "_FORTIFY_SOURCE" redefined [-Werror]
<command-line>: note: this is the location of the previous definition
cc1: all warnings being treated as errors
error: command '/usr/sbin/gcc' failed with exit code 1
15 97.65 centos:stream : Ok gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-21) , clang version 17.0.6 (Red Hat 17.0.6-1.module_el8+767+9fa966b8) flex 2.6.1
The archlinux one is unrelated. More are building now.
- Arnaldo
commit 8386dc356158fc50c55831c96b1248e01d112ebc
Author: Sebastian Andrzej Siewior <bigeasy@...utronix.de>
Date: Wed Jun 11 11:25:42 2025 +0200
perf bench futex: Fix prctl include in musl libc
Namhyung Kim reported:
I've updated the perf-tools-next to v6.16-rc1 and found a build error
like below on alpine linux 3.18.
In file included from bench/futex.c:6:
/usr/include/sys/prctl.h:88:8: error: redefinition of 'struct prctl_mm_map'
88 | struct prctl_mm_map {
| ^~~~~~~~~~~~
In file included from bench/futex.c:5:
/linux/tools/include/uapi/linux/prctl.h:134:8: note: originally defined here
134 | struct prctl_mm_map {
| ^~~~~~~~~~~~
make[4]: *** [/linux/tools/build/Makefile.build:86: /build/bench/futex.o] Error 1
git bisect says it's the first commit introduced the failure.
So your /usr/include/sys/prctl.h and
/linux/tools/include/uapi/linux/prctl.h both provide struct prctl_mm_map
but their include guard must be different.
My /usr/include/sys/prctl.h is provided by glibc and contains the
prctl() declaration. It includes also linux/prctl.h. The
tools/include/uapi/linux/prctl.h is the same as
/usr/include/linux/prctl.h.
The /usr/include/sys/prctl.h on alpine linux is different. This is
probably coming from musl. It contains the PR_* definition and the
prctl() declaration. So it clashes here because now the one struct is
available twice.
The man page for prctl(2) says:
| #include <linux/prctl.h> /* Definition of PR_* constants */
| #include <sys/prctl.h>
so musl doesn't follow this.
So align with the other builds.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@...utronix.de>
Reported-by: Namhyung Kim <namhyung@...nel.org>
Link: https://lore.kernel.org/r/20250611092542.F4ooE2FL@linutronix.de
[ Remove one more in tools/perf/bench/futex-hash.c and conditionally define PR_FUTEX_HASH and friends ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@...hat.com>
diff --git a/tools/perf/bench/futex-hash.c b/tools/perf/bench/futex-hash.c
index fdf133c9520f73a4..d2d6d7f3ea331c84 100644
--- a/tools/perf/bench/futex-hash.c
+++ b/tools/perf/bench/futex-hash.c
@@ -18,7 +18,6 @@
#include <stdlib.h>
#include <linux/compiler.h>
#include <linux/kernel.h>
-#include <linux/prctl.h>
#include <linux/zalloc.h>
#include <sys/time.h>
#include <sys/mman.h>
diff --git a/tools/perf/bench/futex.c b/tools/perf/bench/futex.c
index 26382e4d8d4ce2ff..4c4fee107e5912d5 100644
--- a/tools/perf/bench/futex.c
+++ b/tools/perf/bench/futex.c
@@ -2,11 +2,18 @@
#include <err.h>
#include <stdio.h>
#include <stdlib.h>
-#include <linux/prctl.h>
#include <sys/prctl.h>
#include "futex.h"
+#ifndef PR_FUTEX_HASH
+#define PR_FUTEX_HASH 78
+# define PR_FUTEX_HASH_SET_SLOTS 1
+# define FH_FLAG_IMMUTABLE (1ULL << 0)
+# define PR_FUTEX_HASH_GET_SLOTS 2
+# define PR_FUTEX_HASH_GET_IMMUTABLE 3
+#endif // PR_FUTEX_HASH
+
void futex_set_nbuckets_param(struct bench_futex_parameters *params)
{
unsigned long flags;
Powered by blists - more mailing lists