1OUTPUT_FORMAT("elf64-littleaarch64") 2OUTPUT_ARCH(aarch64) 3ENTRY(bl31_entrypoint) 4MEMORY { 5 RAM (rwx): ORIGIN = (((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)) - 0x20000), LENGTH = ((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)) - (((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)) - 0x20000) 6} 7SECTIONS 8{ 9 . = (((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)) - 0x20000); 10 ASSERT(. == ALIGN(((1) << (12))), 11 "BL31_BASE address is not aligned on a page boundary.") 12 __BL31_START__ = .; 13 .text . : { 14 __TEXT_START__ = .; 15 *bl31_entrypoint.o(.text*) 16 *(SORT_BY_ALIGNMENT(SORT(.text*))) 17 *(.vectors) 18 . = ALIGN(((1) << (12))); 19 __TEXT_END__ = .; 20 } >RAM 21 .rodata . : { 22 __RODATA_START__ = .; 23 *(SORT_BY_ALIGNMENT(.rodata*)) 24 . = 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__ = .; 25 . = ALIGN(8); 26__pubsub_psci_cpu_on_finish_start = .; KEEP(*(__pubsub_psci_cpu_on_finish)); __pubsub_psci_cpu_on_finish_end = .; 27__pubsub_psci_suspend_pwrdown_start_start = .; KEEP(*(__pubsub_psci_suspend_pwrdown_start)); __pubsub_psci_suspend_pwrdown_start_end = .; 28__pubsub_psci_suspend_pwrdown_finish_start = .; KEEP(*(__pubsub_psci_suspend_pwrdown_finish)); __pubsub_psci_suspend_pwrdown_finish_end = .; 29__pubsub_cm_entering_secure_world_start = .; KEEP(*(__pubsub_cm_entering_secure_world)); __pubsub_cm_entering_secure_world_end = .; 30__pubsub_cm_exited_secure_world_start = .; KEEP(*(__pubsub_cm_exited_secure_world)); __pubsub_cm_exited_secure_world_end = .; 31__pubsub_cm_entering_normal_world_start = .; KEEP(*(__pubsub_cm_entering_normal_world)); __pubsub_cm_entering_normal_world_end = .; 32__pubsub_cm_exited_normal_world_start = .; KEEP(*(__pubsub_cm_exited_normal_world)); __pubsub_cm_exited_normal_world_end = .; 33 . = ALIGN(((1) << (12))); 34 __RODATA_END__ = .; 35 } >RAM 36 ASSERT(__CPU_OPS_END__ > __CPU_OPS_START__, 37 "cpu_ops not defined for this platform.") 38 __RW_START__ = . ; 39 .data . : ALIGN(1) { __DATA_START__ = .; *(SORT_BY_ALIGNMENT(.data*)) __DATA_END__ = .; } >RAM 40 .rela.dyn : ALIGN(8) { __RELA_START__ = .; *(.rela*) __RELA_END__ = .; } >RAM 41 ASSERT(. <= (((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)) - 0x12000), "BL31 progbits has exceeded its limit.") 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 *(bakery_lock) 48 *(tzfw_coherent_mem) 49 __COHERENT_RAM_END_UNALIGNED__ = .; 50 . = ALIGN(((1) << (12))); 51 __COHERENT_RAM_END__ = .; 52 } >RAM 53 __RW_END__ = .; 54 __BL31_END__ = .; 55 /DISCARD/ : { 56 *(.dynsym .dynstr .hash .gnu.hash) 57 } 58 ASSERT(. <= ((0x0e000000 + 0x00001000) + (0x00060000 - 0x00001000)), "BL31 image has exceeded its limit.") 59} 60