[PATCH] powerpc: clean up binutils version check

Subsystems: kernel build + files below scripts/ (unless maintained elsewhere), linux for powerpc (32-bit and 64-bit), the rest

STALE1471d

7 messages, 4 authors, 2022-08-30 · open the first message on its own page

[PATCH] powerpc: clean up binutils version check

From: Masahiro Yamada <masahiroy@kernel.org>
Date: 2022-08-27 16:43:47

The checkbin in arch/powerpc/Makefile errors out if ld <= 2.24.
So, the requirement on PPC is binutils >= 2.25. It is cleaner to
specify it in scripts/min-tool-version.sh. If binutils < 2.25 is
used, the toolchain check will fail in the Kconfig stage going
forward.

Since binutils >= 2.25 is already required, another version test
for --save-restore-funcs on PPC64 is always met.

PPC is the last user of ld-ifversion. With all the callers removed,
the macro definition in scripts/Makefile.compiler can go away.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---

 arch/powerpc/Makefile       | 21 ---------------------
 arch/powerpc/lib/Makefile   |  8 --------
 scripts/Makefile.compiler   |  4 ----
 scripts/min-tool-version.sh |  8 +++++++-
 4 files changed, 7 insertions(+), 34 deletions(-)
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 02742facf895..fb607758eeca 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -46,13 +46,7 @@ UTS_MACHINE := $(subst $(space),,$(machine-y))
 ifdef CONFIG_PPC32
 KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
 else
-ifeq ($(call ld-ifversion, -ge, 22500, y),y)
-# Have the linker provide sfpr if possible.
-# There is a corresponding test in arch/powerpc/lib/Makefile
 KBUILD_LDFLAGS_MODULE += --save-restore-funcs
-else
-KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
-endif
 endif
 
 ifdef CONFIG_CPU_LITTLE_ENDIAN
@@ -395,8 +389,6 @@ vdso_prepare: prepare0
 		$(build)=arch/powerpc/kernel/vdso include/generated/vdso64-offsets.h)
 endif
 
-archprepare: checkbin
-
 archheaders:
 	$(Q)$(MAKE) $(build)=arch/powerpc/kernel/syscalls all
 
@@ -411,16 +403,3 @@ else
 	$(eval KBUILD_CFLAGS += -mstack-protector-guard-offset=$(shell awk '{if ($$2 == "TASK_CANARY") print $$3;}' include/generated/asm-offsets.h))
 endif
 endif
-
-PHONY += checkbin
-# Check toolchain versions:
-# - gcc-4.6 is the minimum kernel-wide version so nothing required.
-checkbin:
-	@if test "x${CONFIG_LD_IS_LLD}" != "xy" -a \
-		"x$(call ld-ifversion, -le, 22400, y)" = "xy" ; then \
-		echo -n '*** binutils 2.24 miscompiles weak symbols ' ; \
-		echo 'in some circumstances.' ; \
-		echo    '*** binutils 2.23 do not define the TOC symbol ' ; \
-		echo -n '*** Please use a different binutils version.' ; \
-		false ; \
-	fi
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
index 8560c912186d..5eb3971ccb9c 100644
--- a/arch/powerpc/lib/Makefile
+++ b/arch/powerpc/lib/Makefile
@@ -38,14 +38,6 @@ obj-$(CONFIG_PPC32)	+= div64.o copy_32.o crtsavres.o
 
 obj-$(CONFIG_FUNCTION_ERROR_INJECTION)	+= error-inject.o
 
-# See corresponding test in arch/powerpc/Makefile
-# 64-bit linker creates .sfpr on demand for final link (vmlinux),
-# so it is only needed for modules, and only for older linkers which
-# do not support --save-restore-funcs
-ifeq ($(call ld-ifversion, -lt, 22500, y),y)
-extra-$(CONFIG_PPC64)	+= crtsavres.o
-endif
-
 obj-$(CONFIG_PPC_BOOK3S_64) += copyuser_power7.o copypage_power7.o \
 			       memcpy_power7.o restart_table.o
 
