summaryrefslogtreecommitdiffstats
path: root/arch/arm/lib/pbl.lds.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/lib/pbl.lds.S')
-rw-r--r--arch/arm/lib/pbl.lds.S77
1 files changed, 58 insertions, 19 deletions
diff --git a/arch/arm/lib/pbl.lds.S b/arch/arm/lib/pbl.lds.S
index e77b3220fc..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;
@@ -48,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*) }
@@ -62,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;
@@ -89,7 +112,7 @@ SECTIONS
__csf_start = .;
.hab_csf : {
BYTE(0x5a);
- . += + 0x1fff;
+ . += + HAB_CSF_LEN - 1;
} = 0x5a
__csf_end = .;
#endif /* CONFIG_CPU_64 && CONFIG_HABV4 */
@@ -99,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)) }