]> git.sur5r.net Git - u-boot/blob - arch/arm/cpu/armv8/u-boot.lds
SPDX: Convert all of our single license tags to Linux Kernel style
[u-boot] / arch / arm / cpu / armv8 / u-boot.lds
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
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 }