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