From 81d4d93c12fc49eaa20fb8c76092bd6ae7fbc539 Mon Sep 17 00:00:00 2001 From: Curle Date: Thu, 20 Jun 2019 23:32:03 +0100 Subject: [PATCH] Fix issues with ASM --- arch/i386/boot.s | 31 +++++++++++++++++-------------- arch/i386/make.config | 4 +--- makefile | 25 ++++--------------------- 3 files changed, 22 insertions(+), 38 deletions(-) diff --git a/arch/i386/boot.s b/arch/i386/boot.s index 4553563..a381081 100755 --- a/arch/i386/boot.s +++ b/arch/i386/boot.s @@ -1,29 +1,31 @@ -MBOOT_ALIGN equ <<0 +MBOOT_ALIGN equ 1<<0 MBOOT_MEMINFO equ 1<<1 MBOOT_FLAGS equ MBOOT_ALIGN | MBOOT_MEMINFO MBOOT_MAGIC equ 0x1BADB002 -MBOOT_CHECKSUM equ -(MAGIC + FLAGS) +MBOOT_CHECKSUM equ -(MBOOT_MAGIC + MBOOT_FLAGS) [BITS 32] [GLOBAL mboot] - -[EXTERN code] -[EXTERN bss] -[EXTERN end] +[SECTION .multiboot] +ALIGN 4 mboot: dd MBOOT_MAGIC dd MBOOT_FLAGS - dd mboot - dd code - dd bss - dd end - dd start + dd MBOOT_CHECKSUM -[GLOBAL start] +SECTION .bss +ALIGN 16 +stack_bottom: +RESB 16384 +stack_top: + + +SECTION .text +[GLOBAL _start] [EXTERN kernel_main] -start: +_start: push ebx cli @@ -31,7 +33,7 @@ start: jmp $ [GLOBAL load_gdt] ; Allows the C code to call gdt_flush(). -[EXTERN gp] + load_gdt: mov eax, [esp+4] ; Get the pointer to the GDT, passed as a parameter. lgdt [eax] ; Load the new GDT pointer @@ -176,6 +178,7 @@ irq_common: add esp, 8 iret +[GLOBAL idt_load] idt_load: mov eax, [esp+4] lidt [eax] diff --git a/arch/i386/make.config b/arch/i386/make.config index 1872f9d..3a2220f 100755 --- a/arch/i386/make.config +++ b/arch/i386/make.config @@ -5,7 +5,5 @@ KERNEL_ARCH_LIBS= KERNEL_ARCH_OBJS= \ $(ARCHDIR)/boot.o \ -$(ARCHDIR)/gdt.o \ -$(ARCHDIR)/isr.o \ $(ARCHDIR)/sys_clock.o \ -$(ARCHDIR)/tty.o \ No newline at end of file +$(ARCHDIR)/tty.o diff --git a/makefile b/makefile index 7122bd5..9c3f51d 100755 --- a/makefile +++ b/makefile @@ -2,7 +2,7 @@ DEFAULT_HOST:=i686-elf HOST?=DEFAULT_HOST HOSTARCH:=i386 -CFLAGS?= -O2 -g +CFLAGS?= -O2 -g -m32 -no-pie CPPFLAGS?= LDFLAGS?= LIBS?= @@ -13,7 +13,7 @@ EXEC_PREFIX?=$(PREFIX) BOOTDIR?=$(EXEC_PREFIX)/boot INCLUDEDIR?=$(PREFIX)/include -CFLAGS:=$(CFLAGS) -ffreestanding -Wall -Wextra +CFLAGS:=$(CFLAGS) -ffreestanding -Wall -Wextra -I"../include" -I"../../include" CPPFLAGS:=$(CPPFLAGS) -D__is_kernel -Iinclude LDFLAGS:=$(LDFLAGS) LIBS:=$(LIBS) -nostdlib -lgcc @@ -36,20 +36,12 @@ kernel/idt.o \ kernel/kernel.o OBJS=\ -$(ARCHDIR)/crti.o \ -$(ARCHDIR)/crtbegin.o \ -$(KERNEL_OBJS) \ -$(ARCHDIR)/crtend.o \ -$(ARCHDIR)/crtn.o +$(KERNEL_OBJS) LINK_LIST=\ $(LDFLAGS) \ -$(ARCHDIR)/crti.o \ -$(ARCHDIR)/crtbegin.o \ $(KERNEL_OBJS) \ $(LIBS) \ -$(ARCHDIR)/crtend.o \ -$(ARCHDIR)/crtn.o .PHONY: all clean install install-headers install-kernel .SUFFIXES: .o .c .s @@ -58,20 +50,11 @@ all: red.kernel red.kernel: $(OBJS) $(ARCHDIR)/linker.ld $(CC) -T $(ARCHDIR)/linker.ld -o $@ $(CFLAGS) $(LINK_LIST) - -$(ARCHDIR)/crtbegin.o $(ARCHDIR)/crtend.o: - OBJ=`$(CC) $(CFLAGS) $(LDFLAGS) -print-file-name=$(@F)` && cp "$$OBJ" $@ - -$(ARCHDIR)/gdt.o: - nasm -f elf $(ARCHDIR)/gdt.s - -$(ARCHDIR)/isr.o: - nasm -f elf $(ARCHDIR)/isr.s .c.o: $(CC) -MD -c $< -o $@ -std=gnu11 $(CFLAGS) $(CPPFLAGS) .s.o: - $(CC) -MD -c $< -o $@ $(CFLAGS) $(CPPFLAGS) + nasm -f elf $< -o $@ clean: rm -f red.kernel