Message ID | 20241216-perf_fix_riscv_obj_reading-v1-1-b75962660a9b@rivosinc.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | perf: tests: Fix object code reading test for riscv | expand |
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
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
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 >
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
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
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> --- init/Kconfig | 10 +++++++ scripts/Kconfig.include | 6 ++++ scripts/objdump-version.sh | 69 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+)