1*91f16700Schasinglulu/* 2*91f16700Schasinglulu * Copyright (c) 2017-2023, Arm Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu#ifndef ARM_RECLAIM_INIT_LD_S 7*91f16700Schasinglulu#define ARM_RECLAIM_INIT_LD_S 8*91f16700Schasinglulu 9*91f16700SchasingluluSECTIONS 10*91f16700Schasinglulu{ 11*91f16700Schasinglulu .init __STACKS_START__ : { 12*91f16700Schasinglulu . = . + PLATFORM_STACK_SIZE; 13*91f16700Schasinglulu . = ALIGN(PAGE_SIZE); 14*91f16700Schasinglulu __INIT_CODE_START__ = .; 15*91f16700Schasinglulu *(*text.init.*); 16*91f16700Schasinglulu __INIT_CODE_END__ = .; 17*91f16700Schasinglulu INIT_CODE_END_ALIGNED = ALIGN(PAGE_SIZE); 18*91f16700Schasinglulu } >RAM 19*91f16700Schasinglulu 20*91f16700Schasinglulu#ifdef BL31_PROGBITS_LIMIT 21*91f16700Schasinglulu ASSERT(__INIT_CODE_END__ <= BL31_PROGBITS_LIMIT, 22*91f16700Schasinglulu "BL31 init has exceeded progbits limit.") 23*91f16700Schasinglulu#endif 24*91f16700Schasinglulu} 25*91f16700Schasinglulu 26*91f16700Schasinglulu#define ABS ABSOLUTE 27*91f16700Schasinglulu 28*91f16700Schasinglulu#define STACK_SECTION \ 29*91f16700Schasinglulu .stacks (NOLOAD) : { \ 30*91f16700Schasinglulu __STACKS_START__ = .; \ 31*91f16700Schasinglulu *(.tzfw_normal_stacks) \ 32*91f16700Schasinglulu __STACKS_END__ = .; \ 33*91f16700Schasinglulu /* Allow room for the init section where necessary. */ \ 34*91f16700Schasinglulu OFFSET = ABS(SIZEOF(.init) - (. - __STACKS_START__)); \ 35*91f16700Schasinglulu /* Offset sign */ \ 36*91f16700Schasinglulu SIGN = ABS(OFFSET) & (1 << 63); \ 37*91f16700Schasinglulu /* Offset mask */ \ 38*91f16700Schasinglulu MASK = ABS(SIGN >> 63) - 1; \ 39*91f16700Schasinglulu . += ABS(OFFSET) & ABS(MASK); \ 40*91f16700Schasinglulu . = ALIGN(PAGE_SIZE); \ 41*91f16700Schasinglulu } 42*91f16700Schasinglulu 43*91f16700Schasinglulu#endif /* ARM_RECLAIM_INIT_LD_S */ 44