From 475c0dfa8e5b841ff29d3fbf7d6828e3cdd05ad5 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sun, 22 Jan 2023 12:05:14 +0000 Subject: [linux] Centralise the linker script for Linux binaries Reduce duplication between i386 and x86_64 by providing a single shared linker script that both architectures can include. Signed-off-by: Michael Brown --- src/scripts/linux.lds | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 src/scripts/linux.lds (limited to 'src/scripts') diff --git a/src/scripts/linux.lds b/src/scripts/linux.lds new file mode 100644 index 000000000..afc0128f8 --- /dev/null +++ b/src/scripts/linux.lds @@ -0,0 +1,101 @@ +/* -*- sh -*- */ + +/* + * Linker script for Linux images + * + */ + +SECTIONS { + _max_align = 32; + + /* + * The text section + * + */ + + . = ALIGN ( _max_align ); + .text : { + _text = .; + *(.text) + *(.text.*) + _etext = .; + } + + /* + * The rodata section + * + */ + + . = ALIGN ( _max_align ); + .rodata : { + _rodata = .; + *(.rodata) + *(.rodata.*) + _erodata = .; + } + + /* + * The data section + * + * Adjust the address for the data segment. We want to adjust up to + * the same address within the page on the next page up. + */ + + . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); + . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); + .data : { + _data = .; + *(.data) + *(.data.*) + KEEP(*(SORT(.tbl.*))) + KEEP(*(.provided)) + KEEP(*(.provided.*)) + _edata = .; + } + + /* + * The bss section + * + */ + + . = ALIGN ( _max_align ); + .bss : { + _bss = .; + *(.bss) + *(.bss.*) + *(COMMON) + _ebss = .; + } + + /* + * Weak symbols that need zero values if not otherwise defined + * + */ + + .weak 0x0 : { + _weak = .; + *(.weak) + *(.weak.*) + _eweak = .; + } + _assert = ASSERT ( ( _weak == _eweak ), ".weak is non-zero length" ); + + /* + * Dispose of the comment and note sections to make the link map + * easier to read + * + */ + + /DISCARD/ : { + *(.comment) + *(.comment.*) + *(.note) + *(.note.*) + *(.rel) + *(.rel.*) + *(.discard) + *(.discard.*) + *(.sbat) + *(.sbat.*) + } +} -- cgit v1.2.3-55-g7522 From fcfb70bfb2a9aae78e86a2505669068e7e511f79 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 23 Jan 2023 12:30:41 +0000 Subject: [arm] Inhibit linker warnings about an implied executable stack Some versions of the 32-bit ARM linker seem to treat the absence of a .note.GNU-stack section as implying an executable stack, and will print a warning that this is deprecated behaviour. Silence the warning by adding a .note.GNU-stack section to each assembly file and retaining the sections in the Linux linker script. Signed-off-by: Michael Brown --- src/arch/arm32/core/setjmp.S | 1 + src/arch/arm32/libgcc/lldivmod.S | 1 + src/arch/arm32/libgcc/llshift.S | 1 + src/scripts/linux.lds | 5 +---- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/scripts') diff --git a/src/arch/arm32/core/setjmp.S b/src/arch/arm32/core/setjmp.S index 7e7b0fe58..1e9e82029 100644 --- a/src/arch/arm32/core/setjmp.S +++ b/src/arch/arm32/core/setjmp.S @@ -1,5 +1,6 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ) + .section ".note.GNU-stack", "", %progbits .text .arm diff --git a/src/arch/arm32/libgcc/lldivmod.S b/src/arch/arm32/libgcc/lldivmod.S index 910be4b78..746fa8fde 100644 --- a/src/arch/arm32/libgcc/lldivmod.S +++ b/src/arch/arm32/libgcc/lldivmod.S @@ -1,5 +1,6 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ) + .section ".note.GNU-stack", "", %progbits .text .thumb diff --git a/src/arch/arm32/libgcc/llshift.S b/src/arch/arm32/libgcc/llshift.S index cc16e2615..c1b51e778 100644 --- a/src/arch/arm32/libgcc/llshift.S +++ b/src/arch/arm32/libgcc/llshift.S @@ -1,5 +1,6 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ) + .section ".note.GNU-stack", "", %progbits .text .arm diff --git a/src/scripts/linux.lds b/src/scripts/linux.lds index afc0128f8..53e884ec5 100644 --- a/src/scripts/linux.lds +++ b/src/scripts/linux.lds @@ -81,16 +81,13 @@ SECTIONS { _assert = ASSERT ( ( _weak == _eweak ), ".weak is non-zero length" ); /* - * Dispose of the comment and note sections to make the link map - * easier to read + * Dispose of unwanted sections to make the link map easier to read * */ /DISCARD/ : { *(.comment) *(.comment.*) - *(.note) - *(.note.*) *(.rel) *(.rel.*) *(.discard) -- cgit v1.2.3-55-g7522