2023-04-17 12:37:04

by Anders Roxell

[permalink] [raw]
Subject: [backport PATCH 0/2] stable v5.15, v5.10 and v5.4: fix perf build errors

Hi,

I would like to see these patches backported. They are needed so perf
can be cross compiled with gcc on v5.15, v5.10 and v5.4.
I built it with tuxmake [1] here are two example commandlines:
tuxmake --runtime podman --target-arch arm64 --toolchain gcc-12 --kconfig defconfig perf
tuxmake --runtime podman --target-arch x86_64 --toolchain gcc-12 --kconfig defconfig perf

Tried to build perf with both gcc-11 and gcc-12.

Patch 'tools perf: Fix compilation error with new binutils'
and 'tools build: Add feature test for init_disassemble_info API changes'
didn't apply cleanly, thats why I send these in a patchset.

When apply 'tools build: Add feature test for
init_disassemble_info API changes' to 5.4 it will be a minor merge
conflict, do you want me to send this patch in two separate patches one
for 5.4 and another for v5.10?

The sha for these two patches in mainline are.
cfd59ca91467 tools build: Add feature test for init_disassemble_info API changes
83aa0120487e tools perf: Fix compilation error with new binutils

The above patches solves these:
util/annotate.c: In function 'symbol__disassemble_bpf':
util/annotate.c:1729:9: error: too few arguments to function 'init_disassemble_info'
1729 | init_disassemble_info(&info, s,
| ^~~~~~~~~~~~~~~~~~~~~


Please apply these to v5.10 and v5.4
a45b3d692623 tools include: add dis-asm-compat.h to handle version differences
d08c84e01afa perf sched: Cast PTHREAD_STACK_MIN to int as it may turn into sysconf(__SC_THREAD_STACK>

The above patches solves these:
/home/anders/src/kernel/stable-5.10/tools/include/linux/kernel.h:43:24: error: comparison of distinct pointer types lacks a cast [-Werror]
43 | (void) (&_max1 == &_max2); \
| ^~
builtin-sched.c:673:34: note: in expansion of macro 'max'
673 | (size_t) max(16 * 1024, PTHREAD_STACK_MIN));
| ^~~


Please apply these to v5.15, v5.10 and v5.4
8e8bf60a6754 perf build: Fixup disabling of -Wdeprecated-declarations for the python scripting engine
4ee3c4da8b1b perf scripting python: Do not build fail on deprecation warnings
63a4354ae75c perf scripting perl: Ignore some warnings to keep building with perl headers

Build error that the above 3 patches solves are:
/usr/lib/x86_64-linux-gnu/perl/5.36/CORE/handy.h:125:23: error: cast from function call of type 'STRLEN' {aka 'long unsigned int'} to non-matching type '_Bool' [-Werror=bad-function-cast]
125 | #define cBOOL(cbool) ((bool) (cbool))
| ^

Cheers,
Anders
[1] https://tuxmake.org/

Andres Freund (2):
tools perf: Fix compilation error with new binutils
tools build: Add feature test for init_disassemble_info API changes

tools/build/Makefile.feature | 1 +
tools/build/feature/Makefile | 4 ++++
tools/build/feature/test-all.c | 4 ++++
tools/build/feature/test-disassembler-init-styled.c | 13 +++++++++++++
tools/perf/Makefile.config | 8 ++++++++
tools/perf/util/annotate.c | 7 ++++---
6 files changed, 34 insertions(+), 3 deletions(-)
create mode 100644 tools/build/feature/test-disassembler-init-styled.c

--
2.39.2


2023-04-17 12:37:06

by Anders Roxell

[permalink] [raw]
Subject: [backport PATCH 1/2] tools perf: Fix compilation error with new binutils

From: Andres Freund <[email protected]>

binutils changed the signature of init_disassemble_info(), which now causes
compilation failures for tools/perf/util/annotate.c, e.g. on debian
unstable.

Relevant binutils commit:

https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07

Wire up the feature test and switch to init_disassemble_info_compat(),
which were introduced in prior commits, fixing the compilation failure.

I verified that perf can still disassemble bpf programs by using bpftrace
under load, recording a perf trace, and then annotating the bpf "function"
with and without the changes. With old binutils there's no change in output
before/after this patch. When comparing the output from old binutils (2.35)
to new bintuils with the patch (upstream snapshot) there are a few output
differences, but they are unrelated to this patch. An example hunk is:

1.15 : 55:mov %rbp,%rdx
0.00 : 58:add $0xfffffffffffffff8,%rdx
0.00 : 5c:xor %ecx,%ecx
- 1.03 : 5e:callq 0xffffffffe12aca3c
+ 1.03 : 5e:call 0xffffffffe12aca3c
0.00 : 63:xor %eax,%eax
- 2.18 : 65:leaveq
- 2.82 : 66:retq
+ 2.18 : 65:leave
+ 2.82 : 66:ret

Signed-off-by: Andres Freund <[email protected]>
Acked-by: Quentin Monnet <[email protected]>
Cc: Alexei Starovoitov <[email protected]>
Cc: Ben Hutchings <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Sedat Dilek <[email protected]>
Cc: [email protected]
Link: http://lore.kernel.org/lkml/[email protected]
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
Signed-off-by: Anders Roxell <[email protected]>
---
tools/perf/Makefile.config | 8 ++++++++
tools/perf/util/annotate.c | 7 ++++---
2 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index 3e7706c251e9..55905571f87b 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -281,6 +281,7 @@ FEATURE_CHECK_LDFLAGS-libpython := $(PYTHON_EMBED_LDOPTS)
FEATURE_CHECK_LDFLAGS-libaio = -lrt

FEATURE_CHECK_LDFLAGS-disassembler-four-args = -lbfd -lopcodes -ldl
+FEATURE_CHECK_LDFLAGS-disassembler-init-styled = -lbfd -lopcodes -ldl

CORE_CFLAGS += -fno-omit-frame-pointer
CORE_CFLAGS += -ggdb3
@@ -838,13 +839,16 @@ else
ifeq ($(feature-libbfd-liberty), 1)
EXTLIBS += -lbfd -lopcodes -liberty
FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -ldl
+ FEATURE_CHECK_LDFLAGS-disassembler-init-styled += -liberty -ldl
else
ifeq ($(feature-libbfd-liberty-z), 1)
EXTLIBS += -lbfd -lopcodes -liberty -lz
FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -lz -ldl
+ FEATURE_CHECK_LDFLAGS-disassembler-init-styled += -liberty -ldl
endif
endif
$(call feature_check,disassembler-four-args)
+ $(call feature_check,disassembler-init-styled)
endif

ifeq ($(feature-libbfd-buildid), 1)
@@ -957,6 +961,10 @@ ifeq ($(feature-disassembler-four-args), 1)
CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
endif

+ifeq ($(feature-disassembler-init-styled), 1)
+ CFLAGS += -DDISASM_INIT_STYLED
+endif
+
ifeq (${IS_64_BIT}, 1)
ifndef NO_PERF_READ_VDSO32
$(call feature_check,compile-32)
diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 308189454788..f2d1741b7610 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -1684,6 +1684,7 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
#define PACKAGE "perf"
#include <bfd.h>
#include <dis-asm.h>
+#include <tools/dis-asm-compat.h>

static int symbol__disassemble_bpf(struct symbol *sym,
struct annotate_args *args)
@@ -1726,9 +1727,9 @@ static int symbol__disassemble_bpf(struct symbol *sym,
ret = errno;
goto out;
}
- init_disassemble_info(&info, s,
- (fprintf_ftype) fprintf);
-
+ init_disassemble_info_compat(&info, s,
+ (fprintf_ftype) fprintf,
+ fprintf_styled);
info.arch = bfd_get_arch(bfdf);
info.mach = bfd_get_mach(bfdf);

--
2.39.2

2023-04-17 12:37:50

by Anders Roxell

[permalink] [raw]
Subject: [backport PATCH 2/2] tools build: Add feature test for init_disassemble_info API changes

From: Andres Freund <[email protected]>

binutils changed the signature of init_disassemble_info(), which now causes
compilation failures for tools/{perf,bpf}, e.g. on debian unstable.

Relevant binutils commit:

https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07

This commit adds a feature test to detect the new signature. Subsequent
commits will use it to fix the build failures.

Signed-off-by: Andres Freund <[email protected]>
Acked-by: Quentin Monnet <[email protected]>
Cc: Alexei Starovoitov <[email protected]>
Cc: Ben Hutchings <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Quentin Monnet <[email protected]>
Cc: Sedat Dilek <[email protected]>
Cc: [email protected]
Link: http://lore.kernel.org/lkml/[email protected]
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
Signed-off-by: Anders Roxell <[email protected]>
---
tools/build/Makefile.feature | 1 +
tools/build/feature/Makefile | 4 ++++
tools/build/feature/test-all.c | 4 ++++
tools/build/feature/test-disassembler-init-styled.c | 13 +++++++++++++
4 files changed, 22 insertions(+)
create mode 100644 tools/build/feature/test-disassembler-init-styled.c

diff --git a/tools/build/Makefile.feature b/tools/build/Makefile.feature
index e1d2c255669e..a789ccbad93a 100644
--- a/tools/build/Makefile.feature
+++ b/tools/build/Makefile.feature
@@ -69,6 +69,7 @@ FEATURE_TESTS_BASIC := \
libaio \
libzstd \
disassembler-four-args \
+ disassembler-init-styled \
file-handle

# FEATURE_TESTS_BASIC + FEATURE_TESTS_EXTRA is the complete list
diff --git a/tools/build/feature/Makefile b/tools/build/feature/Makefile
index 221250973d07..33ab9823ad0d 100644
--- a/tools/build/feature/Makefile
+++ b/tools/build/feature/Makefile
@@ -17,6 +17,7 @@ FILES= \
test-libbfd.bin \
test-libbfd-buildid.bin \
test-disassembler-four-args.bin \
+ test-disassembler-init-styled.bin \
test-reallocarray.bin \
test-libbfd-liberty.bin \
test-libbfd-liberty-z.bin \
@@ -235,6 +236,9 @@ $(OUTPUT)test-libbfd-buildid.bin:
$(OUTPUT)test-disassembler-four-args.bin:
$(BUILD) -DPACKAGE='"perf"' -lbfd -lopcodes

+$(OUTPUT)test-disassembler-init-styled.bin:
+ $(BUILD) -DPACKAGE='"perf"' -lbfd -lopcodes
+
$(OUTPUT)test-reallocarray.bin:
$(BUILD)

diff --git a/tools/build/feature/test-all.c b/tools/build/feature/test-all.c
index 09517ff2fad5..0cfbdc83ffbc 100644
--- a/tools/build/feature/test-all.c
+++ b/tools/build/feature/test-all.c
@@ -170,6 +170,10 @@
# include "test-disassembler-four-args.c"
#undef main

+#define main main_test_disassembler_init_styled
+# include "test-disassembler-init-styled.c"
+#undef main
+
#define main main_test_libzstd
# include "test-libzstd.c"
#undef main
diff --git a/tools/build/feature/test-disassembler-init-styled.c b/tools/build/feature/test-disassembler-init-styled.c
new file mode 100644
index 000000000000..f1ce0ec3bee9
--- /dev/null
+++ b/tools/build/feature/test-disassembler-init-styled.c
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: GPL-2.0
+#include <stdio.h>
+#include <dis-asm.h>
+
+int main(void)
+{
+ struct disassemble_info info;
+
+ init_disassemble_info(&info, stdout,
+ NULL, NULL);
+
+ return 0;
+}
--
2.39.2

2023-04-17 17:16:47

by Ian Rogers

[permalink] [raw]
Subject: Re: [backport PATCH 1/2] tools perf: Fix compilation error with new binutils

On Mon, Apr 17, 2023 at 5:30 AM Anders Roxell <[email protected]> wrote:
>
> From: Andres Freund <[email protected]>
>
> binutils changed the signature of init_disassemble_info(), which now causes
> compilation failures for tools/perf/util/annotate.c, e.g. on debian
> unstable.

Thanks, I believe the compilation issue may well be resolved by:
https://lore.kernel.org/lkml/[email protected]/
where binutils is made opt-in rather than opt-out.

> Relevant binutils commit:
>
> https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07
>
> Wire up the feature test and switch to init_disassemble_info_compat(),
> which were introduced in prior commits, fixing the compilation failure.

I was kind of surprised to see no version check ifdef. Is
init_disassemble_info_compat is supported in older binutils?

Thanks,
Ian

> I verified that perf can still disassemble bpf programs by using bpftrace
> under load, recording a perf trace, and then annotating the bpf "function"
> with and without the changes. With old binutils there's no change in output
> before/after this patch. When comparing the output from old binutils (2.35)
> to new bintuils with the patch (upstream snapshot) there are a few output
> differences, but they are unrelated to this patch. An example hunk is:
>
> 1.15 : 55:mov %rbp,%rdx
> 0.00 : 58:add $0xfffffffffffffff8,%rdx
> 0.00 : 5c:xor %ecx,%ecx
> - 1.03 : 5e:callq 0xffffffffe12aca3c
> + 1.03 : 5e:call 0xffffffffe12aca3c
> 0.00 : 63:xor %eax,%eax
> - 2.18 : 65:leaveq
> - 2.82 : 66:retq
> + 2.18 : 65:leave
> + 2.82 : 66:ret
>
> Signed-off-by: Andres Freund <[email protected]>
> Acked-by: Quentin Monnet <[email protected]>
> Cc: Alexei Starovoitov <[email protected]>
> Cc: Ben Hutchings <[email protected]>
> Cc: Jiri Olsa <[email protected]>
> Cc: Sedat Dilek <[email protected]>
> Cc: [email protected]
> Link: http://lore.kernel.org/lkml/[email protected]
> Link: https://lore.kernel.org/r/[email protected]
> Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
> Signed-off-by: Anders Roxell <[email protected]>
> ---
> tools/perf/Makefile.config | 8 ++++++++
> tools/perf/util/annotate.c | 7 ++++---
> 2 files changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
> index 3e7706c251e9..55905571f87b 100644
> --- a/tools/perf/Makefile.config
> +++ b/tools/perf/Makefile.config
> @@ -281,6 +281,7 @@ FEATURE_CHECK_LDFLAGS-libpython := $(PYTHON_EMBED_LDOPTS)
> FEATURE_CHECK_LDFLAGS-libaio = -lrt
>
> FEATURE_CHECK_LDFLAGS-disassembler-four-args = -lbfd -lopcodes -ldl
> +FEATURE_CHECK_LDFLAGS-disassembler-init-styled = -lbfd -lopcodes -ldl
>
> CORE_CFLAGS += -fno-omit-frame-pointer
> CORE_CFLAGS += -ggdb3
> @@ -838,13 +839,16 @@ else
> ifeq ($(feature-libbfd-liberty), 1)
> EXTLIBS += -lbfd -lopcodes -liberty
> FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -ldl
> + FEATURE_CHECK_LDFLAGS-disassembler-init-styled += -liberty -ldl
> else
> ifeq ($(feature-libbfd-liberty-z), 1)
> EXTLIBS += -lbfd -lopcodes -liberty -lz
> FEATURE_CHECK_LDFLAGS-disassembler-four-args += -liberty -lz -ldl
> + FEATURE_CHECK_LDFLAGS-disassembler-init-styled += -liberty -ldl
> endif
> endif
> $(call feature_check,disassembler-four-args)
> + $(call feature_check,disassembler-init-styled)
> endif
>
> ifeq ($(feature-libbfd-buildid), 1)
> @@ -957,6 +961,10 @@ ifeq ($(feature-disassembler-four-args), 1)
> CFLAGS += -DDISASM_FOUR_ARGS_SIGNATURE
> endif
>
> +ifeq ($(feature-disassembler-init-styled), 1)
> + CFLAGS += -DDISASM_INIT_STYLED
> +endif
> +
> ifeq (${IS_64_BIT}, 1)
> ifndef NO_PERF_READ_VDSO32
> $(call feature_check,compile-32)
> diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
> index 308189454788..f2d1741b7610 100644
> --- a/tools/perf/util/annotate.c
> +++ b/tools/perf/util/annotate.c
> @@ -1684,6 +1684,7 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
> #define PACKAGE "perf"
> #include <bfd.h>
> #include <dis-asm.h>
> +#include <tools/dis-asm-compat.h>
>
> static int symbol__disassemble_bpf(struct symbol *sym,
> struct annotate_args *args)
> @@ -1726,9 +1727,9 @@ static int symbol__disassemble_bpf(struct symbol *sym,
> ret = errno;
> goto out;
> }
> - init_disassemble_info(&info, s,
> - (fprintf_ftype) fprintf);
> -
> + init_disassemble_info_compat(&info, s,
> + (fprintf_ftype) fprintf,
> + fprintf_styled);
> info.arch = bfd_get_arch(bfdf);
> info.mach = bfd_get_mach(bfdf);
>
> --
> 2.39.2
>

2023-04-17 17:33:17

by Ian Rogers

[permalink] [raw]
Subject: Re: [backport PATCH 0/2] stable v5.15, v5.10 and v5.4: fix perf build errors

On Mon, Apr 17, 2023 at 5:30 AM Anders Roxell <[email protected]> wrote:
>
> Hi,
>
> I would like to see these patches backported. They are needed so perf
> can be cross compiled with gcc on v5.15, v5.10 and v5.4.

Thanks Anders, why not just use the latest perf for these kernels?
Perhaps this discussion is relevant:
https://lore.kernel.org/linux-perf-users/[email protected]/

Thanks,
Ian

> I built it with tuxmake [1] here are two example commandlines:
> tuxmake --runtime podman --target-arch arm64 --toolchain gcc-12 --kconfig defconfig perf
> tuxmake --runtime podman --target-arch x86_64 --toolchain gcc-12 --kconfig defconfig perf
>
> Tried to build perf with both gcc-11 and gcc-12.
>
> Patch 'tools perf: Fix compilation error with new binutils'
> and 'tools build: Add feature test for init_disassemble_info API changes'
> didn't apply cleanly, thats why I send these in a patchset.
>
> When apply 'tools build: Add feature test for
> init_disassemble_info API changes' to 5.4 it will be a minor merge
> conflict, do you want me to send this patch in two separate patches one
> for 5.4 and another for v5.10?
>
> The sha for these two patches in mainline are.
> cfd59ca91467 tools build: Add feature test for init_disassemble_info API changes
> 83aa0120487e tools perf: Fix compilation error with new binutils
>
> The above patches solves these:
> util/annotate.c: In function 'symbol__disassemble_bpf':
> util/annotate.c:1729:9: error: too few arguments to function 'init_disassemble_info'
> 1729 | init_disassemble_info(&info, s,
> | ^~~~~~~~~~~~~~~~~~~~~
>
>
> Please apply these to v5.10 and v5.4
> a45b3d692623 tools include: add dis-asm-compat.h to handle version differences
> d08c84e01afa perf sched: Cast PTHREAD_STACK_MIN to int as it may turn into sysconf(__SC_THREAD_STACK>
>
> The above patches solves these:
> /home/anders/src/kernel/stable-5.10/tools/include/linux/kernel.h:43:24: error: comparison of distinct pointer types lacks a cast [-Werror]
> 43 | (void) (&_max1 == &_max2); \
> | ^~
> builtin-sched.c:673:34: note: in expansion of macro 'max'
> 673 | (size_t) max(16 * 1024, PTHREAD_STACK_MIN));
> | ^~~
>
>
> Please apply these to v5.15, v5.10 and v5.4
> 8e8bf60a6754 perf build: Fixup disabling of -Wdeprecated-declarations for the python scripting engine
> 4ee3c4da8b1b perf scripting python: Do not build fail on deprecation warnings
> 63a4354ae75c perf scripting perl: Ignore some warnings to keep building with perl headers
>
> Build error that the above 3 patches solves are:
> /usr/lib/x86_64-linux-gnu/perl/5.36/CORE/handy.h:125:23: error: cast from function call of type 'STRLEN' {aka 'long unsigned int'} to non-matching type '_Bool' [-Werror=bad-function-cast]
> 125 | #define cBOOL(cbool) ((bool) (cbool))
> | ^
>
> Cheers,
> Anders
> [1] https://tuxmake.org/
>
> Andres Freund (2):
> tools perf: Fix compilation error with new binutils
> tools build: Add feature test for init_disassemble_info API changes
>
> tools/build/Makefile.feature | 1 +
> tools/build/feature/Makefile | 4 ++++
> tools/build/feature/test-all.c | 4 ++++
> tools/build/feature/test-disassembler-init-styled.c | 13 +++++++++++++
> tools/perf/Makefile.config | 8 ++++++++
> tools/perf/util/annotate.c | 7 ++++---
> 6 files changed, 34 insertions(+), 3 deletions(-)
> create mode 100644 tools/build/feature/test-disassembler-init-styled.c
>
> --
> 2.39.2
>

2023-04-18 09:07:01

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [backport PATCH 0/2] stable v5.15, v5.10 and v5.4: fix perf build errors

On Mon, Apr 17, 2023 at 02:29:41PM +0200, Anders Roxell wrote:
> Hi,
>
> I would like to see these patches backported. They are needed so perf
> can be cross compiled with gcc on v5.15, v5.10 and v5.4.
> I built it with tuxmake [1] here are two example commandlines:
> tuxmake --runtime podman --target-arch arm64 --toolchain gcc-12 --kconfig defconfig perf
> tuxmake --runtime podman --target-arch x86_64 --toolchain gcc-12 --kconfig defconfig perf
>
> Tried to build perf with both gcc-11 and gcc-12.
>
> Patch 'tools perf: Fix compilation error with new binutils'
> and 'tools build: Add feature test for init_disassemble_info API changes'
> didn't apply cleanly, thats why I send these in a patchset.
>
> When apply 'tools build: Add feature test for
> init_disassemble_info API changes' to 5.4 it will be a minor merge
> conflict, do you want me to send this patch in two separate patches one
> for 5.4 and another for v5.10?
>
> The sha for these two patches in mainline are.
> cfd59ca91467 tools build: Add feature test for init_disassemble_info API changes
> 83aa0120487e tools perf: Fix compilation error with new binutils
>
> The above patches solves these:
> util/annotate.c: In function 'symbol__disassemble_bpf':
> util/annotate.c:1729:9: error: too few arguments to function 'init_disassemble_info'
> 1729 | init_disassemble_info(&info, s,
> | ^~~~~~~~~~~~~~~~~~~~~
>
>
> Please apply these to v5.10 and v5.4
> a45b3d692623 tools include: add dis-asm-compat.h to handle version differences
> d08c84e01afa perf sched: Cast PTHREAD_STACK_MIN to int as it may turn into sysconf(__SC_THREAD_STACK>
>
> The above patches solves these:
> /home/anders/src/kernel/stable-5.10/tools/include/linux/kernel.h:43:24: error: comparison of distinct pointer types lacks a cast [-Werror]
> 43 | (void) (&_max1 == &_max2); \
> | ^~
> builtin-sched.c:673:34: note: in expansion of macro 'max'
> 673 | (size_t) max(16 * 1024, PTHREAD_STACK_MIN));
> | ^~~
>
>
> Please apply these to v5.15, v5.10 and v5.4
> 8e8bf60a6754 perf build: Fixup disabling of -Wdeprecated-declarations for the python scripting engine
> 4ee3c4da8b1b perf scripting python: Do not build fail on deprecation warnings
> 63a4354ae75c perf scripting perl: Ignore some warnings to keep building with perl headers

Can you please provide patch series of these upstream commits backported
to the relevant branchs that you wish to see them in? You have 2
patches in this series without git commit ids, and I have no idea where
to apply them, or not apply them...

Or better yet, just use the latest version of perf as was pointed out,
on these old kernel releases.

thanks,

greg k-h

2023-04-18 16:44:33

by Quentin Monnet

[permalink] [raw]
Subject: Re: [backport PATCH 1/2] tools perf: Fix compilation error with new binutils

2023-04-17 10:14 UTC-0700 ~ Ian Rogers <[email protected]>
> On Mon, Apr 17, 2023 at 5:30 AM Anders Roxell <[email protected]> wrote:
>>
>> From: Andres Freund <[email protected]>
>>
>> binutils changed the signature of init_disassemble_info(), which now causes
>> compilation failures for tools/perf/util/annotate.c, e.g. on debian
>> unstable.
>
> Thanks, I believe the compilation issue may well be resolved by:
> https://lore.kernel.org/lkml/[email protected]/
> where binutils is made opt-in rather than opt-out.

Hi,
These commits are to make it possible to build against recent binutils,
without having to leave it out at compile time, so as I understand they
address a different issue?

>
>> Relevant binutils commit:
>>
>> https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07
>>
>> Wire up the feature test and switch to init_disassemble_info_compat(),
>> which were introduced in prior commits, fixing the compilation failure.
>
> I was kind of surprised to see no version check ifdef. Is
> init_disassemble_info_compat is supported in older binutils?

It is not part of binutils, it was introduced in commit a45b3d692623
("tools include: add dis-asm-compat.h to handle version differences"),
which should likely be backported alongside these ones if it hasn't been
already. Possibly the others from the same series [0], as well?

I think all 5 patches from Andres' series were backported to 5.15 [1].

[0]
https://lore.kernel.org/all/[email protected]/t/#m999a44663894e235b523ffc41ce87e956019ea72
[1]
https://lore.kernel.org/all/[email protected]/t/#u

Best regards,
Quentin

2023-04-18 18:14:19

by Ian Rogers

[permalink] [raw]
Subject: Re: [backport PATCH 1/2] tools perf: Fix compilation error with new binutils

On Tue, Apr 18, 2023 at 9:43 AM Quentin Monnet <[email protected]> wrote:
>
> 2023-04-17 10:14 UTC-0700 ~ Ian Rogers <[email protected]>
> > On Mon, Apr 17, 2023 at 5:30 AM Anders Roxell <[email protected]> wrote:
> >>
> >> From: Andres Freund <[email protected]>
> >>
> >> binutils changed the signature of init_disassemble_info(), which now causes
> >> compilation failures for tools/perf/util/annotate.c, e.g. on debian
> >> unstable.
> >
> > Thanks, I believe the compilation issue may well be resolved by:
> > https://lore.kernel.org/lkml/[email protected]/
> > where binutils is made opt-in rather than opt-out.
>
> Hi,
> These commits are to make it possible to build against recent binutils,
> without having to leave it out at compile time, so as I understand they
> address a different issue?

Kind of. We don't want the Linux perf build to break. Previously if
binutils were installed then Linux perf would default to linking with
it and break your build were binutils to change its API. That is no
longer the case as we don't default to linking against binutils. This
was motivated by distributions not being able to link Linux perf with
binutils due to the license incompatibilities. I don't see a problem
supporting linking against newer and older binutils if people want to
on non-distributed binaries. We'll probably need more build
tests/containers to cover the possibilities of this. I'm not sure
what's motivating binutils support other than personal experimentation
though.

Thanks,
Ian


> >
> >> Relevant binutils commit:
> >>
> >> https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=60a3da00bd5407f07
> >>
> >> Wire up the feature test and switch to init_disassemble_info_compat(),
> >> which were introduced in prior commits, fixing the compilation failure.
> >
> > I was kind of surprised to see no version check ifdef. Is
> > init_disassemble_info_compat is supported in older binutils?
>
> It is not part of binutils, it was introduced in commit a45b3d692623
> ("tools include: add dis-asm-compat.h to handle version differences"),
> which should likely be backported alongside these ones if it hasn't been
> already. Possibly the others from the same series [0], as well?
>
> I think all 5 patches from Andres' series were backported to 5.15 [1].
>
> [0]
> https://lore.kernel.org/all/[email protected]/t/#m999a44663894e235b523ffc41ce87e956019ea72
> [1]
> https://lore.kernel.org/all/[email protected]/t/#u
>
> Best regards,
> Quentin

2023-04-20 18:32:24

by Anders Roxell

[permalink] [raw]
Subject: Re: [backport PATCH 0/2] stable v5.15, v5.10 and v5.4: fix perf build errors

On Tue, 18 Apr 2023 at 11:04, Greg KH <[email protected]> wrote:
>
> On Mon, Apr 17, 2023 at 02:29:41PM +0200, Anders Roxell wrote:
> > Hi,
> >
> > I would like to see these patches backported. They are needed so perf
> > can be cross compiled with gcc on v5.15, v5.10 and v5.4.
> > I built it with tuxmake [1] here are two example commandlines:
> > tuxmake --runtime podman --target-arch arm64 --toolchain gcc-12 --kconfig defconfig perf
> > tuxmake --runtime podman --target-arch x86_64 --toolchain gcc-12 --kconfig defconfig perf
> >
> > Tried to build perf with both gcc-11 and gcc-12.
> >
> > Patch 'tools perf: Fix compilation error with new binutils'
> > and 'tools build: Add feature test for init_disassemble_info API changes'
> > didn't apply cleanly, thats why I send these in a patchset.
> >
> > When apply 'tools build: Add feature test for
> > init_disassemble_info API changes' to 5.4 it will be a minor merge
> > conflict, do you want me to send this patch in two separate patches one
> > for 5.4 and another for v5.10?
> >
> > The sha for these two patches in mainline are.
> > cfd59ca91467 tools build: Add feature test for init_disassemble_info API changes
> > 83aa0120487e tools perf: Fix compilation error with new binutils
> >
> > The above patches solves these:
> > util/annotate.c: In function 'symbol__disassemble_bpf':
> > util/annotate.c:1729:9: error: too few arguments to function 'init_disassemble_info'
> > 1729 | init_disassemble_info(&info, s,
> > | ^~~~~~~~~~~~~~~~~~~~~
> >
> >
> > Please apply these to v5.10 and v5.4
> > a45b3d692623 tools include: add dis-asm-compat.h to handle version differences
> > d08c84e01afa perf sched: Cast PTHREAD_STACK_MIN to int as it may turn into sysconf(__SC_THREAD_STACK>
> >
> > The above patches solves these:
> > /home/anders/src/kernel/stable-5.10/tools/include/linux/kernel.h:43:24: error: comparison of distinct pointer types lacks a cast [-Werror]
> > 43 | (void) (&_max1 == &_max2); \
> > | ^~
> > builtin-sched.c:673:34: note: in expansion of macro 'max'
> > 673 | (size_t) max(16 * 1024, PTHREAD_STACK_MIN));
> > | ^~~
> >
> >
> > Please apply these to v5.15, v5.10 and v5.4
> > 8e8bf60a6754 perf build: Fixup disabling of -Wdeprecated-declarations for the python scripting engine
> > 4ee3c4da8b1b perf scripting python: Do not build fail on deprecation warnings
> > 63a4354ae75c perf scripting perl: Ignore some warnings to keep building with perl headers
>
> Can you please provide patch series of these upstream commits backported
> to the relevant branchs that you wish to see them in? You have 2
> patches in this series without git commit ids, and I have no idea where
> to apply them, or not apply them...

Yes, apologies, I will get that fixed up.

>
> Or better yet, just use the latest version of perf as was pointed out,
> on these old kernel releases.

Makes sense, we can do this. Is this the preferred way going forward?

Cheers,
Anders

2023-04-20 20:42:07

by Ian Rogers

[permalink] [raw]
Subject: Re: [backport PATCH 0/2] stable v5.15, v5.10 and v5.4: fix perf build errors

On Thu, Apr 20, 2023 at 11:24 AM Anders Roxell <[email protected]> wrote:
>
> On Tue, 18 Apr 2023 at 11:04, Greg KH <[email protected]> wrote:
> >
> > On Mon, Apr 17, 2023 at 02:29:41PM +0200, Anders Roxell wrote:
> > > Hi,
> > >
> > > I would like to see these patches backported. They are needed so perf
> > > can be cross compiled with gcc on v5.15, v5.10 and v5.4.
> > > I built it with tuxmake [1] here are two example commandlines:
> > > tuxmake --runtime podman --target-arch arm64 --toolchain gcc-12 --kconfig defconfig perf
> > > tuxmake --runtime podman --target-arch x86_64 --toolchain gcc-12 --kconfig defconfig perf
> > >
> > > Tried to build perf with both gcc-11 and gcc-12.
> > >
> > > Patch 'tools perf: Fix compilation error with new binutils'
> > > and 'tools build: Add feature test for init_disassemble_info API changes'
> > > didn't apply cleanly, thats why I send these in a patchset.
> > >
> > > When apply 'tools build: Add feature test for
> > > init_disassemble_info API changes' to 5.4 it will be a minor merge
> > > conflict, do you want me to send this patch in two separate patches one
> > > for 5.4 and another for v5.10?
> > >
> > > The sha for these two patches in mainline are.
> > > cfd59ca91467 tools build: Add feature test for init_disassemble_info API changes
> > > 83aa0120487e tools perf: Fix compilation error with new binutils
> > >
> > > The above patches solves these:
> > > util/annotate.c: In function 'symbol__disassemble_bpf':
> > > util/annotate.c:1729:9: error: too few arguments to function 'init_disassemble_info'
> > > 1729 | init_disassemble_info(&info, s,
> > > | ^~~~~~~~~~~~~~~~~~~~~
> > >
> > >
> > > Please apply these to v5.10 and v5.4
> > > a45b3d692623 tools include: add dis-asm-compat.h to handle version differences
> > > d08c84e01afa perf sched: Cast PTHREAD_STACK_MIN to int as it may turn into sysconf(__SC_THREAD_STACK>
> > >
> > > The above patches solves these:
> > > /home/anders/src/kernel/stable-5.10/tools/include/linux/kernel.h:43:24: error: comparison of distinct pointer types lacks a cast [-Werror]
> > > 43 | (void) (&_max1 == &_max2); \
> > > | ^~
> > > builtin-sched.c:673:34: note: in expansion of macro 'max'
> > > 673 | (size_t) max(16 * 1024, PTHREAD_STACK_MIN));
> > > | ^~~
> > >
> > >
> > > Please apply these to v5.15, v5.10 and v5.4
> > > 8e8bf60a6754 perf build: Fixup disabling of -Wdeprecated-declarations for the python scripting engine
> > > 4ee3c4da8b1b perf scripting python: Do not build fail on deprecation warnings
> > > 63a4354ae75c perf scripting perl: Ignore some warnings to keep building with perl headers
> >
> > Can you please provide patch series of these upstream commits backported
> > to the relevant branchs that you wish to see them in? You have 2
> > patches in this series without git commit ids, and I have no idea where
> > to apply them, or not apply them...
>
> Yes, apologies, I will get that fixed up.
>
> >
> > Or better yet, just use the latest version of perf as was pointed out,
> > on these old kernel releases.
>
> Makes sense, we can do this. Is this the preferred way going forward?

Fwiw, it definitely has my vote.

Thanks,
Ian

> Cheers,
> Anders