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		_etext = . ;
38	}
39	.rodata : {
40		_rodata = . ;
41		*(.rodata)	 /* read-only data */
42		*(.rodata.*)
43		_erodata = . ;
44	}
45	.data :	{
46		_data = . ;
47		*(.data)
48		*(.data.*)
49		*(.bss.efistub)
50		_edata = . ;
51	}
52	. = ALIGN(L1_CACHE_BYTES);
53	.bss : {
54		_bss = . ;
55		*(.bss)
56		*(.bss.*)
57		*(COMMON)
58		. = ALIGN(8);	/* For convenience during zeroing */
59		_ebss = .;
60	}
61#ifdef CONFIG_X86_64
62       . = ALIGN(PAGE_SIZE);
63       .pgtable : {
64		_pgtable = . ;
65		*(.pgtable)
66		_epgtable = . ;
67	}
68#endif
69	. = ALIGN(PAGE_SIZE);	/* keep ZO size page aligned */
70	_end = .;
71
72	STABS_DEBUG
73	DWARF_DEBUG
74	ELF_DETAILS
75
76	DISCARDS
77	/DISCARD/ : {
78		*(.dynamic) *(.dynsym) *(.dynstr) *(.dynbss)
79		*(.hash) *(.gnu.hash)
80		*(.note.*)
81	}
82
83	.got.plt (INFO) : {
84		*(.got.plt)
85	}
86	ASSERT(SIZEOF(.got.plt) == 0 ||
87#ifdef CONFIG_X86_64
88	       SIZEOF(.got.plt) == 0x18,
89#else
90	       SIZEOF(.got.plt) == 0xc,
91#endif
92	       "Unexpected GOT/PLT entries detected!")
93
94	/*
95	 * Sections that should stay zero sized, which is safer to
96	 * explicitly check instead of blindly discarding.
97	 */
98	.got : {
99		*(.got)
100	}
101	ASSERT(SIZEOF(.got) == 0, "Unexpected GOT entries detected!")
102
103	.plt : {
104		*(.plt) *(.plt.*)
105	}
106	ASSERT(SIZEOF(.plt) == 0, "Unexpected run-time procedure linkages detected!")
107
108	.rel.dyn : {
109		*(.rel.*) *(.rel_*)
110	}
111	ASSERT(SIZEOF(.rel.dyn) == 0, "Unexpected run-time relocations (.rel) detected!")
112
113	.rela.dyn : {
114		*(.rela.*) *(.rela_*)
115	}
116	ASSERT(SIZEOF(.rela.dyn) == 0, "Unexpected run-time relocations (.rela) detected!")
117}
118