root / lab4 / .minix-src / include / libexec.h @ 13
History | View | Annotate | Download (3.09 KB)
1 | 13 | up20180614 | #ifndef _LIBEXEC_H_
|
---|---|---|---|
2 | #define _LIBEXEC_H_ 1 |
||
3 | |||
4 | #include <sys/exec_elf.h> |
||
5 | |||
6 | struct exec_info;
|
||
7 | |||
8 | typedef int (*libexec_loadfunc_t)(struct exec_info *execi, |
||
9 | off_t offset, vir_bytes vaddr, size_t len); |
||
10 | |||
11 | typedef int (*libexec_clearfunc_t)(struct exec_info *execi, |
||
12 | vir_bytes vaddr, size_t len); |
||
13 | |||
14 | typedef int (*libexec_allocfunc_t)(struct exec_info *execi, |
||
15 | vir_bytes vaddr, size_t len); |
||
16 | |||
17 | typedef int (*libexec_procclearfunc_t)(struct exec_info *execi); |
||
18 | |||
19 | typedef int (*libexec_mmap_t)(struct exec_info *execi, |
||
20 | vir_bytes vaddr, vir_bytes len, vir_bytes foffset, u16_t clearend, |
||
21 | int protflags);
|
||
22 | |||
23 | struct exec_info {
|
||
24 | /* Filled in by libexec caller */
|
||
25 | endpoint_t proc_e; /* Process endpoint */
|
||
26 | char *hdr; /* Header or full image */ |
||
27 | size_t hdr_len; /* Size of hdr */
|
||
28 | vir_bytes frame_len; /* Stack size */
|
||
29 | char progname[PROC_NAME_LEN]; /* Program name */ |
||
30 | uid_t new_uid; /* Process UID after exec */
|
||
31 | gid_t new_gid; /* Process GID after exec */
|
||
32 | int allow_setuid; /* Allow set{u,g}id execution? */ |
||
33 | vir_bytes stack_size; /* Desired stack size */
|
||
34 | vir_bytes load_offset; /* Desired load offset */
|
||
35 | vir_bytes text_size; /* Text segment size */
|
||
36 | vir_bytes data_size; /* Data segment size */
|
||
37 | off_t filesize; /* How big is the file */
|
||
38 | |||
39 | /* Callback pointers for use by libexec */
|
||
40 | libexec_loadfunc_t copymem; /* Copy callback */
|
||
41 | libexec_clearfunc_t clearmem; /* Clear callback */
|
||
42 | libexec_allocfunc_t allocmem_prealloc_cleared; /* Alloc callback */
|
||
43 | libexec_allocfunc_t allocmem_prealloc_junk; /* Alloc callback */
|
||
44 | libexec_allocfunc_t allocmem_ondemand; /* Alloc callback */
|
||
45 | libexec_procclearfunc_t clearproc; /* Clear process callback */
|
||
46 | libexec_mmap_t memmap; /* mmap callback */
|
||
47 | void *opaque; /* Callback data */ |
||
48 | |||
49 | /* Filled in by libexec load function */
|
||
50 | vir_bytes load_base; /* Where executable is loaded */
|
||
51 | vir_bytes pc; /* Entry point of exec file */
|
||
52 | vir_bytes stack_high; /* High stack addr */
|
||
53 | }; |
||
54 | |||
55 | int elf_has_interpreter(char *exec_hdr, size_t hdr_len, char *interp, |
||
56 | size_t maxsz); |
||
57 | int elf_phdr(char *exec_hdr, size_t hdr_len, vir_bytes *phdr); |
||
58 | |||
59 | int libexec_pm_newexec(endpoint_t proc_e, struct exec_info *execi); |
||
60 | |||
61 | typedef int (*libexec_exec_loadfunc_t)(struct exec_info *execi); |
||
62 | int libexec_load_elf(struct exec_info *execi); |
||
63 | |||
64 | /* Default callbacks for kernel. */
|
||
65 | int libexec_copy_memcpy(struct exec_info *execi, off_t offset, vir_bytes vaddr, size_t len); |
||
66 | int libexec_clear_memset(struct exec_info *execi, vir_bytes vaddr, size_t len); |
||
67 | |||
68 | /* Default callbacks. */
|
||
69 | int libexec_alloc_mmap_prealloc_cleared(struct exec_info *execi, vir_bytes vaddr, size_t len); |
||
70 | int libexec_alloc_mmap_prealloc_junk(struct exec_info *execi, vir_bytes vaddr, size_t len); |
||
71 | int libexec_alloc_mmap_ondemand(struct exec_info *execi, vir_bytes vaddr, size_t len); |
||
72 | int libexec_clearproc_vm_procctl(struct exec_info *execi); |
||
73 | int libexec_clear_sys_memset(struct exec_info *execi, vir_bytes vaddr, size_t len); |
||
74 | |||
75 | #endif /* !_LIBEXEC_H_ */ |