1OUTPUT_FORMAT("elf64-littleaarch64")
2OUTPUT_ARCH(aarch64)
3ENTRY(bl2_entrypoint)
4MEMORY {
5    RAM (rwx): ORIGIN = ((((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)) - 0x20000) - 0x25000), LENGTH = (((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)) - 0x20000) - ((((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)) - 0x20000) - 0x25000)
6}
7SECTIONS
8{
9    . = ((((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)) - 0x20000) - 0x25000);
10    ASSERT(. == ALIGN(((1) << (12))),
11           "BL2_BASE address is not aligned on a page boundary.")
12    .text . : {
13        __TEXT_START__ = .;
14        *bl2_entrypoint.o(.text*)
15        *(SORT_BY_ALIGNMENT(.text*))
16        *(.vectors)
17        . = ALIGN(((1) << (12)));
18        __TEXT_END__ = .;
19     } >RAM
20     .ARM.extab . : {
21        *(.ARM.extab* .gnu.linkonce.armextab.*)
22     } >RAM
23     .ARM.exidx . : {
24        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
25     } >RAM
26    .rodata . : {
27        __RODATA_START__ = .;
28        *(SORT_BY_ALIGNMENT(.rodata*))
29 . = ALIGN(8); __RT_SVC_DESCS_START__ = .; KEEP(*(rt_svc_descs)) __RT_SVC_DESCS_END__ = .; . = ALIGN(8); __FCONF_POPULATOR_START__ = .; KEEP(*(.fconf_populator)) __FCONF_POPULATOR_END__ = .; . = ALIGN(8); __PMF_SVC_DESCS_START__ = .; KEEP(*(pmf_svc_descs)) __PMF_SVC_DESCS_END__ = .; . = ALIGN(8); __PARSER_LIB_DESCS_START__ = .; KEEP(*(.img_parser_lib_descs)) __PARSER_LIB_DESCS_END__ = .; . = ALIGN(8); __CPU_OPS_START__ = .; KEEP(*(cpu_ops)) __CPU_OPS_END__ = .; . = ALIGN(8); __GOT_START__ = .; *(.got) __GOT_END__ = .;
30        . = ALIGN(((1) << (12)));
31        __RODATA_END__ = .;
32    } >RAM
33    __RW_START__ = . ;
34    .data . : ALIGN(1) { __DATA_START__ = .; *(SORT_BY_ALIGNMENT(.data*)) __DATA_END__ = .; } >RAM
35    stacks (NOLOAD) : { __STACKS_START__ = .; *(tzfw_normal_stacks) __STACKS_END__ = .; } >RAM
36    .bss (NOLOAD) : ALIGN(16) { __BSS_START__ = .; *(SORT_BY_ALIGNMENT(.bss*)) *(COMMON) . = ALIGN((1 << 6)); __PMF_TIMESTAMP_START__ = .; KEEP(*(pmf_timestamp_array)) . = ALIGN((1 << 6)); __PMF_PERCPU_TIMESTAMP_END__ = .; __PERCPU_TIMESTAMP_SIZE__ = ABSOLUTE(. - __PMF_TIMESTAMP_START__); . = . + (__PERCPU_TIMESTAMP_SIZE__ * (((4) + (4)) - 1)); __PMF_TIMESTAMP_END__ = .; . = ALIGN(16); *(base_xlat_table) __BSS_END__ = .; } >RAM
37    xlat_table (NOLOAD) : { *(xlat_table) } >RAM
38    coherent_ram (NOLOAD) : ALIGN(((1) << (12))) {
39        __COHERENT_RAM_START__ = .;
40        *(tzfw_coherent_mem)
41        __COHERENT_RAM_END_UNALIGNED__ = .;
42        . = ALIGN(((1) << (12)));
43        __COHERENT_RAM_END__ = .;
44    } >RAM
45    __RW_END__ = .;
46    __BL2_END__ = .;
47    __BSS_SIZE__ = SIZEOF(.bss);
48    __COHERENT_RAM_UNALIGNED_SIZE__ =
49        __COHERENT_RAM_END_UNALIGNED__ - __COHERENT_RAM_START__;
50    ASSERT(. <= (((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)) - 0x20000), "BL2 image has exceeded its limit.")
51}
52