]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kernel.ia32.ld
91d6ab4e22cb004978235376d2ad05d031c8148e
[l4.git] / kernel / fiasco / src / kernel.ia32.ld
1 /* -*- c -*- */
2
3 #include "globalconfig.h"
4 #include "linking.h"
5
6 _boot_sys_start = 0x300000;
7 _kernel_image   = FIASCO_IMAGE_VIRT_START;      /* kernel link address */
8 _load           = FIASCO_IMAGE_PHYS_START & 0x3fffff;
9 /*
10 _load           = 0x1000;       /* skip page 0 to preserve BIOS data and
11                                  * page 1 to reserve space for the KIP */
12
13 /*_fiasco_image_offset = 0xf0000000;*/
14 _fiasco_image_offset = FIASCO_IMAGE_PHYS_OFFSET;
15
16 ENTRY(bootstrap__boot_start)
17
18 PHDRS {
19   tramp PT_LOAD;
20   btext PT_LOAD;
21   bdata PT_LOAD;
22   kip PT_LOAD;
23   ktext PT_LOAD;
24   kdata PT_LOAD;
25   kitext PT_LOAD;
26   kidata PT_LOAD;
27 }
28
29 SECTIONS {
30   . = FIASCO_MP_TRAMP_PAGE;
31   .mp_tramp : {
32       KEEP(*(.mp_tramp))
33       . = ALIGN(0x1000);
34   } : tramp
35
36   . = _boot_sys_start;
37   .text_boot : ALIGN(0x1000) {
38     *(.bootstrap.text .bootstrap.text.* .bootstrap.gnu.linkonce.t.*)
39   } : btext
40   
41   . = ALIGN(0x10);
42   .bss_boot : {
43     *(.bootstrap.bss)
44   . = ALIGN(0x1000);
45   PROVIDE(_boot_sys_end = .);
46   } : bdata
47
48   . = _kernel_image + _load;
49
50   .kip : AT(ADDR(.kip) - _fiasco_image_offset) {
51     _kernel_image_start = .;
52     *(.kernel_info_page)
53     _initkip_start = .;
54     KEEP(*(.initkip.version))
55     KEEP(*(.initkip.features))
56     KEEP(*(.initkip.features.fini))
57     _initkip_end = .;
58     . = ALIGN(4K);
59   } : kip = 0
60
61 #ifdef CONFIG_ALLOW_RO_TEXT
62   . = ALIGN(4K);
63 #endif
64   .text : AT (ADDR(.text) - _fiasco_image_offset) {
65     PROVIDE ( _kernel_text_start = . );
66     crt0.o(.text)
67     *(.init)
68     *(.text SORT(.text.*) .gnu.linkonce.t.*)
69     *(.fini)
70
71     PROVIDE (_ecode = .);
72
73     *(.rodata .rodata.* .gnu.linkonce.r.*)
74
75     . = ALIGN(4);
76     PROVIDE (_log_table = .);
77     /*
78      * The section must start with ".debug" because else the linker
79      * complains about references to discarded sections
80      */
81     KEEP(*(SORT(.debug.jdb.log_table)))
82     PROVIDE (_log_table_end = .);
83
84     . = ALIGN(0x40);
85
86     PROVIDE (_etext = .);
87   } : ktext = 0x90909090
88
89 #ifdef CONFIG_ALLOW_RO_TEXT
90   . = ALIGN(4K);
91 #else
92   . = ALIGN(0x10);
93 #endif
94   .data : AT (ADDR(.data) - _fiasco_image_offset) {
95     PROVIDE (_kernel_data_start = .);
96     *(.data .data.* .gnu.linkonce.d.*)
97     *(.anno)
98
99     /* Constructor and destructor lists, ordered by priority.  The lists
100        are traversed from end to start, therefore the *_END__ symbols
101        precede the *_LIST__ symbols. */
102
103     __PER_CPU_CTORS_END__ = .;
104     KEEP (*(.ctors.00010))
105     KEEP (*(.ctors.00009))
106     KEEP (*(.ctors.00008))
107     KEEP (*(.ctors.00007))
108     KEEP (*(.ctors.00006))
109     KEEP (*(.ctors.00005))
110     KEEP (*(.ctors.00004))
111     KEEP (*(.ctors.00003))
112     KEEP (*(.ctors.00002))
113     KEEP (*(.ctors.00001))
114     __PER_CPU_CTORS_LIST__ = .;
115
116     __PER_CPU_LATE_CTORS_END__ = .;
117     KEEP (*(.ctors.00020))
118     KEEP (*(.ctors.00019))
119     KEEP (*(.ctors.00018))
120     KEEP (*(.ctors.00017))
121     KEEP (*(.ctors.00016))
122     KEEP (*(.ctors.00015))
123     KEEP (*(.ctors.00014))
124     KEEP (*(.ctors.00013))
125     KEEP (*(.ctors.00012))
126     KEEP (*(.ctors.00011))
127     __PER_CPU_LATE_CTORS_LIST__ = .;
128
129     __CTOR_END__ = .;
130     CONSTRUCTORS
131     KEEP (*(.ctors))
132     KEEP (*(SORT (.ctors.*)))
133     __CTOR_LIST__ = .;
134
135     __DTOR_END__ = .;    
136     KEEP (*(SORT (.dtors.*)))
137     KEEP (*(.dtors))
138     __DTOR_LIST__ = .;
139
140     PROVIDE (_edata = .);
141   } : kdata
142
143   . = ALIGN(8);
144   .per_cpu_data : AT (ADDR(.per_cpu_data) - _fiasco_image_offset) {
145     PROVIDE (_per_cpu_data_start = .);
146     *(.per_cpu.data)
147     . = ALIGN(8);
148     PROVIDE (_per_cpu_data_end = .);
149   } : kdata
150
151   . = ALIGN(0x10);
152   .bss : AT (ADDR(.bss) - _fiasco_image_offset) {
153     PROVIDE (_bss_start = .);
154     *(.bss .bss.* .gnu.linkonce.b.* COMMON)
155     PROVIDE (_bss_end = .);
156   } : kdata
157
158   PROVIDE (_end = .);
159
160   . = ALIGN(4096);
161   PROVIDE (_initcall_start = .);
162   .initcall.text : AT (ADDR(.initcall.text) - _fiasco_image_offset) {
163     *(.initcall.text*)
164   } : kitext = 0x90909090
165
166   .initcall.data : AT (ADDR(.initcall.data) - _fiasco_image_offset) {
167     *(.initcall.data*)
168     . = ALIGN(4096);
169     PROVIDE (_initcall_end = .);
170   } : kidata
171
172   /DISCARD/ : {
173     *(.note)
174     *(.note.ABI-tag)
175     *(.comment)
176     *(.eh_frame)
177   }
178 }