139c2668c93f5cb44465d2953419e89f52ceaaed
[akaros.git] / kern / arch / i686 / kernel.ld
1 /* Simple linker script for the ROS kernel.
2    See the GNU ld 'info' manual ("info ld") to learn the syntax. */
3
4 OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
5 OUTPUT_ARCH(i386)
6 ENTRY(_start)
7
8 SECTIONS
9 {
10         /* Link the kernel for 0xC01000C0, but load it at 0x001000C0) */
11
12         .text 0xC01000C0 : AT(0x001000C0) {
13                 *(.multiboot .text .stub .text.* .gnu.linkonce.t.*)
14         }
15
16         PROVIDE(etext = .);     /* Define the 'etext' symbol to this value */
17
18         .rodata : {
19                 *(.rodata .rodata.* .gnu.linkonce.r.*)
20         }
21
22         /* Include debugging information in kernel memory */
23         .stab : {
24                 PROVIDE(stab = .);
25                 PROVIDE(__STAB_BEGIN__ = .);
26                 *(.stab);
27                 PROVIDE(estab = .);
28                 PROVIDE(__STAB_END__ = .);
29                 BYTE(0)         /* Force the linker to allocate space
30                                    for this section */
31         }
32
33         .stabstr : {
34                 PROVIDE(stabstr = .);
35                 PROVIDE(__STABSTR_BEGIN__ = .);
36                 *(.stabstr);
37                 PROVIDE(estabstr = .);
38                 PROVIDE(__STABSTR_END__ = .);
39                 BYTE(0)         /* Force the linker to allocate space
40                                    for this section */
41         }
42
43         /* Adjust the address for the data segment to the next page */
44         . = ALIGN(0x1000);
45
46         /* The data segment */
47         .data : {
48                 *(.data)
49         }
50
51         PROVIDE(edata = .);
52
53         .bss : {
54                 *(.bss)
55         }
56
57         PROVIDE(end = .);
58
59         /DISCARD/ : {
60                 *(.eh_frame .note.GNU-stack)
61         }
62 }