1 /* 2 * exec.h 3 * 4 * Created on: Aug 14, 2008 5 * Author: Stefan Bucur <stefanb@zytor.com> 6 */ 7 8 #ifndef EXEC_H_ 9 #define EXEC_H_ 10 11 #include <sys/module.h> 12 #include <stdlib.h> 13 14 /** 15 * EXEC_ROOT_NAME - The name of the ELF module associated with the COM32 module. 16 * 17 * This is a shallow ELF module, that contains only the symbol table for 18 * the code and data sections of the loaded COM32 root module. 19 */ 20 #define EXEC_ROOT_NAME "_root_.c32" 21 22 /** 23 * spawn_load - Load a library module or executes an executable one 24 * @name the name of the library/executable to use, including the extension 25 * (e.g. 'sort.c32') 26 * @argc: the number of string arguments in @argv 27 * @argv: a NULL-terminated vector of string arguments, starting with 28 * the program name. 29 * 30 * This procedure in essence loads takes the name of a module and checks to see what 31 * kind of module it is ( executable or library ), after which is performs the 32 * appropriate action, either spawning or simply loading the module into memory. 33 */ 34 extern int spawn_load(const char *name, int argc, char **argv); 35 36 /** 37 * spawnv - Executes a program in the current environment. 38 * @name: the name of the program to spawn, including the extension 39 * (e.g. 'hello.c32') 40 * @argv: a NULL-terminated vector of string arguments, starting with 41 * the program name. 42 * 43 * A program is an ELF module that contains a main routine. A program is 44 * loaded into memory, executed, then unloaded, thus remaining in memory only 45 * while the main() function is executing. A program also defines a 46 * memory allocation context, and a simple garbage collection mechanism 47 * it thus provided. This is done by internally associating with the program 48 * module each pointer returned by malloc(). After the program finishes 49 * its execution, all the unallocated memory pertaining to the program 50 * is automatically cleaned up. 51 * 52 * Note that this association takes place both for the allocations happening 53 * directly in the program, or indirectly through a library function. Libraries 54 * do not create allocation contexts, thus each allocation they made belong 55 * to the innermost calling program. 56 */ 57 extern int spawnv(const char *name, const char **argv); 58 59 /** 60 * spawnl - Executes a program in the current environment. 61 * @name: the name of the program to spawn, including the extension 62 * (e.g. 'hello.c32') 63 * @arg: the first argument (argv[0]) to be passed to the main function 64 * of the program 65 * @...: optional subsequent arguments that are passed o the main function 66 * of the program 67 * 68 * This is another version of the spawn routine. Please see 'spawnv' for 69 * a full presentation. 70 */ 71 extern int spawnl(const char *name, const char *arg, ...); 72 73 /** 74 * exec_term - Releases the resources of the execution environment. 75 */ 76 extern void exec_term(void); 77 78 79 #endif /* EXEC_H_ */ 80