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 		_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