* Re: [PATCH 1/2] kbuild: Check version of objdump
2024-12-16 23:12 ` [PATCH 1/2] kbuild: Check version of objdump Charlie Jenkins
@ 2024-12-18 15:14 ` Conor Dooley
2024-12-18 15:40 ` Conor Dooley
2024-12-21 6:49 ` Masahiro Yamada
2024-12-23 16:33 ` kernel test robot
2 siblings, 1 reply; 10+ messages in thread
From: Conor Dooley @ 2024-12-18 15:14 UTC (permalink / raw)
To: Charlie Jenkins
Cc: Masahiro Yamada, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt,
Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Mickaël Salaün,
Günther Noack, Nelson Chu, linux-kernel, linux-kbuild,
linux-riscv, llvm, linux-perf-users, linux-security-module
[-- Attachment #1: Type: text/plain, Size: 4449 bytes --]
On Mon, Dec 16, 2024 at 03:12:51PM -0800, Charlie Jenkins wrote:
> Similar to ld-version, add a way to check the version of objdump. This
> should most of the time end up being the binutils version or the llvm
> version.
>
> Signed-off-by: Charlie Jenkins <charlie@rivosinc.com>
This fails for allmodconfig and rv32_defconfig with clang. 19.1.1
according to Bjorn :)
Cheers,
Conor.
> ---
> init/Kconfig | 10 +++++++
> scripts/Kconfig.include | 6 ++++
> scripts/objdump-version.sh | 69 ++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 85 insertions(+)
>
> diff --git a/init/Kconfig b/init/Kconfig
> index a20e6efd3f0fbdd7f0df2448854cc30734a0ee4f..0b5d36f939e1de89c12ebdd61e4815015314d4f1 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -60,6 +60,16 @@ config LLD_VERSION
> default $(ld-version) if LD_IS_LLD
> default 0
>
> +config OBJDUMP_IS_GNU
> + def_bool $(success,test "$(objdump-name)" = objdump)
> +
> +config OBJDUMP_IS_LLVM
> + def_bool $(success,test "$(objdump-name)" = llvm-objdump)
> +
> +config OBJDUMP_VERSION
> + int
> + default $(objdump-version)
> +
> config RUSTC_VERSION
> int
> default $(rustc-version)
> diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include
> index 33193ca6e8030e659d6b321acaea1acd42c387a4..cb3e2d2564fea8cce780adb3be672c9596b7ccf2 100644
> --- a/scripts/Kconfig.include
> +++ b/scripts/Kconfig.include
> @@ -58,6 +58,12 @@ $(error-if,$(success,test -z "$(ld-info)"),Sorry$(comma) this linker is not supp
> ld-name := $(shell,set -- $(ld-info) && echo $1)
> ld-version := $(shell,set -- $(ld-info) && echo $2)
>
> +# Get the objdump name, version, and error out if it is not supported.
> +objdump-info := $(shell,$(srctree)/scripts/objdump-version.sh $(OBJDUMP))
> +$(error-if,$(success,test -z "$(objdump-info)"),Sorry$(comma) this objdump is not supported.)
> +objdump-name := $(shell,set -- $(objdump-info) && echo $1)
> +objdump-version := $(shell,set -- $(objdump-info) && echo $2)
> +
> # machine bit flags
> # $(m32-flag): -m32 if the compiler supports it, or an empty string otherwise.
> # $(m64-flag): -m64 if the compiler supports it, or an empty string otherwise.
> diff --git a/scripts/objdump-version.sh b/scripts/objdump-version.sh
> new file mode 100755
> index 0000000000000000000000000000000000000000..fa24f8dc2d3c42fd1195fceb3c96b27f7127db25
> --- /dev/null
> +++ b/scripts/objdump-version.sh
> @@ -0,0 +1,69 @@
> +#!/bin/sh
> +# SPDX-License-Identifier: GPL-2.0
> +#
> +# Print the objdump name and its version in a 5 or 6-digit form.
> +# Also, perform the minimum version check.
> +
> +set -e
> +
> +# Convert the version string x.y.z to a canonical 5 or 6-digit form.
> +get_canonical_version()
> +{
> + IFS=.
> + set -- $1
> +
> + # If the 2nd or 3rd field is missing, fill it with a zero.
> + #
> + # The 4th field, if present, is ignored.
> + # This occurs in development snapshots as in 2.35.1.20201116
> + echo $((10000 * $1 + 100 * ${2:-0} + ${3:-0}))
> +}
> +
> +orig_args="$@"
> +
> +# Get the first line of the --version output.
> +IFS='
> +'
> +set -- $(LC_ALL=C "$@" --version)
> +
> +# Split the line on spaces.
> +IFS=' '
> +set -- $1
> +
> +min_tool_version=$(dirname $0)/min-tool-version.sh
> +
> +if [ "$1" = GNU -a "$2" = objdump ]; then
> + shift $(($# - 1))
> + version=$1
> + min_version=$($min_tool_version binutils)
> + disp_name="GNU objdump"
> +else
> + while [ $# -gt 1 -a "$1" != "LLVM" ]; do
> + shift
> + done
> +
> + if [ "$1" = LLVM ]; then
> + version=$3
> + min_version=$($min_tool_version llvm)
> + disp_name="llvm-objdump"
> + else
> + echo "$orig_args: unknown objdump" >&2
> + exit 1
> + fi
> +fi
> +
> +version=${version%%[!0-9.]*}
> +
> +cversion=$(get_canonical_version $version)
> +min_cversion=$(get_canonical_version $min_version)
> +
> +if [ "$cversion" -lt "$min_cversion" ]; then
> + echo >&2 "***"
> + echo >&2 "*** objdump is too old."
> + echo >&2 "*** Your $disp_name version: $version"
> + echo >&2 "*** Minimum $disp_name version: $min_version"
> + echo >&2 "***"
> + exit 1
> +fi
> +
> +echo objdump $cversion
>
> --
> 2.34.1
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: [PATCH 1/2] kbuild: Check version of objdump
2024-12-18 15:14 ` Conor Dooley
@ 2024-12-18 15:40 ` Conor Dooley
2024-12-18 21:55 ` Charlie Jenkins
0 siblings, 1 reply; 10+ messages in thread
From: Conor Dooley @ 2024-12-18 15:40 UTC (permalink / raw)
To: Charlie Jenkins
Cc: Masahiro Yamada, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt,
Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Mickaël Salaün,
Günther Noack, Nelson Chu, linux-kernel, linux-kbuild,
linux-riscv, llvm, linux-perf-users, linux-security-module
[-- Attachment #1: Type: text/plain, Size: 5310 bytes --]
On Wed, Dec 18, 2024 at 03:14:46PM +0000, Conor Dooley wrote:
> On Mon, Dec 16, 2024 at 03:12:51PM -0800, Charlie Jenkins wrote:
> > Similar to ld-version, add a way to check the version of objdump. This
> > should most of the time end up being the binutils version or the llvm
> > version.
> >
> > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com>
>
> This fails for allmodconfig and rv32_defconfig with clang. 19.1.1
> according to Bjorn :)
Some additional info from Bjorn:
https://paste.debian.net/1340410
and the steps to reproduce:
https://paste.debian.net/1340408
That should not be reporting 13.0.1, it should be 19.1.x, there's one
included in the toolchains we use from https://mirrors.edge.kernel.org/pub/tools/llvm/
13.0.1 looks like a host toolchain?
>
> Cheers,
> Conor.
>
> > ---
> > init/Kconfig | 10 +++++++
> > scripts/Kconfig.include | 6 ++++
> > scripts/objdump-version.sh | 69 ++++++++++++++++++++++++++++++++++++++++++++++
> > 3 files changed, 85 insertions(+)
> >
> > diff --git a/init/Kconfig b/init/Kconfig
> > index a20e6efd3f0fbdd7f0df2448854cc30734a0ee4f..0b5d36f939e1de89c12ebdd61e4815015314d4f1 100644
> > --- a/init/Kconfig
> > +++ b/init/Kconfig
> > @@ -60,6 +60,16 @@ config LLD_VERSION
> > default $(ld-version) if LD_IS_LLD
> > default 0
> >
> > +config OBJDUMP_IS_GNU
> > + def_bool $(success,test "$(objdump-name)" = objdump)
> > +
> > +config OBJDUMP_IS_LLVM
> > + def_bool $(success,test "$(objdump-name)" = llvm-objdump)
> > +
> > +config OBJDUMP_VERSION
> > + int
> > + default $(objdump-version)
> > +
> > config RUSTC_VERSION
> > int
> > default $(rustc-version)
> > diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include
> > index 33193ca6e8030e659d6b321acaea1acd42c387a4..cb3e2d2564fea8cce780adb3be672c9596b7ccf2 100644
> > --- a/scripts/Kconfig.include
> > +++ b/scripts/Kconfig.include
> > @@ -58,6 +58,12 @@ $(error-if,$(success,test -z "$(ld-info)"),Sorry$(comma) this linker is not supp
> > ld-name := $(shell,set -- $(ld-info) && echo $1)
> > ld-version := $(shell,set -- $(ld-info) && echo $2)
> >
> > +# Get the objdump name, version, and error out if it is not supported.
> > +objdump-info := $(shell,$(srctree)/scripts/objdump-version.sh $(OBJDUMP))
> > +$(error-if,$(success,test -z "$(objdump-info)"),Sorry$(comma) this objdump is not supported.)
> > +objdump-name := $(shell,set -- $(objdump-info) && echo $1)
> > +objdump-version := $(shell,set -- $(objdump-info) && echo $2)
> > +
> > # machine bit flags
> > # $(m32-flag): -m32 if the compiler supports it, or an empty string otherwise.
> > # $(m64-flag): -m64 if the compiler supports it, or an empty string otherwise.
> > diff --git a/scripts/objdump-version.sh b/scripts/objdump-version.sh
> > new file mode 100755
> > index 0000000000000000000000000000000000000000..fa24f8dc2d3c42fd1195fceb3c96b27f7127db25
> > --- /dev/null
> > +++ b/scripts/objdump-version.sh
> > @@ -0,0 +1,69 @@
> > +#!/bin/sh
> > +# SPDX-License-Identifier: GPL-2.0
> > +#
> > +# Print the objdump name and its version in a 5 or 6-digit form.
> > +# Also, perform the minimum version check.
> > +
> > +set -e
> > +
> > +# Convert the version string x.y.z to a canonical 5 or 6-digit form.
> > +get_canonical_version()
> > +{
> > + IFS=.
> > + set -- $1
> > +
> > + # If the 2nd or 3rd field is missing, fill it with a zero.
> > + #
> > + # The 4th field, if present, is ignored.
> > + # This occurs in development snapshots as in 2.35.1.20201116
> > + echo $((10000 * $1 + 100 * ${2:-0} + ${3:-0}))
> > +}
> > +
> > +orig_args="$@"
> > +
> > +# Get the first line of the --version output.
> > +IFS='
> > +'
> > +set -- $(LC_ALL=C "$@" --version)
> > +
> > +# Split the line on spaces.
> > +IFS=' '
> > +set -- $1
> > +
> > +min_tool_version=$(dirname $0)/min-tool-version.sh
> > +
> > +if [ "$1" = GNU -a "$2" = objdump ]; then
> > + shift $(($# - 1))
> > + version=$1
> > + min_version=$($min_tool_version binutils)
> > + disp_name="GNU objdump"
> > +else
> > + while [ $# -gt 1 -a "$1" != "LLVM" ]; do
> > + shift
> > + done
> > +
> > + if [ "$1" = LLVM ]; then
> > + version=$3
> > + min_version=$($min_tool_version llvm)
> > + disp_name="llvm-objdump"
> > + else
> > + echo "$orig_args: unknown objdump" >&2
> > + exit 1
> > + fi
> > +fi
> > +
> > +version=${version%%[!0-9.]*}
> > +
> > +cversion=$(get_canonical_version $version)
> > +min_cversion=$(get_canonical_version $min_version)
> > +
> > +if [ "$cversion" -lt "$min_cversion" ]; then
> > + echo >&2 "***"
> > + echo >&2 "*** objdump is too old."
> > + echo >&2 "*** Your $disp_name version: $version"
> > + echo >&2 "*** Minimum $disp_name version: $min_version"
> > + echo >&2 "***"
> > + exit 1
> > +fi
> > +
> > +echo objdump $cversion
> >
> > --
> > 2.34.1
> >
> >
> > _______________________________________________
> > linux-riscv mailing list
> > linux-riscv@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-riscv
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: [PATCH 1/2] kbuild: Check version of objdump
2024-12-18 15:40 ` Conor Dooley
@ 2024-12-18 21:55 ` Charlie Jenkins
0 siblings, 0 replies; 10+ messages in thread
From: Charlie Jenkins @ 2024-12-18 21:55 UTC (permalink / raw)
To: Conor Dooley
Cc: Masahiro Yamada, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Nathan Chancellor, Nick Desaulniers, Bill Wendling, Justin Stitt,
Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Mickaël Salaün,
Günther Noack, Nelson Chu, linux-kernel, linux-kbuild,
linux-riscv, llvm, linux-perf-users, linux-security-module
On Wed, Dec 18, 2024 at 03:40:25PM +0000, Conor Dooley wrote:
> On Wed, Dec 18, 2024 at 03:14:46PM +0000, Conor Dooley wrote:
> > On Mon, Dec 16, 2024 at 03:12:51PM -0800, Charlie Jenkins wrote:
> > > Similar to ld-version, add a way to check the version of objdump. This
> > > should most of the time end up being the binutils version or the llvm
> > > version.
> > >
> > > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com>
> >
> > This fails for allmodconfig and rv32_defconfig with clang. 19.1.1
> > according to Bjorn :)
>
> Some additional info from Bjorn:
> https://paste.debian.net/1340410
> and the steps to reproduce:
> https://paste.debian.net/1340408
>
> That should not be reporting 13.0.1, it should be 19.1.x, there's one
> included in the toolchains we use from https://mirrors.edge.kernel.org/pub/tools/llvm/
>
> 13.0.1 looks like a host toolchain?
I ended up sending a v2 that dropped this in favor of detecting this at
runtime [1] so this is no longer needed.
- Charlie
Link:
https://lore.kernel.org/lkml/20241217-perf_fix_riscv_obj_reading-v2-1-58f81b7b4c7d@rivosinc.com/
[1]
>
> >
> > Cheers,
> > Conor.
> >
> > > ---
> > > init/Kconfig | 10 +++++++
> > > scripts/Kconfig.include | 6 ++++
> > > scripts/objdump-version.sh | 69 ++++++++++++++++++++++++++++++++++++++++++++++
> > > 3 files changed, 85 insertions(+)
> > >
> > > diff --git a/init/Kconfig b/init/Kconfig
> > > index a20e6efd3f0fbdd7f0df2448854cc30734a0ee4f..0b5d36f939e1de89c12ebdd61e4815015314d4f1 100644
> > > --- a/init/Kconfig
> > > +++ b/init/Kconfig
> > > @@ -60,6 +60,16 @@ config LLD_VERSION
> > > default $(ld-version) if LD_IS_LLD
> > > default 0
> > >
> > > +config OBJDUMP_IS_GNU
> > > + def_bool $(success,test "$(objdump-name)" = objdump)
> > > +
> > > +config OBJDUMP_IS_LLVM
> > > + def_bool $(success,test "$(objdump-name)" = llvm-objdump)
> > > +
> > > +config OBJDUMP_VERSION
> > > + int
> > > + default $(objdump-version)
> > > +
> > > config RUSTC_VERSION
> > > int
> > > default $(rustc-version)
> > > diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include
> > > index 33193ca6e8030e659d6b321acaea1acd42c387a4..cb3e2d2564fea8cce780adb3be672c9596b7ccf2 100644
> > > --- a/scripts/Kconfig.include
> > > +++ b/scripts/Kconfig.include
> > > @@ -58,6 +58,12 @@ $(error-if,$(success,test -z "$(ld-info)"),Sorry$(comma) this linker is not supp
> > > ld-name := $(shell,set -- $(ld-info) && echo $1)
> > > ld-version := $(shell,set -- $(ld-info) && echo $2)
> > >
> > > +# Get the objdump name, version, and error out if it is not supported.
> > > +objdump-info := $(shell,$(srctree)/scripts/objdump-version.sh $(OBJDUMP))
> > > +$(error-if,$(success,test -z "$(objdump-info)"),Sorry$(comma) this objdump is not supported.)
> > > +objdump-name := $(shell,set -- $(objdump-info) && echo $1)
> > > +objdump-version := $(shell,set -- $(objdump-info) && echo $2)
> > > +
> > > # machine bit flags
> > > # $(m32-flag): -m32 if the compiler supports it, or an empty string otherwise.
> > > # $(m64-flag): -m64 if the compiler supports it, or an empty string otherwise.
> > > diff --git a/scripts/objdump-version.sh b/scripts/objdump-version.sh
> > > new file mode 100755
> > > index 0000000000000000000000000000000000000000..fa24f8dc2d3c42fd1195fceb3c96b27f7127db25
> > > --- /dev/null
> > > +++ b/scripts/objdump-version.sh
> > > @@ -0,0 +1,69 @@
> > > +#!/bin/sh
> > > +# SPDX-License-Identifier: GPL-2.0
> > > +#
> > > +# Print the objdump name and its version in a 5 or 6-digit form.
> > > +# Also, perform the minimum version check.
> > > +
> > > +set -e
> > > +
> > > +# Convert the version string x.y.z to a canonical 5 or 6-digit form.
> > > +get_canonical_version()
> > > +{
> > > + IFS=.
> > > + set -- $1
> > > +
> > > + # If the 2nd or 3rd field is missing, fill it with a zero.
> > > + #
> > > + # The 4th field, if present, is ignored.
> > > + # This occurs in development snapshots as in 2.35.1.20201116
> > > + echo $((10000 * $1 + 100 * ${2:-0} + ${3:-0}))
> > > +}
> > > +
> > > +orig_args="$@"
> > > +
> > > +# Get the first line of the --version output.
> > > +IFS='
> > > +'
> > > +set -- $(LC_ALL=C "$@" --version)
> > > +
> > > +# Split the line on spaces.
> > > +IFS=' '
> > > +set -- $1
> > > +
> > > +min_tool_version=$(dirname $0)/min-tool-version.sh
> > > +
> > > +if [ "$1" = GNU -a "$2" = objdump ]; then
> > > + shift $(($# - 1))
> > > + version=$1
> > > + min_version=$($min_tool_version binutils)
> > > + disp_name="GNU objdump"
> > > +else
> > > + while [ $# -gt 1 -a "$1" != "LLVM" ]; do
> > > + shift
> > > + done
> > > +
> > > + if [ "$1" = LLVM ]; then
> > > + version=$3
> > > + min_version=$($min_tool_version llvm)
> > > + disp_name="llvm-objdump"
> > > + else
> > > + echo "$orig_args: unknown objdump" >&2
> > > + exit 1
> > > + fi
> > > +fi
> > > +
> > > +version=${version%%[!0-9.]*}
> > > +
> > > +cversion=$(get_canonical_version $version)
> > > +min_cversion=$(get_canonical_version $min_version)
> > > +
> > > +if [ "$cversion" -lt "$min_cversion" ]; then
> > > + echo >&2 "***"
> > > + echo >&2 "*** objdump is too old."
> > > + echo >&2 "*** Your $disp_name version: $version"
> > > + echo >&2 "*** Minimum $disp_name version: $min_version"
> > > + echo >&2 "***"
> > > + exit 1
> > > +fi
> > > +
> > > +echo objdump $cversion
> > >
> > > --
> > > 2.34.1
> > >
> > >
> > > _______________________________________________
> > > linux-riscv mailing list
> > > linux-riscv@lists.infradead.org
> > > http://lists.infradead.org/mailman/listinfo/linux-riscv
>
>
>
> > _______________________________________________
> > linux-riscv mailing list
> > linux-riscv@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/linux-riscv
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 1/2] kbuild: Check version of objdump
2024-12-16 23:12 ` [PATCH 1/2] kbuild: Check version of objdump Charlie Jenkins
2024-12-18 15:14 ` Conor Dooley
@ 2024-12-21 6:49 ` Masahiro Yamada
2024-12-23 16:33 ` kernel test robot
2 siblings, 0 replies; 10+ messages in thread
From: Masahiro Yamada @ 2024-12-21 6:49 UTC (permalink / raw)
To: Charlie Jenkins
Cc: Paul Walmsley, Palmer Dabbelt, Albert Ou, Nathan Chancellor,
Nick Desaulniers, Bill Wendling, Justin Stitt, Peter Zijlstra,
Ingo Molnar, Arnaldo Carvalho de Melo, Namhyung Kim, Mark Rutland,
Alexander Shishkin, Jiri Olsa, Ian Rogers, Adrian Hunter,
Mickaël Salaün, Günther Noack, Nelson Chu,
linux-kernel, linux-kbuild, linux-riscv, llvm, linux-perf-users,
linux-security-module
On Tue, Dec 17, 2024 at 8:13 AM Charlie Jenkins <charlie@rivosinc.com> wrote:
>
> Similar to ld-version, add a way to check the version of objdump. This
> should most of the time end up being the binutils version or the llvm
> version.
>
> Signed-off-by: Charlie Jenkins <charlie@rivosinc.com>
This patch has no point because 2/2 includes CONFIG option
from the userspace "perf".
> ---
> init/Kconfig | 10 +++++++
> scripts/Kconfig.include | 6 ++++
> scripts/objdump-version.sh | 69 ++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 85 insertions(+)
>
> diff --git a/init/Kconfig b/init/Kconfig
> index a20e6efd3f0fbdd7f0df2448854cc30734a0ee4f..0b5d36f939e1de89c12ebdd61e4815015314d4f1 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -60,6 +60,16 @@ config LLD_VERSION
> default $(ld-version) if LD_IS_LLD
> default 0
>
> +config OBJDUMP_IS_GNU
> + def_bool $(success,test "$(objdump-name)" = objdump)
> +
> +config OBJDUMP_IS_LLVM
> + def_bool $(success,test "$(objdump-name)" = llvm-objdump)
> +
> +config OBJDUMP_VERSION
> + int
> + default $(objdump-version)
> +
> config RUSTC_VERSION
> int
> default $(rustc-version)
> diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include
> index 33193ca6e8030e659d6b321acaea1acd42c387a4..cb3e2d2564fea8cce780adb3be672c9596b7ccf2 100644
> --- a/scripts/Kconfig.include
> +++ b/scripts/Kconfig.include
> @@ -58,6 +58,12 @@ $(error-if,$(success,test -z "$(ld-info)"),Sorry$(comma) this linker is not supp
> ld-name := $(shell,set -- $(ld-info) && echo $1)
> ld-version := $(shell,set -- $(ld-info) && echo $2)
>
> +# Get the objdump name, version, and error out if it is not supported.
> +objdump-info := $(shell,$(srctree)/scripts/objdump-version.sh $(OBJDUMP))
> +$(error-if,$(success,test -z "$(objdump-info)"),Sorry$(comma) this objdump is not supported.)
> +objdump-name := $(shell,set -- $(objdump-info) && echo $1)
> +objdump-version := $(shell,set -- $(objdump-info) && echo $2)
> +
> # machine bit flags
> # $(m32-flag): -m32 if the compiler supports it, or an empty string otherwise.
> # $(m64-flag): -m64 if the compiler supports it, or an empty string otherwise.
> diff --git a/scripts/objdump-version.sh b/scripts/objdump-version.sh
> new file mode 100755
> index 0000000000000000000000000000000000000000..fa24f8dc2d3c42fd1195fceb3c96b27f7127db25
> --- /dev/null
> +++ b/scripts/objdump-version.sh
> @@ -0,0 +1,69 @@
> +#!/bin/sh
> +# SPDX-License-Identifier: GPL-2.0
> +#
> +# Print the objdump name and its version in a 5 or 6-digit form.
> +# Also, perform the minimum version check.
> +
> +set -e
> +
> +# Convert the version string x.y.z to a canonical 5 or 6-digit form.
> +get_canonical_version()
> +{
> + IFS=.
> + set -- $1
> +
> + # If the 2nd or 3rd field is missing, fill it with a zero.
> + #
> + # The 4th field, if present, is ignored.
> + # This occurs in development snapshots as in 2.35.1.20201116
> + echo $((10000 * $1 + 100 * ${2:-0} + ${3:-0}))
> +}
> +
> +orig_args="$@"
> +
> +# Get the first line of the --version output.
> +IFS='
> +'
> +set -- $(LC_ALL=C "$@" --version)
> +
> +# Split the line on spaces.
> +IFS=' '
> +set -- $1
> +
> +min_tool_version=$(dirname $0)/min-tool-version.sh
> +
> +if [ "$1" = GNU -a "$2" = objdump ]; then
> + shift $(($# - 1))
> + version=$1
> + min_version=$($min_tool_version binutils)
> + disp_name="GNU objdump"
> +else
> + while [ $# -gt 1 -a "$1" != "LLVM" ]; do
> + shift
> + done
> +
> + if [ "$1" = LLVM ]; then
> + version=$3
> + min_version=$($min_tool_version llvm)
> + disp_name="llvm-objdump"
> + else
> + echo "$orig_args: unknown objdump" >&2
> + exit 1
> + fi
> +fi
> +
> +version=${version%%[!0-9.]*}
> +
> +cversion=$(get_canonical_version $version)
> +min_cversion=$(get_canonical_version $min_version)
> +
> +if [ "$cversion" -lt "$min_cversion" ]; then
> + echo >&2 "***"
> + echo >&2 "*** objdump is too old."
> + echo >&2 "*** Your $disp_name version: $version"
> + echo >&2 "*** Minimum $disp_name version: $min_version"
> + echo >&2 "***"
> + exit 1
> +fi
> +
> +echo objdump $cversion
>
> --
> 2.34.1
>
--
Best Regards
Masahiro Yamada
^ permalink raw reply [flat|nested] 10+ messages in thread* Re: [PATCH 1/2] kbuild: Check version of objdump
2024-12-16 23:12 ` [PATCH 1/2] kbuild: Check version of objdump Charlie Jenkins
2024-12-18 15:14 ` Conor Dooley
2024-12-21 6:49 ` Masahiro Yamada
@ 2024-12-23 16:33 ` kernel test robot
2 siblings, 0 replies; 10+ messages in thread
From: kernel test robot @ 2024-12-23 16:33 UTC (permalink / raw)
To: Charlie Jenkins, Masahiro Yamada, Paul Walmsley, Palmer Dabbelt,
Albert Ou, Nathan Chancellor, Nick Desaulniers, Bill Wendling,
Justin Stitt, Peter Zijlstra, Ingo Molnar,
Arnaldo Carvalho de Melo, Namhyung Kim, Mark Rutland,
Alexander Shishkin, Jiri Olsa, Ian Rogers, Adrian Hunter,
Mickaël Salaün, Günther Noack, Nelson Chu
Cc: llvm, oe-kbuild-all, linux-kernel, linux-kbuild, linux-riscv,
linux-perf-users, linux-security-module, Charlie Jenkins
Hi Charlie,
kernel test robot noticed the following build errors:
[auto build test ERROR on fac04efc5c793dccbd07e2d59af9f90b7fc0dca4]
url: https://github.com/intel-lab-lkp/linux/commits/Charlie-Jenkins/kbuild-Check-version-of-objdump/20241217-071632
base: fac04efc5c793dccbd07e2d59af9f90b7fc0dca4
patch link: https://lore.kernel.org/r/20241216-perf_fix_riscv_obj_reading-v1-1-b75962660a9b%40rivosinc.com
patch subject: [PATCH 1/2] kbuild: Check version of objdump
config: x86_64-randconfig-003-20241223 (attached as .config)
compiler: clang version 19.1.3 (https://github.com/llvm/llvm-project ab51eccf88f5321e7c60591c5546b254b6afab99)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241224/202412240044.wVXW8Eg1-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202412240044.wVXW8Eg1-lkp@intel.com/
All errors (new ones prefixed by >>):
***
*** objdump is too old.
*** Your llvm-objdump version:
*** Minimum llvm-objdump version: 13.0.1
***
>> scripts/Kconfig.include:63: Sorry, this objdump is not supported.
make[3]: *** [scripts/kconfig/Makefile:85: oldconfig] Error 1 shuffle=1831414175
make[2]: *** [Makefile:733: oldconfig] Error 2 shuffle=1831414175
make[1]: *** [Makefile:251: __sub-make] Error 2 shuffle=1831414175
make[1]: Target 'oldconfig' not remade because of errors.
make: *** [Makefile:251: __sub-make] Error 2 shuffle=1831414175
make: Target 'oldconfig' not remade because of errors.
--
***
*** objdump is too old.
*** Your llvm-objdump version:
*** Minimum llvm-objdump version: 13.0.1
***
>> scripts/Kconfig.include:63: Sorry, this objdump is not supported.
make[3]: *** [scripts/kconfig/Makefile:85: olddefconfig] Error 1 shuffle=1831414175
make[2]: *** [Makefile:733: olddefconfig] Error 2 shuffle=1831414175
make[1]: *** [Makefile:251: __sub-make] Error 2 shuffle=1831414175
make[1]: Target 'olddefconfig' not remade because of errors.
make: *** [Makefile:251: __sub-make] Error 2 shuffle=1831414175
make: Target 'olddefconfig' not remade because of errors.
vim +63 scripts/Kconfig.include
60
61 # Get the objdump name, version, and error out if it is not supported.
62 objdump-info := $(shell,$(srctree)/scripts/objdump-version.sh $(OBJDUMP))
> 63 $(error-if,$(success,test -z "$(objdump-info)"),Sorry$(comma) this objdump is not supported.)
64 objdump-name := $(shell,set -- $(objdump-info) && echo $1)
65 objdump-version := $(shell,set -- $(objdump-info) && echo $2)
66
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 10+ messages in thread