home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 4 / hacker04 / 04_HACK04.ISO / darwin / darwinx86.iso / usr / include / mach / shared_memory_server.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-09-30  |  5.4 KB  |  205 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.  *
  24.  *    File: kern/shared_memory_server.h
  25.  *
  26.  *     protos and struct definitions for shared library
  27.  *    server and interface
  28.  */
  29. #ifndef _SHARED_MEMORY_SERVER_H_
  30. #define _SHARED_MEMORY_SERVER_H_
  31.  
  32. #define    SHARED_LIBRARY_SERVER_SUPPORTED
  33. #define GLOBAL_SHARED_TEXT_SEGMENT 0x70000000
  34. #define GLOBAL_SHARED_DATA_SEGMENT 0x80000000
  35. #define GLOBAL_SHARED_SEGMENT_MASK 0xF0000000
  36.  
  37. #define        SHARED_TEXT_REGION_SIZE 0x10000000
  38. #define        SHARED_DATA_REGION_SIZE 0x10000000
  39. #define        SHARED_ALTERNATE_LOAD_BASE 0x9000000
  40.  
  41. /* 
  42.  *  Note: the two masks below are useful because the assumption is 
  43.  *  made that these shared regions will always be mapped on natural boundaries 
  44.  *  i.e. if the size is 0x10000000 the object can be mapped at 
  45.  *  0x20000000, or 0x30000000, but not 0x1000000
  46.  */
  47. #define        SHARED_TEXT_REGION_MASK 0xFFFFFFF
  48. #define        SHARED_DATA_REGION_MASK 0xFFFFFFF
  49.  
  50.  
  51. #include <mach/vm_prot.h>
  52. #ifndef MACH_KERNEL
  53. #include <mach/mach.h>
  54. #else
  55. #include <vm/vm_map.h>
  56. #endif
  57.  
  58. #ifdef MACH_KERNEL_PRIVATE
  59.  
  60. #include <kern/queue.h>
  61. #include <vm/vm_object.h>
  62. #include <vm/memory_object.h>
  63.  
  64. extern ipc_port_t      shared_text_region_handle;
  65. extern ipc_port_t      shared_data_region_handle;
  66. #else /* MACH_KERNEL_PRIVATE */
  67.  
  68. #endif /* MACH_KERNEL_PRIVATE*/
  69.  
  70.  
  71.  
  72. #define SHARED_LIB_ALIAS  0x10
  73.  
  74.  
  75. /* flags field aliases for copyin_shared_file and load_shared_file */
  76.  
  77. /* IN */
  78. #define ALTERNATE_LOAD_SITE 0x1
  79. #define NEW_LOCAL_SHARED_REGIONS 0x2
  80.  
  81. /* OUT */
  82. #define SF_PREV_LOADED    0x1
  83.  
  84.  
  85. #define load_file_hash(file_object, size) \
  86.         ((((natural_t)file_object) & 0xffffff) % size)
  87.  
  88. #define VM_PROT_COW  0x8  /* must not interfere with normal prot assignments */
  89. #define VM_PROT_ZF  0x10  /* must not interfere with normal prot assignments */
  90.  
  91. struct sf_mapping {
  92.     vm_offset_t    mapping_offset;
  93.     vm_size_t    size;
  94.     vm_offset_t    file_offset;
  95.     vm_prot_t    protection;  /* read/write/execute/COW/ZF */
  96.     vm_offset_t    cksum;
  97. };
  98.  
  99. typedef struct sf_mapping sf_mapping_t;
  100.  
  101.  
  102. #ifdef MACH_KERNEL_PRIVATE
  103.  
  104. struct loaded_mapping {
  105.     vm_offset_t    mapping_offset;
  106.     vm_size_t    size;
  107.     vm_offset_t    file_offset;
  108.     vm_prot_t    protection;  /* read/write/execute/COW/ZF */
  109.     
  110.     struct loaded_mapping *next;
  111. };
  112.  
  113. typedef struct loaded_mapping loaded_mapping_t;
  114.  
  115. struct load_struct {
  116.     queue_chain_t       links;  
  117.     shared_region_mapping_t    regions_instance;
  118.     int            depth;
  119.     int            file_object;
  120.     vm_offset_t        base_address;
  121.     int            mapping_cnt;
  122.     loaded_mapping_t    *mappings;
  123. };
  124.  
  125. #endif /* MACH_KERNEL_PRIVATE */
  126.  
  127. typedef struct load_struct load_struct_t;
  128. typedef struct load_struct *load_struct_ptr_t;
  129.  
  130. #ifdef MACH_KERNEL_PRIVATE
  131.  
  132. struct load_file_ele {
  133.     union {
  134.         sf_mapping_t    mapping;
  135.         load_struct_t    element;
  136.     } u;
  137. };
  138.  
  139. struct shared_file_info {
  140.     mutex_t            lock;   /* lock for the structure */
  141.     queue_head_t    *hash;  /* for later perf enhance */
  142.     int        hash_size;
  143.     boolean_t    hash_init;
  144. };
  145.  
  146. typedef struct shared_file_info shared_file_info_t;
  147.  
  148. extern kern_return_t                                   
  149. copyin_shared_file(
  150.         vm_offset_t     mapped_file,
  151.         vm_size_t       mapped_file_size,
  152.         vm_offset_t     *base_address,
  153.         int             map_cnt,
  154.         sf_mapping_t    *mappings,
  155.         memory_object_control_t        file_control,
  156.     shared_region_task_mappings_t    shared_region,
  157.         int             *flags);
  158.  
  159. extern kern_return_t           
  160. shared_file_init(               
  161.         ipc_port_t      *shared_text_region_handle,
  162.         vm_size_t       text_region_size,
  163.         ipc_port_t      *shared_data_region_handle,
  164.         vm_size_t       data_region_size, 
  165.         vm_offset_t     *shared_file_mapping_array);
  166.  
  167. extern load_struct_t  *
  168. lsf_hash_lookup(   
  169.         queue_head_t            *hash_table,
  170.         void                *file_object,  
  171.         int                 size,
  172.     boolean_t            alternate,
  173.     shared_region_task_mappings_t    sm_info);
  174.  
  175. extern load_struct_t *
  176. lsf_hash_delete(
  177.         void                    *file_object,
  178.     vm_offset_t            base_offset,
  179.     shared_region_task_mappings_t    sm_info);
  180.  
  181. extern void    
  182. lsf_hash_insert(
  183.         load_struct_t   *entry,
  184.     shared_region_task_mappings_t    sm_info);
  185.  
  186. extern kern_return_t                   
  187. lsf_load(
  188.         vm_offset_t             mapped_file,
  189.         vm_size_t                  mapped_file_size,
  190.         vm_offset_t                *base_address,
  191.         sf_mapping_t               *mappings,
  192.         int                        map_cnt,
  193.         void                       *file_object,
  194.         int                       flags,
  195.     shared_region_task_mappings_t    sm_info);
  196.  
  197. extern void
  198. lsf_unload(
  199.         void                 *file_object,
  200.     vm_offset_t            base_offset,
  201.     shared_region_task_mappings_t    sm_info);
  202.  
  203. #endif /* MACH_KERNEL_PRIVATE */
  204. #endif /* _SHARED_MEMORY_SERVER_H_ */
  205.