]> git.saurik.com Git - apple/xnu.git/blame - osfmk/vm/vm_shared_memory_server.h
xnu-517.12.7.tar.gz
[apple/xnu.git] / osfmk / vm / vm_shared_memory_server.h
CommitLineData
9bccf70c
A
1/*
2 * Copyright (c) 2002,2000 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
e5568f75
A
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.
9bccf70c 11 *
e5568f75
A
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
9bccf70c
A
14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
e5568f75
A
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.
9bccf70c
A
19 *
20 * @APPLE_LICENSE_HEADER_END@
21 */
22/*
23 *
24 * File: vm/vm_shared_memory_server.h
25 *
26 * protos and struct definitions for shared library
27 * server and interface
28 */
29
30#ifndef _VM_SHARED_MEMORY_SERVER_H_
31#define _VM_SHARED_MEMORY_SERVER_H_
32
33#include <sys/appleapiopts.h>
34
35#ifdef __APPLE_API_PRIVATE
36
37#include <mach/vm_prot.h>
38#include <mach/mach_types.h>
39#include <mach/shared_memory_server.h>
40
41#include <kern/kern_types.h>
42
43extern mach_port_t shared_text_region_handle;
44extern mach_port_t shared_data_region_handle;
45
46struct shared_region_task_mappings {
47 mach_port_t text_region;
48 vm_size_t text_size;
49 mach_port_t data_region;
50 vm_size_t data_size;
51 vm_offset_t region_mappings;
52 vm_offset_t client_base;
53 vm_offset_t alternate_base;
54 vm_offset_t alternate_next;
55e303ae
A
55 unsigned int fs_base;
56 unsigned int system;
9bccf70c
A
57 int flags;
58 vm_offset_t self;
59};
60
55e303ae
A
61#define SHARED_REGION_SYSTEM 0x1 // Default env for system and fs_root
62#define SHARED_REGION_FULL 0x2 // Shared regions are full
63#define SHARED_REGION_STALE 0x4 // Indicates no longer in default list
64
65
66/* defines for default environment, and co-resident systems */
67
68#define ENV_DEFAULT_ROOT 0
9bccf70c
A
69
70typedef struct shared_region_task_mappings *shared_region_task_mappings_t;
71typedef struct shared_region_mapping *shared_region_mapping_t;
72
73
74#ifdef MACH_KERNEL_PRIVATE
75
76#include <kern/queue.h>
77#include <vm/vm_object.h>
78#include <vm/memory_object.h>
79
80extern vm_offset_t shared_file_mapping_array;
81
82struct loaded_mapping {
83 vm_offset_t mapping_offset;
84 vm_size_t size;
85 vm_offset_t file_offset;
86 vm_prot_t protection; /* read/write/execute/COW/ZF */
87
88 struct loaded_mapping *next;
89};
90
91typedef struct loaded_mapping loaded_mapping_t;
92
93struct load_struct {
94 queue_chain_t links;
95 shared_region_mapping_t regions_instance;
96 int depth;
97 int file_object;
98 vm_offset_t base_address;
99 int mapping_cnt;
100 loaded_mapping_t *mappings;
55e303ae 101 vm_offset_t file_offset; // start of file we mapped in
9bccf70c
A
102};
103
104typedef struct load_struct load_struct_t;
105typedef struct load_struct *load_struct_ptr_t;
106
107struct load_file_ele {
108 union {
109 sf_mapping_t mapping;
110 load_struct_t element;
111 } u;
112};
113
114struct shared_file_info {
115 mutex_t lock; /* lock for the structure */
116 queue_head_t *hash; /* for later perf enhance */
117 int hash_size;
118 boolean_t hash_init;
119};
120
121typedef struct shared_file_info shared_file_info_t;
122
123struct shared_region_object_chain {
124 shared_region_mapping_t object_chain_region;
125 int depth;
126 struct shared_region_object_chain *next;
127};
128typedef struct shared_region_object_chain *shared_region_object_chain_t;
129
130/* address space shared region descriptor */
131struct shared_region_mapping {
132 decl_mutex_data(, Lock) /* Synchronization */
133 int ref_count;
55e303ae
A
134 unsigned int fs_base;
135 unsigned int system;
9bccf70c
A
136 mach_port_t text_region;
137 vm_size_t text_size;
138 mach_port_t data_region;
139 vm_size_t data_size;
140 vm_offset_t region_mappings;
141 vm_offset_t client_base;
142 vm_offset_t alternate_base;
143 vm_offset_t alternate_next;
144 int flags;
145 int depth;
55e303ae 146 shared_region_mapping_t default_env_list;
9bccf70c
A
147 shared_region_object_chain_t object_chain;
148 shared_region_mapping_t self;
149 shared_region_mapping_t next;
150};
151
152#define shared_region_mapping_lock_init(object) \
153 mutex_init(&(object)->Lock, ETAP_VM_OBJ)
154#define shared_region_mapping_lock(object) mutex_lock(&(object)->Lock)
155#define shared_region_mapping_unlock(object) mutex_unlock(&(object)->Lock)
156
157#else /* !MACH_KERNEL_PRIVATE */
158
159struct shared_region_mapping ;
160
161#endif /* MACH_KERNEL_PRIVATE */
162
163extern kern_return_t copyin_shared_file(
164 vm_offset_t mapped_file,
165 vm_size_t mapped_file_size,
166 vm_offset_t *base_address,
167 int map_cnt,
168 sf_mapping_t *mappings,
169 memory_object_control_t file_control,
170 shared_region_task_mappings_t shared_region,
171 int *flags);
172
173extern kern_return_t shared_region_mapping_info(
174 shared_region_mapping_t shared_region,
175 mach_port_t *text_region,
176 vm_size_t *text_size,
177 mach_port_t *data_region,
178 vm_size_t *data_size,
179 vm_offset_t *region_mappings,
180 vm_offset_t *client_base,
181 vm_offset_t *alternate_base,
182 vm_offset_t *alternate_next,
55e303ae
A
183 unsigned int *fs_base,
184 unsigned int *system,
9bccf70c
A
185 int *flags,
186 shared_region_mapping_t *next);
187
188extern kern_return_t shared_region_mapping_create(
189 mach_port_t text_region,
190 vm_size_t text_size,
191 mach_port_t data_region,
192 vm_size_t data_size,
193 vm_offset_t region_mappings,
194 vm_offset_t client_base,
195 shared_region_mapping_t *shared_region,
196 vm_offset_t alt_base,
197 vm_offset_t alt_next);
198
199extern kern_return_t shared_region_mapping_ref(
200 shared_region_mapping_t shared_region);
201
202extern kern_return_t shared_region_mapping_dealloc(
203 shared_region_mapping_t shared_region);
204
55e303ae
A
205__private_extern__ kern_return_t shared_region_mapping_dealloc_lock(
206 shared_region_mapping_t shared_region,
207 int need_lock);
208
9bccf70c
A
209extern kern_return_t shared_region_object_chain_attach(
210 shared_region_mapping_t target_region,
211 shared_region_mapping_t object_chain);
212
213extern kern_return_t vm_get_shared_region(
214 task_t task,
215 shared_region_mapping_t *shared_region);
216
217extern kern_return_t vm_set_shared_region(
218 task_t task,
219 shared_region_mapping_t shared_region);
220
55e303ae
A
221extern shared_region_mapping_t update_default_shared_region(
222 shared_region_mapping_t new_system_region);
223
224extern shared_region_mapping_t lookup_default_shared_region(
225 unsigned int fs_base,
226 unsigned int system);
227
228extern void remove_default_shared_region(
229 shared_region_mapping_t system_region);
230
231__private_extern__ void remove_default_shared_region_lock(
232 shared_region_mapping_t system_region,
233 int need_lock);
234
9bccf70c
A
235extern unsigned int lsf_mapping_pool_gauge();
236
237#endif /* __APPLE_API_PRIVATE */
238
239#endif /* _VM_SHARED_MEMORY_SERVER_H_ */