Linux 6.0-rc1
[linux-2.6-microblaze.git] / arch / riscv / kernel / vmlinux.lds.S
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (C) 2012 Regents of the University of California
4  * Copyright (C) 2017 SiFive
5  */
6
7 #define RO_EXCEPTION_TABLE_ALIGN        4
8
9 #ifdef CONFIG_XIP_KERNEL
10 #include "vmlinux-xip.lds.S"
11 #else
12
13 #include <asm/pgtable.h>
14 #define LOAD_OFFSET KERNEL_LINK_ADDR
15
16 #include <asm/vmlinux.lds.h>
17 #include <asm/page.h>
18 #include <asm/cache.h>
19 #include <asm/thread_info.h>
20 #include <asm/set_memory.h>
21 #include "image-vars.h"
22
23 #include <linux/sizes.h>
24 OUTPUT_ARCH(riscv)
25 ENTRY(_start)
26
27 jiffies = jiffies_64;
28
29 PECOFF_SECTION_ALIGNMENT = 0x1000;
30 PECOFF_FILE_ALIGNMENT = 0x200;
31
32 SECTIONS
33 {
34         /* Beginning of code and text segment */
35         . = LOAD_OFFSET;
36         _start = .;
37         HEAD_TEXT_SECTION
38         . = ALIGN(PAGE_SIZE);
39
40         .text : {
41                 _text = .;
42                 _stext = .;
43                 TEXT_TEXT
44                 SCHED_TEXT
45                 CPUIDLE_TEXT
46                 LOCK_TEXT
47                 KPROBES_TEXT
48                 ENTRY_TEXT
49                 IRQENTRY_TEXT
50                 SOFTIRQENTRY_TEXT
51                 _etext = .;
52         }
53
54         . = ALIGN(SECTION_ALIGN);
55         __init_begin = .;
56         __init_text_begin = .;
57         .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) ALIGN(SECTION_ALIGN) { \
58                 _sinittext = .;                                         \
59                 INIT_TEXT                                               \
60                 _einittext = .;                                         \
61         }
62
63         . = ALIGN(8);
64         __soc_early_init_table : {
65                 __soc_early_init_table_start = .;
66                 KEEP(*(__soc_early_init_table))
67                 __soc_early_init_table_end = .;
68         }
69         __soc_builtin_dtb_table : {
70                 __soc_builtin_dtb_table_start = .;
71                 KEEP(*(__soc_builtin_dtb_table))
72                 __soc_builtin_dtb_table_end = .;
73         }
74         /* we have to discard exit text and such at runtime, not link time */
75         .exit.text :
76         {
77                 EXIT_TEXT
78         }
79
80         __init_text_end = .;
81         . = ALIGN(SECTION_ALIGN);
82 #ifdef CONFIG_EFI
83         . = ALIGN(PECOFF_SECTION_ALIGNMENT);
84         __pecoff_text_end = .;
85 #endif
86         /* Start of init data section */
87         __init_data_begin = .;
88         INIT_DATA_SECTION(16)
89         .exit.data :
90         {
91                 EXIT_DATA
92         }
93         PERCPU_SECTION(L1_CACHE_BYTES)
94
95         .rel.dyn : {
96                 *(.rel.dyn*)
97         }
98
99         __init_data_end = .;
100
101         . = ALIGN(8);
102         .alternative : {
103                 __alt_start = .;
104                 *(.alternative)
105                 __alt_end = .;
106         }
107         __init_end = .;
108
109         /* Start of data section */
110         _sdata = .;
111         RO_DATA(SECTION_ALIGN)
112         .srodata : {
113                 *(.srodata*)
114         }
115
116         . = ALIGN(SECTION_ALIGN);
117         _data = .;
118
119         RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_ALIGN)
120         .sdata : {
121                 __global_pointer$ = . + 0x800;
122                 *(.sdata*)
123         }
124
125 #ifdef CONFIG_EFI
126         .pecoff_edata_padding : { BYTE(0); . = ALIGN(PECOFF_FILE_ALIGNMENT); }
127         __pecoff_data_raw_size = ABSOLUTE(. - __pecoff_text_end);
128 #endif
129
130         /* End of data section */
131         _edata = .;
132
133         BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0)
134
135 #ifdef CONFIG_EFI
136         . = ALIGN(PECOFF_SECTION_ALIGNMENT);
137         __pecoff_data_virt_size = ABSOLUTE(. - __pecoff_text_end);
138 #endif
139         _end = .;
140
141         STABS_DEBUG
142         DWARF_DEBUG
143         ELF_DETAILS
144
145         DISCARDS
146 }
147 #endif /* CONFIG_XIP_KERNEL */