#include <stdlib.h>
#include <stdint.h>
#include "libc.h"

#if defined(STARBOARD)
#include "starboard/system.h"
#endif  // defined(STARBOARD)

#if !defined(STARBOARD)
static void dummy()
{
}

/* atexit.c and __stdio_exit.c override these. the latter is linked
 * as a consequence of linking either __toread.c or __towrite.c. */
weak_alias(dummy, __funcs_on_exit);
weak_alias(dummy, __stdio_exit);
weak_alias(dummy, _fini);

__attribute__((__weak__, __visibility__("hidden")))
extern void (*const __fini_array_start)(void), (*const __fini_array_end)(void);

static void libc_exit_fini(void)
{
	uintptr_t a = (uintptr_t)&__fini_array_end;
	for (; a>(uintptr_t)&__fini_array_start; a-=sizeof(void(*)()))
		(*(void (**)())(a-sizeof(void(*)())))();
	_fini();
}

weak_alias(libc_exit_fini, __libc_exit_fini);
#endif  // !defined(STARBOARD)

_Noreturn void exit(int code)
{
#if defined(STARBOARD)
	SbSystemBreakIntoDebugger();
#else   // !defined(STARBOARD)
	__funcs_on_exit();
	__libc_exit_fini();
	__stdio_exit();
	_Exit(code);
#endif  // defined(STARBOARD)
}
