diff --git a/game/kernel/klink.cpp b/game/kernel/klink.cpp index 2c4ceb662e..bdba8968e4 100644 --- a/game/kernel/klink.cpp +++ b/game/kernel/klink.cpp @@ -833,8 +833,10 @@ Ptr link_and_exec(Ptr data, /*! * Wrapper so this can be called from GOAL. Not in original game. */ -u64 link_and_exec_wrapper(u64 data, u64 name, s64 size, u64 heap, u64 flags) { - return link_and_exec(Ptr(data), Ptr(name).c(), size, Ptr(heap), flags) +u64 link_and_exec_wrapper(u64* args) { + // data, name, size, heap, flags + return link_and_exec(Ptr(args[0]), Ptr(args[1]).c(), args[2], Ptr(args[3]), + args[4]) .offset; } @@ -843,13 +845,10 @@ u64 link_and_exec_wrapper(u64 data, u64 name, s64 size, u64 heap, u64 flags) { * 47 -> output_load, output_true, execute, 8, force fast * 39 -> no 8 (s7) */ -uint64_t link_begin(uint64_t object_data, - uint64_t name, - int32_t size, - uint64_t heap, - uint32_t flags) { - saved_link_control.begin(Ptr(object_data), Ptr(name).c(), size, Ptr(heap), - flags); +uint64_t link_begin(u64* args) { + // object data, name size, heap flags + saved_link_control.begin(Ptr(args[0]), Ptr(args[1]).c(), args[2], + Ptr(args[3]), args[4]); auto work_result = saved_link_control.work(); // if we managed to finish in one shot, take care of calling finish if (work_result) { diff --git a/game/kernel/klink.h b/game/kernel/klink.h index d337d15966..001a83d887 100644 --- a/game/kernel/klink.h +++ b/game/kernel/klink.h @@ -6,9 +6,6 @@ * DONE! */ -#ifndef JAK_KLINK_H -#define JAK_KLINK_H - #include "Ptr.h" #include "kmalloc.h" #include "common/link_types.h" @@ -94,7 +91,7 @@ struct ObjectFileHeader { void klink_init_globals(); -u64 link_and_exec_wrapper(u64 data, u64 name, s64 size, u64 heap, u64 flags); +u64 link_and_exec_wrapper(u64* args); Ptr link_and_exec(Ptr data, const char* name, @@ -102,15 +99,9 @@ Ptr link_and_exec(Ptr data, Ptr heap, uint32_t flags); -uint64_t link_begin(uint64_t object_data, - uint64_t name, - int32_t size, - uint64_t heap, - uint32_t flags); +uint64_t link_begin(u64* args); uint64_t link_resume(); void ultimate_memcpy(void* dst, void* src, uint32_t size); extern link_control saved_link_control; - -#endif // JAK_KLINK_H diff --git a/game/kernel/kscheme.cpp b/game/kernel/kscheme.cpp index a4f45d98aa..b6084d79a4 100644 --- a/game/kernel/kscheme.cpp +++ b/game/kernel/kscheme.cpp @@ -1927,7 +1927,7 @@ s32 InitHeapAndSymbol() { make_function_symbol_from_c("method-set!", (void*)method_set); // dgo - make_function_symbol_from_c("link", (void*)link_and_exec_wrapper); + make_stack_arg_function_symbol_from_c("link", (void*)link_and_exec_wrapper); make_function_symbol_from_c("dgo-load", (void*)load_and_link_dgo); // forward declare @@ -1937,7 +1937,7 @@ s32 InitHeapAndSymbol() { make_raw_function_symbol_from_c("symlink3", 0); // game stuff - make_function_symbol_from_c("link-begin", (void*)link_begin); + make_stack_arg_function_symbol_from_c("link-begin", (void*)link_begin); make_function_symbol_from_c("link-resume", (void*)link_resume); // make_function_symbol_from_c("mc-run", &CKernel::not_yet_implemented); // make_function_symbol_from_c("mc-format", &CKernel::not_yet_implemented);