#ifdef __cplusplus
extern "C" {
#endif

extern void _init();
extern void _fini();
extern void main();

static void _csu_init();
void start()
{
	_init();
	_csu_init();

	main();

	_fini();

	//exit();

	while(1);
}

extern void (*__init_array_start []) ();
extern void (*__init_array_end[]) ();
static void _csu_init()
{
	const unsigned int size = __init_array_end - __init_array_start;
	for(unsigned int i = 0; i != size; ++i)
	{
		(*__init_array_start[i])();
	}
}

//additional C++ stuff
void __cxa_pure_virtual()
{
	//pure virtual error
}

int __cxa_atexit(void (*func) (void *), void * arg, void * dso_handle)
{
	(void)func;
	(void)arg;
	(void)dso_handle;

	return 0;
}

#ifdef __cplusplus
}
#endif

void operator delete(void *ptr)
{
	(void) ptr;
}