diff --git a/scripts/Makefile.compiler b/scripts/Makefile.compiler
index 94d0d40cddb3..63e7d79dd877 100644
--- a/scripts/Makefile.compiler
+++ b/scripts/Makefile.compiler
@@ -68,7 +68,3 @@ cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || e
 # ld-option
 # Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y)
 ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3))
-
-# ld-ifversion
-# Usage:  $(call ld-ifversion, -ge, 22252, y)
-ld-ifversion = $(shell [ $(CONFIG_LD_VERSION)0 $(1) $(2)0 ] && echo $(3) || echo $(4))
diff --git a/scripts/min-tool-version.sh b/scripts/min-tool-version.sh
index 250925aab101..7df9f2150ea1 100755
--- a/scripts/min-tool-version.sh
+++ b/scripts/min-tool-version.sh
@@ -14,7 +14,13 @@ fi
 
 case "$1" in
 binutils)
-	echo 2.23.0
+	if [ "$SRCARCH" = powerpc ]; then
+		# binutils 2.24 miscompiles weak symbols in some circumstances
+		# binutils 2.23 do not define the TOC symbol
+		echo 2.25.0
+	else
+		echo 2.23.0
+	fi
 	;;
 gcc)
 	echo 5.1.0
-- 
2.34.1

Re: [PATCH] powerpc: clean up binutils version check

From: Christophe Leroy <hidden>
Date: 2022-08-27 17:37:47


Le 27/08/2022 à 18:40, Masahiro Yamada a écrit :
quoted hunk
The checkbin in arch/powerpc/Makefile errors out if ld <= 2.24.
So, the requirement on PPC is binutils >= 2.25. It is cleaner to
specify it in scripts/min-tool-version.sh. If binutils < 2.25 is
used, the toolchain check will fail in the Kconfig stage going
forward.

Since binutils >= 2.25 is already required, another version test
for --save-restore-funcs on PPC64 is always met.

PPC is the last user of ld-ifversion. With all the callers removed,
the macro definition in scripts/Makefile.compiler can go away.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---

  arch/powerpc/Makefile       | 21 ---------------------
  arch/powerpc/lib/Makefile   |  8 --------
  scripts/Makefile.compiler   |  4 ----
  scripts/min-tool-version.sh |  8 +++++++-
  4 files changed, 7 insertions(+), 34 deletions(-)
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 02742facf895..fb607758eeca 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -46,13 +46,7 @@ UTS_MACHINE := $(subst $(space),,$(machine-y))
  ifdef CONFIG_PPC32
  KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
  else
-ifeq ($(call ld-ifversion, -ge, 22500, y),y)
-# Have the linker provide sfpr if possible.
-# There is a corresponding test in arch/powerpc/lib/Makefile
  KBUILD_LDFLAGS_MODULE += --save-restore-funcs
-else
-KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
-endif
  endif
  
  ifdef CONFIG_CPU_LITTLE_ENDIAN
@@ -395,8 +389,6 @@ vdso_prepare: prepare0
  		$(build)=arch/powerpc/kernel/vdso include/generated/vdso64-offsets.h)
  endif
  
-archprepare: checkbin
-
  archheaders:
  	$(Q)$(MAKE) $(build)=arch/powerpc/kernel/syscalls all
  
@@ -411,16 +403,3 @@ else
  	$(eval KBUILD_CFLAGS += -mstack-protector-guard-offset=$(shell awk '{if ($$2 == "TASK_CANARY") print $$3;}' include/generated/asm-offsets.h))
  endif
  endif
