Messages in this thread | | | Date | Mon, 18 Nov 2019 15:35:53 +0100 | From | Borislav Petkov <> | Subject | Re: [PATCH V2] x86/boot: explicitly place .eh_frame after .rodata |
| |
On Wed, Nov 06, 2019 at 02:06:28PM +0200, Ilie Halip wrote: > 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@gmail.com> > Link: https://github.com/ClangBuiltLinux/linux/issues/760 > --- > > Changes in V2: > * removed wildcard for input sections (.eh_frame* -> .eh_frame) > > 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..30ce52635cd0 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) }
The kernel proper linker script does
/DISCARD/ : { *(.eh_frame) }
with the .eh_frame section.
Wouldn't that solve your issue too, if you add it to the /DISCARD/ section in that linker script too?
-- Regards/Gruss, Boris.
https://people.kernel.org/tglx/notes-about-netiquette
| |