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. */
128 __PER_CPU_CTORS_END__ = .;
129 KEEP (*(.ctors.00010))
130 KEEP (*(.ctors.00009))
131 KEEP (*(.ctors.00008))
132 KEEP (*(.ctors.00007))
133 KEEP (*(.ctors.00006))
134 KEEP (*(.ctors.00005))
135 KEEP (*(.ctors.00004))
136 KEEP (*(.ctors.00003))
137 KEEP (*(.ctors.00002))
138 KEEP (*(.ctors.00001))
139 __PER_CPU_CTORS_LIST__ = .;
141 __PER_CPU_LATE_CTORS_END__ = .;
142 KEEP (*(.ctors.00020))
143 KEEP (*(.ctors.00019))
144 KEEP (*(.ctors.00018))
145 KEEP (*(.ctors.00017))
146 KEEP (*(.ctors.00016))
147 KEEP (*(.ctors.00015))
148 KEEP (*(.ctors.00014))
149 KEEP (*(.ctors.00013))
150 KEEP (*(.ctors.00012))
151 KEEP (*(.ctors.00011))
152 __PER_CPU_LATE_CTORS_LIST__ = .;
157 KEEP (*(SORT (.ctors.*)))
161 KEEP (*(SORT(.dtors.*)))
170 .per_cpu_data : AT (ADDR(.per_cpu_data) - phys_offset) {
171 PROVIDE (_per_cpu_data_start = .);
174 PROVIDE (_per_cpu_data_end = .);
179 .ARM.exidx : { *(.ARM.exidx.*) }
180 .ARM.extab : { *(.ARM.extab.*) }
185 .bss : AT (ADDR(.bss) - phys_offset) {
186 PROVIDE(__bss_start = .);
187 *(.bss .bss.* COMMON .gnu.linkonce.b.*)
189 PROVIDE(__bss_end = .);
192 __end_of_the_kernel = .;
194 ivt_start = ADDR(.bss) + SIZEOF(.bss) - phys_offset;
195 .excp 0xffff0000 : AT (ivt_start) {
200 . = __end_of_the_kernel + SIZEOF(.excp);
205 .initcall : AT(ADDR(.initcall) - phys_offset) {
213 *(.stab .stabstr .stab.excl .stab.exclstr)
214 *(.stab.index .stab.indexstr .comment)