Annotation of Gnu-Mach/include/mach/exec/exec.h, revision 1.1.1.1

1.1       root        1: /* 
                      2:  * Mach Operating System
                      3:  * Copyright (c) 1991,1990,1989,1988 Carnegie Mellon University
                      4:  * All Rights Reserved.
                      5:  * 
                      6:  * Permission to use, copy, modify and distribute this software and its
                      7:  * documentation is hereby granted, provided that both the copyright
                      8:  * notice and this permission notice appear in all copies of the
                      9:  * software, derivative works or modified versions, and any portions
                     10:  * thereof, and that both notices appear in supporting documentation.
                     11:  * 
                     12:  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS 
                     13:  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
                     14:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
                     15:  * 
                     16:  * Carnegie Mellon requests users of this software to return to
                     17:  * 
                     18:  *  Software Distribution Coordinator  or  [email protected]
                     19:  *  School of Computer Science
                     20:  *  Carnegie Mellon University
                     21:  *  Pittsburgh PA 15213-3890
                     22:  * 
                     23:  * any improvements or extensions that they make and grant Carnegie the
                     24:  * rights to redistribute these changes.
                     25:  */
                     26: 
                     27: #ifndef        _MACH_EXEC_H_
                     28: #define        _MACH_EXEC_H_
                     29: 
                     30: #include <mach/machine/vm_types.h>
                     31: #include <mach/vm_prot.h>
                     32: 
                     33: /* XXX */
                     34: typedef enum
                     35: {
                     36:        EXEC_ELF        = 1,
                     37:        EXEC_AOUT       = 2,
                     38: } exec_format_t;
                     39: 
                     40: typedef struct exec_info
                     41: {
                     42:        /* Format of executable loaded - see above.  */
                     43:        exec_format_t format;
                     44: 
                     45:        /* Program entrypoint.  */
                     46:        vm_offset_t entry;
                     47: 
                     48:        /* Initial data pointer - only some architectures use this.  */
                     49:        vm_offset_t init_dp;
                     50: 
                     51:        /* (ELF) Address of interpreter string for loading shared libraries, null if none.  */
                     52:        vm_offset_t interp;
                     53: 
                     54: } exec_info_t;
                     55: 
                     56: typedef int exec_sectype_t;
                     57: #define EXEC_SECTYPE_READ              VM_PROT_READ
                     58: #define EXEC_SECTYPE_WRITE             VM_PROT_WRITE
                     59: #define EXEC_SECTYPE_EXECUTE           VM_PROT_EXECUTE
                     60: #define EXEC_SECTYPE_PROT_MASK         VM_PROT_ALL
                     61: #define EXEC_SECTYPE_ALLOC             ((exec_sectype_t)0x000100)
                     62: #define EXEC_SECTYPE_LOAD              ((exec_sectype_t)0x000200)
                     63: #define EXEC_SECTYPE_DEBUG             ((exec_sectype_t)0x010000)
                     64: #define EXEC_SECTYPE_AOUT_SYMTAB       ((exec_sectype_t)0x020000)
                     65: #define EXEC_SECTYPE_AOUT_STRTAB       ((exec_sectype_t)0x040000)
                     66: 
                     67: typedef int exec_read_func_t(void *handle, vm_offset_t file_ofs,
                     68:                             void *buf, vm_size_t size,
                     69:                             vm_size_t *out_actual);
                     70: 
                     71: typedef int exec_read_exec_func_t(void *handle,
                     72:                                  vm_offset_t file_ofs, vm_size_t file_size,
                     73:                                  vm_offset_t mem_addr, vm_size_t mem_size,
                     74:                                  exec_sectype_t section_type);
                     75: 
                     76: /*
                     77:  * Routines exported from libmach_exec.a
                     78:  */
                     79: 
                     80: /* Generic function to interpret an executable "file"
                     81:    and "load" it into "memory".
                     82:    Doesn't really know about files, loading, or memory;
                     83:    all file I/O and destination memory accesses
                     84:    go through provided functions.
                     85:    Thus, this is a very generic loading mechanism.
                     86: 
                     87:    The read() function is used to read metadata from the file
                     88:    into the local address space.
                     89: 
                     90:    The read_exec() function is used to load the actual sections.
                     91:    It is used for all kinds of sections - code, data, bss, debugging data.
                     92:    The 'section_type' parameter specifies what type of section is being loaded.
                     93: 
                     94:    For code, data, and bss, the EXEC_SECTYPE_ALLOC flag will be set.
                     95:    For code and data (i.e. stuff that's actually loaded from the file),
                     96:    EXEC_SECTYPE_LOAD will also be set.
                     97:    The EXEC_SECTYPE_PROT_MASK contains the intended access permissions
                     98:    for the section.
                     99:    'file_size' may be less than 'mem_size';
                    100:    the remaining data must be zero-filled.
                    101:    'mem_size' is always greater than zero, but 'file_size' may be zero
                    102:    (e.g. in the case of a bss section).
                    103:    No two read_exec() calls for one executable
                    104:    will load data into the same virtual memory page,
                    105:    although they may load from arbitrary (possibly overlapping) file positions.
                    106: 
                    107:    For sections that aren't normally loaded into the process image
                    108:    (e.g. debug sections), EXEC_SECTYPE_ALLOC isn't set,
                    109:    but some other appropriate flag is set to indicate the type of section.
                    110: 
                    111:    The 'handle' is an opaque pointer which is simply passed on
                    112:    to the read() and read_exec() functions.
                    113: 
                    114:    On return, the specified info structure is filled in
                    115:    with information about the loaded executable.
                    116: */
                    117: int exec_load(exec_read_func_t *read, exec_read_exec_func_t *read_exec,
                    118:              void *handle, exec_info_t *out_info);
                    119: 
                    120: /*
                    121:  * Error codes
                    122:  */
                    123: 
                    124: #define        EX_NOT_EXECUTABLE       6000    /* not a recognized executable format */
                    125: #define        EX_WRONG_ARCH           6001    /* valid executable, but wrong arch. */
                    126: #define EX_CORRUPT             6002    /* recognized executable, but mangled */
                    127: #define EX_BAD_LAYOUT          6003    /* something wrong with the memory or file image layout */
                    128: 
                    129: 
                    130: #endif /* _MACH_EXEC_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.