Home | History | Annotate | Download | only in sys
      1 /*
      2  * exec.h
      3  *
      4  *  Created on: Aug 14, 2008
      5  *      Author: Stefan Bucur <stefanb (at) 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