Vcore mapping and idle core management
[akaros.git] / user / roslib / src / i386 / entry.S
1 #include <arch/mmu.h>
2 #include <ros/memlayout.h>
3
4 .section .data
5
6
7 // Define the global symbols 'procinfo', 'procdata', 'pages', 'vpt', and 'vpd'
8 // so that they can be used in C as if they were ordinary global arrays.
9 .globl procinfo
10 procinfo:
11 .long UINFO
12 .globl procdata
13 procdata:
14 .long UDATA
15 .globl vpt
16 vpt:
17 .long UVPT
18 .globl vpd
19 vpd:
20 .long (UVPT+(UVPT>>12)*4)
21
22
23 // Entrypoint - this is where the kernel (or our parent process)
24 // starts us running when we are initially created and run
25 .text
26 .globl _start
27 _start:
28         // See if we are a new core
29         cmpl $0, %eax
30         jne new_core
31
32         // See if we were started with arguments on the stack
33         cmpl $USTACKTOP, %esp
34         jne args_exist
35
36         // If not, push dummy argc/argv arguments.
37         // This happens when we are loaded by the kernel,
38         // because the kernel does not know about passing arguments.
39         pushl $0
40         pushl $0
41
42 args_exist:
43         call libmain
44 1:      jmp 1b
45
46 new_core:
47 2:              jmp 2b