/* platform.syscall.fn.c
 * ~ lexi hale <lexi@hale.su>
 * this file provides a unified interface
 * to the host operating system's syscalls.
 * its function signature may vary across
 * OSes, as the details of each's syscall
 * implementation may vary drastically.
 */

#include <k/def.h>
#include <k/type.h>

#ifdef KFenv_posix
#	include <posix.h>
#else
	Knoimpl(k_platform_syscall)
#endif

volatile extern void k_platform_syscall_raw (
		volatile k_platform_syscall_return* return_slot,
		volatile k_platform_syscall_error*  error_no_slot,
		volatile enum k_platform_syscall    syscall_no,
		volatile u8                         valency,
		volatile s64*                       args);

volatile struct k_platform_syscall_answer
k_platform_syscall(volatile enum k_platform_syscall call, volatile u8 valency, volatile s64 args[]) {
	struct k_platform_syscall_answer answer;

	k_platform_syscall_raw
		(&answer.ret,
		 &answer.error,
		 call, valency, args);

	return answer;
}
