1OUTPUT_FORMAT("elf64-littleaarch64") 2OUTPUT_ARCH(aarch64) 3ENTRY(bl1_entrypoint) 4MEMORY { 5 ROM (rx): ORIGIN = 0x00000000, LENGTH = (0x00000000 + 0x00020000) - 0x00000000 6 RAM (rwx): ORIGIN = (((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)) - 0x12000), LENGTH = ((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)) - (((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)) - 0x12000) 7} 8SECTIONS 9{ 10 . = 0x00000000; 11 ASSERT(. == ALIGN(((1) << (12))), 12 "BL1_RO_BASE address is not aligned on a page boundary.") 13 .text . : { 14 __TEXT_START__ = .; 15 *bl1_entrypoint.o(.text*) 16 *(SORT_BY_ALIGNMENT(.text*)) 17 *(.vectors) 18 . = ALIGN(((1) << (12))); 19 __TEXT_END__ = .; 20 } >ROM 21 .ARM.extab . : { 22 *(.ARM.extab* .gnu.linkonce.armextab.*) 23 } >ROM 24 .ARM.exidx . : { 25 *(.ARM.exidx* .gnu.linkonce.armexidx.*) 26 } >ROM 27 .rodata . : { 28 __RODATA_START__ = .; 29 *(SORT_BY_ALIGNMENT(.rodata*)) 30 . = 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__ = .; 31 __RODATA_END__ = .; 32 . = ALIGN(16); 33 } >ROM 34 ASSERT(__CPU_OPS_END__ > __CPU_OPS_START__, 35 "cpu_ops not defined for this platform.") 36 . = (((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)) - 0x12000); 37 ASSERT((((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)) - 0x12000) == ALIGN(((1) << (12))), 38 "BL1_RW_BASE address is not aligned on a page boundary.") 39 .data . : ALIGN(16) { __DATA_START__ = .; *(SORT_BY_ALIGNMENT(.data*)) __DATA_END__ = .; } >RAM AT>ROM 40 __DATA_RAM_START__ = __DATA_START__; 41 __DATA_RAM_END__ = __DATA_END__; 42 stacks (NOLOAD) : { __STACKS_START__ = .; *(tzfw_normal_stacks) __STACKS_END__ = .; } >RAM 43 .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 44 xlat_table (NOLOAD) : { *(xlat_table) } >RAM 45 coherent_ram (NOLOAD) : ALIGN(((1) << (12))) { 46 __COHERENT_RAM_START__ = .; 47 *(tzfw_coherent_mem) 48 __COHERENT_RAM_END_UNALIGNED__ = .; 49 . = ALIGN(((1) << (12))); 50 __COHERENT_RAM_END__ = .; 51 } >RAM 52 __BL1_RAM_START__ = ADDR(.data); 53 __BL1_RAM_END__ = .; 54 __DATA_ROM_START__ = LOADADDR(.data); 55 __DATA_SIZE__ = SIZEOF(.data); 56 __BL1_ROM_END__ = __DATA_ROM_START__ + __DATA_SIZE__; 57 ASSERT(__BL1_ROM_END__ <= (0x00000000 + 0x00020000), 58 "BL1's ROM content has exceeded its limit.") 59 __BSS_SIZE__ = SIZEOF(.bss); 60 __COHERENT_RAM_UNALIGNED_SIZE__ = 61 __COHERENT_RAM_END_UNALIGNED__ - __COHERENT_RAM_START__; 62 ASSERT(. <= ((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)), "BL1's RW section has exceeded its limit.") 63} 64