-
-PHONY += checkbin
-# Check toolchain versions:
-# - gcc-4.6 is the minimum kernel-wide version so nothing required.
-checkbin:
-	@if test "x${CONFIG_LD_IS_LLD}" != "xy" -a \
-		"x$(call ld-ifversion, -le, 22400, y)" = "xy" ; then \
-		echo -n '*** binutils 2.24 miscompiles weak symbols ' ; \
-		echo 'in some circumstances.' ; \
-		echo    '*** binutils 2.23 do not define the TOC symbol ' ; \
-		echo -n '*** Please use a different binutils version.' ; \
-		false ; \
-	fi
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
index 8560c912186d..5eb3971ccb9c 100644
--- a/arch/powerpc/lib/Makefile
+++ b/arch/powerpc/lib/Makefile
@@ -38,14 +38,6 @@ obj-$(CONFIG_PPC32)	+= div64.o copy_32.o crtsavres.o
  
  obj-$(CONFIG_FUNCTION_ERROR_INJECTION)	+= error-inject.o
  
-# See corresponding test in arch/powerpc/Makefile
-# 64-bit linker creates .sfpr on demand for final link (vmlinux),
-# so it is only needed for modules, and only for older linkers which
-# do not support --save-restore-funcs
-ifeq ($(call ld-ifversion, -lt, 22500, y),y)
-extra-$(CONFIG_PPC64)	+= crtsavres.o
-endif
-
  obj-$(CONFIG_PPC_BOOK3S_64) += copyuser_power7.o copypage_power7.o \
  			       memcpy_power7.o restart_table.o
  
diff --git a/scripts/Makefile.compiler b/scripts/Makefile.compiler
index 94d0d40cddb3..63e7d79dd877 100644
--- a/scripts/Makefile.compiler
+++ b/scripts/Makefile.compiler
@@ -68,7 +68,3 @@ cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || e
  # ld-option
  # Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y)
  ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3))
-
-# ld-ifversion
-# Usage:  $(call ld-ifversion, -ge, 22252, y)
-ld-ifversion = $(shell [ $(CONFIG_LD_VERSION)0 $(1) $(2)0 ] && echo $(3) || echo $(4))
diff --git a/scripts/min-tool-version.sh b/scripts/min-tool-version.sh
index 250925aab101..7df9f2150ea1 100755
--- a/scripts/min-tool-version.sh
+++ b/scripts/min-tool-version.sh
@@ -14,7 +14,13 @@ fi
  
  case "$1" in
  binutils)
-	echo 2.23.0
+	if [ "$SRCARCH" = powerpc ]; then
Isn't this limitation only for ppc64le ?

Refer commit 60e065f70bdb ("powerpc: Reject binutils 2.24 when building 
little endian")
+		# binutils 2.24 miscompiles weak symbols in some circumstances
+		# binutils 2.23 do not define the TOC symbol
+		echo 2.25.0
+	else
+		echo 2.23.0
+	fi
  	;;
  gcc)
  	echo 5.1.0

Re: [PATCH] powerpc: clean up binutils version check

From: Masahiro Yamada <masahiroy@kernel.org>
Date: 2022-08-27 18:04:28

On Sun, Aug 28, 2022 at 2:37 AM Christophe Leroy
[off-list ref] wrote:


Le 27/08/2022 à 18:40, Masahiro Yamada a écrit :
quoted
The checkbin in arch/powerpc/Makefile errors out if ld <= 2.24.
So, the requirement on PPC is binutils >= 2.25. It is cleaner to
specify it in scripts/min-tool-version.sh. If binutils < 2.25 is
used, the toolchain check will fail in the Kconfig stage going
forward.

Since binutils >= 2.25 is already required, another version test
for --save-restore-funcs on PPC64 is always met.

PPC is the last user of ld-ifversion. With all the callers removed,
the macro definition in scripts/Makefile.compiler can go away.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---

  arch/powerpc/Makefile       | 21 ---------------------
  arch/powerpc/lib/Makefile   |  8 --------
  scripts/Makefile.compiler   |  4 ----
  scripts/min-tool-version.sh |  8 +++++++-
  4 files changed, 7 insertions(+), 34 deletions(-)
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 02742facf895..fb607758eeca 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -46,13 +46,7 @@ UTS_MACHINE := $(subst $(space),,$(machine-y))
  ifdef CONFIG_PPC32
  KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
  else
