167d4254dSFrans Kaashoek/* Simple linker script for the JOS kernel. 267d4254dSFrans Kaashoek See the GNU ld 'info' manual ("info ld") to learn the syntax. */ 367d4254dSFrans Kaashoek 467d4254dSFrans KaashoekOUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") 567d4254dSFrans KaashoekOUTPUT_ARCH(i386) 667d4254dSFrans KaashoekENTRY(_start) 767d4254dSFrans Kaashoek 867d4254dSFrans KaashoekSECTIONS 967d4254dSFrans Kaashoek{ 10ce6dd9deSAustin Clements /* Link the kernel at this address: "." means the current address */ 1115997d58SRobert Morris /* Must be equal to KERNLINK */ 1215997d58SRobert Morris . = 0x80100000; 1367d4254dSFrans Kaashoek 1467d4254dSFrans Kaashoek .text : AT(0x100000) { 1567d4254dSFrans Kaashoek *(.text .stub .text.* .gnu.linkonce.t.*) 1667d4254dSFrans Kaashoek } 1767d4254dSFrans Kaashoek 1867d4254dSFrans Kaashoek PROVIDE(etext = .); /* Define the 'etext' symbol to this value */ 1967d4254dSFrans Kaashoek 2067d4254dSFrans Kaashoek .rodata : { 2167d4254dSFrans Kaashoek *(.rodata .rodata.* .gnu.linkonce.r.*) 2267d4254dSFrans Kaashoek } 2367d4254dSFrans Kaashoek 2467d4254dSFrans Kaashoek /* Include debugging information in kernel memory */ 2567d4254dSFrans Kaashoek .stab : { 2667d4254dSFrans Kaashoek PROVIDE(__STAB_BEGIN__ = .); 2767d4254dSFrans Kaashoek *(.stab); 2867d4254dSFrans Kaashoek PROVIDE(__STAB_END__ = .); 2967d4254dSFrans Kaashoek } 3067d4254dSFrans Kaashoek 3167d4254dSFrans Kaashoek .stabstr : { 3267d4254dSFrans Kaashoek PROVIDE(__STABSTR_BEGIN__ = .); 3367d4254dSFrans Kaashoek *(.stabstr); 3467d4254dSFrans Kaashoek PROVIDE(__STABSTR_END__ = .); 3567d4254dSFrans Kaashoek } 3667d4254dSFrans Kaashoek 3767d4254dSFrans Kaashoek /* Adjust the address for the data segment to the next page */ 3867d4254dSFrans Kaashoek . = ALIGN(0x1000); 3967d4254dSFrans Kaashoek 40*dd4438b4SAustin Clements /* Conventionally, Unix linkers provide pseudo-symbols 41*dd4438b4SAustin Clements * etext, edata, and end, at the end of the text, data, and bss. 42*dd4438b4SAustin Clements * For the kernel mapping, we need the address at the beginning 43*dd4438b4SAustin Clements * of the data section, but that's not one of the conventional 44*dd4438b4SAustin Clements * symbols, because the convention started before there was a 45*dd4438b4SAustin Clements * read-only rodata section between text and data. */ 46*dd4438b4SAustin Clements PROVIDE(data = .); 47*dd4438b4SAustin Clements 4867d4254dSFrans Kaashoek /* The data segment */ 4967d4254dSFrans Kaashoek .data : { 5067d4254dSFrans Kaashoek *(.data) 5167d4254dSFrans Kaashoek } 5267d4254dSFrans Kaashoek 5367d4254dSFrans Kaashoek PROVIDE(edata = .); 5467d4254dSFrans Kaashoek 5567d4254dSFrans Kaashoek .bss : { 5667d4254dSFrans Kaashoek *(.bss) 5767d4254dSFrans Kaashoek } 5867d4254dSFrans Kaashoek 5967d4254dSFrans Kaashoek PROVIDE(end = .); 6067d4254dSFrans Kaashoek 6167d4254dSFrans Kaashoek /DISCARD/ : { 6267d4254dSFrans Kaashoek *(.eh_frame .note.GNU-stack) 6367d4254dSFrans Kaashoek } 6467d4254dSFrans Kaashoek} 65