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