Messages in this thread | | | From | Sedat Dilek <> | Date | Wed, 15 Jul 2020 10:55:32 +0200 | Subject | Re: [PATCH v5 4/7] x86/boot: Add .text.* to setup.ld |
| |
On Wed, Jul 15, 2020 at 2:41 AM Arvind Sankar <nivedita@alum.mit.edu> wrote: > > gcc puts the main function into .text.startup when compiled with -Os (or > -O2). This results in arch/x86/boot/main.c having a .text.startup > section which is currently not included explicitly in the linker script > setup.ld in the same directory. > > The BFD linker places this orphan section immediately after .text, so > this still works. However, LLD git, since [1], is choosing to place it > immediately after the .bstext section instead (this is the first code > section). This plays havoc with the section layout that setup.elf > requires to create the setup header, for eg on 64-bit: > > LD arch/x86/boot/setup.elf > ld.lld: error: section .text.startup file range overlaps with .header > >>> .text.startup range is [0x200040, 0x2001FE] > >>> .header range is [0x2001EF, 0x20026B] > > ld.lld: error: section .header file range overlaps with .bsdata > >>> .header range is [0x2001EF, 0x20026B] > >>> .bsdata range is [0x2001FF, 0x200398] > > ld.lld: error: section .bsdata file range overlaps with .entrytext > >>> .bsdata range is [0x2001FF, 0x200398] > >>> .entrytext range is [0x20026C, 0x2002D3] > > ld.lld: error: section .text.startup virtual address range overlaps > with .header > >>> .text.startup range is [0x40, 0x1FE] > >>> .header range is [0x1EF, 0x26B] > > ld.lld: error: section .header virtual address range overlaps with > .bsdata > >>> .header range is [0x1EF, 0x26B] > >>> .bsdata range is [0x1FF, 0x398] > > ld.lld: error: section .bsdata virtual address range overlaps with > .entrytext > >>> .bsdata range is [0x1FF, 0x398] > >>> .entrytext range is [0x26C, 0x2D3] > > ld.lld: error: section .text.startup load address range overlaps with > .header > >>> .text.startup range is [0x40, 0x1FE] > >>> .header range is [0x1EF, 0x26B] > > ld.lld: error: section .header load address range overlaps with > .bsdata > >>> .header range is [0x1EF, 0x26B] > >>> .bsdata range is [0x1FF, 0x398] > > ld.lld: error: section .bsdata load address range overlaps with > .entrytext > >>> .bsdata range is [0x1FF, 0x398] > >>> .entrytext range is [0x26C, 0x2D3] > > Add .text.* to the .text output section to fix this, and also prevent > any future surprises if the compiler decides to create other such > sections. > > [1] https://reviews.llvm.org/D75225 > > Reviewed-by: Kees Cook <keescook@chromium.org> > Reviewed-by: Ard Biesheuvel <ardb@kernel.org> > Reviewed-by: Fangrui Song <maskray@google.com> > Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu>
Tested-by: Sedat Dilek <sedat.dilek@gmail.com>
- Sedat -
> --- > arch/x86/boot/setup.ld | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/x86/boot/setup.ld b/arch/x86/boot/setup.ld > index 24c95522f231..49546c247ae2 100644 > --- a/arch/x86/boot/setup.ld > +++ b/arch/x86/boot/setup.ld > @@ -20,7 +20,7 @@ SECTIONS > .initdata : { *(.initdata) } > __end_init = .; > > - .text : { *(.text) } > + .text : { *(.text .text.*) } > .text32 : { *(.text32) } > > . = ALIGN(16); > -- > 2.26.2 > > -- > You received this message because you are subscribed to the Google Groups "Clang Built Linux" group. > To unsubscribe from this group and stop receiving emails from it, send an email to clang-built-linux+unsubscribe@googlegroups.com. > To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/20200715004133.1430068-5-nivedita%40alum.mit.edu.
| |