94 lines
2.8 KiB
Diff
94 lines
2.8 KiB
Diff
|
From 4c35371fe7e2ed9e057cd3eb9380380099d0ea19 Mon Sep 17 00:00:00 2001
|
||
|
From: Marc Zyngier <marc.zyngier@arm.com>
|
||
|
Date: Sat, 26 Apr 2014 13:17:06 +0100
|
||
|
Subject: [PATCH 31/36] ARM: HYP/non-sec: add separate section for secure code
|
||
|
|
||
|
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 <marc.zyngier@arm.com>
|
||
|
---
|
||
|
arch/arm/config.mk | 2 +-
|
||
|
arch/arm/cpu/u-boot.lds | 30 ++++++++++++++++++++++++++++++
|
||
|
arch/arm/lib/sections.c | 2 ++
|
||
|
3 files changed, 33 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/arch/arm/config.mk b/arch/arm/config.mk
|
||
|
index 66ecc2e..a729ed2 100644
|
||
|
--- a/arch/arm/config.mk
|
||
|
+++ b/arch/arm/config.mk
|
||
|
@@ -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
|
||
|
+OBJCFLAGS += -j .text -j .secure_text -j .rodata -j .hash -j .data -j .got.plt -j .u_boot_list -j .rel.dyn
|
||
|
endif
|
||
|
|
||
|
ifneq ($(CONFIG_IMX_CONFIG),)
|
||
|
diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds
|
||
|
index 33c1f99..f45885d 100644
|
||
|
--- a/arch/arm/cpu/u-boot.lds
|
||
|
+++ b/arch/arm/cpu/u-boot.lds
|
||
|
@@ -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)
|
||
|
@@ -22,6 +24,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*))) }
|
||
|
|
||
|
diff --git a/arch/arm/lib/sections.c b/arch/arm/lib/sections.c
|
||
|
index 5b30bcb..a1205c3 100644
|
||
|
--- a/arch/arm/lib/sections.c
|
||
|
+++ b/arch/arm/lib/sections.c
|
||
|
@@ -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")));
|
||
|
--
|
||
|
1.9.0
|
||
|
|