Home | History | Annotate | Download | only in armv8
      1 /* SPDX-License-Identifier: GPL-2.0+ */
      2 /*
      3  * (C) Copyright 2013
      4  * David Feng <fenghua (at) phytium.com.cn>
      5  *
      6  * (C) Copyright 2002
      7  * Gary Jennejohn, DENX Software Engineering, <garyj (at) denx.de>
      8  */
      9 
     10 #include <config.h>
     11 #include <asm/psci.h>
     12 
     13 OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64")
     14 OUTPUT_ARCH(aarch64)
     15 ENTRY(_start)
     16 SECTIONS
     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