1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #include <asm-generic/vmlinux.lds.h> |
3 | |
4 | OUTPUT_FORMAT(CONFIG_OUTPUT_FORMAT) |
5 | |
6 | #undef i386 |
7 | |
8 | #include <asm/cache.h> |
9 | #include <asm/page_types.h> |
10 | |
11 | #ifdef CONFIG_X86_64 |
12 | OUTPUT_ARCH(i386:x86-64) |
13 | ENTRY(startup_64) |
14 | #else |
15 | OUTPUT_ARCH(i386) |
16 | ENTRY(startup_32) |
17 | #endif |
18 | |
19 | SECTIONS |
20 | { |
21 | /* Be careful parts of head_64.S assume startup_32 is at |
22 | * address 0. |
23 | */ |
24 | . = 0; |
25 | .head.text : { |
26 | _head = . ; |
27 | HEAD_TEXT |
28 | _ehead = . ; |
29 | } |
30 | .rodata..compressed : { |
31 | *(.rodata..compressed) |
32 | } |
33 | .text : { |
34 | _text = .; /* Text */ |
35 | *(.text) |
36 | *(.text.*) |
37 | *(.noinstr.text) |
38 | _etext = . ; |
39 | } |
40 | .rodata : { |
41 | _rodata = . ; |
42 | *(.rodata) /* read-only data */ |
43 | *(.rodata.*) |
44 | _erodata = . ; |
45 | } |
46 | .data : ALIGN(0x1000) { |
47 | _data = . ; |
48 | *(.data) |
49 | *(.data.*) |
50 | |
51 | /* Add 4 bytes of extra space for a CRC-32 checksum */ |
52 | . = ALIGN(. + 4, 0x200); |
53 | _edata = . ; |
54 | } |
55 | . = ALIGN(L1_CACHE_BYTES); |
56 | .bss : { |
57 | _bss = . ; |
58 | *(.bss) |
59 | *(.bss.*) |
60 | *(COMMON) |
61 | . = ALIGN(8); /* For convenience during zeroing */ |
62 | _ebss = .; |
63 | } |
64 | #ifdef CONFIG_X86_64 |
65 | . = ALIGN(PAGE_SIZE); |
66 | .pgtable : { |
67 | _pgtable = . ; |
68 | *(.pgtable) |
69 | _epgtable = . ; |
70 | } |
71 | #endif |
72 | . = ALIGN(PAGE_SIZE); /* keep ZO size page aligned */ |
73 | _end = .; |
74 | |
75 | STABS_DEBUG |
76 | DWARF_DEBUG |
77 | ELF_DETAILS |
78 | |
79 | DISCARDS |
80 | /DISCARD/ : { |
81 | *(.dynamic) *(.dynsym) *(.dynstr) *(.dynbss) |
82 | *(.hash) *(.gnu.hash) |
83 | *(.note.*) |
84 | } |
85 | |
86 | .got.plt (INFO) : { |
87 | *(.got.plt) |
88 | } |
89 | ASSERT(SIZEOF(.got.plt) == 0 || |
90 | #ifdef CONFIG_X86_64 |
91 | SIZEOF(.got.plt) == 0x18, |
92 | #else |
93 | SIZEOF(.got.plt) == 0xc, |
94 | #endif |
95 | "Unexpected GOT/PLT entries detected!" ) |
96 | |
97 | /* |
98 | * Sections that should stay zero sized, which is safer to |
99 | * explicitly check instead of blindly discarding. |
100 | */ |
101 | .got : { |
102 | *(.got) |
103 | } |
104 | ASSERT(SIZEOF(.got) == 0, "Unexpected GOT entries detected!" ) |
105 | |
106 | .plt : { |
107 | *(.plt) *(.plt.*) |
108 | } |
109 | ASSERT(SIZEOF(.plt) == 0, "Unexpected run-time procedure linkages detected!" ) |
110 | |
111 | .rel.dyn : { |
112 | *(.rel.*) *(.rel_*) |
113 | } |
114 | ASSERT(SIZEOF(.rel.dyn) == 0, "Unexpected run-time relocations (.rel) detected!" ) |
115 | |
116 | .rela.dyn : { |
117 | *(.rela.*) *(.rela_*) |
118 | } |
119 | ASSERT(SIZEOF(.rela.dyn) == 0, "Unexpected run-time relocations (.rela) detected!" ) |
120 | } |
121 | |