From 36b5fa3f4db49ac7aef42ff1d58a895226c7e96c Mon Sep 17 00:00:00 2001 From: Jaxson Han Date: Tue, 2 Nov 2021 15:10:28 +0800 Subject: [PATCH] lds: Rearrange and mark the sections To make it possible for the next stage to protect sections with MPU, boot-wrapper needs to provide the text and data section information. By rearranging the .data .rodata and .vector sections, all sections can be split into 2 big sections: - RO and Executable - RW and Non-Executable Add firmware_data to mark the boundry, thus: firmware_start to firmware_data - 1 indicates RO and Executable section, firmware_data to firmware_end - 1 indicates RW and Non-Executable section. Also, the firmware_data and firmware_end should align with 64 bytes, since Armv8R AArch64 MPU requires it. Issue-ID: SCM-3816 Upstream-Status: Inappropriate [other] Implementation pending further discussion Signed-off-by: Jaxson Han Change-Id: I55342aa7492f2c7b5c16ab9a6472c8cb45cff8fd --- model.lds.S | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/model.lds.S b/model.lds.S index ab98ddf..85451f9 100644 --- a/model.lds.S +++ b/model.lds.S @@ -63,12 +63,16 @@ SECTIONS } #endif +#define FIRMWARE_ALIGN . = ALIGN(1 << 6) .boot PHYS_OFFSET: { PROVIDE(firmware_start = .); *(.init) *(.text*) - *(.data* .rodata* .bss* COMMON) *(.vectors) + *(.rodata*) + FIRMWARE_ALIGN; + PROVIDE(firmware_data = .); + *(.data* .bss* COMMON) *(.stack) PROVIDE(etext = .); } @@ -77,6 +81,7 @@ SECTIONS mbox = .; QUAD(0x0) } + FIRMWARE_ALIGN; PROVIDE(firmware_end = .); ASSERT(etext <= (PHYS_OFFSET + TEXT_LIMIT), ".text overflow!") -- 2.25.1