1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * (C) Copyright 2013 4 * David Feng <fenghua@phytium.com.cn> 5 * 6 * (C) Copyright 2002 7 * Gary Jennejohn, DENX Software Engineering, <garyj@denx.de> 8 */ 9 10#include <config.h> 11#include <asm/psci.h> 12 13OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64") 14OUTPUT_ARCH(aarch64) 15ENTRY(_start) 16SECTIONS 17{ 18#ifdef CONFIG_ARMV8_SECURE_BASE 19 /DISCARD/ : { *(.rela._secure*) } 20#endif 21 . = 0x00000000; 22 23 . = ALIGN(8); 24 .text : 25 { 26 *(.__image_copy_start) 27 CPUDIR/start.o (.text*) 28 *(.text*) 29 } 30 31#ifdef CONFIG_ARMV8_PSCI 32 .__secure_start : 33#ifndef CONFIG_ARMV8_SECURE_BASE 34 ALIGN(CONSTANT(COMMONPAGESIZE)) 35#endif 36 { 37 KEEP(*(.__secure_start)) 38 } 39 40#ifndef CONFIG_ARMV8_SECURE_BASE 41#define CONFIG_ARMV8_SECURE_BASE 42#define __ARMV8_PSCI_STACK_IN_RAM 43#endif 44 .secure_text CONFIG_ARMV8_SECURE_BASE : 45 AT(ADDR(.__secure_start) + SIZEOF(.__secure_start)) 46 { 47 *(._secure.text) 48 } 49 50 .secure_data : AT(LOADADDR(.secure_text) + SIZEOF(.secure_text)) 51 { 52 *(._secure.data) 53 } 54 55 .secure_stack ALIGN(ADDR(.secure_data) + SIZEOF(.secure_data), 56 CONSTANT(COMMONPAGESIZE)) (NOLOAD) : 57#ifdef __ARMV8_PSCI_STACK_IN_RAM 58 AT(ADDR(.secure_stack)) 59#else 60 AT(LOADADDR(.secure_data) + SIZEOF(.secure_data)) 61#endif 62 { 63 KEEP(*(.__secure_stack_start)) 64 65 . = . + CONFIG_ARMV8_PSCI_NR_CPUS * ARM_PSCI_STACK_SIZE; 66 67 . = ALIGN(CONSTANT(COMMONPAGESIZE)); 68 69 KEEP(*(.__secure_stack_end)) 70 } 71 72#ifndef __ARMV8_PSCI_STACK_IN_RAM 73 . = LOADADDR(.secure_stack); 74#endif 75 76 .__secure_end : AT(ADDR(.__secure_end)) { 77 KEEP(*(.__secure_end)) 78 LONG(0x1d1071c); /* Must output something to reset LMA */ 79 } 80#endif 81 82 . = ALIGN(8); 83 .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } 84 85 . = ALIGN(8); 86 .data : { 87 *(.data*) 88 } 89 90 . = ALIGN(8); 91 92 . = .; 93 94 . = ALIGN(8); 95 .u_boot_list : { 96 KEEP(*(SORT(.u_boot_list*))); 97 } 98 99 . = ALIGN(8); 100 101 .efi_runtime : { 102 __efi_runtime_start = .; 103 *(efi_runtime_text) 104 *(efi_runtime_data) 105 __efi_runtime_stop = .; 106 } 107 108 .efi_runtime_rel : { 109 __efi_runtime_rel_start = .; 110 *(.relaefi_runtime_text) 111 *(.relaefi_runtime_data) 112 __efi_runtime_rel_stop = .; 113 } 114 115 . = ALIGN(8); 116 117 .image_copy_end : 118 { 119 *(.__image_copy_end) 120 } 121 122 . = ALIGN(8); 123 124 .rel_dyn_start : 125 { 126 *(.__rel_dyn_start) 127 } 128 129 .rela.dyn : { 130 *(.rela*) 131 } 132 133 .rel_dyn_end : 134 { 135 *(.__rel_dyn_end) 136 } 137 138 _end = .; 139 140 . = ALIGN(8); 141 142 .bss_start : { 143 KEEP(*(.__bss_start)); 144 } 145 146 .bss : { 147 *(.bss*) 148 . = ALIGN(8); 149 } 150 151 .bss_end : { 152 KEEP(*(.__bss_end)); 153 } 154 155 /DISCARD/ : { *(.dynsym) } 156 /DISCARD/ : { *(.dynstr*) } 157 /DISCARD/ : { *(.dynamic*) } 158 /DISCARD/ : { *(.plt*) } 159 /DISCARD/ : { *(.interp*) } 160 /DISCARD/ : { *(.gnu*) } 161 162#ifdef CONFIG_LINUX_KERNEL_IMAGE_HEADER 163#include "linux-kernel-image-header-vars.h" 164#endif 165} 166