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