2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
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.
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
20 * @APPLE_LICENSE_HEADER_END@
24 * File: kern/shared_memory_server.h
26 * protos and struct definitions for shared library
27 * server and interface
29 #ifndef _SHARED_MEMORY_SERVER_H_
30 #define _SHARED_MEMORY_SERVER_H_
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
37 #define SHARED_TEXT_REGION_SIZE 0x10000000
38 #define SHARED_DATA_REGION_SIZE 0x10000000
39 #define SHARED_ALTERNATE_LOAD_BASE 0x9000000
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
47 #define SHARED_TEXT_REGION_MASK 0xFFFFFFF
48 #define SHARED_DATA_REGION_MASK 0xFFFFFFF
51 #include <mach/vm_prot.h>
53 #include <mach/mach.h>
55 #include <vm/vm_map.h>
58 #ifdef MACH_KERNEL_PRIVATE
60 #include <kern/queue.h>
61 #include <vm/vm_object.h>
62 #include <vm/memory_object.h>
64 extern ipc_port_t shared_text_region_handle
;
65 extern ipc_port_t shared_data_region_handle
;
66 #else /* MACH_KERNEL_PRIVATE */
69 extern mach_port_t shared_text_region_handle
;
70 extern mach_port_t shared_data_region_handle
;
72 #endif /* MACH_KERNEL_PRIVATE*/
76 extern vm_offset_t shared_file_mapping_array
;
79 struct shared_region_task_mappings
{
80 ipc_port_t text_region
;
82 ipc_port_t data_region
;
84 vm_offset_t region_mappings
;
85 vm_offset_t client_base
;
86 vm_offset_t alternate_base
;
87 vm_offset_t alternate_next
;
92 #define SHARED_REGION_SYSTEM 0x1
93 #define SHARED_REGION_FULL 0x2
95 typedef struct shared_region_task_mappings
*shared_region_task_mappings_t
;
96 #endif /* KERNEL_PRIVATE */
99 #define SHARED_LIB_ALIAS 0x10
102 /* flags field aliases for copyin_shared_file and load_shared_file */
105 #define ALTERNATE_LOAD_SITE 0x1
106 #define NEW_LOCAL_SHARED_REGIONS 0x2
109 #define SF_PREV_LOADED 0x1
112 #define load_file_hash(file_object, size) \
113 ((((natural_t)file_object) & 0xffffff) % size)
115 #define VM_PROT_COW 0x8 /* must not interfere with normal prot assignments */
116 #define VM_PROT_ZF 0x10 /* must not interfere with normal prot assignments */
119 vm_offset_t mapping_offset
;
121 vm_offset_t file_offset
;
122 vm_prot_t protection
; /* read/write/execute/COW/ZF */
126 typedef struct sf_mapping sf_mapping_t
;
129 #ifdef MACH_KERNEL_PRIVATE
131 struct loaded_mapping
{
132 vm_offset_t mapping_offset
;
134 vm_offset_t file_offset
;
135 vm_prot_t protection
; /* read/write/execute/COW/ZF */
137 struct loaded_mapping
*next
;
140 typedef struct loaded_mapping loaded_mapping_t
;
144 shared_region_mapping_t regions_instance
;
147 vm_offset_t base_address
;
149 loaded_mapping_t
*mappings
;
152 #endif /* MACH_KERNEL_PRIVATE */
154 typedef struct load_struct load_struct_t
;
155 typedef struct load_struct
*load_struct_ptr_t
;
157 #ifdef MACH_KERNEL_PRIVATE
159 struct load_file_ele
{
161 sf_mapping_t mapping
;
162 load_struct_t element
;
166 struct shared_file_info
{
167 mutex_t lock
; /* lock for the structure */
168 queue_head_t
*hash
; /* for later perf enhance */
173 typedef struct shared_file_info shared_file_info_t
;
177 vm_offset_t mapped_file
,
178 vm_size_t mapped_file_size
,
179 vm_offset_t
*base_address
,
181 sf_mapping_t
*mappings
,
182 memory_object_control_t file_control
,
183 shared_region_task_mappings_t shared_region
,
188 ipc_port_t
*shared_text_region_handle
,
189 vm_size_t text_region_size
,
190 ipc_port_t
*shared_data_region_handle
,
191 vm_size_t data_region_size
,
192 vm_offset_t
*shared_file_mapping_array
);
194 extern load_struct_t
*
196 queue_head_t
*hash_table
,
200 shared_region_task_mappings_t sm_info
);
202 extern load_struct_t
*
205 vm_offset_t base_offset
,
206 shared_region_task_mappings_t sm_info
);
210 load_struct_t
*entry
,
211 shared_region_task_mappings_t sm_info
);
215 vm_offset_t mapped_file
,
216 vm_size_t mapped_file_size
,
217 vm_offset_t
*base_address
,
218 sf_mapping_t
*mappings
,
222 shared_region_task_mappings_t sm_info
);
227 vm_offset_t base_offset
,
228 shared_region_task_mappings_t sm_info
);
230 #endif /* MACH_KERNEL_PRIVATE */
231 #endif /* _SHARED_MEMORY_SERVER_H_ */