integrate C/LDFLAGS into LunaBuild flow
[lunaix-os.git] / lunaix-os / link / linker.ld
1 ENTRY(start_)
2
3 SECTIONS {
4     . = 0x100000;
5     __kboot_start = .;
6
7     /* 这里是我们的高半核初始化代码段和数据段 */
8     .boot.text BLOCK(4K) : 
9     {
10         *(.multiboot)
11         *(.boot.text)
12     }
13
14     .boot.bss BLOCK(4K) : 
15     {
16         *(.boot.bss)
17     }
18
19     .boot.data BLOCK(4K) : 
20     {
21         *(.boot.data)
22     }
23
24     .boot.rodata BLOCK(4K) : 
25     {
26         *(.boot.rodata)
27     }
28
29     .boot.bss BLOCK(4K) : 
30     {
31         *(.boot.rodata)
32     }
33     __kboot_end = ALIGN(4K);
34
35     /* ---- boot end ---- */
36
37     /* ---- kernel start ---- */
38
39     . += 0xC0000000;
40
41     /* 好了,我们的内核…… */
42     
43     PROVIDE(__kexec_text_start = ALIGN(4K));
44     
45     .text BLOCK(4K) : AT ( ADDR(.text) - 0xC0000000 ) 
46     {
47         __kexec_start = .;
48         
49         *(.text)
50     }
51
52     .kf.preempt BLOCK(4K) : AT ( ADDR(.kf.preempt) - 0xC0000000 ) 
53     {
54         PROVIDE(__kf_preempt_start = .);
55         
56         KEEP(*(.kf.preempt));
57
58         PROVIDE(__kf_preempt_end = .);
59     }
60
61     PROVIDE(__kexec_text_end = .);
62
63     .data BLOCK(4K) : AT ( ADDR(.data) - 0xC0000000 ) 
64     {
65         *(.data)
66     }
67
68     .rodata BLOCK(4K) : AT ( ADDR(.rodata) - 0xC0000000 ) 
69     {
70         *(.rodata)
71     }
72
73     .kpg BLOCK(4K) : AT ( ADDR(.kpg) - 0xC0000000 ) 
74     {
75         *(.kpg)
76     }
77
78     . = ALIGN(4K);
79
80     /* for generated array, we align to address line size */
81
82     .lga BLOCK(4K) : AT ( ADDR(.lga) - 0xC0000000 ) 
83     {
84         PROVIDE(__lga_twiplugin_inits_start = .);
85         
86         KEEP(*(.lga.twiplugin_inits));
87
88         PROVIDE(__lga_twiplugin_inits_end = .);
89
90         /* ---- */
91
92         /* align to 8 bytes, so it can cover both 32 and 64 bits address line*/
93         . = ALIGN(8);
94
95         PROVIDE(__lga_devdefs_start = .);
96         
97         KEEP(*(.lga.devdefs));
98
99         PROVIDE(__lga_devdefs_end = .);
100
101         /* ---- */
102
103         . = ALIGN(8);
104
105         PROVIDE(__lga_dev_ld_kboot_start = .);
106         
107         KEEP(*(.lga.devdefs.ld_kboot));
108
109         PROVIDE(__lga_dev_ld_kboot_end = .);
110
111         /* ---- */
112
113         . = ALIGN(8);
114
115         PROVIDE(__lga_dev_ld_sysconf_start = .);
116         
117         KEEP(*(.lga.devdefs.ld_sysconf));
118
119         PROVIDE(__lga_dev_ld_sysconf_end = .);
120
121         /* ---- */
122
123         . = ALIGN(8);
124
125         PROVIDE(__lga_dev_ld_timedev_start = .);
126         
127         KEEP(*(.lga.devdefs.ld_timedev));
128
129         PROVIDE(__lga_dev_ld_timedev_end = .);
130
131         /* ---- */
132
133         . = ALIGN(8);
134
135         PROVIDE(__lga_dev_ld_post_start = .);
136         
137         KEEP(*(.lga.devdefs.ld_post));
138
139         PROVIDE(__lga_dev_ld_post_end = .);
140
141         /* ---- */
142
143         . = ALIGN(8);
144
145         PROVIDE(__lga_fs_start = .);
146         
147         KEEP(*(.lga.fs));
148
149         PROVIDE(__lga_fs_end = .);
150
151         /* ---- */
152
153         . = ALIGN(8);
154
155         PROVIDE(__lga_lunainit_on_earlyboot_start = .);
156         
157         KEEP(*(.lga.lunainit.c_earlyboot));
158
159         PROVIDE(__lga_lunainit_on_earlyboot_end = .);
160
161         /* ---- */
162
163         . = ALIGN(8);
164
165         PROVIDE(__lga_lunainit_on_boot_start = .);
166         
167         KEEP(*(.lga.lunainit.c_boot));
168
169         PROVIDE(__lga_lunainit_on_boot_end = .);
170
171         /* ---- */
172
173         . = ALIGN(8);
174
175         PROVIDE(__lga_lunainit_on_postboot_start = .);
176         
177         KEEP(*(.lga.lunainit.c_postboot));
178
179         PROVIDE(__lga_lunainit_on_postboot_end = .);
180
181     }
182
183     .ksymtable BLOCK(4K) : AT ( ADDR(.ksymtable) - 0xC0000000 )
184     {
185         *(.ksymtable)
186     }
187
188     .bss BLOCK(4K) : AT ( ADDR(.bss) - 0xC0000000 ) 
189     {
190         *(.bss)
191     }
192
193     .bss.kstack BLOCK(4K) : AT ( ADDR(.bss.kstack) - 0xC0000000)
194     {
195         PROVIDE(__bsskstack_start = .);
196
197         *(.bss.kstack)
198
199         PROVIDE(__bsskstack_end = .);
200     }
201
202     __kexec_end = ALIGN(4K);
203 }