xref: /arm-trusted-firmware/services/std_svc/rmmd/trp/linker.ld.S (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu/*
2*91f16700Schasinglulu * Copyright (c) 2021-2023, Arm Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu *
4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu */
6*91f16700Schasinglulu
7*91f16700Schasinglulu#include <common/bl_common.ld.h>
8*91f16700Schasinglulu#include <lib/xlat_tables/xlat_tables_defs.h>
9*91f16700Schasinglulu
10*91f16700Schasinglulu/* Mapped using 4K pages, requires us to align different sections with
11*91f16700Schasinglulu * different property at the same granularity. */
12*91f16700SchasingluluPAGE_SIZE_4K = 4096;
13*91f16700Schasinglulu
14*91f16700SchasingluluOUTPUT_FORMAT("elf64-littleaarch64")
15*91f16700SchasingluluOUTPUT_ARCH(aarch64)
16*91f16700SchasingluluENTRY(trp_head)
17*91f16700Schasinglulu
18*91f16700SchasingluluMEMORY {
19*91f16700Schasinglulu	RAM (rwx): ORIGIN = RMM_BASE, LENGTH = RMM_LIMIT - RMM_BASE
20*91f16700Schasinglulu}
21*91f16700Schasinglulu
22*91f16700Schasinglulu
23*91f16700SchasingluluSECTIONS
24*91f16700Schasinglulu{
25*91f16700Schasinglulu	. = RMM_BASE;
26*91f16700Schasinglulu
27*91f16700Schasinglulu	.text : {
28*91f16700Schasinglulu		*(.head.text)
29*91f16700Schasinglulu		. = ALIGN(8);
30*91f16700Schasinglulu		*(.text*)
31*91f16700Schasinglulu	} >RAM
32*91f16700Schasinglulu
33*91f16700Schasinglulu	. = ALIGN(PAGE_SIZE_4K);
34*91f16700Schasinglulu
35*91f16700Schasinglulu	.rodata : {
36*91f16700Schasinglulu		*(.rodata*)
37*91f16700Schasinglulu	} >RAM
38*91f16700Schasinglulu
39*91f16700Schasinglulu	. = ALIGN(PAGE_SIZE_4K);
40*91f16700Schasinglulu
41*91f16700Schasinglulu	 __RW_START__ = . ;
42*91f16700Schasinglulu
43*91f16700Schasinglulu	.data : {
44*91f16700Schasinglulu		*(.data*)
45*91f16700Schasinglulu	} >RAM
46*91f16700Schasinglulu
47*91f16700Schasinglulu	.bss (NOLOAD) : {
48*91f16700Schasinglulu		__BSS_START__ = .;
49*91f16700Schasinglulu		*(.bss*)
50*91f16700Schasinglulu		__BSS_END__ = .;
51*91f16700Schasinglulu	} >RAM
52*91f16700Schasinglulu	__BSS_SIZE__ = SIZEOF(.bss);
53*91f16700Schasinglulu
54*91f16700Schasinglulu
55*91f16700Schasinglulu	STACK_SECTION >RAM
56*91f16700Schasinglulu
57*91f16700Schasinglulu
58*91f16700Schasinglulu	/*
59*91f16700Schasinglulu	* Define a linker symbol to mark the end of the RW memory area for this
60*91f16700Schasinglulu	* image.
61*91f16700Schasinglulu	*/
62*91f16700Schasinglulu	__RW_END__ = .;
63*91f16700Schasinglulu	__RMM_END__ = .;
64*91f16700Schasinglulu
65*91f16700Schasinglulu
66*91f16700Schasinglulu	/DISCARD/ : { *(.dynstr*) }
67*91f16700Schasinglulu	/DISCARD/ : { *(.dynamic*) }
68*91f16700Schasinglulu	/DISCARD/ : { *(.plt*) }
69*91f16700Schasinglulu	/DISCARD/ : { *(.interp*) }
70*91f16700Schasinglulu	/DISCARD/ : { *(.gnu*) }
71*91f16700Schasinglulu	/DISCARD/ : { *(.note*) }
72*91f16700Schasinglulu}
73