All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: Namhyung Kim <namhyung@kernel.org>,
	linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org
Subject: Re: [BUG] perf tools: Build failure in v6.16-rc1
Date: Wed, 11 Jun 2025 11:55:23 -0300	[thread overview]
Message-ID: <aEmY259Mx92D60KG@x1> (raw)
In-Reply-To: <aEmBOO0bSJYSvX2i@x1>

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@five:~$ 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@linutronix.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@linutronix.de>
    Reported-by: Namhyung Kim <namhyung@kernel.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@redhat.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;

  reply	other threads:[~2025-06-11 14:55 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-06-10 18:34 [BUG] perf tools: Build failure in v6.16-rc1 Namhyung Kim
2025-06-11  9:25 ` Sebastian Andrzej Siewior
2025-06-11 13:14   ` Arnaldo Carvalho de Melo
2025-06-11 14:55     ` Arnaldo Carvalho de Melo [this message]
2025-06-11 15:06       ` Sebastian Andrzej Siewior
2025-06-11 19:01         ` Arnaldo Carvalho de Melo
2025-06-11 21:50           ` Namhyung Kim
2025-06-12  6:25           ` Sebastian Andrzej Siewior

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aEmY259Mx92D60KG@x1 \
    --to=acme@kernel.org \
    --cc=bigeasy@linutronix.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=namhyung@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.