/* lini.fn.c - kmlini() - initiate a linear segment
* ~ lexi hale <lexi@hale.su>
* this function is the initiator function for the
* linear memory store. it simply returns the current
* heap position by invoking the brk syscall with the
* value `0`. (note that the brk syscall and the libc
* wrapper have different behavior.) */
#include <k/mem.h>
#include <k/def.h>
#ifdef KFenv_posix
# include <posix.h>
#endif
/* returns void* instead of kmres because kmlini has
* no failure state */
void* kmlini(void) {
k_platform_syscall_arg zero = 0;
/* brk adjusts the heap break then returns the new
* break. by passing zero, we can get retrieve the
* current heap break. */
struct k_platform_syscall_answer a = k_platform_syscall
(k_platform_syscall_brk, 1, &zero);
/* no point in checking for errors, since none can
* actually occur; just return the kernel's answer. */
return (void*)a.ret;
}