On Mon, Jun 22, 2020 at 1:49 PM Kees Cook <keesc...@chromium.org> wrote: > > We don't want to depend on the linker's orphan section placement > heuristics as these can vary between linkers, and may change between > versions. All sections need to be explicitly named in the linker > script. > > Use common macros for debug sections, discards, and text stubs. Add > discards for unwanted .note, and .rel sections. Finally, enable orphan > section warning. > > Signed-off-by: Kees Cook <keesc...@chromium.org> > --- > arch/arm/boot/compressed/Makefile | 2 ++ > arch/arm/boot/compressed/vmlinux.lds.S | 17 +++++++---------- > 2 files changed, 9 insertions(+), 10 deletions(-) > > diff --git a/arch/arm/boot/compressed/Makefile > b/arch/arm/boot/compressed/Makefile > index 00602a6fba04..b8a97d81662d 100644 > --- a/arch/arm/boot/compressed/Makefile > +++ b/arch/arm/boot/compressed/Makefile > @@ -128,6 +128,8 @@ endif > LDFLAGS_vmlinux += --no-undefined > # Delete all temporary local symbols > LDFLAGS_vmlinux += -X > +# Report orphan sections > +LDFLAGS_vmlinux += --orphan-handling=warn > # Next argument is a linker script > LDFLAGS_vmlinux += -T > > diff --git a/arch/arm/boot/compressed/vmlinux.lds.S > b/arch/arm/boot/compressed/vmlinux.lds.S > index 09ac33f52814..c2a8509f876f 100644 > --- a/arch/arm/boot/compressed/vmlinux.lds.S > +++ b/arch/arm/boot/compressed/vmlinux.lds.S > @@ -2,6 +2,7 @@ > /* > * Copyright (C) 2000 Russell King > */ > +#include <asm/vmlinux.lds.h> > > #ifdef CONFIG_CPU_ENDIAN_BE8 > #define ZIMAGE_MAGIC(x) ( (((x) >> 24) & 0x000000ff) | \ > @@ -17,8 +18,11 @@ ENTRY(_start) > SECTIONS > { > /DISCARD/ : { > + ARM_COMMON_DISCARD > *(.ARM.exidx*) > *(.ARM.extab*) > + *(.note.*) > + *(.rel.*)
.rel.* is the only case I'm curious about. Why do we want it in vmlinux, but not the compressed image? Should `.rel.*` just be part of ARM_COMMON_DISCARD from the previous patch? > /* > * Discard any r/w data - this produces a link error if we have any, > * which is required for PIC decompression. Local data generates > @@ -36,9 +40,7 @@ SECTIONS > *(.start) > *(.text) > *(.text.*) > - *(.gnu.warning) > - *(.glue_7t) > - *(.glue_7) > + ARM_STUBS_TEXT > } > .table : ALIGN(4) { > _table_start = .; > @@ -128,12 +130,7 @@ SECTIONS > PROVIDE(__pecoff_data_size = ALIGN(512) - ADDR(.data)); > PROVIDE(__pecoff_end = ALIGN(512)); > > - .stab 0 : { *(.stab) } > - .stabstr 0 : { *(.stabstr) } > - .stab.excl 0 : { *(.stab.excl) } > - .stab.exclstr 0 : { *(.stab.exclstr) } > - .stab.index 0 : { *(.stab.index) } > - .stab.indexstr 0 : { *(.stab.indexstr) } > - .comment 0 : { *(.comment) } > + STABS_DEBUG > + DWARF_DEBUG > } > ASSERT(_edata_real == _edata, "error: zImage file size is incorrect"); > -- > 2.25.1 > -- Thanks, ~Nick Desaulniers