libc/newlib/libc/sys/z8ksim/crt0.c

59 lines
844 B
C

extern char _start_bss;
extern char _end_bss;
extern int main(int argc, char **argv, char **environ);
void __main();
static void
enter()
{
#if defined(__Z8002__)
__main();
#endif
exit(main(0,0,0));
}
start()
{
char *p;
#if defined(__Z8002__)
asm("ld r15,#__stack_top");
asm("ld r10,r15");
#endif
#if defined(__Z8001__)
asm("ldl rr14,#__stack_top");
asm("ldl rr10,rr14");
#endif
/* zero bss */
p = &_start_bss;
while (p < & _end_bss)
{
*p++ = 0;
}
enter();
}
#if defined(__Z8002__)
void __do_global_ctors ()
{
typedef void (*pfunc)();
extern pfunc __ctors[];
extern pfunc __ctors_end[];
pfunc *p;
for (p = __ctors_end; p > __ctors; )
{
(*--p)();
}
}
void __main()
{
static int initialized;
if (! initialized)
{
initialized = 1;
__do_global_ctors ();
}
}
#endif