My Kernel v0.1.0
execfmt.h
1
20#ifndef KERNEL_EXECFMT_H
21#define KERNEL_EXECFMT_H
22
23#include <kernel/error.h>
24#include <kernel/types.h>
25
26#include <libalgo/linked_list.h>
27
28#define EXECFMT_ARGS_BUFFER_SIZE (4 * PAGE_SIZE)
29#define EXECFMT_MAX_ARGS 8192 /* Max number of arguments */
30#define EXECFMT_MAX_ARG_SIZE (PAGE_SIZE) /* Max size of a single arg */
31
32struct executable;
33struct file;
34
36struct execfmt {
37 node_t this;
38 const char *name;
39 bool (*match)(const void *);
41 error_t (*load)(struct executable *, void *);
43};
44
51struct executable {
52 void (*entrypoint)(void*);
53};
54
64 const char *exec_path;
65 char *const *argv;
66 size_t argc;
67 char *const *envp;
68 size_t envpc;
69};
70
72error_t execfmt_register(struct execfmt *);
73
81error_t execfmt_execute(struct exec_params *);
82
83#endif /* KERNEL_EXECFMT_H */
84
error_t execfmt_execute(struct exec_params *)
Execute a given executable file's content.
Definition: exec.c:252
error_t execfmt_register(struct execfmt *)
Register a new executable file format.
Definition: exec.c:21
Executable parameters.
Definition: execfmt.h:63
char *const * envp
Definition: execfmt.h:67
size_t argc
Definition: execfmt.h:66
char *const * argv
Definition: execfmt.h:65
size_t envpc
Definition: execfmt.h:68
An executable file format.
Definition: execfmt.h:36
error_t(* load)(struct executable *, void *)
Load an executable file in memory.
Definition: execfmt.h:41
const char * name
Format's name.
Definition: execfmt.h:38
bool(* match)(const void *)
Check whether an executable file is of the given format.
Definition: execfmt.h:39
Represents a loaded executable.
Definition: execfmt.h:51
Opened file description.
Definition: file.h:45
Intrusive doubly-linked list node.
Definition: linked_list.h:27