Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0 */
2#include <asm-generic/vmlinux.lds.h>
3
4OUTPUT_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
12OUTPUT_ARCH(i386:x86-64)
13ENTRY(startup_64)
14#else
15OUTPUT_ARCH(i386)
16ENTRY(startup_32)
17#endif
18
19SECTIONS
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#ifdef CONFIG_EFI_SBAT
47 .sbat : ALIGN(0x1000) {
48 _sbat = . ;
49 *(.sbat)
50 _esbat = ALIGN(0x1000);
51 . = _esbat;
52 }
53#endif
54 .data : ALIGN(0x1000) {
55 _data = . ;
56 *(.data)
57 *(.data.*)
58
59 /* Add 4 bytes of extra space for the obsolete CRC-32 checksum */
60 . = ALIGN(. + 4, 0x200);
61 _edata = . ;
62 }
63 . = ALIGN(L1_CACHE_BYTES);
64 .bss : {
65 _bss = . ;
66 *(.bss)
67 *(.bss.*)
68 *(COMMON)
69 . = ALIGN(8); /* For convenience during zeroing */
70 _ebss = .;
71 }
72#ifdef CONFIG_X86_64
73 . = ALIGN(PAGE_SIZE);
74 .pgtable : {
75 _pgtable = . ;
76 *(.pgtable)
77 _epgtable = . ;
78 }
79#endif
80 . = ALIGN(PAGE_SIZE); /* keep ZO size page aligned */
81 _end = .;
82
83 STABS_DEBUG
84 DWARF_DEBUG
85 ELF_DETAILS
86
87 DISCARDS
88 /DISCARD/ : {
89 *(.dynamic) *(.dynsym) *(.dynstr) *(.dynbss)
90 *(.hash) *(.gnu.hash)
91 *(.note.*)
92 }
93
94 .got.plt (INFO) : {
95 *(.got.plt)
96 }
97 ASSERT(SIZEOF(.got.plt) == 0 ||
98#ifdef CONFIG_X86_64
99 SIZEOF(.got.plt) == 0x18,
100#else
101 SIZEOF(.got.plt) == 0xc,
102#endif
103 "Unexpected GOT/PLT entries detected!")
104
105 /*
106 * Sections that should stay zero sized, which is safer to
107 * explicitly check instead of blindly discarding.
108 */
109 .got : {
110 *(.got)
111 }
112 ASSERT(SIZEOF(.got) == 0, "Unexpected GOT entries detected!")
113
114 .plt : {
115 *(.plt) *(.plt.*)
116 }
117 ASSERT(SIZEOF(.plt) == 0, "Unexpected run-time procedure linkages detected!")
118
119 .rel.dyn : {
120 *(.rel.*) *(.rel_*)
121 }
122 ASSERT(SIZEOF(.rel.dyn) == 0, "Unexpected run-time relocations (.rel) detected!")
123
124 .rela.dyn : {
125 *(.rela.*) *(.rela_*)
126 }
127 ASSERT(SIZEOF(.rela.dyn) == 0, "Unexpected run-time relocations (.rela) detected!")
128}