-ifeq ($(call ld-ifversion, -ge, 22500, y),y)
-# Have the linker provide sfpr if possible.
-# There is a corresponding test in arch/powerpc/lib/Makefile
  KBUILD_LDFLAGS_MODULE += --save-restore-funcs
-else
-KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
-endif
  endif

  ifdef CONFIG_CPU_LITTLE_ENDIAN
@@ -395,8 +389,6 @@ vdso_prepare: prepare0
              $(build)=arch/powerpc/kernel/vdso include/generated/vdso64-offsets.h)
  endif

-archprepare: checkbin
-
  archheaders:
      $(Q)$(MAKE) $(build)=arch/powerpc/kernel/syscalls all
@@ -411,16 +403,3 @@ else
      $(eval KBUILD_CFLAGS += -mstack-protector-guard-offset=$(shell awk '{if ($$2 == "TASK_CANARY") print $$3;}' include/generated/asm-offsets.h))
  endif
  endif
-
-PHONY += checkbin
-# Check toolchain versions:
-# - gcc-4.6 is the minimum kernel-wide version so nothing required.
-checkbin:
-     @if test "x${CONFIG_LD_IS_LLD}" != "xy" -a \
-             "x$(call ld-ifversion, -le, 22400, y)" = "xy" ; then \
-             echo -n '*** binutils 2.24 miscompiles weak symbols ' ; \
-             echo 'in some circumstances.' ; \
-             echo    '*** binutils 2.23 do not define the TOC symbol ' ; \
-             echo -n '*** Please use a different binutils version.' ; \
-             false ; \
-     fi
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
index 8560c912186d..5eb3971ccb9c 100644
--- a/arch/powerpc/lib/Makefile
+++ b/arch/powerpc/lib/Makefile
@@ -38,14 +38,6 @@ obj-$(CONFIG_PPC32)        += div64.o copy_32.o crtsavres.o

  obj-$(CONFIG_FUNCTION_ERROR_INJECTION)      += error-inject.o

-# See corresponding test in arch/powerpc/Makefile
-# 64-bit linker creates .sfpr on demand for final link (vmlinux),
-# so it is only needed for modules, and only for older linkers which
-# do not support --save-restore-funcs
-ifeq ($(call ld-ifversion, -lt, 22500, y),y)
-extra-$(CONFIG_PPC64)        += crtsavres.o
-endif
-
  obj-$(CONFIG_PPC_BOOK3S_64) += copyuser_power7.o copypage_power7.o \
                             memcpy_power7.o restart_table.o
diff --git a/scripts/Makefile.compiler b/scripts/Makefile.compiler
index 94d0d40cddb3..63e7d79dd877 100644
--- a/scripts/Makefile.compiler
+++ b/scripts/Makefile.compiler
@@ -68,7 +68,3 @@ cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || e
  # ld-option
  # Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y)
  ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3))
-
-# ld-ifversion
-# Usage:  $(call ld-ifversion, -ge, 22252, y)
-ld-ifversion = $(shell [ $(CONFIG_LD_VERSION)0 $(1) $(2)0 ] && echo $(3) || echo $(4))
diff --git a/scripts/min-tool-version.sh b/scripts/min-tool-version.sh
index 250925aab101..7df9f2150ea1 100755
--- a/scripts/min-tool-version.sh
+++ b/scripts/min-tool-version.sh
@@ -14,7 +14,13 @@ fi

  case "$1" in
  binutils)
-     echo 2.23.0
+     if [ "$SRCARCH" = powerpc ]; then
Isn't this limitation only for ppc64le ?

