xref: /rk3399_ARM-atf/include/plat/arm/common/arm_reclaim_init.ld.S (revision 338dbe2f1f4b98da260e556d3f0fbdd8123caf06)
1cb4adb0dSDaniel Boulby/*
2*da04341eSChris Kay * Copyright (c) 2017-2023, Arm Limited and Contributors. All rights reserved.
3cb4adb0dSDaniel Boulby *
4cb4adb0dSDaniel Boulby * SPDX-License-Identifier: BSD-3-Clause
5cb4adb0dSDaniel Boulby */
6cb4adb0dSDaniel Boulby#ifndef ARM_RECLAIM_INIT_LD_S
7cb4adb0dSDaniel Boulby#define ARM_RECLAIM_INIT_LD_S
8cb4adb0dSDaniel Boulby
9cb4adb0dSDaniel BoulbySECTIONS
10cb4adb0dSDaniel Boulby{
11cb4adb0dSDaniel Boulby        .init __STACKS_START__ : {
12cb4adb0dSDaniel Boulby            . = . + PLATFORM_STACK_SIZE;
13cb4adb0dSDaniel Boulby            . = ALIGN(PAGE_SIZE);
14cb4adb0dSDaniel Boulby            __INIT_CODE_START__ = .;
156c87abddSManish Pandey	    *(*text.init.*);
16cb4adb0dSDaniel Boulby            __INIT_CODE_END__ = .;
173ed5606bSDavid Horstmann            INIT_CODE_END_ALIGNED = ALIGN(PAGE_SIZE);
18cb4adb0dSDaniel Boulby        } >RAM
19cb4adb0dSDaniel Boulby
20cb4adb0dSDaniel Boulby#ifdef BL31_PROGBITS_LIMIT
21cb4adb0dSDaniel Boulby    ASSERT(__INIT_CODE_END__ <= BL31_PROGBITS_LIMIT,
22cb4adb0dSDaniel Boulby            "BL31 init has exceeded progbits limit.")
23cb4adb0dSDaniel Boulby#endif
24cb4adb0dSDaniel Boulby}
25cb4adb0dSDaniel Boulby
2634dd1e96SAlexei Fedorov#define	ABS		ABSOLUTE
2734dd1e96SAlexei Fedorov
283ed5606bSDavid Horstmann#define STACK_SECTION							\
29*da04341eSChris Kay	.stacks (NOLOAD) : {						\
3034dd1e96SAlexei Fedorov		__STACKS_START__ = .;					\
31*da04341eSChris Kay		*(.tzfw_normal_stacks)					\
323ed5606bSDavid Horstmann		__STACKS_END__ = .;					\
333ed5606bSDavid Horstmann		/* Allow room for the init section where necessary. */	\
3434dd1e96SAlexei Fedorov		OFFSET = ABS(SIZEOF(.init) - (. - __STACKS_START__));	\
3534dd1e96SAlexei Fedorov		/* Offset sign */					\
3634dd1e96SAlexei Fedorov		SIGN = ABS(OFFSET) & (1 << 63);				\
3734dd1e96SAlexei Fedorov		/* Offset mask */					\
3834dd1e96SAlexei Fedorov		MASK = ABS(SIGN >> 63) - 1;				\
3934dd1e96SAlexei Fedorov		. +=  ABS(OFFSET) & ABS(MASK);				\
40fa1fdb22SAlexei Fedorov		.  = ALIGN(PAGE_SIZE);					\
4134dd1e96SAlexei Fedorov	}
423ed5606bSDavid Horstmann
43cb4adb0dSDaniel Boulby#endif /* ARM_RECLAIM_INIT_LD_S */
44