/*
 * Copyright (c) 2021-2023, Arm Limited and Contributors. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include <common/bl_common.ld.h>
#include <lib/xlat_tables/xlat_tables_defs.h>

/* Mapped using 4K pages, requires us to align different sections with
 * different property at the same granularity. */
PAGE_SIZE_4K = 4096;

OUTPUT_FORMAT("elf64-littleaarch64")
OUTPUT_ARCH(aarch64)
ENTRY(trp_head)

MEMORY {
	RAM (rwx): ORIGIN = RMM_BASE, LENGTH = RMM_LIMIT - RMM_BASE
}


SECTIONS
{
	. = RMM_BASE;

	.text : {
		*(.head.text)
		. = ALIGN(8);
		*(.text*)
	} >RAM

	. = ALIGN(PAGE_SIZE_4K);

	.rodata : {
		*(.rodata*)
	} >RAM

	. = ALIGN(PAGE_SIZE_4K);

	 __RW_START__ = . ;

	.data : {
		*(.data*)
	} >RAM

	.bss (NOLOAD) : {
		__BSS_START__ = .;
		*(.bss*)
		__BSS_END__ = .;
	} >RAM
	__BSS_SIZE__ = SIZEOF(.bss);


	STACK_SECTION >RAM


	/*
	* Define a linker symbol to mark the end of the RW memory area for this
	* image.
	*/
	__RW_END__ = .;
	__RMM_END__ = .;


	/DISCARD/ : { *(.dynstr*) }
	/DISCARD/ : { *(.dynamic*) }
	/DISCARD/ : { *(.plt*) }
	/DISCARD/ : { *(.interp*) }
	/DISCARD/ : { *(.gnu*) }
	/DISCARD/ : { *(.note*) }
}
