933fa51311ab5e1ba7c2fccbfe148f363a85b34f
[akaros.git] / lib / libmain.c
1 // Called from entry.S to get us going.
2 // entry.S already took care of defining envs, pages, vpd, and vpt.
3
4 #include <inc/lib.h>
5 #include <inc/syscall.h>
6
7 extern void umain(int argc, char **argv);
8
9 volatile env_t *env;
10 char *binaryname = "(PROGRAM NAME UNKNOWN)";
11 syscall_front_ring_t sysfrontring;
12
13 void
14 libmain(int argc, char **argv)
15 {
16         // set env to point at our env structure in envs[].
17         // TODO: for now, the kernel just copies our env struct to the beginning of
18         // procinfo.  When we figure out what we want there, change this.
19         env = (env_t*)procinfo;
20
21         // Set up the front ring for the general syscall ring
22         FRONT_RING_INIT(&sysfrontring, (syscall_sring_t*)procdata, PGSIZE);     
23
24         // save the name of the program so that panic() can use it
25         if (argc > 0)
26                 binaryname = argv[0];
27
28         // call user main routine
29         umain(argc, argv);
30
31         // exit gracefully
32         exit();
33 }