blob: eb926b3c148ef041fac6aa17f09949848b6fd7da [file] [log] [blame]
Tom Rini83d290c2018-05-06 17:58:06 -04001/* SPDX-License-Identifier: GPL-2.0+ */
David Feng0ae76532013-12-14 11:47:35 +08002/*
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>
David Feng0ae76532013-12-14 11:47:35 +08008 */
9
macro.wave.z@gmail.comdf88cb32016-12-08 11:58:22 +080010#include <config.h>
11#include <asm/psci.h>
12
David Feng0ae76532013-12-14 11:47:35 +080013OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64")
14OUTPUT_ARCH(aarch64)
15ENTRY(_start)
16SECTIONS
17{
macro.wave.z@gmail.comdf88cb32016-12-08 11:58:22 +080018#ifdef CONFIG_ARMV8_SECURE_BASE
19 /DISCARD/ : { *(.rela._secure*) }
20#endif
David Feng0ae76532013-12-14 11:47:35 +080021 . = 0x00000000;
22
23 . = ALIGN(8);
24 .text :
25 {
26 *(.__image_copy_start)
27 CPUDIR/start.o (.text*)
28 *(.text*)
29 }
30
macro.wave.z@gmail.comdf88cb32016-12-08 11:58:22 +080031#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
David Feng0ae76532013-12-14 11:47:35 +080082 . = 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
Alexander Graf50149ea2016-03-04 01:10:01 +0100101 .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
David Feng0ae76532013-12-14 11:47:35 +0800117 .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*) }
Stephen Warren8163faf2018-01-03 14:31:51 -0700161
162#ifdef CONFIG_LINUX_KERNEL_IMAGE_HEADER
163#include "linux-kernel-image-header-vars.h"
164#endif
David Feng0ae76532013-12-14 11:47:35 +0800165}