Refer commit 60e065f70bdb ("powerpc: Reject binutils 2.24 when building
little endian")

I do not see any CONFIG check in the current checkbin.

Refer commit a3ad84da0760 ("powerpc/toc: Future proof
kernel toc")




-- 
Best Regards
Masahiro Yamada

Re: [PATCH] powerpc: clean up binutils version check

From: Christophe Leroy <hidden>
Date: 2022-08-29 09:00:13


Le 27/08/2022 à 20:03, Masahiro Yamada a écrit :
On Sun, Aug 28, 2022 at 2:37 AM Christophe Leroy
[off-list ref] wrote:
quoted


Le 27/08/2022 à 18:40, Masahiro Yamada a écrit :
quoted
The checkbin in arch/powerpc/Makefile errors out if ld <= 2.24.
So, the requirement on PPC is binutils >= 2.25. It is cleaner to
specify it in scripts/min-tool-version.sh. If binutils < 2.25 is
used, the toolchain check will fail in the Kconfig stage going
forward.

Since binutils >= 2.25 is already required, another version test
for --save-restore-funcs on PPC64 is always met.

PPC is the last user of ld-ifversion. With all the callers removed,
the macro definition in scripts/Makefile.compiler can go away.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---

   arch/powerpc/Makefile       | 21 ---------------------
   arch/powerpc/lib/Makefile   |  8 --------
   scripts/Makefile.compiler   |  4 ----
   scripts/min-tool-version.sh |  8 +++++++-
   4 files changed, 7 insertions(+), 34 deletions(-)
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 02742facf895..fb607758eeca 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -46,13 +46,7 @@ UTS_MACHINE := $(subst $(space),,$(machine-y))
   ifdef CONFIG_PPC32
   KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
   else
-ifeq ($(call ld-ifversion, -ge, 22500, y),y)
-# Have the linker provide sfpr if possible.
-# There is a corresponding test in arch/powerpc/lib/Makefile
   KBUILD_LDFLAGS_MODULE += --save-restore-funcs
-else
-KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
-endif
   endif

   ifdef CONFIG_CPU_LITTLE_ENDIAN
@@ -395,8 +389,6 @@ vdso_prepare: prepare0
               $(build)=arch/powerpc/kernel/vdso include/generated/vdso64-offsets.h)
   endif

-archprepare: checkbin
-
   archheaders:
       $(Q)$(MAKE) $(build)=arch/powerpc/kernel/syscalls all
@@ -411,16 +403,3 @@ else
       $(eval KBUILD_CFLAGS += -mstack-protector-guard-offset=$(shell awk '{if ($$2 == "TASK_CANARY") print $$3;}' include/generated/asm-offsets.h))
   endif
   endif
-
-PHONY += checkbin
-# Check toolchain versions:
-# - gcc-4.6 is the minimum kernel-wide version so nothing required.
-checkbin:
-     @if test "x${CONFIG_LD_IS_LLD}" != "xy" -a \
-             "x$(call ld-ifversion, -le, 22400, y)" = "xy" ; then \
-             echo -n '*** binutils 2.24 miscompiles weak symbols ' ; \
-             echo 'in some circumstances.' ; \
-             echo    '*** binutils 2.23 do not define the TOC symbol ' ; \
-             echo -n '*** Please use a different binutils version.' ; \
-             false ; \
-     fi
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
index 8560c912186d..5eb3971ccb9c 100644
--- a/arch/powerpc/lib/Makefile
+++ b/arch/powerpc/lib/Makefile
@@ -38,14 +38,6 @@ obj-$(CONFIG_PPC32)        += div64.o copy_32.o crtsavres.o

   obj-$(CONFIG_FUNCTION_ERROR_INJECTION)      += error-inject.o

-# See corresponding test in arch/powerpc/Makefile
-# 64-bit linker creates .sfpr on demand for final link (vmlinux),
-# so it is only needed for modules, and only for older linkers which
-# do not support --save-restore-funcs
-ifeq ($(call ld-ifversion, -lt, 22500, y),y)
-extra-$(CONFIG_PPC64)        += crtsavres.o
-endif
-
   obj-$(CONFIG_PPC_BOOK3S_64) += copyuser_power7.o copypage_power7.o \
                              memcpy_power7.o restart_table.o
diff --git a/scripts/Makefile.compiler b/scripts/Makefile.compiler
index 94d0d40cddb3..63e7d79dd877 100644
--- a/scripts/Makefile.compiler
+++ b/scripts/Makefile.compiler
@@ -68,7 +68,3 @@ cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || e
   # ld-option
   # Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y)
   ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3))
