libk  stop.fn.c at [ef45f6d08e]

File mod/kcore/stop.fn.c artifact 62a3920f4e part of check-in ef45f6d08e


/* kcore/stop.fn.c - kstop()
 * ~ lexi hale <lexi@hale.su>
 * this file defines a function that prematurely exits from
 * a running libk program with an appropriate exit status. */

#include <k/core.h>
#include <k/def.h> // so we know what system this is
#include <k/type.h>
#ifdef KFenv_posix
#	define KFplatform_define_types
#	define KFplatform_define_constants
#	include <posix.h>
#endif

/* this manual redefinition is necessary to stop gcc
 * bitching that kstop returns, which it def does not */
noreturn extern struct k_platform_syscall_answer
k_platform_syscall(enum k_platform_syscall call, u8 valency, 
		k_platform_syscall_arg args[]);

noreturn void kstop(stat_long code) {
#	ifdef KFenv_posix
		k_platform_syscall_arg exit_code[] = { code };
		k_platform_syscall(k_platform_syscall_exit, 1, exit_code);
#	else
		Knoimpl(kstop)
#	endif
}