Merge branch 'sparc-dev' of ssh://scm.millennium.berkeley.edu/project/cs/radlab/src...
[akaros.git] / user / parlib / src / sparc / entry.S
1 #include <arch/mmu.h>
2 #include <arch/arch.h>
3 #include <ros/memlayout.h>
4
5 .data
6
7
8 // Define the global symbols 'envs', 'pages', 'vpt', and 'vpd'
9 // so that they can be used in C as if they were ordinary global arrays.
10         .globl procinfo
11         .set procinfo, UINFO
12         .globl procdata
13         .set procdata, UDATA
14         .globl pages
15         .set pages, UPAGES
16         .globl vpt
17         .set vpt, UVPT
18         .globl vpd
19         .set vpd, (UVPT+(UVPT>>12)*4)
20
21 .align 4
22 .globl stack_ptr_array
23 stack_ptr_array:
24         .word 0
25 .globl tls_array
26 tls_array:
27         .word 0
28
29 .align 8
30 core0_tls:
31         .skip 1024*1024
32
33
34 // Entrypoint - this is where the kernel (or our parent environment)
35 // starts us running when we are initially loaded into a new environment.
36 .text
37 .globl _start
38 _start:
39         tst     %g6
40         bne     notcore0
41          nop
42
43         // Set up TLS
44         set     core0_tls,%g7
45
46         call    parlibmain
47          nop
48
49         unimp
50
51 notcore0:
52
53         // Get a stack, set %sp
54
55         set     stack_ptr_array, %l0
56         ld      [%l0], %l0
57         sll     %g6, 2, %l1
58         ld      [%l0+%l1], %l0
59         sub     %l0, 64, %sp
60
61         // Set up TLS
62         set     tls_array, %l0
63         ld      [%l0], %l0
64         ld      [%l0+%l1],%g7
65
66         call    hart_entry
67          nop
68
69         call    hart_yield
70          nop
71
72         unimp