GCC linker changes for CY8CPROTO_064_SB

Adhere with TF-M region map and flash partition to aid integration.
Changes:
* Use the region_defs.h to the derive region map for the following.
   -- RAM START, SIZE.
   -- STACK SIZE (MSP).
   -- ROM START, SIZE.
* Define new region for DATA_SHARED for
   Non-secure (Cortex M4) <--> Secure (Cortex M0+) communication.
* Align the RAM regions (HEAP,  STACK (MSP), and DATA_SHARED) to
  4 bytes.
* Correctly specify the flash region size as 1MB, not 832KB.

These changes are referenced from the TF-M Non-Secure partition build.

Signed-off-by: Vikas Katariya <Vikas.Katariya@arm.com>
pull/12402/head
Vikas Katariya 2019-11-27 17:17:44 +00:00 committed by Jaeden Amero
parent b6c0a763dc
commit ec9efffdbb
1 changed files with 30 additions and 21 deletions

View File

@ -20,6 +20,7 @@
********************************************************************************
* \copyright
* Copyright 2016-2019 Cypress Semiconductor Corporation
* Copyright (c) 2019 ARM Limited
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License");
@ -40,8 +41,10 @@ SEARCH_DIR(.)
GROUP(-lgcc -lc -lnosys)
ENTRY(Reset_Handler)
#include "../../../partition/region_defs.h"
#if !defined(MBED_ROM_START)
#define MBED_ROM_START 0x10000000
#define MBED_ROM_START NS_CODE_START
#endif
/* MBED_APP_START is being used by the bootloader build script and
@ -49,11 +52,11 @@ ENTRY(Reset_Handler)
* is equal to MBED_ROM_START
*/
#if !defined(MBED_APP_START)
#define MBED_APP_START MBED_ROM_START
#define MBED_APP_START MBED_ROM_START
#endif
#if !defined(MBED_ROM_SIZE)
#define MBED_ROM_SIZE 0x000D0000
#define MBED_ROM_SIZE NS_CODE_SIZE
#endif
/* MBED_APP_SIZE is being used by the bootloader build script and
@ -61,26 +64,24 @@ ENTRY(Reset_Handler)
* is equal to MBED_ROM_SIZE
*/
#if !defined(MBED_APP_SIZE)
#define MBED_APP_SIZE MBED_ROM_SIZE
#define MBED_APP_SIZE MBED_ROM_SIZE
#endif
#if !defined(MBED_RAM_START)
#define MBED_RAM_START 0x08000000
#define MBED_RAM_START NS_DATA_START
#endif
#if !defined(MBED_RAM_SIZE)
#define MBED_RAM_SIZE 0x0002A000
#define MBED_RAM_SIZE NS_DATA_SIZE
#endif
/* Size of the stack section in CM4 SRAM area */
#if !defined(MBED_BOOT_STACK_SIZE)
#define MBED_BOOT_STACK_SIZE 0x400
#define MBED_BOOT_STACK_SIZE NS_MSP_STACK_SIZE
#endif
/* The size of the stack section at the end of CM4 SRAM */
STACK_SIZE = MBED_BOOT_STACK_SIZE;
/* The size of the MCU boot header area at the start of FLASH */
BOOT_HEADER_SIZE = 0x400;
/* Shared memory area between Non-Secure and Secure*/
#define MBED_DATA_SHARED_SIZE NS_DATA_SHARED_SIZE
/* Force symbol to be entered in the output file as an undefined symbol. Doing
* this may, for example, trigger linking of additional modules from standard
@ -157,7 +158,7 @@ GROUP(libgcc.a libc.a libm.a libnosys.a)
SECTIONS
{
/* Cortex-M4 application flash area */
.text ORIGIN(flash) + BOOT_HEADER_SIZE :
.text ORIGIN(flash) :
{
/* Cortex-M4 flash vector table */
. = ALIGN(4);
@ -330,20 +331,28 @@ SECTIONS
__end__ = .;
end = __end__;
KEEP(*(.heap*))
. = ORIGIN(ram) + LENGTH(ram) - STACK_SIZE;
. = ORIGIN(ram) + LENGTH(ram) - MBED_BOOT_STACK_SIZE - MBED_DATA_SHARED_SIZE;
. = ALIGN(4);
__StackLimit = .;
__HeapLimit = .;
} > ram
/* Set stack top to end of RAM, and stack limit move down by
* size of stack_dummy section */
__StackTop = ORIGIN(ram) + LENGTH(ram);
__StackLimit = __StackTop - STACK_SIZE;
__StackTop = (__StackLimit + MBED_BOOT_STACK_SIZE + 3) & 0xFFFFFFFC;
PROVIDE(__stack = __StackTop);
/* Check if data + heap + stack exceeds RAM limit */
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
.shared __StackTop (NOLOAD):
{
__SharedStart = .;
. += MBED_DATA_SHARED_SIZE;
KEEP(*(.shared*))
__SharedLimit = .;
} > ram
/* Check if Shared area overflowed within RAM*/
ASSERT(__SharedLimit == ORIGIN(ram) + LENGTH(ram), "Shared area overflowed within RAM")
/* Used for the digital signature of the secure application and the Bootloader SDK application.
* The size of the section depends on the required data size. */
@ -421,7 +430,7 @@ SECTIONS
/* The following symbols used by the cymcuelftool. */
/* Flash */
__cy_memory_0_start = 0x10000000;
__cy_memory_0_length = 0x000D0000;
__cy_memory_0_length = 0x00100000;
__cy_memory_0_row_size = 0x200;
/* Emulated EEPROM Flash area */