diff --git a/configs/debug.toml b/configs/debug.toml index d07c05c..4e87550 100644 --- a/configs/debug.toml +++ b/configs/debug.toml @@ -64,6 +64,7 @@ ccflags = [ "-mcmodel=large", "-D__ELF__", "-D__JSIX__", + "-D_LIBCPP_HAS_THREAD_API_EXTERNAL", "-isystem${source_root}/sysroot/include", "-isystem${source_root}/src/libraries/libc/include", "--sysroot='${source_root}/sysroot'" @@ -113,6 +114,7 @@ ccflags = [ "-mcmodel=large", "-D__ELF__", "-D__JSIX__", + "-D_LIBCPP_HAS_THREAD_API_EXTERNAL", "-isystem${source_root}/sysroot/include", "-isystem${source_root}/src/libraries/libc/include", "--sysroot='${source_root}/sysroot'" diff --git a/src/libraries/libc/arch/x86_64/init_libc.c b/src/libraries/j6/init.cpp similarity index 93% rename from src/libraries/libc/arch/x86_64/init_libc.c rename to src/libraries/j6/init.cpp index 3e60dff..21309a5 100644 --- a/src/libraries/libc/arch/x86_64/init_libc.c +++ b/src/libraries/j6/init.cpp @@ -8,7 +8,7 @@ static struct j6_init_value *__initv = 0; j6_handle_t __handle_sys = j6_handle_invalid; j6_handle_t __handle_self = j6_handle_invalid; -void +extern "C" void _get_init(size_t *initc, struct j6_init_value **initv) { if (!initc) @@ -19,8 +19,8 @@ _get_init(size_t *initc, struct j6_init_value **initv) *initv = __initv; } -void -_init_libc(uint64_t *rsp) +extern "C" void +_init_libj6(uint64_t *rsp) { uint64_t argc = *rsp++; rsp += argc; diff --git a/src/libraries/j6/module.toml b/src/libraries/j6/module.toml index 5435d35..b148eb3 100644 --- a/src/libraries/j6/module.toml +++ b/src/libraries/j6/module.toml @@ -1,4 +1,4 @@ name = "j6" kind = "lib" includes = ["src/libraries/j6/include"] -sources = ["syscalls.s"] +sources = ["init.cpp", "syscalls.s"] diff --git a/src/libraries/libc/arch/x86_64/crt0.s b/src/libraries/libc/arch/x86_64/crt0.s index 222f599..d059a8b 100644 --- a/src/libraries/libc/arch/x86_64/crt0.s +++ b/src/libraries/libc/arch/x86_64/crt0.s @@ -1,17 +1,15 @@ extern main extern exit -extern _init_libc +extern _init_libj6 global _start:function (_start.end - _start) _start: mov rbp, rsp mov rdi, rsp - - call _init_libc + call _init_libj6 pop rdi mov rsi, rsp - call main mov rdi, rax diff --git a/src/libraries/libc/module.toml b/src/libraries/libc/module.toml index a0c8d70..7dd7a5b 100644 --- a/src/libraries/libc/module.toml +++ b/src/libraries/libc/module.toml @@ -7,7 +7,6 @@ deps = ["j6"] sources = [ "arch/x86_64/_Exit.s", "arch/x86_64/crt0.s", - "arch/x86_64/init_libc.c", "ctype/isalnum.c", "ctype/isalpha.c", "ctype/isblank.c",