Skip to content

Commit

Permalink
ARM: HYP/non-sec: add separate section for secure code
Browse files Browse the repository at this point in the history
In anticipation of refactoring the HYP/non-secure code to run
from secure RAM, add a new linker section that will contain that
code.

Nothing is using it just yet.

Signed-off-by: Marc Zyngier <[email protected]>
Acked-by: Ian Campbell <[email protected]>
  • Loading branch information
Marc Zyngier authored and albert-aribaud-u-boot committed Jul 28, 2014
1 parent b726d22 commit bf433af
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 1 deletion.
2 changes: 1 addition & 1 deletion arch/arm/config.mk
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ endif
ifdef CONFIG_ARM64
OBJCOPYFLAGS += -j .text -j .rodata -j .data -j .u_boot_list -j .rela.dyn
else
OBJCOPYFLAGS += -j .text -j .rodata -j .hash -j .data -j .got.plt -j .u_boot_list -j .rel.dyn
OBJCOPYFLAGS += -j .text -j .secure_text -j .rodata -j .hash -j .data -j .got.plt -j .u_boot_list -j .rel.dyn
endif

ifdef CONFIG_OF_EMBED
Expand Down
30 changes: 30 additions & 0 deletions arch/arm/cpu/u-boot.lds
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
* SPDX-License-Identifier: GPL-2.0+
*/

#include <config.h>

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
Expand All @@ -23,6 +25,34 @@ SECTIONS
*(.text*)
}

#if defined(CONFIG_ARMV7_NONSEC) || defined(CONFIG_ARMV7_VIRT) || defined(CONFIG_ARMV7_PSCI)

#ifndef CONFIG_ARMV7_SECURE_BASE
#define CONFIG_ARMV7_SECURE_BASE
#endif

.__secure_start : {
. = ALIGN(0x1000);
*(.__secure_start)
}

.secure_text CONFIG_ARMV7_SECURE_BASE :
AT(ADDR(.__secure_start) + SIZEOF(.__secure_start))
{
*(._secure.text)
}

. = LOADADDR(.__secure_start) +
SIZEOF(.__secure_start) +
SIZEOF(.secure_text);

__secure_end_lma = .;
.__secure_end : AT(__secure_end_lma) {
*(.__secure_end)
LONG(0x1d1071c); /* Must output something to reset LMA */
}
#endif

. = ALIGN(4);
.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }

Expand Down
2 changes: 2 additions & 0 deletions arch/arm/lib/sections.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,6 @@ char __image_copy_start[0] __attribute__((section(".__image_copy_start")));
char __image_copy_end[0] __attribute__((section(".__image_copy_end")));
char __rel_dyn_start[0] __attribute__((section(".__rel_dyn_start")));
char __rel_dyn_end[0] __attribute__((section(".__rel_dyn_end")));
char __secure_start[0] __attribute__((section(".__secure_start")));
char __secure_end[0] __attribute__((section(".__secure_end")));
char _end[0] __attribute__((section(".__end")));

0 comments on commit bf433af

Please sign in to comment.