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 - 0xee000000 unused */
12 _ipc_window0_1 = 0xee000000; /* assumption: 8MB-aligned */
13 _ipc_window1_1 = 0xee800000; /* assumption: 8MB-aligned */
14 /* 0xef000000 - 0xef800000 unused */
15 _kstatic1_1 = 0xef800000; /* assumption: 4MB-aligned */
16 _iobitmap_1 = 0xefc00000; /* assumption: 4MB-aligned */
17 _unused4_io_1 = 0xefc80000; /* assumption: 2nd level field in
18 page table for IO bitmap */
19 _physmem_1 = 0x0000000; /* assumption: 256MB-aligned */
20 _kernel_phys_start = _physmem_1;
21 _kernel_phys_end = 0xffffffff;
24 virt_address = 0xf0000000;
25 phys_offset = virt_address - kernel_load_addr;
28 OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
36 /DISCARD/ : { /* Exit code and data */
40 . = kernel_load_addr + 0x1000;
44 bootstrap*(.text .text.* .gnu.linkonce.t.*)
45 bootstrap*(.glue_7t) *(.glue_7)
46 bootstrap*(.got .got.*)
49 bootstrap*(.rodata .rodata.* .gnu.linkonce.r.* .rodata1)
53 bootstrap*(.data .data.* .gnu.linkonce.d.*)
57 bootstrap*(.gnu.linkonce.d*)
60 PROVIDE(bootstrap_bss_start = .);
62 bootstrap*(.bss .bss.* COMMON .gnu.linkonce.b.*)
64 PROVIDE(bootstrap_bss_end = .);
69 . = end_of_loader - kernel_load_addr + virt_address;
71 .kip : AT (end_of_loader) {
72 _kernel_image_start = .;
75 KEEP(*(.initkip.version))
76 KEEP(*(.initkip.features))
77 KEEP(*(.initkip.features.fini))
82 .koptions : AT (ADDR(.koptions) - phys_offset) {
86 .mp_tramp : AT (ADDR(.mp_tramp) - phys_offset) {
90 .text_kernel : AT (ADDR(.text_kernel) - phys_offset) {
93 *(.text .text.* .gnu.linkonce.t.*)
94 *(.glue_7t) *(.glue_7)
100 PROVIDE (_ecode = .);
102 *(.rodata .rodata.* .gnu.linkonce.r.* .rodata1)
105 PROVIDE (_log_table = .);
107 * The section must start with ".debug" because else the linker
108 * complains about references to discarded sections
110 KEEP(*(SORT(.debug.jdb.log_table)))
111 PROVIDE (_log_table_end = .);
115 PROVIDE (_etext = .);
117 *(.data .data.* .gnu.linkonce.d.*)
127 /* Constructor and destructor lists, ordered by priority. The lists
128 are traversed from end to start, therefore the *_END__ symbols
129 precede the *_LIST__ symbols. */
131 __PER_CPU_CTORS_END__ = .;
132 KEEP (*(.ctors.00010))
133 KEEP (*(.ctors.00009))
134 KEEP (*(.ctors.00008))
135 KEEP (*(.ctors.00007))
136 KEEP (*(.ctors.00006))
137 KEEP (*(.ctors.00005))
138 KEEP (*(.ctors.00004))
139 KEEP (*(.ctors.00003))
140 KEEP (*(.ctors.00002))
141 KEEP (*(.ctors.00001))
142 __PER_CPU_CTORS_LIST__ = .;
144 __PER_CPU_LATE_CTORS_END__ = .;
145 KEEP (*(.ctors.00020))
146 KEEP (*(.ctors.00019))
147 KEEP (*(.ctors.00018))
148 KEEP (*(.ctors.00017))
149 KEEP (*(.ctors.00016))
150 KEEP (*(.ctors.00015))
151 KEEP (*(.ctors.00014))
152 KEEP (*(.ctors.00013))
153 KEEP (*(.ctors.00012))
154 KEEP (*(.ctors.00011))
155 __PER_CPU_LATE_CTORS_LIST__ = .;
160 KEEP (*(SORT (.ctors.*)))
164 KEEP (*(SORT(.dtors.*)))
173 .per_cpu_data : AT (ADDR(.per_cpu_data) - phys_offset) {
174 PROVIDE (_per_cpu_data_start = .);
177 PROVIDE (_per_cpu_data_end = .);
182 .ARM.exidx : { *(.ARM.exidx.*) }
183 .ARM.extab : { *(.ARM.extab.*) }
188 .bss : AT (ADDR(.bss) - phys_offset) {
189 PROVIDE(__bss_start = .);
190 *(.bss .bss.* COMMON .gnu.linkonce.b.*)
192 PROVIDE(__bss_end = .);
195 __end_of_the_kernel = .;
197 ivt_start = ADDR(.bss) + SIZEOF(.bss) - phys_offset;
198 .excp 0xffff0000 : AT (ivt_start) {
203 . = __end_of_the_kernel + SIZEOF(.excp);
208 .initcall : AT(ADDR(.initcall) - phys_offset) {
216 *(.stab .stabstr .stab.excl .stab.exclstr)
217 *(.stab.index .stab.indexstr .comment)