GNU Linux-libre 5.19-rc6-gnu
[releases.git] / arch / x86 / boot / compressed / vmlinux.lds.S
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 }