From 78c1891d87c4880289bf76fba82fa8ca0bf6a478 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Tue, 29 Apr 2025 21:27:17 -0400 Subject: update makefiles --- kernel/Makefile | 39 +++++++++++++++++++++++++++++++++++++++ kernel/cpu/idt.c | 3 ++- kernel/font.S | 7 ------- kernel/font/default8x16.psfu | Bin 0 -> 4969 bytes kernel/font/font.S | 7 +++++++ kernel/user.c | 14 +++++++------- 6 files changed, 55 insertions(+), 15 deletions(-) create mode 100644 kernel/Makefile delete mode 100644 kernel/font.S create mode 100644 kernel/font/default8x16.psfu create mode 100644 kernel/font/font.S (limited to 'kernel') diff --git a/kernel/Makefile b/kernel/Makefile new file mode 100644 index 0000000..19051b9 --- /dev/null +++ b/kernel/Makefile @@ -0,0 +1,39 @@ +### Copyright (c) 2025 Freya Murphy + +include ../config.mk + +.PHONY: build fmt clean qemu +.SILENT: + +SRC=* +BIN=bin +KERNEL=kernel +LINKER=../config/kernel.ld +CONFIG=../config.mk + +H_SRC = $(shell find $(SRC) -type f -name "*.h") +A_SRC = $(shell find $(SRC) -type f -name "*.S") +A_OBJ = $(patsubst %.S,$(BIN)/%.S.o,$(A_SRC)) +C_SRC = $(shell find $(SRC) -type f -name "*.c") +C_OBJ = $(patsubst %.c,$(BIN)/%.o,$(C_SRC)) + +build: $(BIN)/$(KERNEL) + +clean: + rm -fr $(BIN) + +$(A_OBJ): $(BIN)/%.S.o : %.S $(H_SRC) $(CONFIG) + mkdir -p $(@D) + printf "\033[33m AS \033[0m%s\n" $< + $(CPP) $(CPPFLAGS) -o $@.cpp $< + $(AS) -o $@ $@.cpp + +$(C_OBJ): $(BIN)/%.o : %.c $(H_SRC) $(CONFIG) + mkdir -p $(@D) + printf "\033[34m CC \033[0m%s\n" $< + $(CC) -c $(CFLAGS) -o $@ $< + +$(BIN)/$(KERNEL): $(A_OBJ) $(C_OBJ) $(LINKER) + mkdir -p $(@D) + printf "\033[32m LD \033[0m%s\n" $@ + $(LD) $(LDFLAGS) -T $(LINKER) -o $(BIN)/$(KERNEL) $(A_OBJ) $(C_OBJ) diff --git a/kernel/cpu/idt.c b/kernel/cpu/idt.c index 2eab7ec..7cbbb65 100644 --- a/kernel/cpu/idt.c +++ b/kernel/cpu/idt.c @@ -156,7 +156,8 @@ __attribute__((noreturn)) void idt_exception_handler(uint64_t exception, void isr_save(struct cpu_regs *regs) { // make sure were in the kernel memory context - mem_ctx_switch(kernel_mem_ctx); + if (kernel_mem_ctx) + mem_ctx_switch(kernel_mem_ctx); // save pointer to registers state = regs; diff --git a/kernel/font.S b/kernel/font.S deleted file mode 100644 index 571876b..0000000 --- a/kernel/font.S +++ /dev/null @@ -1,7 +0,0 @@ - .globl en_font - - .section .rodata - - .align 8 -en_font: - .incbin "font/default8x16.psfu" diff --git a/kernel/font/default8x16.psfu b/kernel/font/default8x16.psfu new file mode 100644 index 0000000..e789b77 Binary files /dev/null and b/kernel/font/default8x16.psfu differ diff --git a/kernel/font/font.S b/kernel/font/font.S new file mode 100644 index 0000000..571876b --- /dev/null +++ b/kernel/font/font.S @@ -0,0 +1,7 @@ + .globl en_font + + .section .rodata + + .align 8 +en_font: + .incbin "font/default8x16.psfu" diff --git a/kernel/user.c b/kernel/user.c index f9b541c..e22248a 100644 --- a/kernel/user.c +++ b/kernel/user.c @@ -107,37 +107,37 @@ static int validate_elf_hdr(struct pcb *pcb) Elf64_Ehdr *ehdr = &pcb->elf_header; if (strncmp((const char *)ehdr->e_ident, ELFMAG, SELFMAG)) { - WARN("Invalid ELF File.\n"); + WARN("Invalid ELF File."); return 1; } if (ehdr->e_ident[EI_CLASS] != ELFCLASS64) { - WARN("Unsupported ELF Class.\n"); + WARN("Unsupported ELF Class."); return 1; } if (ehdr->e_ident[EI_DATA] != ELFDATA2LSB) { - ERROR("Unsupported ELF File byte order.\n"); + ERROR("Unsupported ELF File byte order."); return 1; } if (ehdr->e_machine != EM_X86_64) { - WARN("Unsupported ELF File target.\n"); + WARN("Unsupported ELF File target."); return 1; } if (ehdr->e_ident[EI_VERSION] != EV_CURRENT) { - WARN("Unsupported ELF File version.\n"); + WARN("Unsupported ELF File version."); return 1; } if (ehdr->e_phnum > N_ELF_SEGMENTS) { - WARN("Too many ELF segments.\n"); + WARN("Too many ELF segments."); return 1; } if (ehdr->e_type != ET_EXEC) { - ERROR("Unsupported ELF File type.\n"); + ERROR("Unsupported ELF File type."); return 1; } -- cgit v1.2.3-freya