[U-Boot] [PATCH V2 1/3] arm: discard relocation entry for secure section

Peng Fan b51431 at freescale.com
Tue Oct 20 09:20:43 CEST 2015


Hi Albert,

On Tue, Oct 20, 2015 at 09:05:32AM +0200, Albert ARIBAUD wrote:
>Hello Peng,
>
>On Tue, 20 Oct 2015 13:59:53 +0800, Peng Fan <Peng.Fan at freescale.com>
>wrote:
>> The code such as PSCI in section named secure is bundled with
>> u-boot image, and when bootm, the code will be copied to their
>> runtime address same to compliation/linking address -
>> CONFIG_ARMV7_SECURE_BASE.
>> 
>> When compile the PSCI code and link it into the u-boot image,
>> there will be relocation entries in .rel.dyn section for PSCI.
>> Actually, we do not needs these relocation entries.
>> 
>> If still keep the relocation entries in .rel.dyn section,
>> r0 at line 103 and 106 in arch/arm/lib/relocate.S may be an invalid
>> address which may not support read/write for one SoC.
>> 102         /* relative fix: increase location by offset */
>> 103         add     r0, r0, r4
>> 104         ldr     r1, [r0]
>> 105         add     r1, r1, r4
>> 106         str     r1, [r0]
>> 
>> So discard the relocation entries for code in secure section.
>
>Actually, I'll need you to do a slight change -- that's my fault, and
>karma even ensured that my own self of two years ago would be the one
>to come and kick me. See:
>
>http://lists.denx.de/pipermail/u-boot/2013-December/168652.html

Ok. Then arch/arm/cpu/armv8/u-boot.lds should also have such fix,
since lots sections are discarded in u-boot.lds for armv8.

>
>Which basically is about never discarding any section in the ELF file,
>and only copying a subset of the ELF sections into the binary file.
>
>So rather than discarding the secure relocation records, let's move
>them to another section as you had proposed, and thus change the line
>
>> +	/DISCARD/ : { *(.rel._secure*) }
>
>Into a
>
>	.rel._secure { *(.rel._secure*) }
>
>Placed right after the already present
>
>	.dynamic : { *(.dynamic*) }

It can not be placed after .dynamic, since the following is at front.
87         .rel.dyn : {
88                 *(.rel*)
89         }
So relocation entry from secure text will first placed into .rel.dyn section.

If not DISCARD, then I prefer to put ".rel.secure : { *(.rel._secure*) }"
at line 55 which is wrapped by CONFIG_ARMV7_NONSEC in arch/arm/cpu/u-boot.lds.

See following patch:

>From 4b950418835ff52cd7be8dd2b80fb8b0e055f9a2 Mon Sep 17 00:00:00 2001
From: Peng Fan <Peng.Fan at freescale.com>
Date: Tue, 20 Oct 2015 15:18:22 +0800
Subject: [PATCH] arm: move relocation entry for secure section into a single
 section

The code such as PSCI in section named secure is bundled with
u-boot image, and when bootm, the code will be copied to their
runtime address same to compliation/linking address -
CONFIG_ARMV7_SECURE_BASE.

When compile the PSCI code and link it into the u-boot image,
there will be relocation entries in .rel.dyn section for PSCI.
Actually, we do not needs these relocation entries.

If still keep the relocation entries in .rel.dyn section,
r0 at line 103 and 106 in arch/arm/lib/relocate.S may be an invalid
address which may not support read/write for one SoC.
102         /* relative fix: increase location by offset */
103         add     r0, r0, r4
104         ldr     r1, [r0]
105         add     r1, r1, r4
106         str     r1, [r0]

So move them into a single section to avoid touching the relocation entry
in arch/arm/lib/relocate.S.

Signed-off-by: Peng Fan <Peng.Fan at freescale.com>
Cc: Tom Warren <twarren at nvidia.com>
Cc: York Sun <yorksun at freescale.com>
Cc: Hans De Goede <hdegoede at redhat.com>
Cc: Ian Campbell <ijc at hellion.org.uk>
Cc: Albert Aribaud <albert.u.boot at aribaud.net>
Cc: Tom Rini <trini at konsulko.com>
Cc: Jan Kiszka <jan.kiszka at siemens.com>
Cc: Stefano Babic <sbabic at denx.de>
---
 arch/arm/cpu/u-boot.lds | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds
index 03cd9f6..65986e8 100644
--- a/arch/arm/cpu/u-boot.lds
+++ b/arch/arm/cpu/u-boot.lds
@@ -51,6 +51,8 @@ SECTIONS
 		*(.__secure_end)
 		LONG(0x1d1071c);	/* Must output something to reset LMA */
 	}
+
+	.rel.secure : { *(.rel._secure*) }
 #endif
 
 	. = ALIGN(4);

Regards,
Peng.

>
>With my apologies for the very late realization.
>
>Amicalement,
>-- 
>Albert.

-- 


More information about the U-Boot mailing list