From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Vasut Date: Thu, 26 May 2016 17:17:46 +0200 Subject: [U-Boot] [PATCH v2] MIPS: provide a default u-boot-spl.lds In-Reply-To: <1464269318-8039-1-git-send-email-daniel.schwierzeck@gmail.com> References: <1464263014-7622-1-git-send-email-daniel.schwierzeck@gmail.com> <1464269318-8039-1-git-send-email-daniel.schwierzeck@gmail.com> Message-ID: <5747139A.4030105@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 05/26/2016 03:28 PM, Daniel Schwierzeck wrote: > Provide a default linker script for SPL binaries. Start address > and size of text section and BSS section are configurable. All > sections are arranged in a way that only relevant sections are > kept in the code section for maximum size reduction. All other > sections are kept but moved outside the code section to help > with debugging. > > Signed-off-by: Daniel Schwierzeck > > --- > > Changes in v2: > - add missing section .u_boot_list > > arch/mips/config.mk | 5 ++- > arch/mips/cpu/u-boot-spl.lds | 90 ++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 93 insertions(+), 2 deletions(-) > create mode 100644 arch/mips/cpu/u-boot-spl.lds > > diff --git a/arch/mips/config.mk b/arch/mips/config.mk > index 609a998..dcd3460 100644 > --- a/arch/mips/config.mk > +++ b/arch/mips/config.mk > @@ -65,7 +65,7 @@ else > PF_ABICALLS := -mabicalls > PF_PIC := -fpic > PF_PIE := -pie > -PF_OBJCOPY := -j .got -j .u_boot_list -j .rel.dyn -j .padding > +PF_OBJCOPY := -j .got -j .rel.dyn -j .padding > PF_OBJCOPY += -j .dtb.init.rodata > endif > > @@ -74,4 +74,5 @@ PLATFORM_CPPFLAGS += -msoft-float > PLATFORM_LDFLAGS += -G 0 -static -n -nostdlib > PLATFORM_RELFLAGS += -ffunction-sections -fdata-sections > LDFLAGS_FINAL += --gc-sections $(PF_PIE) > -OBJCOPYFLAGS += -j .text -j .rodata -j .data $(PF_OBJCOPY) > +OBJCOPYFLAGS += -j .text -j .rodata -j .data -j .u_boot_list > +OBJCOPYFLAGS += $(PF_OBJCOPY) > diff --git a/arch/mips/cpu/u-boot-spl.lds b/arch/mips/cpu/u-boot-spl.lds > new file mode 100644 > index 0000000..07004ea > --- /dev/null > +++ b/arch/mips/cpu/u-boot-spl.lds > @@ -0,0 +1,90 @@ > +/* > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +MEMORY { .spl_mem : ORIGIN = CONFIG_SPL_TEXT_BASE, \ > + LENGTH = CONFIG_SPL_MAX_SIZE } > +MEMORY { .bss_mem : ORIGIN = CONFIG_SPL_BSS_START_ADDR, \ > + LENGTH = CONFIG_SPL_BSS_MAX_SIZE } > + > +OUTPUT_ARCH(mips) > +ENTRY(_start) > +SECTIONS > +{ > + . = 0x00000000; > + > + . = ALIGN(4); > + .text : { > + *(.text*) > + } > .spl_mem > + > + . = ALIGN(4); > + .rodata : { > + *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) > + } > .spl_mem > + > + . = ALIGN(4); > + .data : { > + *(SORT_BY_ALIGNMENT(.data*)) > + *(SORT_BY_ALIGNMENT(.sdata*)) > + } > .spl_mem > + > +#ifdef CONFIG_SPL_DM Is the ifdef really necessary ? I think if the list is empty, the u_boot_list will just be an zero-length symbol and since both this and the image_copy_end are 4-byte aligned, there will be no wasted space. > + . = ALIGN(4); > + .u_boot_list : { > + KEEP(*(SORT(.u_boot_list*))); > + } > .spl_mem > +#endif > + > + . = ALIGN(4); > + __image_copy_end = .; > + > + .bss (NOLOAD) : { > + __bss_start = .; > + *(.bss*) > + *(.sbss*) > + *(COMMON) > + . = ALIGN(4); > + __bss_end = .; > + } > .bss_mem > + > + .rel.dyn (NOLOAD) : { > + *(.rel.dyn) > + } > + > + .dynsym : { > + *(.dynsym) > + } > + > + .dynbss : { > + *(.dynbss) > + } > + > + .dynstr : { > + *(.dynstr) > + } > + > + .dynamic : { > + *(.dynamic) > + } > + > + .plt : { > + *(.plt) > + } > + > + .interp : { > + *(.interp) > + } > + > + .gnu : { > + *(.gnu*) > + } > + > + .MIPS.stubs : { > + *(.MIPS.stubs) > + } > + > + .hash : { > + *(.hash) > + } > +} > -- Best regards, Marek Vasut