From 33d2a57b08bd185ab85ef9a73e6ae620d6b15dc4 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 15 Mar 2023 09:40:24 +0100 Subject: [PATCH] 5.4-stable patches added patches: arch-fix-broken-buildid-for-arm64-and-riscv.patch powerpc-vmlinux.lds-define-runtime_discard_exit.patch powerpc-vmlinux.lds-don-t-discard-.rela-for-relocatable-builds.patch s390-define-runtime_discard_exit-to-fix-link-error-with-gnu-ld-2.36.patch sh-define-runtime_discard_exit.patch x86-vmlinux.lds-add-runtime_discard_exit-to-generic-discards.patch --- ...x-broken-buildid-for-arm64-and-riscv.patch | 89 +++++++++++++++++++ ...inux.lds-define-runtime_discard_exit.patch | 58 ++++++++++++ ...discard-.rela-for-relocatable-builds.patch | 58 ++++++++++++ ...t-to-fix-link-error-with-gnu-ld-2.36.patch | 73 +++++++++++++++ queue-5.4/series | 7 +- .../sh-define-runtime_discard_exit.patch | 87 ++++++++++++++++++ ...ime_discard_exit-to-generic-discards.patch | 66 ++++++++++++++ 7 files changed, 437 insertions(+), 1 deletion(-) create mode 100644 queue-5.4/arch-fix-broken-buildid-for-arm64-and-riscv.patch create mode 100644 queue-5.4/powerpc-vmlinux.lds-define-runtime_discard_exit.patch create mode 100644 queue-5.4/powerpc-vmlinux.lds-don-t-discard-.rela-for-relocatable-builds.patch create mode 100644 queue-5.4/s390-define-runtime_discard_exit-to-fix-link-error-with-gnu-ld-2.36.patch create mode 100644 queue-5.4/sh-define-runtime_discard_exit.patch create mode 100644 queue-5.4/x86-vmlinux.lds-add-runtime_discard_exit-to-generic-discards.patch diff --git a/queue-5.4/arch-fix-broken-buildid-for-arm64-and-riscv.patch b/queue-5.4/arch-fix-broken-buildid-for-arm64-and-riscv.patch new file mode 100644 index 00000000000..9718b59275f --- /dev/null +++ b/queue-5.4/arch-fix-broken-buildid-for-arm64-and-riscv.patch @@ -0,0 +1,89 @@ +From stable-owner@vger.kernel.org Thu Mar 2 03:07:31 2023 +From: Tom Saeger +Date: Wed, 1 Mar 2023 19:07:00 -0700 +Subject: arch: fix broken BuildID for arm64 and riscv +To: Greg Kroah-Hartman +Cc: Sasha Levin , Tom Saeger , stable@vger.kernel.org, Masahiro Yamada , Dennis Gilmore , Ard Biesheuvel , Palmer Dabbelt +Message-ID: <20230210-tsaeger-upstream-linux-stable-5-4-v3-2-122fc5440d4c@oracle.com> + +From: Masahiro Yamada + +commit 99cb0d917ffa1ab628bb67364ca9b162c07699b1 upstream. + +Dennis Gilmore reports that the BuildID is missing in the arm64 vmlinux +since commit 994b7ac1697b ("arm64: remove special treatment for the +link order of head.o"). + +The issue is that the type of .notes section, which contains the BuildID, +changed from NOTES to PROGBITS. + +Ard Biesheuvel figured out that whichever object gets linked first gets +to decide the type of a section. The PROGBITS type is the result of the +compiler emitting .note.GNU-stack as PROGBITS rather than NOTE. + +While Ard provided a fix for arm64, I want to fix this globally because +the same issue is happening on riscv since commit 2348e6bf4421 ("riscv: +remove special treatment for the link order of head.o"). This problem +will happen in general for other architectures if they start to drop +unneeded entries from scripts/head-object-list.txt. + +Discard .note.GNU-stack in include/asm-generic/vmlinux.lds.h. + +Link: https://lore.kernel.org/lkml/CAABkxwuQoz1CTbyb57n0ZX65eSYiTonFCU8-LCQc=74D=xE=rA@mail.gmail.com/ +Fixes: 994b7ac1697b ("arm64: remove special treatment for the link order of head.o") +Fixes: 2348e6bf4421 ("riscv: remove special treatment for the link order of head.o") +Reported-by: Dennis Gilmore +Suggested-by: Ard Biesheuvel +Signed-off-by: Masahiro Yamada +Acked-by: Palmer Dabbelt +[Tom: stable backport 5.15.y, 5.10.y, 5.4.y] + +Though the above "Fixes:" commits are not in this kernel, the conditions +which lead to a missing Build ID in arm64 vmlinux are similar. + +Evidence points to these conditions: +1. ld version > 2.36 (exact binutils commit documented in a494398bde27) +2. first object which gets linked (head.o) has a PROGBITS .note.GNU-stack segment + +These conditions can be observed when: +- 5.15.60+ OR 5.10.136+ OR 5.4.210+ +- AND ld version > 2.36 +- AND arch=arm64 +- AND CONFIG_MODVERSIONS=y + +There are notable differences in the vmlinux elf files produced +before(bad) and after(good) applying this series. + +Good: p_type:PT_NOTE segment exists. + Bad: p_type:PT_NOTE segment is missing. + +Good: sh_name_str:.notes section has sh_type:SHT_NOTE + Bad: sh_name_str:.notes section has sh_type:SHT_PROGBITS + +`readelf -n` (as of v2.40) searches for Build Id +by processing only the very first note in sh_type:SHT_NOTE sections. + +This was previously bisected to the stable backport of 0d362be5b142. +Follow-up experiments were discussed here: https://lore.kernel.org/all/20221221235413.xaisboqmr7dkqwn6@oracle.com/ +which strongly hints at condition 2. +Signed-off-by: Tom Saeger +Signed-off-by: Greg Kroah-Hartman +--- + include/asm-generic/vmlinux.lds.h | 5 +++++ + 1 file changed, 5 insertions(+) + +--- a/include/asm-generic/vmlinux.lds.h ++++ b/include/asm-generic/vmlinux.lds.h +@@ -825,7 +825,12 @@ + #define TRACEDATA + #endif + ++/* ++ * Discard .note.GNU-stack, which is emitted as PROGBITS by the compiler. ++ * Otherwise, the type of .notes section would become PROGBITS instead of NOTES. ++ */ + #define NOTES \ ++ /DISCARD/ : { *(.note.GNU-stack) } \ + .notes : AT(ADDR(.notes) - LOAD_OFFSET) { \ + __start_notes = .; \ + KEEP(*(.note.*)) \ diff --git a/queue-5.4/powerpc-vmlinux.lds-define-runtime_discard_exit.patch b/queue-5.4/powerpc-vmlinux.lds-define-runtime_discard_exit.patch new file mode 100644 index 00000000000..3b328f95c9a --- /dev/null +++ b/queue-5.4/powerpc-vmlinux.lds-define-runtime_discard_exit.patch @@ -0,0 +1,58 @@ +From stable-owner@vger.kernel.org Thu Mar 2 03:07:33 2023 +From: Tom Saeger +Date: Wed, 1 Mar 2023 19:07:01 -0700 +Subject: powerpc/vmlinux.lds: Define RUNTIME_DISCARD_EXIT +To: Greg Kroah-Hartman +Cc: Sasha Levin , Tom Saeger , stable@vger.kernel.org, Michael Ellerman +Message-ID: <20230210-tsaeger-upstream-linux-stable-5-4-v3-3-122fc5440d4c@oracle.com> + +From: Michael Ellerman + +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 +Link: https://lore.kernel.org/r/20230105132349.384666-1-mpe@ellerman.id.au +Signed-off-by: Tom Saeger +Signed-off-by: Greg Kroah-Hartman +--- + 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 + #include diff --git a/queue-5.4/powerpc-vmlinux.lds-don-t-discard-.rela-for-relocatable-builds.patch b/queue-5.4/powerpc-vmlinux.lds-don-t-discard-.rela-for-relocatable-builds.patch new file mode 100644 index 00000000000..b4d51fd0dfd --- /dev/null +++ b/queue-5.4/powerpc-vmlinux.lds-don-t-discard-.rela-for-relocatable-builds.patch @@ -0,0 +1,58 @@ +From stable-owner@vger.kernel.org Thu Mar 2 03:07:36 2023 +From: Tom Saeger +Date: Wed, 1 Mar 2023 19:07:02 -0700 +Subject: powerpc/vmlinux.lds: Don't discard .rela* for relocatable builds +To: Greg Kroah-Hartman +Cc: Sasha Levin , Tom Saeger , stable@vger.kernel.org, Michael Ellerman +Message-ID: <20230210-tsaeger-upstream-linux-stable-5-4-v3-4-122fc5440d4c@oracle.com> + +From: Michael Ellerman + +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 + +Link: https://lore.kernel.org/r/20230105132349.384666-2-mpe@ellerman.id.au +Signed-off-by: Tom Saeger +Signed-off-by: Greg Kroah-Hartman +--- + 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 + } + } diff --git a/queue-5.4/s390-define-runtime_discard_exit-to-fix-link-error-with-gnu-ld-2.36.patch b/queue-5.4/s390-define-runtime_discard_exit-to-fix-link-error-with-gnu-ld-2.36.patch new file mode 100644 index 00000000000..0b5fca0a966 --- /dev/null +++ b/queue-5.4/s390-define-runtime_discard_exit-to-fix-link-error-with-gnu-ld-2.36.patch @@ -0,0 +1,73 @@ +From stable-owner@vger.kernel.org Thu Mar 2 03:07:38 2023 +From: Tom Saeger +Date: Wed, 1 Mar 2023 19:07:03 -0700 +Subject: s390: define RUNTIME_DISCARD_EXIT to fix link error with GNU ld < 2.36 +To: Greg Kroah-Hartman +Cc: Sasha Levin , Tom Saeger , stable@vger.kernel.org, Masahiro Yamada , Nathan Chancellor , Heiko Carstens +Message-ID: <20230210-tsaeger-upstream-linux-stable-5-4-v3-5-122fc5440d4c@oracle.com> + +From: Masahiro Yamada + +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 +Signed-off-by: Masahiro Yamada +Link: https://lore.kernel.org/r/20230105031306.1455409-1-masahiroy@kernel.org +Signed-off-by: Heiko Carstens +Signed-off-by: Tom Saeger +Signed-off-by: Greg Kroah-Hartman +--- + 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 + #include + diff --git a/queue-5.4/series b/queue-5.4/series index 1a7b05b1f4f..4f08c6139d1 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -69,4 +69,9 @@ media-ov5640-fix-analogue-gain-control.patch ipmi-watchdog-replace-atomic_add-and-atomic_sub.patch ipmi-watchdog-set-panic-count-to-proper-value-on-a-panic.patch drm-i915-don-t-use-bar-mappings-for-ring-buffers-with-llc.patch -skbuff-fix-nfct-leak-on-napi-stolen.patch +x86-vmlinux.lds-add-runtime_discard_exit-to-generic-discards.patch +arch-fix-broken-buildid-for-arm64-and-riscv.patch +powerpc-vmlinux.lds-define-runtime_discard_exit.patch +powerpc-vmlinux.lds-don-t-discard-.rela-for-relocatable-builds.patch +s390-define-runtime_discard_exit-to-fix-link-error-with-gnu-ld-2.36.patch +sh-define-runtime_discard_exit.patch diff --git a/queue-5.4/sh-define-runtime_discard_exit.patch b/queue-5.4/sh-define-runtime_discard_exit.patch new file mode 100644 index 00000000000..13678ca46dd --- /dev/null +++ b/queue-5.4/sh-define-runtime_discard_exit.patch @@ -0,0 +1,87 @@ +From stable-owner@vger.kernel.org Thu Mar 2 03:08:24 2023 +From: Tom Saeger +Date: Wed, 1 Mar 2023 19:07:04 -0700 +Subject: sh: define RUNTIME_DISCARD_EXIT +To: Greg Kroah-Hartman +Cc: Sasha Levin , Tom Saeger , stable@vger.kernel.org, John Paul Adrian Glaubitz , Ard Biesheuvel , Arnd Bergmann , Christoph Hellwig , Dennis Gilmore , Masahiro Yamada , Naresh Kamboju , Nathan Chancellor , Palmer Dabbelt , Rich Felker , Yoshinori Sato , Andrew Morton +Message-ID: <20230210-tsaeger-upstream-linux-stable-5-4-v3-6-122fc5440d4c@oracle.com> + +From: Tom Saeger + +commit c1c551bebf928889e7a8fef7415b44f9a64975f4 upstream. + +sh vmlinux fails to link with GNU ld < 2.40 (likely < 2.36) since +commit 99cb0d917ffa ("arch: fix broken BuildID for arm64 and riscv"). + +This is similar to fixes for powerpc and s390: +commit 4b9880dbf3bd ("powerpc/vmlinux.lds: Define RUNTIME_DISCARD_EXIT"). +commit a494398bde27 ("s390: define RUNTIME_DISCARD_EXIT to fix link error +with GNU ld < 2.36"). + + $ sh4-linux-gnu-ld --version | head -n1 + GNU ld (GNU Binutils for Debian) 2.35.2 + + $ make ARCH=sh CROSS_COMPILE=sh4-linux-gnu- microdev_defconfig + $ make ARCH=sh CROSS_COMPILE=sh4-linux-gnu- + + `.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 `__bug_table' of + drivers/char/hw_random/core.o: defined in discarded section + `.exit.text' of drivers/char/hw_random/core.o + make[2]: *** [scripts/Makefile.vmlinux:34: vmlinux] Error 1 + make[1]: *** [Makefile:1252: vmlinux] Error 2 + +arch/sh/kernel/vmlinux.lds.S keeps EXIT_TEXT: + + /* + * .exit.text is discarded at runtime, not link time, to deal with + * references from __bug_table + */ + .exit.text : AT(ADDR(.exit.text)) { EXIT_TEXT } + +However, EXIT_TEXT is thrown away by +DISCARD(include/asm-generic/vmlinux.lds.h) because +sh does not define RUNTIME_DISCARD_EXIT. + +GNU ld 2.40 does not have this issue and builds fine. +This corresponds with Masahiro's comments in a494398bde27: +"Nathan [Chancellor] 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." + +Link: https://lkml.kernel.org/r/9166a8abdc0f979e50377e61780a4bba1dfa2f52.1674518464.git.tom.saeger@oracle.com +Fixes: 99cb0d917ffa ("arch: fix broken BuildID for arm64 and riscv") +Link: https://lore.kernel.org/all/Y7Jal56f6UBh1abE@dev-arch.thelio-3990X/ +Link: https://lore.kernel.org/all/20230123194218.47ssfzhrpnv3xfez@oracle.com/ +Signed-off-by: Tom Saeger +Tested-by: John Paul Adrian Glaubitz +Cc: Ard Biesheuvel +Cc: Arnd Bergmann +Cc: Christoph Hellwig +Cc: Dennis Gilmore +Cc: Greg Kroah-Hartman +Cc: Masahiro Yamada +Cc: Naresh Kamboju +Cc: Nathan Chancellor +Cc: Palmer Dabbelt +Cc: Rich Felker +Cc: Yoshinori Sato +Signed-off-by: Andrew Morton +Signed-off-by: Tom Saeger +Signed-off-by: Greg Kroah-Hartman +--- + arch/sh/kernel/vmlinux.lds.S | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/sh/kernel/vmlinux.lds.S ++++ b/arch/sh/kernel/vmlinux.lds.S +@@ -10,6 +10,7 @@ OUTPUT_ARCH(sh:sh5) + #define LOAD_OFFSET 0 + OUTPUT_ARCH(sh) + #endif ++#define RUNTIME_DISCARD_EXIT + + #include + #include diff --git a/queue-5.4/x86-vmlinux.lds-add-runtime_discard_exit-to-generic-discards.patch b/queue-5.4/x86-vmlinux.lds-add-runtime_discard_exit-to-generic-discards.patch new file mode 100644 index 00000000000..aeccefcc781 --- /dev/null +++ b/queue-5.4/x86-vmlinux.lds-add-runtime_discard_exit-to-generic-discards.patch @@ -0,0 +1,66 @@ +From stable-owner@vger.kernel.org Thu Mar 2 03:07:26 2023 +From: Tom Saeger +Date: Wed, 1 Mar 2023 19:06:59 -0700 +Subject: x86, vmlinux.lds: Add RUNTIME_DISCARD_EXIT to generic DISCARDS +To: Greg Kroah-Hartman +Cc: Sasha Levin , Tom Saeger , stable@vger.kernel.org, "H.J. Lu" , Kees Cook +Message-ID: <20230210-tsaeger-upstream-linux-stable-5-4-v3-1-122fc5440d4c@oracle.com> + +From: "H.J. Lu" + +commit 84d5f77fc2ee4e010c2c037750e32f06e55224b0 upstream. + +In the x86 kernel, .exit.text and .exit.data sections are discarded at +runtime, not by the linker. Add RUNTIME_DISCARD_EXIT to generic DISCARDS +and define it in the x86 kernel linker script to keep them. + +The sections are added before the DISCARD directive so document here +only the situation explicitly as this change doesn't have any effect on +the generated kernel. Also, other architectures like ARM64 will use it +too so generalize the approach with the RUNTIME_DISCARD_EXIT define. + + [ bp: Massage and extend commit message. ] + +Signed-off-by: H.J. Lu +Signed-off-by: Borislav Petkov +Reviewed-by: Kees Cook +Link: https://lkml.kernel.org/r/20200326193021.255002-1-hjl.tools@gmail.com +Signed-off-by: Tom Saeger +--- + arch/x86/kernel/vmlinux.lds.S | 2 ++ + include/asm-generic/vmlinux.lds.h | 11 +++++++++-- + 2 files changed, 11 insertions(+), 2 deletions(-) + +--- a/arch/x86/kernel/vmlinux.lds.S ++++ b/arch/x86/kernel/vmlinux.lds.S +@@ -21,6 +21,8 @@ + #define LOAD_OFFSET __START_KERNEL_map + #endif + ++#define RUNTIME_DISCARD_EXIT ++ + #include + #include + #include +--- a/include/asm-generic/vmlinux.lds.h ++++ b/include/asm-generic/vmlinux.lds.h +@@ -900,10 +900,17 @@ + * section definitions so that such archs put those in earlier section + * definitions. + */ ++#ifdef RUNTIME_DISCARD_EXIT ++#define EXIT_DISCARDS ++#else ++#define EXIT_DISCARDS \ ++ EXIT_TEXT \ ++ EXIT_DATA ++#endif ++ + #define DISCARDS \ + /DISCARD/ : { \ +- EXIT_TEXT \ +- EXIT_DATA \ ++ EXIT_DISCARDS \ + EXIT_CALL \ + *(.discard) \ + *(.discard.*) \ -- 2.47.3