-
-# ld-ifversion
-# Usage:  $(call ld-ifversion, -ge, 22252, y)
-ld-ifversion = $(shell [ $(CONFIG_LD_VERSION)0 $(1) $(2)0 ] && echo $(3) || echo $(4))
diff --git a/scripts/min-tool-version.sh b/scripts/min-tool-version.sh
index 250925aab101..7df9f2150ea1 100755
--- a/scripts/min-tool-version.sh
+++ b/scripts/min-tool-version.sh
@@ -14,7 +14,13 @@ fi

   case "$1" in
   binutils)
-     echo 2.23.0
+     if [ "$SRCARCH" = powerpc ]; then
Isn't this limitation only for ppc64le ?

Refer commit 60e065f70bdb ("powerpc: Reject binutils 2.24 when building
little endian")

I do not see any CONFIG check in the current checkbin.

Refer commit a3ad84da0760 ("powerpc/toc: Future proof
kernel toc")
That's odd. There is no toc on PPC32.

Christophe

Re: [PATCH] powerpc: clean up binutils version check

From: Nick Desaulniers <ndesaulniers@google.com>
Date: 2022-08-29 19:14:51

On Sat, Aug 27, 2022 at 9:43 AM Masahiro Yamada [off-list ref] wrote:
The checkbin in arch/powerpc/Makefile errors out if ld <= 2.24.
So, the requirement on PPC is binutils >= 2.25. It is cleaner to
specify it in scripts/min-tool-version.sh. If binutils < 2.25 is
used, the toolchain check will fail in the Kconfig stage going
forward.
Thoughts on making binutils 2.25.1 the new minimal support version for
all architectures? We already require GCC 5.1. Looking at

https://gcc.gnu.org/releases.html

that was released on April 22, 2015.  Looking at

https://ftp.gnu.org/gnu/binutils/

2.25 was released on 2014-12-23 and 2.25.1 on 2015-07-21.

Current minimum is 2.23 released on 2012-10-22.  Almost 10 years old.
quoted hunk
Since binutils >= 2.25 is already required, another version test
for --save-restore-funcs on PPC64 is always met.

PPC is the last user of ld-ifversion. With all the callers removed,
the macro definition in scripts/Makefile.compiler can go away.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---

 arch/powerpc/Makefile       | 21 ---------------------
 arch/powerpc/lib/Makefile   |  8 --------
 scripts/Makefile.compiler   |  4 ----
 scripts/min-tool-version.sh |  8 +++++++-
 4 files changed, 7 insertions(+), 34 deletions(-)
diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
index 02742facf895..fb607758eeca 100644
--- a/arch/powerpc/Makefile
+++ b/arch/powerpc/Makefile
@@ -46,13 +46,7 @@ UTS_MACHINE := $(subst $(space),,$(machine-y))
 ifdef CONFIG_PPC32
 KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
 else
-ifeq ($(call ld-ifversion, -ge, 22500, y),y)
-# Have the linker provide sfpr if possible.
-# There is a corresponding test in arch/powerpc/lib/Makefile
 KBUILD_LDFLAGS_MODULE += --save-restore-funcs
-else
-KBUILD_LDFLAGS_MODULE += arch/powerpc/lib/crtsavres.o
-endif
 endif

 ifdef CONFIG_CPU_LITTLE_ENDIAN
@@ -395,8 +389,6 @@ vdso_prepare: prepare0
                $(build)=arch/powerpc/kernel/vdso include/generated/vdso64-offsets.h)
 endif

-archprepare: checkbin
-
 archheaders:
        $(Q)$(MAKE) $(build)=arch/powerpc/kernel/syscalls all
@@ -411,16 +403,3 @@ else
        $(eval KBUILD_CFLAGS += -mstack-protector-guard-offset=$(shell awk '{if ($$2 == "TASK_CANARY") print $$3;}' include/generated/asm-offsets.h))
 endif
 endif
-
-PHONY += checkbin
-# Check toolchain versions:
-# - gcc-4.6 is the minimum kernel-wide version so nothing required.
-checkbin:
-       @if test "x${CONFIG_LD_IS_LLD}" != "xy" -a \
-               "x$(call ld-ifversion, -le, 22400, y)" = "xy" ; then \
-               echo -n '*** binutils 2.24 miscompiles weak symbols ' ; \
-               echo 'in some circumstances.' ; \
-               echo    '*** binutils 2.23 do not define the TOC symbol ' ; \
-               echo -n '*** Please use a different binutils version.' ; \
-               false ; \
-       fi
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
index 8560c912186d..5eb3971ccb9c 100644
--- a/arch/powerpc/lib/Makefile
+++ b/arch/powerpc/lib/Makefile
@@ -38,14 +38,6 @@ obj-$(CONFIG_PPC32)  += div64.o copy_32.o crtsavres.o

 obj-$(CONFIG_FUNCTION_ERROR_INJECTION) += error-inject.o

-# See corresponding test in arch/powerpc/Makefile
-# 64-bit linker creates .sfpr on demand for final link (vmlinux),
-# so it is only needed for modules, and only for older linkers which
-# do not support --save-restore-funcs
-ifeq ($(call ld-ifversion, -lt, 22500, y),y)
-extra-$(CONFIG_PPC64)  += crtsavres.o
-endif
-
 obj-$(CONFIG_PPC_BOOK3S_64) += copyuser_power7.o copypage_power7.o \
                               memcpy_power7.o restart_table.o
diff --git a/scripts/Makefile.compiler b/scripts/Makefile.compiler
index 94d0d40cddb3..63e7d79dd877 100644
--- a/scripts/Makefile.compiler
+++ b/scripts/Makefile.compiler
@@ -68,7 +68,3 @@ cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || e
 # ld-option
 # Usage: KBUILD_LDFLAGS += $(call ld-option, -X, -Y)
 ld-option = $(call try-run, $(LD) $(KBUILD_LDFLAGS) $(1) -v,$(1),$(2),$(3))
-
-# ld-ifversion
-# Usage:  $(call ld-ifversion, -ge, 22252, y)
-ld-ifversion = $(shell [ $(CONFIG_LD_VERSION)0 $(1) $(2)0 ] && echo $(3) || echo $(4))
diff --git a/scripts/min-tool-version.sh b/scripts/min-tool-version.sh
index 250925aab101..7df9f2150ea1 100755
--- a/scripts/min-tool-version.sh
+++ b/scripts/min-tool-version.sh
@@ -14,7 +14,13 @@ fi

 case "$1" in
 binutils)
