3 /* this file defines the construction of the kernel's virtual address
6 _tcbs_1 = 0xd0000000; /* assumption: 256MB-aligned */
7 /*_unused1_1 = _mappings_end_1; /* assumption: 4MB-aligned */
8 _unused2_1 = 0xea400000; /* assumption: 4MB-aligned */
9 _unused3_1 = 0xea800000; /* assumption: 4MB-aligned */
10 _service = 0xeac00000; /* assumption: 4MB-aligned */
11 /* 0xeb000000 - 0xef800000 unused */
12 _kstatic1_1 = 0xef800000; /* assumption: 4MB-aligned */
13 _iobitmap_1 = 0xefc00000; /* assumption: 4MB-aligned */
14 _unused4_io_1 = 0xefc80000; /* assumption: 2nd level field in
15 page table for IO bitmap */
16 _physmem_1 = 0x0000000; /* assumption: 256MB-aligned */
17 _kernel_phys_start = _physmem_1;
18 _kernel_phys_end = 0xffffffff;
21 virt_address = 0xf0000000;
22 phys_offset = virt_address - kernel_load_addr;
25 OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
33 /DISCARD/ : { /* Exit code and data */
37 . = kernel_load_addr + 0x1000;
41 bootstrap*(.text .text.* .gnu.linkonce.t.*)
42 bootstrap*(.glue_7t) *(.glue_7)
43 bootstrap*(.got .got.*)
46 bootstrap*(.rodata .rodata.* .gnu.linkonce.r.* .rodata1)
50 bootstrap*(.data .data.* .gnu.linkonce.d.*)
54 bootstrap*(.gnu.linkonce.d*)
57 PROVIDE(bootstrap_bss_start = .);
59 bootstrap*(.bss .bss.* COMMON .gnu.linkonce.b.*)
61 PROVIDE(bootstrap_bss_end = .);
66 . = end_of_loader - kernel_load_addr + virt_address;
68 .kip : AT (end_of_loader) {
69 _kernel_image_start = .;
72 KEEP(*(.initkip.version))
73 KEEP(*(.initkip.features))
74 KEEP(*(.initkip.features.fini))
79 .koptions : AT (ADDR(.koptions) - phys_offset) {
83 .mp_tramp : AT (ADDR(.mp_tramp) - phys_offset) {
87 .text_kernel : AT (ADDR(.text_kernel) - phys_offset) {
90 *(.text .text.* .gnu.linkonce.t.*)
91 *(.glue_7t) *(.glue_7)
99 *(.rodata .rodata.* .gnu.linkonce.r.* .rodata1)
102 PROVIDE (_log_table = .);
104 * The section must start with ".debug" because else the linker
105 * complains about references to discarded sections
107 KEEP(*(SORT(.debug.jdb.log_table)))
108 PROVIDE (_log_table_end = .);
112 PROVIDE (_etext = .);
114 *(.data .data.* .gnu.linkonce.d.*)
124 /* Constructor and destructor lists, ordered by priority. The lists
125 are traversed from end to start, therefore the *_END__ symbols
126 precede the *_LIST__ symbols. */
127 __PER_CPU_INIT_ARRAY_START__ = .;
128 KEEP (*(.init_array.65534))
129 KEEP (*(.init_array.65533))
130 KEEP (*(.init_array.65532))
131 KEEP (*(.init_array.65531))
132 KEEP (*(.init_array.65530))
133 KEEP (*(.init_array.65529))
134 KEEP (*(.init_array.65528))
135 KEEP (*(.init_array.65527))
136 KEEP (*(.init_array.65526))
137 KEEP (*(.init_array.65525))
138 __PER_CPU_INIT_ARRAY_END__ = .;
140 __PER_CPU_LATE_INIT_ARRAY_START__ = .;
141 KEEP (*(.init_array.65524))
142 KEEP (*(.init_array.65523))
143 KEEP (*(.init_array.65522))
144 KEEP (*(.init_array.65521))
145 KEEP (*(.init_array.65520))
146 KEEP (*(.init_array.65519))
147 KEEP (*(.init_array.65518))
148 KEEP (*(.init_array.65517))
149 KEEP (*(.init_array.65516))
150 KEEP (*(.init_array.65515))
151 __PER_CPU_LATE_INIT_ARRAY_END__ = .;
153 __INIT_ARRAY_START__ = .;
154 KEEP (*(SORT (.init_array.*)))
155 KEEP (*(.init_array))
156 __INIT_ARRAY_END__ = .;
158 __PER_CPU_CTORS_END__ = .;
159 KEEP (*(.ctors.00010))
160 KEEP (*(.ctors.00009))
161 KEEP (*(.ctors.00008))
162 KEEP (*(.ctors.00007))
163 KEEP (*(.ctors.00006))
164 KEEP (*(.ctors.00005))
165 KEEP (*(.ctors.00004))
166 KEEP (*(.ctors.00003))
167 KEEP (*(.ctors.00002))
168 KEEP (*(.ctors.00001))
169 __PER_CPU_CTORS_LIST__ = .;
171 __PER_CPU_LATE_CTORS_END__ = .;
172 KEEP (*(.ctors.00020))
173 KEEP (*(.ctors.00019))
174 KEEP (*(.ctors.00018))
175 KEEP (*(.ctors.00017))
176 KEEP (*(.ctors.00016))
177 KEEP (*(.ctors.00015))
178 KEEP (*(.ctors.00014))
179 KEEP (*(.ctors.00013))
180 KEEP (*(.ctors.00012))
181 KEEP (*(.ctors.00011))
182 __PER_CPU_LATE_CTORS_LIST__ = .;
187 KEEP (*(SORT (.ctors.*)))
191 KEEP (*(SORT(.dtors.*)))
200 .per_cpu_data : AT (ADDR(.per_cpu_data) - phys_offset) {
201 PROVIDE (_per_cpu_data_start = .);
204 PROVIDE (_per_cpu_data_end = .);
209 .ARM.exidx : { *(.ARM.exidx.*) }
210 .ARM.extab : { *(.ARM.extab.*) }
215 .bss : AT (ADDR(.bss) - phys_offset) {
216 PROVIDE(__bss_start = .);
218 _per_cpu_ctor_data_start = .;
219 KEEP (*(.bss.per_cpu_ctor_data))
220 _per_cpu_ctor_data_end = .;
221 *(.bss .bss.* COMMON .gnu.linkonce.b.*)
223 PROVIDE(__bss_end = .);
226 __end_of_the_kernel = .;
228 ivt_start = ADDR(.bss) + SIZEOF(.bss) - phys_offset;
229 .excp 0xffff0000 : AT (ivt_start) {
234 . = __end_of_the_kernel + SIZEOF(.excp);
239 .initcall : AT(ADDR(.initcall) - phys_offset) {
247 *(.stab .stabstr .stab.excl .stab.exclstr)
248 *(.stab.index .stab.indexstr .comment)