From a31794504d911d584265ac0427dfbba9a4d9ef72 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Sun, 18 Jul 2021 20:01:20 +0200 Subject: basic executable loading --- src/kernel/main.c | 9 +++++++-- src/kernel/util.c | 8 ++++++++ src/kernel/util.h | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) (limited to 'src/kernel') diff --git a/src/kernel/main.c b/src/kernel/main.c index 677faaf..7f49fed 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -3,16 +3,21 @@ #include #include #include +#include +#include void r3_test(); void kmain(struct kmain_info info) { - log_write(info.init.at, info.init.size); log_const("mem..."); mem_init(&info); log_const("creating process..."); - struct process *proc = process_new(r3_test); + + void *init_addr = (void*)0x200000; + memcpy(init_addr, info.init.at, info.init.size); + + struct process *proc = process_new(init_addr); log_const("switching..."); process_switch(proc); } diff --git a/src/kernel/util.c b/src/kernel/util.c index da3ac9d..f4dc5e1 100644 --- a/src/kernel/util.c +++ b/src/kernel/util.c @@ -1,6 +1,14 @@ #include #include +void *memcpy(void *dest, const void *src, size_t n) { + char *d = dest; + const char *s = src; + for (size_t i = 0; i < n; i++) + d[i] = s[i]; + return dest; +} + void *memset(void *s, int c, size_t n) { uint8_t *s2 = s; for (size_t i = 0; i < n; n++) diff --git a/src/kernel/util.h b/src/kernel/util.h index 688ac63..4bd7c31 100644 --- a/src/kernel/util.h +++ b/src/kernel/util.h @@ -1,4 +1,5 @@ #pragma once #include +void *memcpy(void *dest, const void *src, size_t n); void *memset(void *s, int c, size_t n); -- cgit v1.2.3