[PATCH] x86/boot: explicitly place .eh_frame after .rodata

From: Ilie Halip
Date: Mon Nov 04 2019 - 04:03:53 EST


When using GCC as compiler and LLVM's lld as linker, linking
setup.elf fails:
LD arch/x86/boot/setup.elf
ld.lld: error: init sections too big!

This happens because ld.lld has different rules for placing
orphan sections (i.e. sections not mentioned in a linker script)
compared to ld.bfd.

Particularly, in this case, the merged .eh_frame section is
placed before __end_init, which triggers an assert in the script.

Explicitly place this section after .rodata, in accordance with
ld.bfd's behavior.

Signed-off-by: Ilie Halip <ilie.halip@xxxxxxxxx>
Link: https://github.com/ClangBuiltLinux/linux/issues/760
---
arch/x86/boot/setup.ld | 1 +
1 file changed, 1 insertion(+)

diff --git a/arch/x86/boot/setup.ld b/arch/x86/boot/setup.ld
index 0149e41d42c2..4e02eab11b59 100644
--- a/arch/x86/boot/setup.ld
+++ b/arch/x86/boot/setup.ld
@@ -25,6 +25,7 @@ SECTIONS

. = ALIGN(16);
.rodata : { *(.rodata*) }
+ .eh_frame : { *(.eh_frame*) }

.videocards : {
video_cards = .;
--
2.17.1