]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kernel.ppc32.ld
update
[l4.git] / kernel / fiasco / src / kernel.ppc32.ld
1 /* -*- c -*- */
2
3 /* TODO cbass: define in ppc32 Makerules.KERNEL */
4 /*kernel_load_addr = 0xfd000000;*/      /* kernel link address */
5
6 ENTRY(_start)
7
8 PHDRS {
9   etext PT_LOAD;
10   etextcommon PT_LOAD;
11   phys PT_LOAD;
12   kip PT_LOAD;
13   koptions PT_LOAD;
14   ktext PT_LOAD;
15   kdata PT_LOAD;
16   kitext PT_LOAD;
17   kidata PT_LOAD;
18 }
19
20 SECTIONS {
21   /* 0x0 */
22   .except : AT (0x0) {
23      *(.except)
24   } : etext = 0x0
25   . = ALIGN(4K) + 8K;
26
27   /* 0x3000 */
28   PROVIDE (_kernel_image_start = .);
29   .physmem : AT(ADDR(.physmem)) {
30   } : phys = 0x0
31
32   .kip : AT(ADDR(.kip)) {
33     *(.kernel_info_page)
34     _initkip_start = .;
35     KEEP(*(.initkip.version))
36     KEEP(*(.initkip.features))
37     KEEP(*(.initkip.features.fini))
38     _initkip_end = .;
39     . = ALIGN(4K);
40   } : kip = 0
41
42   .koptions : AT (ADDR(.koptions)) {
43     *(.koptions)
44   } : koptions = 0
45
46   .mp_tramp : AT (ADDR(.mp_tramp)) {
47       KEEP(*(.mp_tramp))
48   }
49
50   .exceptcommon : AT(ADDR(.exceptcommon)) {
51     *(.exceptcommon)
52   } : etextcommon = 0x0
53
54   .text : AT (ADDR(.text)) {
55     crt0.o(.text)
56     *(.init)
57     *(.text SORT(.text.*) .gnu.linkonce.t.*)
58     *(.fini)
59
60     PROVIDE (_ecode = .);
61
62     *(.rodata .rodata.* .gnu.linkonce.r.*)
63
64     . = ALIGN(4);
65     PROVIDE (_log_table = .);
66     /*
67      * The section must start with ".debug" because else the linker
68      * complains about references to discarded sections
69       */
70     KEEP(*(SORT(.debug.jdb.log_table)))
71     PROVIDE (_log_table_end = .);
72
73     . = ALIGN(0x40);
74
75     PROVIDE (_etext = .);
76   } : ktext = 0x0000000
77
78   . = ALIGN(0x10);
79   .data : AT (ADDR(.data)) {
80     *(.data .data.* .gnu.linkonce.d.*)
81     *(.anno)
82
83     /* Constructor and destructor lists, ordered by priority.  The lists
84        are traversed from end to start, therefore the *_END__ symbols
85        precede the *_LIST__ symbols. */
86     . = ALIGN(8);
87     __PER_CPU_INIT_ARRAY_START__ = .;
88     KEEP (*(.init_array.65534))
89     KEEP (*(.init_array.65533))
90     KEEP (*(.init_array.65532))
91     KEEP (*(.init_array.65531))
92     KEEP (*(.init_array.65530))
93     KEEP (*(.init_array.65529))
94     KEEP (*(.init_array.65528))
95     KEEP (*(.init_array.65527))
96     KEEP (*(.init_array.65526))
97     KEEP (*(.init_array.65525))
98     __PER_CPU_INIT_ARRAY_END__ = .;
99
100     __PER_CPU_LATE_INIT_ARRAY_START__ = .;
101     KEEP (*(.init_array.65524))
102     KEEP (*(.init_array.65523))
103     KEEP (*(.init_array.65522))
104     KEEP (*(.init_array.65521))
105     KEEP (*(.init_array.65520))
106     KEEP (*(.init_array.65519))
107     KEEP (*(.init_array.65518))
108     KEEP (*(.init_array.65517))
109     KEEP (*(.init_array.65516))
110     KEEP (*(.init_array.65515))
111     __PER_CPU_LATE_INIT_ARRAY_END__ = .;
112
113     __INIT_ARRAY_START__ = .;
114     KEEP (*(SORT (.init_array.*)))
115     KEEP (*(.init_array))
116     __INIT_ARRAY_END__ = .;
117
118     __PER_CPU_CTORS_END__ = .;
119     KEEP (*(.ctors.00010))
120     KEEP (*(.ctors.00009))
121     KEEP (*(.ctors.00008))
122     KEEP (*(.ctors.00007))
123     KEEP (*(.ctors.00006))
124     KEEP (*(.ctors.00005))
125     KEEP (*(.ctors.00004))
126     KEEP (*(.ctors.00003))
127     KEEP (*(.ctors.00002))
128     KEEP (*(.ctors.00001))
129     __PER_CPU_CTORS_LIST__ = .;
130
131     __PER_CPU_LATE_CTORS_END__ = .;
132     KEEP (*(.ctors.00020))
133     KEEP (*(.ctors.00019))
134     KEEP (*(.ctors.00018))
135     KEEP (*(.ctors.00017))
136     KEEP (*(.ctors.00016))
137     KEEP (*(.ctors.00015))
138     KEEP (*(.ctors.00014))
139     KEEP (*(.ctors.00013))
140     KEEP (*(.ctors.00012))
141     KEEP (*(.ctors.00011))
142     __PER_CPU_LATE_CTORS_LIST__ = .;
143
144     __CTOR_END__ = .;
145     CONSTRUCTORS
146     KEEP (*(.ctors))
147     KEEP (*(SORT (.ctors.*)))
148     __CTOR_LIST__ = .;
149
150     __DTOR_END__ = .;    
151     KEEP (*(SORT (.dtors.*)))
152     KEEP (*(.dtors))
153     __DTOR_LIST__ = .;
154
155     PROVIDE (_edata = .);
156   } : kdata
157
158   . = ALIGN(8);
159   .per_cpu_data : AT (ADDR(.per_cpu_data)) {
160     PROVIDE (_per_cpu_data_start = .);
161     *(.per_cpu.data)
162     . = ALIGN(8);
163     PROVIDE (_per_cpu_data_end = .);
164   } : kdata
165
166   . = ALIGN(0x10);
167   .bss : AT (ADDR(.bss)) {
168     PROVIDE (_bss_start = .);
169     . = ALIGN(4);
170     _per_cpu_ctor_data_start = .;
171     KEEP (*(.bss.per_cpu_ctor_data))
172     _per_cpu_ctor_data_end = .;
173
174     *(.bss .bss.* .gnu.linkonce.b.* COMMON)
175     PROVIDE (_bss_end = .);
176   } : kdata
177
178   . = ALIGN(4K);
179   PROVIDE (_end = .);
180
181   .initcall.text : AT (ADDR(.initcall.text)) {
182   PROVIDE (_initcall_start = .);
183     *(.initcall.text*)
184   } : kitext = 0x000000000
185
186   .initcall.data : AT (ADDR(.initcall.data)) {
187     *(.initcall.data*)
188     . = ALIGN(4K);
189     PROVIDE (_initcall_end = .);
190   } : kidata
191
192   /DISCARD/ : {
193     *(.note)
194     *(.note.ABI-tag)
195     *(.comment)
196     *(.eh_frame)
197     *(.dummy)
198   }
199 }