1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * Copyright (C) 2000 Russell King |
4 | */ |
5 | #include <asm/vmlinux.lds.h> |
6 | |
7 | #ifdef CONFIG_CPU_ENDIAN_BE8 |
8 | #define ZIMAGE_MAGIC(x) ( (((x) >> 24) & 0x000000ff) | \ |
9 | (((x) >> 8) & 0x0000ff00) | \ |
10 | (((x) << 8) & 0x00ff0000) | \ |
11 | (((x) << 24) & 0xff000000) ) |
12 | #else |
13 | #define ZIMAGE_MAGIC(x) (x) |
14 | #endif |
15 | |
16 | OUTPUT_ARCH(arm) |
17 | ENTRY(_start) |
18 | SECTIONS |
19 | { |
20 | /DISCARD/ : { |
21 | COMMON_DISCARDS |
22 | *(.ARM.exidx*) |
23 | *(.ARM.extab*) |
24 | *(.note.*) |
25 | *(.rel.*) |
26 | *(.printk_index) |
27 | /* |
28 | * Discard any r/w data - this produces a link error if we have any, |
29 | * which is required for PIC decompression. Local data generates |
30 | * GOTOFF relocations, which prevents it being relocated independently |
31 | * of the text/got segments. |
32 | */ |
33 | *(.data) |
34 | } |
35 | |
36 | . = TEXT_START; |
37 | _text = .; |
38 | |
39 | .text : { |
40 | _start = .; |
41 | *(.start) |
42 | *(.text) |
43 | *(.text.*) |
44 | ARM_STUBS_TEXT |
45 | } |
46 | .table : ALIGN(4) { |
47 | _table_start = .; |
48 | LONG(ZIMAGE_MAGIC(6)) |
49 | LONG(ZIMAGE_MAGIC(0x5a534c4b)) |
50 | LONG(ZIMAGE_MAGIC(__piggy_size_addr - _start)) |
51 | LONG(ZIMAGE_MAGIC(_kernel_bss_size)) |
52 | LONG(ZIMAGE_MAGIC(TEXT_OFFSET)) |
53 | LONG(ZIMAGE_MAGIC(MALLOC_SIZE)) |
54 | LONG(0) |
55 | _table_end = .; |
56 | } |
57 | .rodata : { |
58 | *(.rodata) |
59 | *(.rodata.*) |
60 | *(.data.rel.ro) |
61 | *(.data.rel.ro.*) |
62 | } |
63 | .piggydata : { |
64 | *(.piggydata) |
65 | __piggy_size_addr = . - 4; |
66 | } |
67 | |
68 | . = ALIGN(4); |
69 | _etext = .; |
70 | |
71 | .got.plt : { *(.got.plt) } |
72 | #ifndef CONFIG_EFI_STUB |
73 | _got_start = .; |
74 | .got : { *(.got) } |
75 | _got_end = .; |
76 | #endif |
77 | |
78 | /* ensure the zImage file size is always a multiple of 64 bits */ |
79 | /* (without a dummy byte, ld just ignores the empty section) */ |
80 | .pad : { BYTE(0); . = ALIGN(8); } |
81 | |
82 | #ifdef CONFIG_EFI_STUB |
83 | .data : ALIGN(4096) { |
84 | __pecoff_data_start = .; |
85 | _got_start = .; |
86 | *(.got) |
87 | _got_end = .; |
88 | /* |
89 | * The EFI stub always executes from RAM, and runs strictly before the |
90 | * decompressor, so we can make an exception for its r/w data, and keep it |
91 | */ |
92 | *(.data.efistub .bss.efistub) |
93 | __pecoff_data_end = .; |
94 | |
95 | /* |
96 | * PE/COFF mandates a file size which is a multiple of 512 bytes if the |
97 | * section size equals or exceeds 4 KB |
98 | */ |
99 | . = ALIGN(512); |
100 | } |
101 | __pecoff_data_rawsize = . - ADDR(.data); |
102 | #endif |
103 | |
104 | _edata = .; |
105 | |
106 | /* |
107 | * The image_end section appears after any additional loadable sections |
108 | * that the linker may decide to insert in the binary image. Having |
109 | * this symbol allows further debug in the near future. |
110 | */ |
111 | .image_end (NOLOAD) : { |
112 | /* |
113 | * EFI requires that the image is aligned to 512 bytes, and appended |
114 | * DTB requires that we know where the end of the image is. Ensure |
115 | * that both are satisfied by ensuring that there are no additional |
116 | * sections emitted into the decompressor image. |
117 | */ |
118 | _edata_real = .; |
119 | } |
120 | |
121 | _magic_sig = ZIMAGE_MAGIC(0x016f2818); |
122 | _magic_start = ZIMAGE_MAGIC(_start); |
123 | _magic_end = ZIMAGE_MAGIC(_edata); |
124 | _magic_table = ZIMAGE_MAGIC(_table_start - _start); |
125 | |
126 | . = BSS_START; |
127 | __bss_start = .; |
128 | .bss : { *(.bss) } |
129 | _end = .; |
130 | |
131 | . = ALIGN(8); /* the stack must be 64-bit aligned */ |
132 | .stack : { *(.stack) } |
133 | |
134 | PROVIDE(__pecoff_data_size = ALIGN(512) - ADDR(.data)); |
135 | PROVIDE(__pecoff_end = ALIGN(512)); |
136 | |
137 | STABS_DEBUG |
138 | DWARF_DEBUG |
139 | ARM_DETAILS |
140 | |
141 | ARM_ASSERTS |
142 | } |
143 | ASSERT(_edata_real == _edata, "error: zImage file size is incorrect" ); |
144 | |