summaryrefslogtreecommitdiffstats
path: root/lib/libjove/libjove.c
blob: ef5d7e60b925f7f3253ef98aab7c9a5fc317eff9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include "include/jove.h"
#include "include/object-untyped.h"
#include "error.h"
#include "heap/heap.h"

uintmax_t __jove_syscall_obj = 0;
void *__jove_syscall_ptr = 0;

JoveError jove_errno;

KernelObjectDirectory __jove_untyped_directory;
KernelObjectTyped __jove_work_obj;

uintptr_t __program_end;

void *(*_jove_alloc)(size_t) = NULL;
void (*_jove_free)(void*) = NULL;
void *(*_jove_realloc)(void*, size_t) = NULL;

extern void __libjove_arch_init(void);

void
__libjove_init(uint8_t syscall_obj, void *syscall_ptr)
{
    __rootdir = (KernelObjectDirectory) {
        .typed = {
            .type = KO_OBJECT_DIRECTORY,
            .membi = 0,
            .parent = NULL
        },
        .firstfree = -1,
        .lastmemb = -1
    };

    __jove_syscall_obj = syscall_obj;
    __jove_syscall_ptr = syscall_ptr;

    __jove_work_obj = (KernelObjectTyped) {
        .membi = jove_objdir_lastmemb(&__rootdir),
        .parent = &__rootdir,
        .type = KO_NONE
    };

    __libjove_arch_init();
}

void
__libjove_init_untypeddir(uint8_t diri)
{
    _jove_alloc_objdir_inplace(&__jove_untyped_directory, &__rootdir, diri);
}