Async error handling
[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 syscall_desc_pool_t syscall_desc_pool;
13 async_desc_pool_t async_desc_pool;
14 // This is meant to be PER USER THREAD!!! (TODO (benh))
15 async_desc_t* current_async_desc;
16
17 void
18 libmain(int argc, char **argv)
19 {
20         // set env to point at our env structure in envs[].
21         // TODO: for now, the kernel just copies our env struct to the beginning of
22         // procinfo.  When we figure out what we want there, change this.
23         env = (env_t*)procinfo;
24
25         // Set up the front ring for the general syscall ring
26         FRONT_RING_INIT(&sysfrontring, (syscall_sring_t*)procdata, PGSIZE);
27         POOL_INIT(&syscall_desc_pool, MAX_SYSCALLS);
28         POOL_INIT(&async_desc_pool, MAX_ASYNCCALLS);
29
30         // save the name of the program so that panic() can use it
31         if (argc > 0)
32                 binaryname = argv[0];
33
34         // call user main routine
35         umain(argc, argv);
36
37         // exit gracefully
38         exit();
39 }