xref: /haiku/src/system/ldscripts/arm/kernel.ld (revision 21258e2674226d6aa732321b6f8494841895af5f)
1OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
2OUTPUT_ARCH(arm)
3
4/* XXX: this shouldn't be needed to make kernel_arm have separate text and data segments!!! */
5PHDRS
6{
7	headers PT_PHDR PHDRS ;
8	text PT_LOAD FILEHDR PHDRS ;
9	data PT_LOAD ;
10	dynamic PT_DYNAMIC ;
11}
12
13ENTRY(_start)
14SEARCH_DIR("libgcc");
15SECTIONS
16{
17	. = 0x80000000 + SIZEOF_HEADERS;
18
19	.interp : { *(.interp) } :text
20	.hash : { *(.hash) }
21	.dynsym : { *(.dynsym) }
22	.dynstr : { *(.dynstr) }
23	.rel.text : { *(.rel.text) *(.rel.gnu.linkonce.t*) }
24	.rela.text : { *(.rela.text) *(.rela.gnu.linkonce.t*) }
25	.rel.data : { *(.rel.data) *(.rel.gnu.linkonce.d*) }
26	.rela.data : { *(.rela.data) *(.rela.gnu.linkonce.d*) }
27	.rel.rodata : { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
28	.rela.rodata : { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
29	.rel.got : { *(.rel.got) }
30	.rela.got : { *(.rela.got) }
31	.rel.ctors : { *(.rel.ctors) }
32	.rela.ctors : { *(.rela.ctors) }
33	.rel.dtors : { *(.rel.dtors) }
34	.rela.dtors : { *(.rela.dtors) }
35	.rel.init : { *(.rel.init) }
36	.rela.init : { *(.rela.init) }
37	.rel.fini : { *(.rel.fini) }
38	.rela.fini : { *(.rela.fini) }
39	.rel.bss : { *(.rel.bss) }
40	.rela.bss : { *(.rela.bss) }
41	.rel.plt : { *(.rel.plt) }
42	.rela.plt : { *(.rela.plt) }
43	.init : { *(.init) } =0x9090
44	.plt : { *(.plt) }
45
46	/* text/read-only data */
47	.text :	{ *(.text .gnu.linkonce.t.*) } :text =0x9090
48
49	.rodata : { *(.rodata) }
50
51	/* exception unwinding - should really not be needed! XXX: find the correct place. */
52	__exidx_start = .;
53	.ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
54	__exidx_end = .;
55
56	/* writable data  */
57	. = ALIGN(0x1000);
58	__data_start = .;
59	.data : { *(.data .gnu.linkonce.d.*) } :data
60
61	. = ALIGN(0x4);
62	__ctor_list = .;
63	.ctors : { *(.init_array) *(.ctors) }
64	__ctor_end = .;
65	__dtor_list = .;
66	.dtors : { *(.fini_array) *(.dtors) }
67	__dtor_end = .;
68	.got : { *(.got.plt) *(.got) }
69	.dynamic : { *(.dynamic) } :dynamic :data
70
71	/* uninitialized data (in same segment as writable data) */
72	__bss_start = .;
73	.bss : { *(.bss) }
74
75	. = ALIGN(0x1000);
76	_end = .;
77
78	/* Strip unnecessary stuff */
79	/DISCARD/ : { *(.comment .note .eh_frame) }
80}
81