OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib/] [libgloss/] [i960/] [crt0.c] - Blame information for rev 1778

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 39 lampret
extern int main(int argc, char **argv, char **envp);
2
extern int brk (void *value);
3
 
4
extern char bss_start;
5
extern char end;
6
 
7
char *__env[1] = {0};
8
char **environ = __env;
9
 
10
#define ENABLE_TRACE_MASK 1
11
 
12
__inline static void
13
enable_tracing (void)
14
{
15
    register int mask = ENABLE_TRACE_MASK;
16
    __asm__ volatile ("modpc %0,%0,%0"
17
                      :
18
                      : "d" (mask));
19
}
20
 
21
#define STACK_ALIGN 64
22
 
23 56 joel
__inline static void
24 39 lampret
set_stack (void* ptr)
25
{
26 56 joel
    ptr = (void *)(((int)ptr + STACK_ALIGN - 1) & ~(STACK_ALIGN - 1));
27
    /* SP must be 64 bytes larger than FP at start.  */
28 39 lampret
    __asm__ volatile ("mov %0,sp"
29
                      :
30 56 joel
                      : "d" (ptr+STACK_ALIGN));
31 39 lampret
    __asm__ volatile ("mov %0,fp"
32
                      :
33
                      : "d" (ptr));
34
}
35
 
36
__inline static void
37
init_Cregs (void)
38
{
39
    /* set register values gcc like */
40
    register unsigned int mask0=0x3b001000;
41
    register unsigned int mask1=0x00009107;
42
    __asm__ volatile ("mov   %0,g14"
43
                      :                      /* no output */
44
                      : "I" (0));            /* gnu structure pointer */
45
    __asm__ volatile ("modac %1,%0,%0"
46
                      :                      /* no output */
47
                      : "d" (mask0),
48
                        "d" (mask1));        /* fpu control kb */
49
}
50
 
51
void
52
_start(void)
53
{
54
  char *p;
55
 
56
  enable_tracing ();
57 56 joel
  set_stack (&end);
58 39 lampret
  init_Cregs ();
59 56 joel
  /* The stack grows upwards, so this makes the heap start after a 256K
60
     stack area.  PlumHall known to fail with less than 73K of stack.  */
61
  brk (&end+0x40000);
62 39 lampret
  /* clear bss */
63
  memset (&bss_start, 0, &end - &bss_start);
64
  main(0, 0, 0);
65 56 joel
  exit(0);
66 39 lampret
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.