Merge tag 'parisc-for-6.2-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller...
[linux-2.6-microblaze.git] / arch / loongarch / kernel / vmlinux.lds.S
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #include <linux/sizes.h>
3 #include <asm/asm-offsets.h>
4 #include <asm/thread_info.h>
5
6 #define PAGE_SIZE _PAGE_SIZE
7 #define RO_EXCEPTION_TABLE_ALIGN        4
8
9 /*
10  * Put .bss..swapper_pg_dir as the first thing in .bss. This will
11  * ensure that it has .bss alignment (64K).
12  */
13 #define BSS_FIRST_SECTIONS *(.bss..swapper_pg_dir)
14
15 #include <asm-generic/vmlinux.lds.h>
16 #include "image-vars.h"
17
18 /*
19  * Max avaliable Page Size is 64K, so we set SectionAlignment
20  * field of EFI application to 64K.
21  */
22 PECOFF_FILE_ALIGN = 0x200;
23 PECOFF_SEGMENT_ALIGN = 0x10000;
24
25 OUTPUT_ARCH(loongarch)
26 ENTRY(kernel_entry)
27 PHDRS {
28         text PT_LOAD FLAGS(7);  /* RWX */
29         note PT_NOTE FLAGS(4);  /* R__ */
30 }
31
32 jiffies  = jiffies_64;
33
34 SECTIONS
35 {
36         . = VMLINUX_LOAD_ADDRESS;
37
38         _text = .;
39         HEAD_TEXT_SECTION
40
41         . = ALIGN(PECOFF_SEGMENT_ALIGN);
42         _stext = .;
43         .text : {
44                 TEXT_TEXT
45                 SCHED_TEXT
46                 CPUIDLE_TEXT
47                 LOCK_TEXT
48                 KPROBES_TEXT
49                 IRQENTRY_TEXT
50                 SOFTIRQENTRY_TEXT
51                 *(.fixup)
52                 *(.gnu.warning)
53         } :text = 0
54         . = ALIGN(PECOFF_SEGMENT_ALIGN);
55         _etext = .;
56
57         /*
58          * struct alt_inst entries. From the header (alternative.h):
59          * "Alternative instructions for different CPU types or capabilities"
60          * Think locking instructions on spinlocks.
61          */
62         . = ALIGN(4);
63         .altinstructions : AT(ADDR(.altinstructions) - LOAD_OFFSET) {
64                 __alt_instructions = .;
65                 *(.altinstructions)
66                 __alt_instructions_end = .;
67         }
68
69         .got : ALIGN(16) { *(.got) }
70         .plt : ALIGN(16) { *(.plt) }
71         .got.plt : ALIGN(16) { *(.got.plt) }
72
73         . = ALIGN(PECOFF_SEGMENT_ALIGN);
74         __init_begin = .;
75         __inittext_begin = .;
76
77         INIT_TEXT_SECTION(PAGE_SIZE)
78         .exit.text : {
79                 EXIT_TEXT
80         }
81
82         . = ALIGN(PECOFF_SEGMENT_ALIGN);
83         __inittext_end = .;
84
85         __initdata_begin = .;
86
87         INIT_DATA_SECTION(16)
88         .exit.data : {
89                 EXIT_DATA
90         }
91
92 #ifdef CONFIG_SMP
93         PERCPU_SECTION(1 << CONFIG_L1_CACHE_SHIFT)
94 #endif
95
96         .rela.dyn : ALIGN(8) { *(.rela.dyn) *(.rela*) }
97
98         .init.bss : {
99                 *(.init.bss)
100         }
101         . = ALIGN(PECOFF_SEGMENT_ALIGN);
102         __initdata_end = .;
103
104         __init_end = .;
105
106         _sdata = .;
107         RO_DATA(4096)
108         RW_DATA(1 << CONFIG_L1_CACHE_SHIFT, PAGE_SIZE, THREAD_SIZE)
109
110         .sdata : {
111                 *(.sdata)
112         }
113         .edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGN); }
114         _edata =  .;
115
116         BSS_SECTION(0, SZ_64K, 8)
117         . = ALIGN(PECOFF_SEGMENT_ALIGN);
118
119         _end = .;
120
121         STABS_DEBUG
122         DWARF_DEBUG
123         ELF_DETAILS
124
125         .gptab.sdata : {
126                 *(.gptab.data)
127                 *(.gptab.sdata)
128         }
129         .gptab.sbss : {
130                 *(.gptab.bss)
131                 *(.gptab.sbss)
132         }
133
134         DISCARDS
135         /DISCARD/ : {
136                 *(.gnu.attributes)
137                 *(.options)
138                 *(.eh_frame)
139         }
140 }