GDT init (load + flush)

This commit is contained in:
2025-12-22 11:20:24 +01:00
parent 29deb20cd7
commit 6fc7266716
8 changed files with 195 additions and 72 deletions

View File

@@ -4,6 +4,8 @@
#include "io/term.h"
#include "io/printf.h"
#include "io/serial.h"
#include "mem/gdt.h"
#include "mem/utils.h"
// Limine version used
__attribute__((used, section(".limine_requests")))
@@ -24,74 +26,6 @@ static volatile LIMINE_REQUESTS_END_MARKER;
struct limine_framebuffer* framebuffer;
// We won't be linked to standard library, but still need the basic mem* functions
// so everything goes allright with the compiler
// We use the "restrict" keyword on pointers so that the compiler knows it can
// do more optimization on them (and as it's a much used function, it's good to
// be able to do that)
void* memcpy(void* restrict dest, const void* restrict src, size_t n)
{
uint8_t* restrict pdest = (uint8_t* restrict)dest;
const uint8_t* restrict psrc = (const uint8_t* restrict)src;
for (size_t i=0; i<n; i++)
{
pdest[i] = psrc[i];
}
return dest;
}
void* memset(void* s, int c, size_t n)
{
uint8_t* p = (uint8_t*)s;
for (size_t i=0; i<n; i++)
{
p[i] = (uint8_t)c;
}
return s;
}
void* memmove(void *dest, const void* src, size_t n)
{
uint8_t* pdest = (uint8_t*)dest;
const uint8_t* psrc = (uint8_t*)src;
if (src > dest)
{
for (size_t i=0; i<n; i++)
{
pdest[i] = psrc[i];
}
} else if (src < dest)
{
for (size_t i=n; i>0; i--)
{
pdest[i-1] = psrc[i-1];
}
}
return dest;
}
int memcmp(const void* s1, const void* s2, size_t n)
{
const uint8_t* p1 = (const uint8_t*)s1;
const uint8_t* p2 = (const uint8_t*)s2;
for (size_t i=0; i<n; i++)
{
if (p1[i] != p2[i])
{
return p1[i] < p2[i] ? -1 : 1;
}
}
return 0;
}
// Panic
static void hcf()
{
@@ -114,7 +48,10 @@ void kmain()
if (serial_init()) kputs("kernel: serial: error: Cannot init serial communication!");
serial_kputs("\n\nkernel: serial: Hello, world from serial!");
serial_kputs("\n\nkernel: serial: Hello, world from serial!\n");
gdt_init();
serial_kputs("kernel: gdt: Initialized GDT!");
// Draw something
printf("%s, %s!", "Hello", "world");