diff --git a/src/libraries/j6/include/j6/init.h b/src/libraries/j6/include/j6/init.h index 57b6c43..ec4036d 100644 --- a/src/libraries/j6/include/j6/init.h +++ b/src/libraries/j6/include/j6/init.h @@ -73,6 +73,9 @@ struct j6_init_args /// Find the first handle of the given type held by this process j6_handle_t j6_find_first_handle(j6_object_type obj_type); +/// Get the init args +const j6_init_args * j6_get_init_args(); + /// Drivers may use driver_main instead of main int driver_main(unsigned, const char **, const char **, const j6_init_args *); diff --git a/src/libraries/j6/init.cpp b/src/libraries/j6/init.cpp index 8f0a552..9b43b27 100644 --- a/src/libraries/j6/init.cpp +++ b/src/libraries/j6/init.cpp @@ -36,12 +36,18 @@ j6_find_first_handle(j6_object_type obj_type) return j6_handle_invalid; } -extern "C" j6_init_args * +const j6_init_args * +j6_get_init_args() +{ + return &init_args; +} + +extern "C" void __init_libj6(uint64_t arg0, uint64_t arg1) { init_args.args[0] = arg0; init_args.args[1] = arg1; - return &init_args; } + #endif // __j6kernel diff --git a/src/libraries/j6/j6.module b/src/libraries/j6/j6.module index db84f98..8c4524a 100644 --- a/src/libraries/j6/j6.module +++ b/src/libraries/j6/j6.module @@ -7,7 +7,6 @@ j6 = module("j6", "channel.cpp", "condition.cpp", "init.cpp", - "init.s", "memutils.cpp", "mutex.cpp", "protocol_ids.cpp", diff --git a/src/user/drv.uefi_fb/main.cpp b/src/user/drv.uefi_fb/main.cpp index 98b2944..c28bdbe 100644 --- a/src/user/drv.uefi_fb/main.cpp +++ b/src/user/drv.uefi_fb/main.cpp @@ -20,7 +20,7 @@ extern "C" { } int -driver_main(unsigned argc, const char **argv, const char **env, const j6_init_args *init) +main(int argc, const char **argv, const char **env) { j6::syslog("fb driver starting"); @@ -28,6 +28,7 @@ driver_main(unsigned argc, const char **argv, const char **env, const j6_init_ar using bootproto::devices::video_mode; using bootproto::devices::fb_layout; + const j6_init_args *init = j6_get_init_args(); const uefi_fb *fb = reinterpret_cast(init->args[0]); if (!fb || !fb->framebuffer) { diff --git a/src/user/srv.init/main.cpp b/src/user/srv.init/main.cpp index 67a3eb6..03d5e18 100644 --- a/src/user/srv.init/main.cpp +++ b/src/user/srv.init/main.cpp @@ -27,7 +27,7 @@ using bootproto::module_type; constexpr uintptr_t stack_top = 0xf80000000; int -driver_main(unsigned argc, const char **argv, const char **env, const j6_init_args *initp) +main(int argc, const char **argv, const char **env) { j6_status_t s; @@ -74,6 +74,7 @@ driver_main(unsigned argc, const char **argv, const char **env, const j6_init_ar if (s != j6_status_ok) return s; + const j6_init_args *initp = j6_get_init_args(); uintptr_t modules_addr = initp->args[0]; std::vector mods;