home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 4 / hacker04 / 04_HACK04.ISO / darwin / darwinx86.iso / usr / include / mach / boot_info.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-09-30  |  7.4 KB  |  254 lines

  1. /*
  2.  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
  3.  *
  4.  * @APPLE_LICENSE_HEADER_START@
  5.  * 
  6.  * The contents of this file constitute Original Code as defined in and
  7.  * are subject to the Apple Public Source License Version 1.1 (the
  8.  * "License").  You may not use this file except in compliance with the
  9.  * License.  Please obtain a copy of the License at
  10.  * http://www.apple.com/publicsource and read it before using this file.
  11.  * 
  12.  * This Original Code and all software distributed under the License are
  13.  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  14.  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  15.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
  16.  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
  17.  * License for the specific language governing rights and limitations
  18.  * under the License.
  19.  * 
  20.  * @APPLE_LICENSE_HEADER_END@
  21.  */
  22. /*
  23.  * @OSF_COPYRIGHT@
  24.  */
  25. /*
  26.  * HISTORY
  27.  * 
  28.  * Revision 1.1.1.1  1998/09/22 21:05:31  wsanchez
  29.  * Import of Mac OS X kernel (~semeria)
  30.  *
  31.  * Revision 1.1.1.1  1998/03/07 02:25:45  wsanchez
  32.  * Import of OSF Mach kernel (~mburg)
  33.  *
  34.  * Revision 1.2.16.4  1996/01/09  19:21:29  devrcs
  35.  *     Added bootstrap map for alpha.
  36.  *     This probably should be moved to some MD include file.
  37.  *     It's not really machine dependent, just a different
  38.  *     way of doing things.
  39.  *     [1995/12/01  19:49:04  jfraser]
  40.  *
  41.  *     Merged '64-bit safe' changes from DEC alpha port.
  42.  *     [1995/11/21  18:08:36  jfraser]
  43.  *
  44.  * Revision 1.2.16.3  1995/01/06  19:50:04  devrcs
  45.  *     mk6 CR668 - 1.3b26 merge
  46.  *     Added region_desc structure;
  47.  *     [1994/10/14  03:42:28  dwm]
  48.  * 
  49.  * Revision 1.2.16.2  1994/09/23  02:34:18  ezf
  50.  *     change marker to not FREE
  51.  *     [1994/09/22  21:39:03  ezf]
  52.  * 
  53.  * Revision 1.2.16.1  1994/06/13  20:49:19  dlb
  54.  *     Merge MK6 and NMK17
  55.  *     [1994/06/13  20:24:22  dlb]
  56.  * 
  57.  * Revision 1.2.14.1  1994/02/08  11:01:06  bernadat
  58.  *     Checked in NMK16_1 changes
  59.  *     [94/02/04            bernadat]
  60.  * 
  61.  * Revision 1.2.12.1  1993/12/23  08:56:06  bernadat
  62.  *     Added COFF_F.
  63.  *     [93/11/29            bernadat]
  64.  * 
  65.  * Revision 1.2.3.2  1993/06/24  16:14:07  gm
  66.  *     CR9371: Moved here from default_pager.
  67.  *     [1993/06/24  16:08:52  gm]
  68.  * 
  69.  * Revision 1.2.3.2  1993/06/09  02:10:53  gm
  70.  *     Added to OSF/1 R1.3 from NMK15.0.
  71.  *     [1993/06/02  20:41:54  gm]
  72.  * 
  73.  * Revision 1.2  1993/04/19  16:31:50  devrcs
  74.  *     Added ROSE support: we need several symbol table entries since ROSE
  75.  *     can have up to 3 symbol section.
  76.  *     [93/03/24            bruel]
  77.  * 
  78.  *     Use free copyright
  79.  *     [1993/03/03  12:12:37  bernadat]
  80.  * 
  81.  *     Fixed History Revision Comments
  82.  *     [93/02/24            bernadat]
  83.  * 
  84.  *     Created for external default pager.
  85.  *     [1993/02/09  15:40:42  bruel]
  86.  * 
  87.  * $EndLog$
  88.  */
  89. /* CMU_HIST */
  90. /*
  91.  * Revision 2.2  92/01/03  20:19:42  dbg
  92.  *     Created.
  93.  *     [91/09/06            dbg]
  94.  * 
  95.  */
  96. /* CMU_ENDHIST */
  97. /*
  98.  */
  99. /* 
  100.  * Mach Operating System
  101.  * Copyright (c) 1991 Carnegie Mellon University
  102.  * All Rights Reserved.
  103.  * 
  104.  * Permission to use, copy, modify and distribute this software and its
  105.  * documentation is hereby granted, provided that both the copyright
  106.  * notice and this permission notice appear in all copies of the
  107.  * software, derivative works or modified versions, and any portions
  108.  * thereof, and that both notices appear in supporting documentation.
  109.  * 
  110.  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
  111.  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
  112.  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
  113.  * 
  114.  * Carnegie Mellon requests users of this software to return to
  115.  * 
  116.  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
  117.  *  School of Computer Science
  118.  *  Carnegie Mellon University
  119.  *  Pittsburgh PA 15213-3890
  120.  * 
  121.  * any improvements or extensions that they make and grant Carnegie Mellon 
  122.  * the rights to redistribute these changes.
  123.  */
  124.  
  125. #ifndef    _MACH_BOOT_INFO_H_
  126. #define    _MACH_BOOT_INFO_H_
  127.  
  128. #include <mach/machine/vm_types.h>
  129. #include <mach/vm_prot.h>
  130. #include <mach/boolean.h>
  131.  
  132. /*
  133.  * The boot loader uses several instances of the following structure to
  134.  * provide a description of the bootstrap task virtual address space,
  135.  * consisting of memory regions that need to be mapped from physical pages
  136.  * filled by the boot loader, or regions that need to be allocated in the
  137.  * new address space.
  138.  */
  139. struct region_desc {
  140.     vm_offset_t    addr;        /* virtual address */
  141.     vm_offset_t    offset;        /* offset within object */
  142.     vm_size_t    size;        /* size */
  143.     vm_prot_t    prot;        /* protection */
  144.     boolean_t    mapped;        /* mapped or zero-filled */
  145. };
  146.  
  147. #ifdef     __alpha
  148. typedef  long physaddr_t;
  149. #define NBOOT_REGIONS    5
  150.  
  151. #define TEXT    0
  152. #define DATA    1
  153. #define BSS    2
  154. #define STACK    3
  155. #define SYMS    4
  156.  
  157. struct bootstrap_map {
  158.     physaddr_t  boot_location;
  159.     long    boot_size;
  160.     long    boot_entry;
  161.     long    boot_gp_value;
  162.     long    boot_region_count;
  163.     struct region_desc boot_regions[NBOOT_REGIONS];
  164. };
  165.  
  166. #endif     /* __alpha */
  167.  
  168. #define    BOOT_INFO_COMPAT    1
  169. #if    BOOT_INFO_COMPAT
  170. /*
  171.  * Old compat code for makeboot produced images
  172.  */
  173.  
  174. /*
  175.  * Structure of Mach kernel boot file.
  176.  */
  177. #include <mach/machine/vm_types.h>
  178.  
  179. /*
  180.  *    A Mach kernel boot file consists of the Mach
  181.  *    kernel image and the bootstrap image, glued
  182.  *    together.
  183.  *
  184.  *    The first part of the file is a normal executable
  185.  *    (bootable) file: a.out, coff, or whatever.  The
  186.  *    text and data sizes are set to include the entire
  187.  *    file.  (Some machines do not allow a zero-length
  188.  *    data segment).
  189.  *
  190.  *    The rest of the file sits where the kernel BSS
  191.  *    should be.  A boot_info record describes the
  192.  *    sizes of the next 3 sections.  Following this
  193.  *    are the kernel symbol table, the bootstrap image
  194.  *    (including its symbol table), and the loader
  195.  *    information for the bootstrap image.  Each
  196.  *    of these sections is padded to an integer (4-byte)
  197.  *    boundary.
  198.  *
  199.  *    When the file is loaded into memory, the kernel
  200.  *    text and data segments are at their normal locations.
  201.  *
  202.  *    The boot_info structure appears at the start of
  203.  *    the bss (at 'edata[]'):
  204.  */
  205.  
  206. struct boot_info {
  207.     vm_size_t    sym_size;        /* size of kernel symbols */
  208.     vm_size_t    boot_size;        /* size of bootstrap image */
  209.     vm_size_t    load_info_size;        /* size of loader information
  210.                            for bootstrap image */
  211. };
  212.  
  213. /*
  214.  *    The 3 sections must be moved out of BSS for the kernel to run:
  215.  *
  216.  *    The kernel symbol table follows the BSS (at 'end[]').
  217.  *
  218.  *    The bootstrap image is on the first page boundary (machine page
  219.  *    size) following the kernel symbol table.
  220.  *
  221.  *    The loader information immediately follows the bootstrap image.
  222.  */
  223.  
  224. /*
  225.  *    Loader information for bootstrap image:
  226.  */
  227.  
  228. #define AOUT_F 1
  229. #define ROSE_F 2
  230. #define COFF_F 3
  231.  
  232. struct loader_info {
  233.     int         format;         /* symbol table format (A.OUT or ROSE) */  
  234.     vm_offset_t    text_start;    /* text start in memory */
  235.     vm_size_t    text_size;    /* text size */
  236.     vm_offset_t    text_offset;    /* text offset in file */
  237.     vm_offset_t    data_start;    /* data+bss start in memory */
  238.     vm_size_t    data_size;    /* data size */
  239.     vm_offset_t    data_offset;    /* data offset in file */
  240.     vm_size_t    bss_size;    /* BSS size */
  241.     vm_offset_t str_offset;     /* strings table offset in file */
  242.     vm_size_t   str_size;       /* strings table size */
  243.     vm_offset_t    sym_offset[4];    /* symbol table offset in file */
  244.     vm_size_t    sym_size[4];    /* symbol table size */
  245.     vm_offset_t    entry_1;    /* 2 words for entry address */
  246.     vm_offset_t    entry_2;
  247. } ;
  248.  
  249. #define    EX_NOT_EXECUTABLE    6000
  250.  
  251. #endif    /* BOOT_INFO_COMPAT */
  252.  
  253. #endif    /* _MACH_BOOT_INFO_H_ */
  254.