Mention branches and keyring.
[releases.git] / riscv / kernel / vmlinux-xip.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  * Copyright (C) 2020 Vitaly Wool, Konsulko AB
6  */
7
8 #include <asm/pgtable.h>
9 #define LOAD_OFFSET KERNEL_LINK_ADDR
10 /* No __ro_after_init data in the .rodata section - which will always be ro */
11 #define RO_AFTER_INIT_DATA
12
13 #include <asm/vmlinux.lds.h>
14 #include <asm/page.h>
15 #include <asm/cache.h>
16 #include <asm/thread_info.h>
17
18 OUTPUT_ARCH(riscv)
19 ENTRY(_start)
20
21 jiffies = jiffies_64;
22
23 SECTIONS
24 {
25         /* Beginning of code and text segment */
26         . = LOAD_OFFSET;
27         _xiprom = .;
28         _start = .;
29         HEAD_TEXT_SECTION
30         INIT_TEXT_SECTION(PAGE_SIZE)
31         /* we have to discard exit text and such at runtime, not link time */
32         __exittext_begin = .;
33         .exit.text :
34         {
35                 EXIT_TEXT
36         }
37         __exittext_end = .;
38
39         .text : {
40                 _text = .;
41                 _stext = .;
42                 TEXT_TEXT
43                 SCHED_TEXT
44                 CPUIDLE_TEXT
45                 LOCK_TEXT
46                 KPROBES_TEXT
47                 ENTRY_TEXT
48                 IRQENTRY_TEXT
49                 SOFTIRQENTRY_TEXT
50                 _etext = .;
51         }
52         RO_DATA(L1_CACHE_BYTES)
53         .srodata : {
54                 *(.srodata*)
55         }
56         .init.rodata : {
57                 INIT_SETUP(16)
58                 INIT_CALLS
59                 CON_INITCALL
60                 INIT_RAM_FS
61         }
62         _exiprom = .;                   /* End of XIP ROM area */
63
64
65 /*
66  * From this point, stuff is considered writable and will be copied to RAM
67  */
68         __data_loc = ALIGN(PAGE_SIZE);          /* location in file */
69         . = KERNEL_LINK_ADDR + XIP_OFFSET;      /* location in memory */
70
71 #undef LOAD_OFFSET
72 #define LOAD_OFFSET (KERNEL_LINK_ADDR + XIP_OFFSET - (__data_loc & XIP_OFFSET_MASK))
73
74         _sdata = .;                     /* Start of data section */
75         _data = .;
76         RW_DATA(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE)
77         _edata = .;
78         __start_ro_after_init = .;
79         .data.ro_after_init : AT(ADDR(.data.ro_after_init) - LOAD_OFFSET) {
80                 *(.data..ro_after_init)
81         }
82         __end_ro_after_init = .;
83
84         . = ALIGN(PAGE_SIZE);
85         __init_begin = .;
86         .init.data : {
87                 INIT_DATA
88         }
89         .exit.data : {
90                 EXIT_DATA
91         }
92         . = ALIGN(8);
93         __soc_early_init_table : {
94                 __soc_early_init_table_start = .;
95                 KEEP(*(__soc_early_init_table))
96                 __soc_early_init_table_end = .;
97         }
98         __soc_builtin_dtb_table : {
99                 __soc_builtin_dtb_table_start = .;
100                 KEEP(*(__soc_builtin_dtb_table))
101                 __soc_builtin_dtb_table_end = .;
102         }
103
104         . = ALIGN(8);
105         .alternative : {
106                 __alt_start = .;
107                 *(.alternative)
108                 __alt_end = .;
109         }
110         __init_end = .;
111
112         . = ALIGN(16);
113         .xip.traps : {
114                 __xip_traps_start = .;
115                 *(.xip.traps)
116                 __xip_traps_end = .;
117         }
118
119         . = ALIGN(PAGE_SIZE);
120         .sdata : {
121                 __global_pointer$ = . + 0x800;
122                 *(.sdata*)
123                 *(.sbss*)
124         }
125
126         BSS_SECTION(PAGE_SIZE, PAGE_SIZE, 0)
127
128         PERCPU_SECTION(L1_CACHE_BYTES)
129
130         .rel.dyn : AT(ADDR(.rel.dyn) - LOAD_OFFSET) {
131                 *(.rel.dyn*)
132         }
133
134         /*
135          * End of copied data. We need a dummy section to get its LMA.
136          * Also located before final ALIGN() as trailing padding is not stored
137          * in the resulting binary file and useless to copy.
138          */
139         .data.endmark : AT(ADDR(.data.endmark) - LOAD_OFFSET) { }
140         _edata_loc = LOADADDR(.data.endmark);
141
142         . = ALIGN(PAGE_SIZE);
143         _end = .;
144
145         STABS_DEBUG
146         DWARF_DEBUG
147
148         DISCARDS
149 }