URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
[/] [or1k/] [tags/] [alpha/] [newlib/] [libgloss/] [i960/] [crt0.c] - Rev 1765
Compare with Previous | Blame | View Log
extern int main(int argc, char **argv, char **envp); extern int brk (void *value); extern char bss_start; extern char end; char *__env[1] = {0}; char **environ = __env; #define ENABLE_TRACE_MASK 1 __inline static void enable_tracing (void) { register int mask = ENABLE_TRACE_MASK; __asm__ volatile ("modpc %0,%0,%0" : : "d" (mask)); } #define STACK_ALIGN 64 __inline static void * set_stack (void* ptr) { ptr = (((int)ptr & (STACK_ALIGN-1))==0) ? (void*)((int)ptr & (~(STACK_ALIGN-1))) : (void*)((int)ptr & (~(STACK_ALIGN-1)))+STACK_ALIGN; __asm__ volatile ("mov %0,sp" : : "d" (ptr)); __asm__ volatile ("mov %0,fp" : : "d" (ptr)); return ptr; } __inline static void init_Cregs (void) { /* set register values gcc like */ register unsigned int mask0=0x3b001000; register unsigned int mask1=0x00009107; __asm__ volatile ("mov %0,g14" : /* no output */ : "I" (0)); /* gnu structure pointer */ __asm__ volatile ("modac %1,%0,%0" : /* no output */ : "d" (mask0), "d" (mask1)); /* fpu control kb */ } void _start(void) { void *stack; char *p; enable_tracing (); stack = set_stack (&end + 4096); init_Cregs (); brk (stack); /* clear bss */ memset (&bss_start, 0, &end - &bss_start); main(0, 0, 0); _exit(0); }