diff options
Diffstat (limited to 'arch/arm/lib/pbl.lds.S')
-rw-r--r-- | arch/arm/lib/pbl.lds.S | 78 |
1 files changed, 59 insertions, 19 deletions
diff --git a/arch/arm/lib/pbl.lds.S b/arch/arm/lib/pbl.lds.S index 0a0fb8b5ac..ec7296f0fb 100644 --- a/arch/arm/lib/pbl.lds.S +++ b/arch/arm/lib/pbl.lds.S @@ -2,8 +2,28 @@ /* SPDX-FileCopyrightText: 2012 Sascha Hauer <s.hauer@pengutronix.de>, Pengutronix */ #include <linux/sizes.h> -#include <asm-generic/barebox.lds.h> +#include <asm/barebox.lds.h> +#include <asm/memory.h> #include <asm-generic/memory_layout.h> +#include <asm-generic/pointer.h> +#include <asm/memory.h> + +/* + * The size of the PE/COFF section that covers the barebox image, which + * runs from _stext to _edata, must be a round multiple of the PE/COFF + * FileAlignment, which we set to its minimum value of 0x200. '_stext' + * itself must be 4 KB aligned, because that's what the adrp instructions + * expects, so padding out _edata to a 0x200 aligned boundary should be + * sufficient. + */ +PECOFF_FILE_ALIGNMENT = 0x200; + +#ifdef CONFIG_EFI_STUB +#define PECOFF_EDATA_PADDING \ + .pecoff_edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGNMENT); } +#else +#define PECOFF_EDATA_PADDING +#endif #ifdef CONFIG_PBL_RELOCATABLE #define BASE 0x0 @@ -11,13 +31,15 @@ #define BASE (TEXT_BASE - SZ_2M) #endif -#ifdef CONFIG_CPU_32 -OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") -OUTPUT_ARCH(arm) +#ifdef CONFIG_HABV4_QSPI +#define HAB_CSF_LEN 0x4000 #else -OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64") -OUTPUT_ARCH(aarch64) +#define HAB_CSF_LEN 0x2000 #endif + +OUTPUT_FORMAT(BAREBOX_OUTPUT_FORMAT) +OUTPUT_ARCH(BAREBOX_OUTPUT_ARCH) + SECTIONS { . = BASE; @@ -31,6 +53,7 @@ SECTIONS .text : { _stext = .; + *(.text_head_prologue*) *(.text_head_entry*) __bare_init_start = .; *(.text_bare_init*) @@ -47,9 +70,20 @@ SECTIONS . = ALIGN(4); .rodata : { *(.rodata*) } + . = ALIGN(ASM_SZPTR); + __pbl_board_stack_top = .; + .rodata.pbl_board_stack_top : { + *(.pbl_board_stack_top_*) + /* Dummy for when BootROM sets up usable stack */ + ASM_LD_PTR(0x00000000) + } + ASSERT(. - __pbl_board_stack_top <= 2 * ASM_SZPTR, "Only One PBL per Image allowed") + .barebox_imd : { BAREBOX_IMD } + . = ALIGN(PBL_SEGMENT_ALIGN); _etext = .; /* End of text and rodata section */ + _sdata = .; . = ALIGN(4); .data : { *(.data*) } @@ -61,17 +95,7 @@ SECTIONS } __shasum_end = .; - .rel_dyn_start : { *(.__rel_dyn_start) } -#ifdef CONFIG_CPU_32 - .rel.dyn : { *(.rel*) } -#else - .rela.dyn : { *(.rela*) } -#endif - .rel_dyn_end : { *(.__rel_dyn_end) } - - .__dynsym_start : { *(.__dynsym_start) } - .dynsym : { *(.dynsym) } - .__dynsym_end : { *(.__dynsym_end) } + BAREBOX_RELOCATION_TABLE pbl_code_size = . - BASE; @@ -88,7 +112,7 @@ SECTIONS __csf_start = .; .hab_csf : { BYTE(0x5a); - . += + 0x1fff; + . += + HAB_CSF_LEN - 1; } = 0x5a __csf_end = .; #endif /* CONFIG_CPU_64 && CONFIG_HABV4 */ @@ -98,7 +122,23 @@ SECTIONS .piggydata : { *(.piggydata) } - __piggydata_end = .; + + . = ALIGN(4); + __pblext_start = .; + .pblext : { + *(.pblext.*) + } + __pblext_end = .; + + PECOFF_EDATA_PADDING + + __pecoff_data_rawsize = ABSOLUTE(. - _etext); + + /* .bss is dwarfed by piggydata size, so we just handle .bss + * as normal PE data + */ + + __pecoff_data_size = ABSOLUTE(. - _etext); .image_end : { KEEP(*(.__image_end)) } |