--- /dev/null
+From 4b9880dbf3bdba3a7c56445137c3d0e30aaa0a40 Mon Sep 17 00:00:00 2001
+From: Michael Ellerman <mpe@ellerman.id.au>
+Date: Thu, 5 Jan 2023 22:05:04 +1100
+Subject: powerpc/vmlinux.lds: Define RUNTIME_DISCARD_EXIT
+
+From: Michael Ellerman <mpe@ellerman.id.au>
+
+commit 4b9880dbf3bdba3a7c56445137c3d0e30aaa0a40 upstream.
+
+The powerpc linker script explicitly includes .exit.text, because
+otherwise the link fails due to references from __bug_table and
+__ex_table. The code is freed (discarded) at runtime along with
+.init.text and data.
+
+That has worked in the past despite powerpc not defining
+RUNTIME_DISCARD_EXIT because DISCARDS appears late in the powerpc linker
+script (line 410), and the explicit inclusion of .exit.text
+earlier (line 280) supersedes the discard.
+
+However commit 99cb0d917ffa ("arch: fix broken BuildID for arm64 and
+riscv") introduced an earlier use of DISCARD as part of the RO_DATA
+macro (line 136). With binutils < 2.36 that causes the DISCARD
+directives later in the script to be applied earlier [1], causing
+.exit.text to actually be discarded at link time, leading to build
+errors:
+
+ '.exit.text' referenced in section '__bug_table' of crypto/algboss.o: defined in
+ discarded section '.exit.text' of crypto/algboss.o
+ '.exit.text' referenced in section '__ex_table' of drivers/nvdimm/core.o: defined in
+ discarded section '.exit.text' of drivers/nvdimm/core.o
+
+Fix it by defining RUNTIME_DISCARD_EXIT, which causes the generic
+DISCARDS macro to not include .exit.text at all.
+
+1: https://lore.kernel.org/lkml/87fscp2v7k.fsf@igel.home/
+
+Fixes: 99cb0d917ffa ("arch: fix broken BuildID for arm64 and riscv")
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20230105132349.384666-1-mpe@ellerman.id.au
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/powerpc/kernel/vmlinux.lds.S | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/arch/powerpc/kernel/vmlinux.lds.S
++++ b/arch/powerpc/kernel/vmlinux.lds.S
+@@ -6,6 +6,7 @@
+ #endif
+
+ #define BSS_FIRST_SECTIONS *(.bss.prominit)
++#define RUNTIME_DISCARD_EXIT
+
+ #include <asm/page.h>
+ #include <asm-generic/vmlinux.lds.h>
--- /dev/null
+From be5f95c8779e19779dd81927c8574fec5aaba36c Mon Sep 17 00:00:00 2001
+From: Michael Ellerman <mpe@ellerman.id.au>
+Date: Thu, 5 Jan 2023 22:42:59 +1100
+Subject: powerpc/vmlinux.lds: Don't discard .comment
+
+From: Michael Ellerman <mpe@ellerman.id.au>
+
+commit be5f95c8779e19779dd81927c8574fec5aaba36c upstream.
+
+Although the powerpc linker script mentions .comment in the DISCARD
+section, that has never actually caused it to be discarded, because the
+earlier ELF_DETAILS macro (previously STABS_DEBUG) explicitly includes
+.comment.
+
+However commit 99cb0d917ffa ("arch: fix broken BuildID for arm64 and
+riscv") introduced an earlier use of DISCARD as part of the RO_DATA
+macro. With binutils < 2.36 that causes the DISCARD directives later in
+the script to be applied earlier, causing .comment to actually be
+discarded.
+
+It's confusing to explicitly include and discard .comment, and even more
+so if the behaviour depends on the toolchain version. So don't discard
+.comment in order to maintain the existing behaviour in all cases.
+
+Fixes: 83a092cf95f2 ("powerpc: Link warning for orphan sections")
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20230105132349.384666-3-mpe@ellerman.id.au
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/powerpc/kernel/vmlinux.lds.S | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/arch/powerpc/kernel/vmlinux.lds.S
++++ b/arch/powerpc/kernel/vmlinux.lds.S
+@@ -395,7 +395,7 @@ SECTIONS
+ DISCARDS
+ /DISCARD/ : {
+ *(*.EMB.apuinfo)
+- *(.glink .iplt .plt .comment)
++ *(.glink .iplt .plt)
+ *(.gnu.version*)
+ *(.gnu.attributes)
+ *(.eh_frame)
--- /dev/null
+From 07b050f9290ee012a407a0f64151db902a1520f5 Mon Sep 17 00:00:00 2001
+From: Michael Ellerman <mpe@ellerman.id.au>
+Date: Thu, 5 Jan 2023 22:28:36 +1100
+Subject: powerpc/vmlinux.lds: Don't discard .rela* for relocatable builds
+
+From: Michael Ellerman <mpe@ellerman.id.au>
+
+commit 07b050f9290ee012a407a0f64151db902a1520f5 upstream.
+
+Relocatable kernels must not discard relocations, they need to be
+processed at runtime. As such they are included for CONFIG_RELOCATABLE
+builds in the powerpc linker script (line 340).
+
+However they are also unconditionally discarded later in the
+script (line 414). Previously that worked because the earlier inclusion
+superseded the discard.
+
+However commit 99cb0d917ffa ("arch: fix broken BuildID for arm64 and
+riscv") introduced an earlier use of DISCARD as part of the RO_DATA
+macro (line 137). With binutils < 2.36 that causes the DISCARD
+directives later in the script to be applied earlier, causing .rela* to
+actually be discarded at link time, leading to build warnings and a
+kernel that doesn't boot:
+
+ ld: warning: discarding dynamic section .rela.init.rodata
+
+Fix it by conditionally discarding .rela* only when CONFIG_RELOCATABLE
+is disabled.
+
+Fixes: 99cb0d917ffa ("arch: fix broken BuildID for arm64 and riscv")
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Link: https://lore.kernel.org/r/20230105132349.384666-2-mpe@ellerman.id.au
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/powerpc/kernel/vmlinux.lds.S | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/arch/powerpc/kernel/vmlinux.lds.S
++++ b/arch/powerpc/kernel/vmlinux.lds.S
+@@ -395,9 +395,12 @@ SECTIONS
+ DISCARDS
+ /DISCARD/ : {
+ *(*.EMB.apuinfo)
+- *(.glink .iplt .plt .rela* .comment)
++ *(.glink .iplt .plt .comment)
+ *(.gnu.version*)
+ *(.gnu.attributes)
+ *(.eh_frame)
++#ifndef CONFIG_RELOCATABLE
++ *(.rela*)
++#endif
+ }
+ }
--- /dev/null
+From a494398bde273143c2352dd373cad8211f7d94b2 Mon Sep 17 00:00:00 2001
+From: Masahiro Yamada <masahiroy@kernel.org>
+Date: Thu, 5 Jan 2023 12:13:06 +0900
+Subject: s390: define RUNTIME_DISCARD_EXIT to fix link error with GNU ld < 2.36
+
+From: Masahiro Yamada <masahiroy@kernel.org>
+
+commit a494398bde273143c2352dd373cad8211f7d94b2 upstream.
+
+Nathan Chancellor reports that the s390 vmlinux fails to link with
+GNU ld < 2.36 since commit 99cb0d917ffa ("arch: fix broken BuildID
+for arm64 and riscv").
+
+It happens for defconfig, or more specifically for CONFIG_EXPOLINE=y.
+
+ $ s390x-linux-gnu-ld --version | head -n1
+ GNU ld (GNU Binutils for Debian) 2.35.2
+ $ make -s ARCH=s390 CROSS_COMPILE=s390x-linux-gnu- allnoconfig
+ $ ./scripts/config -e CONFIG_EXPOLINE
+ $ make -s ARCH=s390 CROSS_COMPILE=s390x-linux-gnu- olddefconfig
+ $ make -s ARCH=s390 CROSS_COMPILE=s390x-linux-gnu-
+ `.exit.text' referenced in section `.s390_return_reg' of drivers/base/dd.o: defined in discarded section `.exit.text' of drivers/base/dd.o
+ make[1]: *** [scripts/Makefile.vmlinux:34: vmlinux] Error 1
+ make: *** [Makefile:1252: vmlinux] Error 2
+
+arch/s390/kernel/vmlinux.lds.S wants to keep EXIT_TEXT:
+
+ .exit.text : {
+ EXIT_TEXT
+ }
+
+But, at the same time, EXIT_TEXT is thrown away by DISCARD because
+s390 does not define RUNTIME_DISCARD_EXIT.
+
+I still do not understand why the latter wins after 99cb0d917ffa,
+but defining RUNTIME_DISCARD_EXIT seems correct because the comment
+line in arch/s390/kernel/vmlinux.lds.S says:
+
+ /*
+ * .exit.text is discarded at runtime, not link time,
+ * to deal with references from __bug_table
+ */
+
+Nathan also found that binutils commit 21401fc7bf67 ("Duplicate output
+sections in scripts") cured this issue, so we cannot reproduce it with
+binutils 2.36+, but it is better to not rely on it.
+
+Fixes: 99cb0d917ffa ("arch: fix broken BuildID for arm64 and riscv")
+Link: https://lore.kernel.org/all/Y7Jal56f6UBh1abE@dev-arch.thelio-3990X/
+Reported-by: Nathan Chancellor <nathan@kernel.org>
+Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
+Link: https://lore.kernel.org/r/20230105031306.1455409-1-masahiroy@kernel.org
+Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/s390/kernel/vmlinux.lds.S | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/arch/s390/kernel/vmlinux.lds.S
++++ b/arch/s390/kernel/vmlinux.lds.S
+@@ -15,6 +15,8 @@
+ /* Handle ro_after_init data on our own. */
+ #define RO_AFTER_INIT_DATA
+
++#define RUNTIME_DISCARD_EXIT
++
+ #include <asm-generic/vmlinux.lds.h>
+ #include <asm/vmlinux.lds.h>
+
drm-amd-display-fix-color_space_ycbcr2020_type-matrix.patch
x86-fpu-use-_alignof-to-avoid-undefined-behavior-in-type_align.patch
arch-fix-broken-buildid-for-arm64-and-riscv.patch
+s390-define-runtime_discard_exit-to-fix-link-error-with-gnu-ld-2.36.patch
+powerpc-vmlinux.lds-define-runtime_discard_exit.patch
+powerpc-vmlinux.lds-don-t-discard-.rela-for-relocatable-builds.patch
+powerpc-vmlinux.lds-don-t-discard-.comment.patch