From e527a3ccb6ca99e4b6eef109f8df4a78b20654e3 Mon Sep 17 00:00:00 2001 From: stefan Date: Mon, 25 Oct 2010 17:10:16 +0000 Subject: [PATCH] - switched to an ELF kernel - simplified the linker script git-svn-id: http://svn.lfbs.rwth-aachen.de/svn/scc/trunk/MetalSVM@199 315a16e6-25f9-4109-90ae-ca3045a26c18 --- Makefile.example | 2 +- arch/x86/kernel/entry.asm | 13 +++++++------ link.ld | 22 +++++++--------------- 3 files changed, 15 insertions(+), 22 deletions(-) diff --git a/Makefile.example b/Makefile.example index bb8ecd19..03dd3668 100644 --- a/Makefile.example +++ b/Makefile.example @@ -15,7 +15,7 @@ export AR = ar export ARFLAGS = rsv export RM = rm -rf LD = ld -LDFLAGS = -T link.ld +LDFLAGS = -T link.ld -z max-page-size=4096 default: for i in $(SUBDIRS); do $(MAKE) -C $$i default; done diff --git a/arch/x86/kernel/entry.asm b/arch/x86/kernel/entry.asm index 0efabd40..062f8fd3 100644 --- a/arch/x86/kernel/entry.asm +++ b/arch/x86/kernel/entry.asm @@ -38,7 +38,7 @@ mboot: MULTIBOOT_MEMORY_INFO equ 1<<1 MULTIBOOT_AOUT_KLUDGE equ 1<<16 MULTIBOOT_HEADER_MAGIC equ 0x1BADB002 - MULTIBOOT_HEADER_FLAGS equ MULTIBOOT_PAGE_ALIGN | MULTIBOOT_MEMORY_INFO | MULTIBOOT_AOUT_KLUDGE + MULTIBOOT_HEADER_FLAGS equ MULTIBOOT_PAGE_ALIGN | MULTIBOOT_MEMORY_INFO ; | MULTIBOOT_AOUT_KLUDGE MULTIBOOT_CHECKSUM equ -(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS) EXTERN code, bss, end @@ -49,12 +49,13 @@ mboot: ; AOUT kludge - must be physical addresses. Make a note of these: ; The linker script fills in the data for these ones! - dd mboot - dd code - dd bss - dd end - dd start + ; dd mboot + ; dd code + ; dd bss + ; dd end + ; dd start +SECTION .text ALIGN 4 stublet: ; interpret multiboot information diff --git a/link.ld b/link.ld index 624cf6c6..838e8c90 100644 --- a/link.ld +++ b/link.ld @@ -1,31 +1,23 @@ -OUTPUT_FORMAT("binary") +OUTPUT_FORMAT("elf32-i386") OUTPUT_ARCH("i386") ENTRY(start) phys = 0x00100000; SECTIONS { - .text phys : AT(phys) { - kernel_start = .; - code = .; + .mboot phys : AT(ADDR(.mboot)) { *(.mboot) + } + .text ALIGN(4096) : AT(ADDR(.text)) { + kernel_start = .; *(.text) *(.rodata) - . = ALIGN(4096); } - .data : AT(phys + (data - code)) - { - data = .; + .data ALIGN(4096) : AT(ADDR(.data)) { *(.data) - . = ALIGN(4096); } - .bss : AT(phys + (bss - code)) - { - bss = .; + .bss ALIGN(4096) : AT(ADDR(.bss)) { *(.bss) - . = ALIGN(4096); } - end = .; kernel_end = .; } -. = ALIGN(4096);