blob: fc1bba8cf08854b5e2be1ed3e2dc66f7b869bc27 [file] [log] [blame]
Tom Rini83d290c2018-05-06 17:58:06 -04001/* SPDX-License-Identifier: GPL-2.0+ */
Mateusz Kulikowski626f0482016-03-31 23:12:33 +02002/*
3 * Override linker script for fastboot-readable images
4 *
5 * (C) Copyright 2015 Mateusz Kulikowski <mateusz.kulikowski@gmail.com>
6 *
7 * Based on arch/arm/cpu/armv8/u-boot.lds (Just add header)
Mateusz Kulikowski626f0482016-03-31 23:12:33 +02008 */
9
10OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64")
11OUTPUT_ARCH(aarch64)
12ENTRY(_arm64_header)
13SECTIONS
14{
15 . = 0x00000000;
16
17 . = ALIGN(8);
18 .text :
19 {
20 *(.__image_copy_start)
21 board/qualcomm/dragonboard410c/head.o (.text*)
22 CPUDIR/start.o (.text*)
Alexander Graf7e21fbc2018-06-12 07:48:37 +020023 }
24
25 /* This needs to come before *(.text*) */
26 .efi_runtime : {
27 __efi_runtime_start = .;
28 *(.text.efi_runtime*)
29 *(.rodata.efi_runtime*)
30 *(.data.efi_runtime*)
31 __efi_runtime_stop = .;
32 }
33
34 .text_rest :
35 {
Mateusz Kulikowski626f0482016-03-31 23:12:33 +020036 *(.text*)
37 }
38
39 . = ALIGN(8);
40 .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
41
42 . = ALIGN(8);
43 .data : {
44 *(.data*)
45 }
46
47 . = ALIGN(8);
48
49 . = .;
50
51 . = ALIGN(8);
52 .u_boot_list : {
53 KEEP(*(SORT(.u_boot_list*)));
54 }
55
56 . = ALIGN(8);
57
Rob Clark0f546ea2017-06-20 17:55:24 -040058 .efi_runtime : {
59 __efi_runtime_start = .;
60 *(efi_runtime_text)
61 *(efi_runtime_data)
62 __efi_runtime_stop = .;
63 }
64
65 .efi_runtime_rel : {
66 __efi_runtime_rel_start = .;
Alexander Graf7e21fbc2018-06-12 07:48:37 +020067 *(.rel*.efi_runtime)
68 *(.rel*.efi_runtime.*)
Rob Clark0f546ea2017-06-20 17:55:24 -040069 __efi_runtime_rel_stop = .;
70 }
71
72 . = ALIGN(8);
73
Mateusz Kulikowski626f0482016-03-31 23:12:33 +020074 .image_copy_end :
75 {
76 *(.__image_copy_end)
77 }
78
79 . = ALIGN(8);
80
81 .rel_dyn_start :
82 {
83 *(.__rel_dyn_start)
84 }
85
86 .rela.dyn : {
87 *(.rela*)
88 }
89
90 .rel_dyn_end :
91 {
92 *(.__rel_dyn_end)
93 }
94
95 _end = .;
96
97 . = ALIGN(8);
98
99 .bss_start : {
100 KEEP(*(.__bss_start));
101 }
102
103 .bss : {
104 *(.bss*)
105 . = ALIGN(8);
106 }
107
108 .bss_end : {
109 KEEP(*(.__bss_end));
110 }
111
112 /DISCARD/ : { *(.dynsym) }
113 /DISCARD/ : { *(.dynstr*) }
114 /DISCARD/ : { *(.dynamic*) }
115 /DISCARD/ : { *(.plt*) }
116 /DISCARD/ : { *(.interp*) }
117 /DISCARD/ : { *(.gnu*) }
118}