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 .mp_tramp : AT (ADDR(.mp_tramp) - phys_offset) {
86 .text_kernel : AT (ADDR(.text_kernel) - phys_offset) {
89 *(.text .text.* .gnu.linkonce.t.*)
90 *(.glue_7t) *(.glue_7)
98 *(.rodata .rodata.* .gnu.linkonce.r.* .rodata1)
101 PROVIDE (_log_table = .);
103 * The section must start with ".debug" because else the linker
104 * complains about references to discarded sections
106 KEEP(*(SORT(.debug.jdb.log_table)))
107 PROVIDE (_log_table_end = .);
111 PROVIDE (_etext = .);
113 *(.data .data.* .gnu.linkonce.d.*)
123 /* Constructor and destructor lists, ordered by priority. The lists
124 are traversed from end to start, therefore the *_END__ symbols
125 precede the *_LIST__ symbols. */
127 __PER_CPU_CTORS_END__ = .;
128 KEEP (*(.ctors.00010))
129 KEEP (*(.ctors.00009))
130 KEEP (*(.ctors.00008))
131 KEEP (*(.ctors.00007))
132 KEEP (*(.ctors.00006))
133 KEEP (*(.ctors.00005))
134 KEEP (*(.ctors.00004))
135 KEEP (*(.ctors.00003))
136 KEEP (*(.ctors.00002))
137 KEEP (*(.ctors.00001))
138 __PER_CPU_CTORS_LIST__ = .;
143 KEEP (*(SORT (.ctors.*)))
147 KEEP (*(SORT(.dtors.*)))
156 .per_cpu_data : AT (ADDR(.per_cpu_data) - phys_offset) {
157 PROVIDE (_per_cpu_data_start = .);
160 PROVIDE (_per_cpu_data_end = .);
165 .ARM.exidx : { *(.ARM.exidx.*) }
166 .ARM.extab : { *(.ARM.extab.*) }
171 .bss : AT (ADDR(.bss) - phys_offset) {
172 PROVIDE(__bss_start = .);
173 *(.bss .bss.* COMMON .gnu.linkonce.b.*)
175 PROVIDE(__bss_end = .);
178 __end_of_the_kernel = .;
180 ivt_start = ADDR(.bss) + SIZEOF(.bss) - phys_offset;
181 .excp 0xffff0000 : AT (ivt_start) {
186 . = __end_of_the_kernel + SIZEOF(.excp);
191 .initcall : AT(ADDR(.initcall) - phys_offset) {
199 *(.stab .stabstr .stab.excl .stab.exclstr)
200 *(.stab.index .stab.indexstr .comment)