9fd1fc9917577c93ee75caad2d58513e296fbcb0
[akaros.git] / lib / entry.S
1 #include <inc/mmu.h>
2 #include <inc/memlayout.h>
3
4 .data
5
6
7 // Define the global symbols 'envs', 'pages', 'vpt', and 'vpd'
8 // so that they can be used in C as if they were ordinary global arrays.
9         .globl envs
10         .set envs, UENVS
11         .globl pages
12         .set pages, UPAGES
13         .globl vpt
14         .set vpt, UVPT
15         .globl vpd
16         .set vpd, (UVPT+(UVPT>>12)*4)
17
18
19 // Entrypoint - this is where the kernel (or our parent environment)
20 // starts us running when we are initially loaded into a new environment.
21 .text
22 .globl _start
23 _start:
24         // See if we were started with arguments on the stack
25         cmpl $USTACKTOP, %esp
26         jne args_exist
27
28         // If not, push dummy argc/argv arguments.
29         // This happens when we are loaded by the kernel,
30         // because the kernel does not know about passing arguments.
31         pushl $0
32         pushl $0
33
34 args_exist:
35         call libmain
36 1:      jmp 1b
37