You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.7 KiB
Plaintext
79 lines
2.7 KiB
Plaintext
#! armclang --target=arm-arm-none-eabi -march=armv8.1-m.main -E -xc
|
|
|
|
;/*
|
|
; * Copyright (c) 2018-2021 Arm Limited. All rights reserved.
|
|
; *
|
|
; * Licensed under the Apache License, Version 2.0 (the "License");
|
|
; * you may not use this file except in compliance with the License.
|
|
; * You may obtain a copy of the License at
|
|
; *
|
|
; * http://www.apache.org/licenses/LICENSE-2.0
|
|
; *
|
|
; * Unless required by applicable law or agreed to in writing, software
|
|
; * distributed under the License is distributed on an "AS IS" BASIS,
|
|
; * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
; * See the License for the specific language governing permissions and
|
|
; * limitations under the License.
|
|
; *
|
|
; */
|
|
|
|
#include "region_defs.h"
|
|
|
|
LR_CODE S_CODE_START {
|
|
ER_CODE S_CODE_START {
|
|
*.o (RESET +First)
|
|
.ANY (+RO)
|
|
}
|
|
|
|
/*
|
|
* Place the CMSE Veneers (containing the SG instruction) after the code, in
|
|
* a separate 32 bytes aligned region so that the SAU can programmed to just
|
|
* set this region as Non-Secure Callable. The maximum size of this
|
|
* executable region makes it only used the space left over by the ER_CODE
|
|
* region so that you can rely on code+veneer size combined will not exceed
|
|
* the S_CODE_SIZE value. We also substract from the available space the
|
|
* area used to align this section on 32 bytes boundary (for SAU conf).
|
|
*/
|
|
ER_CODE_CMSE_VENEER +0 ALIGN 32 {
|
|
*(Veneer$$CMSE)
|
|
}
|
|
/*
|
|
* This dummy region ensures that the next one will be aligned on a 32 bytes
|
|
* boundary, so that the following region will not be mistakenly configured
|
|
* as Non-Secure Callable by the SAU.
|
|
*/
|
|
ER_CODE_CMSE_VENEER_DUMMY +0 ALIGN 32 EMPTY 0 {}
|
|
|
|
/* This empty, zero long execution region is here to mark the limit address
|
|
* of the last execution region that is allocated in SRAM.
|
|
*/
|
|
CODE_WATERMARK +0 EMPTY 0x0 {
|
|
}
|
|
/* Make sure that the sections allocated in the SRAM does not exceed the
|
|
* size of the SRAM available.
|
|
*/
|
|
ScatterAssert(ImageLimit(CODE_WATERMARK) <= S_CODE_START + S_CODE_SIZE)
|
|
|
|
ER_DATA S_DATA_START {
|
|
.ANY (+ZI +RW)
|
|
}
|
|
|
|
#if HEAP_SIZE > 0
|
|
ARM_LIB_HEAP +0 ALIGN 8 EMPTY HEAP_SIZE { ; Reserve empty region for heap
|
|
}
|
|
#endif
|
|
|
|
ARM_LIB_STACK +0 ALIGN 32 EMPTY STACK_SIZE { ; Reserve empty region for stack
|
|
}
|
|
|
|
/* This empty, zero long execution region is here to mark the limit address
|
|
* of the last execution region that is allocated in SRAM.
|
|
*/
|
|
SRAM_WATERMARK +0 EMPTY 0x0 {
|
|
}
|
|
/* Make sure that the sections allocated in the SRAM does not exceed the
|
|
* size of the SRAM available.
|
|
*/
|
|
ScatterAssert(ImageLimit(SRAM_WATERMARK) <= S_DATA_START + S_DATA_SIZE)
|
|
}
|