diff --git a/Architecture/amd64/linker.ld b/Architecture/amd64/linker.ld index 140f378..39ce7db 100644 --- a/Architecture/amd64/linker.ld +++ b/Architecture/amd64/linker.ld @@ -1,3 +1,20 @@ +/* + This file is part of Fennix Kernel. + + Fennix Kernel is free software: you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of + the License, or (at your option) any later version. + + Fennix Kernel is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Fennix Kernel. If not, see . +*/ + OUTPUT_FORMAT(elf64-x86-64) OUTPUT_ARCH(i386:x86-64) @@ -72,4 +89,4 @@ SECTIONS *(.comment*) *(.note*) } -} \ No newline at end of file +} diff --git a/Architecture/i386/linker.ld b/Architecture/i386/linker.ld index 292c465..576b36a 100644 --- a/Architecture/i386/linker.ld +++ b/Architecture/i386/linker.ld @@ -18,37 +18,48 @@ OUTPUT_FORMAT(elf32-i386) OUTPUT_ARCH(i386) +KERNEL_VMA = 0xC0000000; + ENTRY(_start) SECTIONS { - . = 0xC0100000; + . = 0x100000; - _kernel_start = .; - .text ALIGN(4K) : AT(ADDR(.text) - 0xC0000000) + _bootstrap_start = .; + .bootstrap : { *(.multiboot) *(.multiboot2) + *(.bootstrap .bootstrap.*) + } + _bootstrap_end = .; + + . += KERNEL_VMA; + + _kernel_start = .; + .text : AT(ADDR(.text) - KERNEL_VMA) + { *(.text .text.*) } _kernel_text_end = ALIGN(CONSTANT(MAXPAGESIZE)); . += CONSTANT(MAXPAGESIZE); - .data ALIGN(4K) : AT(ADDR(.data) - 0xC0000000) + .data : AT(ADDR(.data) - KERNEL_VMA) { *(.data .data.*) } _kernel_data_end = ALIGN(CONSTANT(MAXPAGESIZE)); . += CONSTANT(MAXPAGESIZE); - .rodata ALIGN(4K) : AT(ADDR(.rodata) - 0xC0000000) + .rodata : AT(ADDR(.rodata) - KERNEL_VMA) { *(.rodata .rodata.*) } _kernel_rodata_end = ALIGN(CONSTANT(MAXPAGESIZE)); . += CONSTANT(MAXPAGESIZE); - .init_array : + .init_array : AT(ADDR(.init_array) - KERNEL_VMA) { PROVIDE_HIDDEN(__init_array_start = .); KEEP(*(.init_array .ctors)) @@ -56,7 +67,7 @@ SECTIONS PROVIDE_HIDDEN (__init_array_end = .); } - .fini_array : + .fini_array : AT(ADDR(.fini_array) - KERNEL_VMA) { PROVIDE_HIDDEN(__fini_array_start = .); KEEP(*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) @@ -65,7 +76,7 @@ SECTIONS } . += CONSTANT(MAXPAGESIZE); - .bss ALIGN(4K) : AT(ADDR(.bss) - 0xC0000000) + .bss : AT(ADDR(.bss) - KERNEL_VMA) { *(COMMON) *(.bss .bss.*)