xref: /arm-trusted-firmware/include/plat/arm/common/arm_reclaim_init.ld.S (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
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