Multiuser, Capabilities and Access Controls (#54)
[lunaix-os.git] / lunaix-os / includes / lunaix / exec.h
1 #ifndef __LUNAIX_EXEC_H
2 #define __LUNAIX_EXEC_H
3
4 #include <lunaix/fs.h>
5 #include <lunaix/process.h>
6 #include <lunaix/types.h>
7
8 #define MAX_PARAM_LEN    1024
9 #define MAX_PARAM_SIZE   4096
10
11 #define MAX_VAR_PAGES 8
12 #define DEFAULT_HEAP_PAGES 16
13
14 struct load_context
15 {
16     struct exec_host* container;
17
18     ptr_t base;
19     ptr_t end;
20     ptr_t mem_sz;
21
22     ptr_t entry;
23 };
24
25 struct exec_arrptr
26 {
27     unsigned int len;
28     unsigned int size;
29     ptr_t raw;
30     ptr_t copied;
31 };
32
33
34 struct exec_host
35 {
36     struct proc_info* proc;
37     ptr_t vms_mnt;
38
39     struct load_context exe;
40     struct v_inode* inode;
41
42     struct exec_arrptr argv;
43     struct exec_arrptr envp;
44
45     ptr_t stack_top;
46
47     int status;
48 };
49
50 struct uexec_param
51 {
52     int argc;
53     char** argv;
54     int envc;
55     char** envp;
56 } compact;
57
58 int
59 exec_arch_prepare_entry(struct thread* thread, struct exec_host* container);
60
61 int
62 exec_load_byname(struct exec_host* container, const char* filename);
63
64 int
65 exec_load(struct exec_host* container, struct v_file* executable);
66
67 int
68 exec_kexecve(const char* filename, const char* argv[], const char* envp[]);
69
70 void
71 exec_init_container(struct exec_host* param,
72                     struct thread* thread,
73                     ptr_t vms,
74                     const char** argv,
75                     const char** envp);
76
77 #endif /* __LUNAIX_LOADER_H */