Merge branch 'master' of ssh://git.dehosting.club:3022/quintenk/kornos

This commit is contained in:
Quinten Kock 2020-12-09 14:31:13 +01:00
commit 5383bf80d3
9 changed files with 66 additions and 20 deletions

View File

@ -25,7 +25,7 @@ bochs: $(KERNEL_HDD) ext/bochsrc
rm bochsout.txt rm bochsout.txt
gdb: gdb:
QEMUFLAGS="-s -S" $(MAKE) run & gdb -x ext/gdbinit QEMUFLAGS="-s -S" $(MAKE) run & (sleep 1; gdb -x ext/gdbinit)
ext/limine/limine-install: ext/limine/limine-install:
$(MAKE) -C ext/limine/ limine-install $(MAKE) -C ext/limine/ limine-install

View File

@ -10,7 +10,7 @@ LDSCRIPT = make/$(ARCH)/linker.ld
CFLAGS ?= -Og -g CFLAGS ?= -Og -g
CFLAGS := $(CFLAGS) $(ARCH_CFLAGS) \ CFLAGS := $(CFLAGS) $(ARCH_CFLAGS) \
-Wall -Wextra -pedantic -Wno-language-extension-token -std=gnu11 -I../ext -Isrc -fPIE -Wall -Wextra -pedantic -std=gnu11 -I../ext -Isrc -fPIE
LDFLAGS := $(LDFLAGS) -T $(LDSCRIPT) LDFLAGS := $(LDFLAGS) -T $(LDSCRIPT)
@ -31,13 +31,11 @@ $(ARCHES):
bin/$(TARGET)-$(ARCH): $(OBJ) bin/$(TARGET)-$(ARCH): $(OBJ)
@mkdir -p $(@D) @mkdir -p $(@D)
@echo Linking $@
$(LD) $(LDFLAGS) $(OBJ) -o $@ $(LD) $(LDFLAGS) $(OBJ) -o $@
obj/$(ARCH)/%.c.o: src/%.c $(HFILES) obj/$(ARCH)/%.c.o: src/%.c $(HFILES) $(ARCHHEADERS)
@mkdir -p $(@D) @mkdir -p $(@D)
@echo $(CC) $< $(CC) $(CFLAGS) -c $< -o $@
@$(CC) $(CFLAGS) -c $< -o $@
clean: clean:
rm -rf bin obj zig-cache rm -rf bin obj zig-cache

View File

@ -1,9 +1,12 @@
ARCHFILES := $(shell find src/arch/x86 -type f -name '*.c' -print) \ ARCHFILES := $(shell find src/arch/x86 -type f -name '*.c' -print) \
$(shell find src/arch/x86 -type f -name '*.nasm' -print) \ $(shell find src/arch/x86 -type f -name '*.nasm' -print) \
$(shell find src/arch/$(ARCH) -type f -name '*.nasm' -print) $(shell find src/arch/$(ARCH) -type f -name '*.nasm' -print)
ARCHHEADERS := $(shell find src/arch/x86 -type f -name '*.h' -print) \
$(shell find src/arch/x86 -type f -name '*.nasminc' -print) \
$(shell find src/arch/$(ARCH) -type f -name '*.nasminc' -print)
ARCH_CFLAGS := -masm=intel ARCH_CFLAGS := -masm=intel
NASMFLAGS := -Isrc
obj/$(ARCH)/%.nasm.o: src/%.nasm obj/$(ARCH)/%.nasm.o: src/%.nasm $(ARCHHEADERS)
@mkdir -p $(@D) @mkdir -p $(@D)
@echo nasm $< $(NASM) $(NASMFLAGS) $< -o $@
@$(NASM) $(NASMFLAGS) $< -o $@

View File

@ -1,3 +1,3 @@
void breakpoint() { void breakpoint() {
asm volatile ("xchgw %bx, %bx"); __asm__ volatile ("xchgw %bx, %bx");
} }

View File

@ -1,9 +1,9 @@
#include <print/print.h> #include <print/print.h>
void halt_catch_fire() { void halt_catch_fire() {
asm volatile ("cli"); __asm__ volatile ("cli");
while(1) { while(1) {
asm volatile ("hlt"); __asm__ volatile ("hlt");
puts("INTERRUPTED!"); puts("INTERRUPTED!");
}; };
} }

View File

@ -12,6 +12,8 @@
static uint8_t stack[4096] = {0}; static uint8_t stack[4096] = {0};
void stivale2_main(struct stivale2_struct *info); void stivale2_main(struct stivale2_struct *info);
extern void asmpanic();
struct stivale2_header_tag_smp smp_request = { struct stivale2_header_tag_smp smp_request = {
.tag = { .tag = {
.identifier = STIVALE2_HEADER_TAG_SMP_ID, .identifier = STIVALE2_HEADER_TAG_SMP_ID,
@ -41,8 +43,9 @@ void stivale2_main(struct stivale2_struct *info) {
); );
printf("PAGE TABLE AT: %x\n", cr3); printf("PAGE TABLE AT: %x\n", cr3);
loadgdt();
print_gdt(); print_gdt();
char *argv[3] = {"stivale2", info->bootloader_brand, info->bootloader_version}; asmpanic();
kmain(3, argv); kmain();
} }

View File

@ -1,10 +1,15 @@
section .rodata section .rodata
align 8
gdt64: gdt64:
dq 0 dq 0
.code: equ $-gdt64 .codesys: equ $-gdt64
dq (1<<44) | (1<<47) | (1<<41) | (1<<43) | (1<<53) dq (1<<44) | (1<<47) | (1<<41) | (1<<43) | (1<<53)
.data: equ $ - gdt64 .datasys: equ $-gdt64
dq (1<<44) | (1<<47) | (1<<41) dq (1<<44) | (1<<47) | (1<<41)
.codeusr: equ $-gdt64
dq (1<<44) | (1<<47) | (1<<41) | (1<<43) | (1<<53) | (3<<45)
.datausr: equ $-gdt64
dq (1<<44) | (1<<47) | (1<<41) | (3<<45)
.pointer: .pointer:
dw .pointer - gdt64 - 1 dw .pointer - gdt64 - 1
dq gdt64 dq gdt64
@ -13,4 +18,18 @@ section .text
global loadgdt global loadgdt
loadgdt: loadgdt:
lgdt [gdt64.pointer] lgdt [gdt64.pointer]
; now what I tried unsuccessfully:
mov rax, gdt64.codesys;
push rax
mov rax, loadgdtdone
push rax ; function to execute next
retfq ; far return (pops address and code segment)
loadgdtdone:
mov ax, gdt64.datasys
mov ss, ax
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
ret

View File

@ -1,2 +1,8 @@
%include "arch/x86_64/panic.nasminc"
global archval global archval
archval db "x86_64-nasm", 0 archval db "x86_64-nasm", 0
global asmpanic
asmpanic:
PANIC "asmpanic"

View File

@ -0,0 +1,17 @@
%ifndef PANIC_NASM_MAC
%define PANIC_NASM_MAC
extern panic
%macro PANIC 1
[SECTION .data]
panicval db %1, 0
filename db __FILE__, 0
__SECT__
mov rdi, panicval
mov rsi, filename
mov rdx, __LINE__
call panic
%endmacro
%endif