root / lab4 / .minix-src / include / libexec.h @ 13
History | View | Annotate | Download (3.09 KB)
1 |
#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_ */ |