When build with perl5, it reports error:
In file included from /usr/lib/perl5/5.42.0/x86_64-linux-thread-multi/CORE/perl.h:7933:
/usr/lib/perl5/5.42.0/x86_64-linux-thread-multi/CORE/inline.h:298:5: error:
mutex 'PL_env_mutex.lock' is not held on every path through
here [-Werror,-Wthread-safety-analysis]
298 | ENV_UNLOCK;
| ^
/usr/lib/perl5/5.42.0/x86_64-linux-thread-multi/CORE/perl.h:7091:31: note:
expanded from macro 'ENV_UNLOCK'
7091 | # define ENV_UNLOCK PERL_REENTRANT_UNLOCK("env"...
| ^
/usr/lib/perl5/5.42.0/x86_64-linux-thread-multi/CORE/perl.h:6465:7: note:
expanded from macro 'PERL_REENTRANT_UNLOCK'
6465 | } STMT_END
| ^
/usr/lib/perl5/5.42.0/x86_64-linux-thread-multi/CORE/perl.h:865:28: note:
expanded from macro 'STMT_END'
865 | # define STMT_END while (0)
| ^
The error is caused by perl header but not perf code, disable thread
safety analysis if including the header.
Though GCC does not support the thread safety analysis option, this
negative warning flag is silently ignored by it.
Signed-off-by: Leo Yan <leo.yan@arm.com>
---
tools/perf/scripts/perl/Perf-Trace-Util/Build | 2 +-
tools/perf/util/scripting-engines/Build | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/tools/perf/scripts/perl/Perf-Trace-Util/Build b/tools/perf/scripts/perl/Perf-Trace-Util/Build
index 9b0e5a8b5070f1a1640518fae75557f824ef21ee..01a1a0ed51aefd721b4bc7eba728c29a8ffcd551 100644
--- a/tools/perf/scripts/perl/Perf-Trace-Util/Build
+++ b/tools/perf/scripts/perl/Perf-Trace-Util/Build
@@ -2,7 +2,7 @@ perf-util-y += Context.o
CFLAGS_Context.o += $(PERL_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-bad-function-cast -Wno-declaration-after-statement -Wno-switch-enum
CFLAGS_Context.o += -Wno-unused-parameter -Wno-nested-externs -Wno-undef
-CFLAGS_Context.o += -Wno-switch-default -Wno-shadow
+CFLAGS_Context.o += -Wno-switch-default -Wno-shadow -Wno-thread-safety-analysis
ifeq ($(CC_NO_CLANG), 1)
CFLAGS_Context.o += -Wno-unused-command-line-argument
diff --git a/tools/perf/util/scripting-engines/Build b/tools/perf/util/scripting-engines/Build
index 2282fe3772f3bdc35056cb5e66efb3462dc1c2e3..24f087b0cd11b3e06a338c394dc2c650bc2c60b1 100644
--- a/tools/perf/util/scripting-engines/Build
+++ b/tools/perf/util/scripting-engines/Build
@@ -3,7 +3,7 @@ ifeq ($(CONFIG_LIBTRACEEVENT),y)
endif
perf-util-$(CONFIG_LIBPYTHON) += trace-event-python.o
-CFLAGS_trace-event-perl.o += $(PERL_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-shadow -Wno-nested-externs -Wno-undef -Wno-switch-default -Wno-bad-function-cast -Wno-declaration-after-statement -Wno-switch-enum
+CFLAGS_trace-event-perl.o += $(PERL_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-shadow -Wno-nested-externs -Wno-undef -Wno-switch-default -Wno-bad-function-cast -Wno-declaration-after-statement -Wno-switch-enum -Wno-thread-safety-analysis
# -Wno-declaration-after-statement: The python headers have mixed code with declarations (decls after asserts, for instance)
CFLAGS_trace-event-python.o += $(PYTHON_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-shadow -Wno-deprecated-declarations -Wno-switch-enum -Wno-declaration-after-statement
--
2.34.1
On Mon, Oct 6, 2025 at 9:21 AM Leo Yan <leo.yan@arm.com> wrote:
>
> When build with perl5, it reports error:
>
> In file included from /usr/lib/perl5/5.42.0/x86_64-linux-thread-multi/CORE/perl.h:7933:
> /usr/lib/perl5/5.42.0/x86_64-linux-thread-multi/CORE/inline.h:298:5: error:
> mutex 'PL_env_mutex.lock' is not held on every path through
> here [-Werror,-Wthread-safety-analysis]
> 298 | ENV_UNLOCK;
> | ^
> /usr/lib/perl5/5.42.0/x86_64-linux-thread-multi/CORE/perl.h:7091:31: note:
> expanded from macro 'ENV_UNLOCK'
> 7091 | # define ENV_UNLOCK PERL_REENTRANT_UNLOCK("env"...
> | ^
> /usr/lib/perl5/5.42.0/x86_64-linux-thread-multi/CORE/perl.h:6465:7: note:
> expanded from macro 'PERL_REENTRANT_UNLOCK'
> 6465 | } STMT_END
> | ^
> /usr/lib/perl5/5.42.0/x86_64-linux-thread-multi/CORE/perl.h:865:28: note:
> expanded from macro 'STMT_END'
> 865 | # define STMT_END while (0)
> | ^
>
> The error is caused by perl header but not perf code, disable thread
> safety analysis if including the header.
>
> Though GCC does not support the thread safety analysis option, this
> negative warning flag is silently ignored by it.
>
> Signed-off-by: Leo Yan <leo.yan@arm.com>
> ---
> tools/perf/scripts/perl/Perf-Trace-Util/Build | 2 +-
> tools/perf/util/scripting-engines/Build | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/tools/perf/scripts/perl/Perf-Trace-Util/Build b/tools/perf/scripts/perl/Perf-Trace-Util/Build
> index 9b0e5a8b5070f1a1640518fae75557f824ef21ee..01a1a0ed51aefd721b4bc7eba728c29a8ffcd551 100644
> --- a/tools/perf/scripts/perl/Perf-Trace-Util/Build
> +++ b/tools/perf/scripts/perl/Perf-Trace-Util/Build
> @@ -2,7 +2,7 @@ perf-util-y += Context.o
>
> CFLAGS_Context.o += $(PERL_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-bad-function-cast -Wno-declaration-after-statement -Wno-switch-enum
> CFLAGS_Context.o += -Wno-unused-parameter -Wno-nested-externs -Wno-undef
> -CFLAGS_Context.o += -Wno-switch-default -Wno-shadow
> +CFLAGS_Context.o += -Wno-switch-default -Wno-shadow -Wno-thread-safety-analysis
I wasn't able to reproduce this on Debian with perf-tools-next and:
make -C tools/perf O=/tmp/perf DEBUG=1 CC=clang CXX=clang++
HOSTCC=clang LIBPERL=1 clean all
but my libperl is 5.40. I'm a little concerned that the warning may
cause an unrecognized compiler option warning/error with GCC given
progress on thread-safety-analysis has ended there. Anyway, these
aren't blockers.
Reviewed-by: Ian Rogers <irogers@google.com>
Thanks,
Ian
>
> ifeq ($(CC_NO_CLANG), 1)
> CFLAGS_Context.o += -Wno-unused-command-line-argument
> diff --git a/tools/perf/util/scripting-engines/Build b/tools/perf/util/scripting-engines/Build
> index 2282fe3772f3bdc35056cb5e66efb3462dc1c2e3..24f087b0cd11b3e06a338c394dc2c650bc2c60b1 100644
> --- a/tools/perf/util/scripting-engines/Build
> +++ b/tools/perf/util/scripting-engines/Build
> @@ -3,7 +3,7 @@ ifeq ($(CONFIG_LIBTRACEEVENT),y)
> endif
> perf-util-$(CONFIG_LIBPYTHON) += trace-event-python.o
>
> -CFLAGS_trace-event-perl.o += $(PERL_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-shadow -Wno-nested-externs -Wno-undef -Wno-switch-default -Wno-bad-function-cast -Wno-declaration-after-statement -Wno-switch-enum
> +CFLAGS_trace-event-perl.o += $(PERL_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-shadow -Wno-nested-externs -Wno-undef -Wno-switch-default -Wno-bad-function-cast -Wno-declaration-after-statement -Wno-switch-enum -Wno-thread-safety-analysis
>
> # -Wno-declaration-after-statement: The python headers have mixed code with declarations (decls after asserts, for instance)
> CFLAGS_trace-event-python.o += $(PYTHON_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-unused-parameter -Wno-shadow -Wno-deprecated-declarations -Wno-switch-enum -Wno-declaration-after-statement
>
> --
> 2.34.1
>
On Mon, Oct 06, 2025 at 10:56:43AM -0700, Ian Rogers wrote:
> On Mon, Oct 6, 2025 at 9:21 AM Leo Yan <leo.yan@arm.com> wrote:
> >
> > When build with perl5, it reports error:
> >
> > In file included from /usr/lib/perl5/5.42.0/x86_64-linux-thread-multi/CORE/perl.h:7933:
> > /usr/lib/perl5/5.42.0/x86_64-linux-thread-multi/CORE/inline.h:298:5: error:
> > mutex 'PL_env_mutex.lock' is not held on every path through
> > here [-Werror,-Wthread-safety-analysis]
> > 298 | ENV_UNLOCK;
> > | ^
> > /usr/lib/perl5/5.42.0/x86_64-linux-thread-multi/CORE/perl.h:7091:31: note:
> > expanded from macro 'ENV_UNLOCK'
> > 7091 | # define ENV_UNLOCK PERL_REENTRANT_UNLOCK("env"...
> > | ^
> > /usr/lib/perl5/5.42.0/x86_64-linux-thread-multi/CORE/perl.h:6465:7: note:
> > expanded from macro 'PERL_REENTRANT_UNLOCK'
> > 6465 | } STMT_END
> > | ^
> > /usr/lib/perl5/5.42.0/x86_64-linux-thread-multi/CORE/perl.h:865:28: note:
> > expanded from macro 'STMT_END'
> > 865 | # define STMT_END while (0)
> > | ^
> >
> > The error is caused by perl header but not perf code, disable thread
> > safety analysis if including the header.
> >
> > Though GCC does not support the thread safety analysis option, this
> > negative warning flag is silently ignored by it.
> >
> > Signed-off-by: Leo Yan <leo.yan@arm.com>
> > ---
> > tools/perf/scripts/perl/Perf-Trace-Util/Build | 2 +-
> > tools/perf/util/scripting-engines/Build | 2 +-
> > 2 files changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/tools/perf/scripts/perl/Perf-Trace-Util/Build b/tools/perf/scripts/perl/Perf-Trace-Util/Build
> > index 9b0e5a8b5070f1a1640518fae75557f824ef21ee..01a1a0ed51aefd721b4bc7eba728c29a8ffcd551 100644
> > --- a/tools/perf/scripts/perl/Perf-Trace-Util/Build
> > +++ b/tools/perf/scripts/perl/Perf-Trace-Util/Build
> > @@ -2,7 +2,7 @@ perf-util-y += Context.o
> >
> > CFLAGS_Context.o += $(PERL_EMBED_CCOPTS) -Wno-redundant-decls -Wno-strict-prototypes -Wno-bad-function-cast -Wno-declaration-after-statement -Wno-switch-enum
> > CFLAGS_Context.o += -Wno-unused-parameter -Wno-nested-externs -Wno-undef
> > -CFLAGS_Context.o += -Wno-switch-default -Wno-shadow
> > +CFLAGS_Context.o += -Wno-switch-default -Wno-shadow -Wno-thread-safety-analysis
>
> I wasn't able to reproduce this on Debian with perf-tools-next and:
> make -C tools/perf O=/tmp/perf DEBUG=1 CC=clang CXX=clang++
> HOSTCC=clang LIBPERL=1 clean all
> but my libperl is 5.40. I'm a little concerned that the warning may
> cause an unrecognized compiler option warning/error with GCC given
> progress on thread-safety-analysis has ended there. Anyway, these
> aren't blockers.
>
> Reviewed-by: Ian Rogers <irogers@google.com>
I was a bit wary and saw this on only, IIRC Manjaro Linux, and since
libperl support is opt-in, I left it in the backburner, but having it
building there as well may help detecting some other stuff with things
only enabled/present there, so thanks Leo and Ian, for the patch and the
Reviewed-by, applying.
- Arnaldo
© 2016 - 2025 Red Hat, Inc.