Added <errno.h> and made kernel use it

This commit is contained in:
2026-03-25 18:17:42 +01:00
parent 7a57999d05
commit 2f05396651
15 changed files with 189 additions and 135 deletions
+10 -6
View File
@@ -1,5 +1,7 @@
#include <kernel.h>
#include <string.h>
#include <system.h>
#include <errno.h>
#include <gdt.h>
#include <idt.h>
@@ -7,25 +9,27 @@ __align(16) // performace
static struct idt_entry idt[IDT_ENTRIES];
static struct idt_pointer idtp;
void idt_set_gate(uint8_t i, void* handler, uint8_t attrib) {
void idt_set_gate(uint8_t i, void* handler, uint8_t attrib, uint8_t ist) {
size_t addr = (size_t)handler;
idt[i].offset_low = (uint16_t)addr;
idt[i].selector = GDT_KERNEL_CODE;
idt[i].ist = 0;
idt[i].__reserved = 0;
idt[i].ist = ist & 7;
idt[i].attrib = attrib;
idt[i].offset_mid = (uint16_t)(addr >> 16);
idt[i].offset_high = (uint32_t)(addr >> 32);
idt[i].__reserved = 0;
}
int idt_init(void) {
memset(idt, 0, sizeof(idt));
idtp.size = sizeof(idt) - 1;
idtp.offset = (size_t)&idt;
idtp.offset = (uintptr_t)&idt;
// Load IDT instruction
cli();
__asm__ volatile ("lidt %0" : : "m"(idtp));
debugf("[idt] IDT initalized.\n");
return 0;
return SUCCESS;
}