From 79cf9e15b51939237005f0fcbf95ae973e5ef986 Mon Sep 17 00:00:00 2001 From: Jonatan Antoni Date: Wed, 12 Jul 2023 16:39:09 +0200 Subject: [PATCH] projmgr: Fix linker script templates for Armv8-M TrustZone --- tools/projmgr/templates/ac6_linker_script.sct | 29 +++++++++---------- .../projmgr/templates/clang_linker_script.ld | 10 ++++++- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/tools/projmgr/templates/ac6_linker_script.sct b/tools/projmgr/templates/ac6_linker_script.sct index 4d6e579d0..298ebcb95 100644 --- a/tools/projmgr/templates/ac6_linker_script.sct +++ b/tools/projmgr/templates/ac6_linker_script.sct @@ -20,9 +20,9 @@ Stack seal size definition *----------------------------------------------------------------------------*/ #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -#define __STACKSEAL_SIZE ( 8 ) +#define __STACKSEAL_SIZE 8 #else -#define __STACKSEAL_SIZE ( 0 ) +#define __STACKSEAL_SIZE 0 #endif /*---------------------------------------------------------------------------- @@ -31,26 +31,23 @@ LR_ROM0 __ROM0_BASE __ROM0_SIZE { -#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) - ER_CMSE_VENEER __ROM0_BASE+__ROM0_SIZE -__ROM0_SIZE { - *(Veneer$$CMSE) + ER_ROM0 __ROM0_BASE __ROM0_SIZE { + *.o (RESET, +First) + *(InRoot$$Sections) + *(+RO +XO) } - #define ER_CMSE_VENEER_SIZE AlignExpr(ImageLength(ER_CMSE_VENEER), 8) -#else - #define ER_CMSE_VENEER_SIZE 0 -#endif - ER_ROM0 __ROM0_BASE (__ROM0_SIZE - ER_CMSE_VENEER_SIZE) { - *.o (RESET, +First) - *(InRoot$$Sections) - *(+RO +XO) +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + ER_CMSE_VENEER AlignExpr(+0, 32) (__ROM0_SIZE - AlignExpr(ImageLength(ER_ROM0), 32)) { + *(Veneer$$CMSE) } +#endif - RW_NOINIT __RAM0_BASE UNINIT (__RAM0_SIZE - __HEAP_SIZE - __STACK_SIZE) { + RW_NOINIT __RAM0_BASE UNINIT (__RAM0_SIZE - __HEAP_SIZE - __STACK_SIZE - __STACKSEAL_SIZE) { *(.bss.noinit) } - RW_RAM0 AlignExpr(+0, 8) (__RAM0_SIZE - __HEAP_SIZE - __STACK_SIZE - AlignExpr(ImageLength(RW_NOINIT), 8)) { + RW_RAM0 AlignExpr(+0, 8) (__RAM0_SIZE - __HEAP_SIZE - __STACK_SIZE - __STACKSEAL_SIZE - AlignExpr(ImageLength(RW_NOINIT), 8)) { *(+RW +ZI) } @@ -63,7 +60,7 @@ LR_ROM0 __ROM0_BASE __ROM0_SIZE { } #if __STACKSEAL_SIZE > 0 - STACKSEAL +0 EMPTY 8 { ; Reserve empty region for stack seal immediately after stack + STACKSEAL +0 EMPTY __STACKSEAL_SIZE { ; Reserve empty region for stack seal immediately after stack } #endif diff --git a/tools/projmgr/templates/clang_linker_script.ld b/tools/projmgr/templates/clang_linker_script.ld index 40f955c16..b7e5948eb 100644 --- a/tools/projmgr/templates/clang_linker_script.ld +++ b/tools/projmgr/templates/clang_linker_script.ld @@ -136,6 +136,14 @@ SECTIONS } >ROM0 AT>ROM0 :text +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + .veneers : + { + . = ALIGN(32); + KEEP(*(.gnu.sgstubs)) + } > ROM0 AT>ROM0 :text +#endif + .toc : { *(.toc .toc.*) } >ROM0 AT>ROM0 :text @@ -277,7 +285,7 @@ SECTIONS } >RAM0 :ram #if __STACKSEAL_SIZE > 0 - PROVIDE(__stack_seal = __stack) + PROVIDE(__stack_seal = __stack); .stackseal (__stack) (NOLOAD) : { . += __STACKSEAL_SIZE;