xref: /linux/arch/x86/boot/compressed/vmlinux.lds.S (revision 56d5e32929ee8e772922242f37cc234c437c89c0)
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}
129