-       echo 2.23.0
+       if [ "$SRCARCH" = powerpc ]; then
+               # binutils 2.24 miscompiles weak symbols in some circumstances
+               # binutils 2.23 do not define the TOC symbol
+               echo 2.25.0
+       else
+               echo 2.23.0
+       fi
        ;;
 gcc)
        echo 5.1.0
--
2.34.1

-- 
Thanks,
~Nick Desaulniers

Re: [PATCH] powerpc: clean up binutils version check

From: Michael Ellerman <mpe@ellerman.id.au>
Date: 2022-08-30 10:44:11

Christophe Leroy [off-list ref] writes:
Le 27/08/2022 à 20:03, Masahiro Yamada a écrit :
quoted
On Sun, Aug 28, 2022 at 2:37 AM Christophe Leroy
[off-list ref] wrote:
quoted
Le 27/08/2022 à 18:40, Masahiro Yamada a écrit :
quoted
The checkbin in arch/powerpc/Makefile errors out if ld <= 2.24.
So, the requirement on PPC is binutils >= 2.25. It is cleaner to
specify it in scripts/min-tool-version.sh. If binutils < 2.25 is
used, the toolchain check will fail in the Kconfig stage going
forward.

Since binutils >= 2.25 is already required, another version test
for --save-restore-funcs on PPC64 is always met.
...
quoted
quoted
quoted
diff --git a/scripts/min-tool-version.sh b/scripts/min-tool-version.sh
index 250925aab101..7df9f2150ea1 100755
--- a/scripts/min-tool-version.sh
+++ b/scripts/min-tool-version.sh
@@ -14,7 +14,13 @@ fi

   case "$1" in
   binutils)
