LoongArch: Fix the _stext symbol address
[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
8 /*
9  * Put .bss..swapper_pg_dir as the first thing in .bss. This will
10  * ensure that it has .bss alignment (64K).
11  */
12 #define BSS_FIRST_SECTIONS *(.bss..swapper_pg_dir)
13
14 #include <asm-generic/vmlinux.lds.h>
15
16 /*
17  * Max avaliable Page Size is 64K, so we set SectionAlignment
18  * field of EFI application to 64K.
19  */
20 PECOFF_FILE_ALIGN = 0x200;
21 PECOFF_SEGMENT_ALIGN = 0x10000;
22
23 OUTPUT_ARCH(loongarch)
24 ENTRY(kernel_entry)
25 PHDRS {
26         text PT_LOAD FLAGS(7);  /* RWX */
27         note PT_NOTE FLAGS(4);  /* R__ */
28 }
29
30 jiffies  = jiffies_64;
31
32 SECTIONS
33 {
34         . = VMLINUX_LOAD_ADDRESS;
35
36         _text = .;
37         HEAD_TEXT_SECTION
38
39         . = ALIGN(PECOFF_SEGMENT_ALIGN);
40         _stext = .;
41         .text : {
42                 TEXT_TEXT
43                 SCHED_TEXT
44                 CPUIDLE_TEXT
45                 LOCK_TEXT
46                 KPROBES_TEXT
47                 IRQENTRY_TEXT
48                 SOFTIRQENTRY_TEXT
49                 *(.fixup)
50                 *(.gnu.warning)
51         } :text = 0
52         . = ALIGN(PECOFF_SEGMENT_ALIGN);
53         _etext = .;
54
55         EXCEPTION_TABLE(16)
56
57         . = ALIGN(PECOFF_SEGMENT_ALIGN);
58         __init_begin = .;
59         __inittext_begin = .;
60
61         INIT_TEXT_SECTION(PAGE_SIZE)
62         .exit.text : {
63                 EXIT_TEXT
64         }
65
66         . = ALIGN(PECOFF_SEGMENT_ALIGN);
67         __inittext_end = .;
68
69         __initdata_begin = .;
70
71         INIT_DATA_SECTION(16)
72         .exit.data : {
73                 EXIT_DATA
74         }
75
76 #ifdef CONFIG_SMP
77         PERCPU_SECTION(1 << CONFIG_L1_CACHE_SHIFT)
78 #endif
79
80         .init.bss : {
81                 *(.init.bss)
82         }
83         . = ALIGN(PECOFF_SEGMENT_ALIGN);
84         __initdata_end = .;
85
86         __init_end = .;
87
88         _sdata = .;
89         RO_DATA(4096)
90         RW_DATA(1 << CONFIG_L1_CACHE_SHIFT, PAGE_SIZE, THREAD_SIZE)
91
92         .sdata : {
93                 *(.sdata)
94         }
95         .edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGN); }
96         _edata =  .;
97
98         BSS_SECTION(0, SZ_64K, 8)
99         . = ALIGN(PECOFF_SEGMENT_ALIGN);
100
101         _end = .;
102
103         STABS_DEBUG
104         DWARF_DEBUG
105         ELF_DETAILS
106
107         .gptab.sdata : {
108                 *(.gptab.data)
109                 *(.gptab.sdata)
110         }
111         .gptab.sbss : {
112                 *(.gptab.bss)
113                 *(.gptab.sbss)
114         }
115
116         DISCARDS
117         /DISCARD/ : {
118                 *(.gnu.attributes)
119                 *(.options)
120                 *(.eh_frame)
121         }
122 }