summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-04-29 21:27:17 -0400
committerFreya Murphy <freya@freyacat.org>2025-04-30 11:23:59 -0400
commit78c1891d87c4880289bf76fba82fa8ca0bf6a478 (patch)
tree7d2f601cc57ede012e4ebfe45cf4f23c5ddc85f6 /kernel
parentupdate fs headers 2.0 (diff)
downloadcomus-78c1891d87c4880289bf76fba82fa8ca0bf6a478.tar.gz
comus-78c1891d87c4880289bf76fba82fa8ca0bf6a478.tar.bz2
comus-78c1891d87c4880289bf76fba82fa8ca0bf6a478.zip
update makefiles
Diffstat (limited to 'kernel')
-rw-r--r--kernel/Makefile39
-rw-r--r--kernel/cpu/idt.c3
-rw-r--r--kernel/font/default8x16.psfubin0 -> 4969 bytes
-rw-r--r--kernel/font/font.S (renamed from kernel/font.S)0
-rw-r--r--kernel/user.c14
5 files changed, 48 insertions, 8 deletions
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 <freya@freyacat.org>
+
+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/default8x16.psfu b/kernel/font/default8x16.psfu
new file mode 100644
index 0000000..e789b77
--- /dev/null
+++ b/kernel/font/default8x16.psfu
Binary files differ
diff --git a/kernel/font.S b/kernel/font/font.S
index 571876b..571876b 100644
--- a/kernel/font.S
+++ b/kernel/font/font.S
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;
}