-     echo 2.23.0
+     if [ "$SRCARCH" = powerpc ]; then
Isn't this limitation only for ppc64le ?

Refer commit 60e065f70bdb ("powerpc: Reject binutils 2.24 when building
little endian")
I do not see any CONFIG check in the current checkbin.

Refer commit a3ad84da0760 ("powerpc/toc: Future proof
kernel toc")
That's odd. There is no toc on PPC32.
I think that's just a bug in a3ad84da0760.

But that means we inadvertantly dropped support for 2.24 about 8 months
ago, and no one noticed.

Let's see what the responses are to Nick's proposal to increase the
minimum to 2.25.1.

cheers

Re: [PATCH] powerpc: clean up binutils version check

From: Masahiro Yamada <masahiroy@kernel.org>
Date: 2022-08-30 16:03:02

On Tue, Aug 30, 2022 at 7:44 PM Michael Ellerman [off-list ref] wrote:
Christophe Leroy [off-list ref] writes:
quoted
Le 27/08/2022 à 20:03, Masahiro Yamada a écrit :
quoted
On Sun, Aug 28, 2022 at 2:37 AM Christophe Leroy
[off-list ref] wrote:
quoted
Le 27/08/2022 à 18:40, Masahiro Yamada a écrit :
quoted
The checkbin in arch/powerpc/Makefile errors out if ld <= 2.24.
So, the requirement on PPC is binutils >= 2.25. It is cleaner to
specify it in scripts/min-tool-version.sh. If binutils < 2.25 is
used, the toolchain check will fail in the Kconfig stage going
forward.

Since binutils >= 2.25 is already required, another version test
for --save-restore-funcs on PPC64 is always met.
...
quoted
quoted
quoted
quoted
diff --git a/scripts/min-tool-version.sh b/scripts/min-tool-version.sh
index 250925aab101..7df9f2150ea1 100755
--- a/scripts/min-tool-version.sh
+++ b/scripts/min-tool-version.sh
@@ -14,7 +14,13 @@ fi

   case "$1" in
   binutils)
-     echo 2.23.0
+     if [ "$SRCARCH" = powerpc ]; then
Isn't this limitation only for ppc64le ?

Refer commit 60e065f70bdb ("powerpc: Reject binutils 2.24 when building
little endian")
I do not see any CONFIG check in the current checkbin.

Refer commit a3ad84da0760 ("powerpc/toc: Future proof
kernel toc")
That's odd. There is no toc on PPC32.
I think that's just a bug in a3ad84da0760.

But that means we inadvertantly dropped support for 2.24 about 8 months
ago, and no one noticed.

Let's see what the responses are to Nick's proposal to increase the
minimum to 2.25.1.

cheers


Either way is fine with me, but in that case,
do I need to get a higher-level Ack from Linus?

The current one can go to the ppc tree
since apparently it does not affect any other arches.

-- 
Best Regards
Masahiro Yamada
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help