Root/
Source at commit 1547 created 12 years 10 months ago. By blackosx, Added UseKernelCache boot option to svn | |
---|---|
1 | /*␊ |
2 | * Copyright (c) 2000-2006 Apple Computer, Inc. All rights reserved.␊ |
3 | *␊ |
4 | * @APPLE_OSREFERENCE_LICENSE_HEADER_START@␊ |
5 | * ␊ |
6 | * This file contains Original Code and/or Modifications of Original Code␊ |
7 | * as defined in and that are subject to the Apple Public Source License␊ |
8 | * Version 2.0 (the 'License'). You may not use this file except in␊ |
9 | * compliance with the License. The rights granted to you under the License␊ |
10 | * may not be used to create, or enable the creation or redistribution of,␊ |
11 | * unlawful or unlicensed copies of an Apple operating system, or to␊ |
12 | * circumvent, violate, or enable the circumvention or violation of, any␊ |
13 | * terms of an Apple operating system software license agreement.␊ |
14 | * ␊ |
15 | * Please obtain a copy of the License at␊ |
16 | * http://www.opensource.apple.com/apsl/ and read it before using this file.␊ |
17 | * ␊ |
18 | * The Original Code and all software distributed under the License are␊ |
19 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER␊ |
20 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,␊ |
21 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,␊ |
22 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.␊ |
23 | * Please see the License for the specific language governing rights and␊ |
24 | * limitations under the License.␊ |
25 | * ␊ |
26 | * @APPLE_OSREFERENCE_LICENSE_HEADER_END@␊ |
27 | */␊ |
28 | /*␊ |
29 | * @OSF_COPYRIGHT@␊ |
30 | */␊ |
31 | /*␊ |
32 | *␉File:␉mach/vm_region.h␊ |
33 | *␊ |
34 | *␉Define the attributes of a task's memory region␊ |
35 | *␊ |
36 | */␊ |
37 | ␊ |
38 | #ifndef␉_MACH_VM_REGION_H_␊ |
39 | #define _MACH_VM_REGION_H_␊ |
40 | ␊ |
41 | #include <mach/boolean.h>␊ |
42 | #include <mach/vm_prot.h>␊ |
43 | #include <mach/vm_inherit.h>␊ |
44 | #include <mach/vm_behavior.h>␊ |
45 | #include <mach/vm_types.h>␊ |
46 | #include <mach/message.h>␊ |
47 | #include <mach/machine/vm_param.h>␊ |
48 | #include <mach/machine/vm_types.h>␊ |
49 | #include <mach/memory_object_types.h>␊ |
50 | ␊ |
51 | #include <sys/cdefs.h>␊ |
52 | ␊ |
53 | #pragma pack(4)␊ |
54 | ␊ |
55 | // LP64todo: all the current tools are 32bit, obviously never worked for 64b␊ |
56 | // so probably should be a real 32b ID vs. ptr.␊ |
57 | // Current users just check for equality␊ |
58 | typedef uint32_t vm32_object_id_t;␊ |
59 | ␊ |
60 | /*␊ |
61 | *␉Types defined:␊ |
62 | *␊ |
63 | *␉vm_region_info_t␉memory region attributes␊ |
64 | */␊ |
65 | ␊ |
66 | #define VM_REGION_INFO_MAX (1024)␊ |
67 | typedef int␉*vm_region_info_t;␊ |
68 | typedef int␉*vm_region_info_64_t;␊ |
69 | typedef int␉*vm_region_recurse_info_t;␊ |
70 | typedef int␉*vm_region_recurse_info_64_t;␊ |
71 | typedef int␉ vm_region_flavor_t;␊ |
72 | typedef int␉ vm_region_info_data_t[VM_REGION_INFO_MAX];␊ |
73 | ␊ |
74 | #define VM_REGION_BASIC_INFO_64␉␉9␊ |
75 | struct vm_region_basic_info_64 {␊ |
76 | ␉vm_prot_t␉␉protection;␊ |
77 | ␉vm_prot_t␉␉max_protection;␊ |
78 | ␉vm_inherit_t␉␉inheritance;␊ |
79 | ␉boolean_t␉␉shared;␊ |
80 | ␉boolean_t␉␉reserved;␊ |
81 | ␉memory_object_offset_t␉offset;␊ |
82 | ␉vm_behavior_t␉␉behavior;␊ |
83 | ␉unsigned short␉␉user_wired_count;␊ |
84 | };␊ |
85 | typedef struct vm_region_basic_info_64␉␉*vm_region_basic_info_64_t;␊ |
86 | typedef struct vm_region_basic_info_64␉␉ vm_region_basic_info_data_64_t;␊ |
87 | ␊ |
88 | #define VM_REGION_BASIC_INFO_COUNT_64␉((mach_msg_type_number_t) \␊ |
89 | ␉(sizeof(vm_region_basic_info_data_64_t)/sizeof(int)))␊ |
90 | ␊ |
91 | /*␊ |
92 | * Passing VM_REGION_BASIC_INFO to vm_region_64␊ |
93 | * automatically converts it to a VM_REGION_BASIC_INFO_64.␊ |
94 | * Please use that explicitly instead.␊ |
95 | */␊ |
96 | #define VM_REGION_BASIC_INFO␉␉10␊ |
97 | ␊ |
98 | /*␊ |
99 | * This is the legacy basic info structure. It is␊ |
100 | * deprecated because it passes only a 32-bit memory object␊ |
101 | * offset back - too small for many larger objects (e.g. files).␊ |
102 | */␊ |
103 | struct vm_region_basic_info {␊ |
104 | ␉vm_prot_t␉␉protection;␊ |
105 | ␉vm_prot_t␉␉max_protection;␊ |
106 | ␉vm_inherit_t␉␉inheritance;␊ |
107 | ␉boolean_t␉␉shared;␊ |
108 | ␉boolean_t␉␉reserved;␊ |
109 | ␉uint32_t␉␉offset; /* too small for a real offset */␊ |
110 | ␉vm_behavior_t␉␉behavior;␊ |
111 | ␉unsigned short␉␉user_wired_count;␊ |
112 | };␊ |
113 | ␊ |
114 | typedef struct vm_region_basic_info␉␉*vm_region_basic_info_t;␊ |
115 | typedef struct vm_region_basic_info␉␉ vm_region_basic_info_data_t;␊ |
116 | ␊ |
117 | #define VM_REGION_BASIC_INFO_COUNT ((mach_msg_type_number_t) \␊ |
118 | ␉(sizeof(vm_region_basic_info_data_t)/sizeof(int)))␊ |
119 | ␊ |
120 | #define VM_REGION_EXTENDED_INFO␉11␊ |
121 | ␊ |
122 | #define SM_COW 1␊ |
123 | #define SM_PRIVATE 2␊ |
124 | #define SM_EMPTY 3␊ |
125 | #define SM_SHARED 4␊ |
126 | #define SM_TRUESHARED 5␊ |
127 | #define SM_PRIVATE_ALIASED 6␊ |
128 | #define SM_SHARED_ALIASED 7␊ |
129 | ␊ |
130 | /* ␊ |
131 | * For submap info, the SM flags above are overlayed when a submap␊ |
132 | * is encountered. The field denotes whether or not machine level mapping␊ |
133 | * information is being shared. PTE's etc. When such sharing is taking␊ |
134 | * place the value returned is SM_TRUESHARED otherwise SM_PRIVATE is passed␊ |
135 | * back.␊ |
136 | */␊ |
137 | ␊ |
138 | struct vm_region_extended_info {␊ |
139 | ␉vm_prot_t␉␉protection;␊ |
140 | unsigned int user_tag;␊ |
141 | unsigned int pages_resident;␊ |
142 | unsigned int pages_shared_now_private;␊ |
143 | unsigned int pages_swapped_out;␊ |
144 | unsigned int pages_dirtied;␊ |
145 | unsigned int ref_count;␊ |
146 | unsigned short shadow_depth;␊ |
147 | unsigned char external_pager;␊ |
148 | unsigned char share_mode;␊ |
149 | };␊ |
150 | ␊ |
151 | typedef struct vm_region_extended_info␉␉*vm_region_extended_info_t;␊ |
152 | typedef struct vm_region_extended_info␉␉ vm_region_extended_info_data_t;␊ |
153 | ␊ |
154 | #define VM_REGION_EXTENDED_INFO_COUNT␉((mach_msg_type_number_t) \␊ |
155 | ␉(sizeof(vm_region_extended_info_data_t)/sizeof(int)))␊ |
156 | ␊ |
157 | ␊ |
158 | #define VM_REGION_TOP_INFO␉12␊ |
159 | ␊ |
160 | struct vm_region_top_info {␊ |
161 | unsigned int obj_id;␊ |
162 | unsigned int ref_count;␊ |
163 | unsigned int private_pages_resident;␊ |
164 | unsigned int shared_pages_resident;␊ |
165 | unsigned char share_mode;␊ |
166 | };␊ |
167 | ␊ |
168 | typedef struct vm_region_top_info␉␉*vm_region_top_info_t;␊ |
169 | typedef struct vm_region_top_info␉␉ vm_region_top_info_data_t;␊ |
170 | ␊ |
171 | #define VM_REGION_TOP_INFO_COUNT ((mach_msg_type_number_t) \␊ |
172 | ␉(sizeof(vm_region_top_info_data_t)/sizeof(int)))␊ |
173 | ␊ |
174 | ␊ |
175 | ␊ |
176 | /* ␊ |
177 | * vm_region_submap_info will return information on a submap or object.␊ |
178 | * The user supplies a nesting level on the call. When a walk of the␊ |
179 | * user's map is done and a submap is encountered, the nesting count is␊ |
180 | * checked. If the nesting count is greater than 1 the submap is entered and␊ |
181 | * the offset relative to the address in the base map is examined. If the␊ |
182 | * nesting count is zero, the information on the submap is returned.␊ |
183 | * The caller may thus learn about a submap and its contents by judicious␊ |
184 | * choice of the base map address and nesting count. The nesting count␊ |
185 | * allows penetration of recursively mapped submaps. If a submap is␊ |
186 | * encountered as a mapped entry of another submap, the caller may bump␊ |
187 | * the nesting count and call vm_region_recurse again on the target address␊ |
188 | * range. The "is_submap" field tells the caller whether or not a submap␊ |
189 | * has been encountered.␊ |
190 | *␊ |
191 | * Object only fields are filled in through a walking of the object shadow␊ |
192 | * chain (where one is present), and a walking of the resident page queue.␊ |
193 | * ␊ |
194 | */␊ |
195 | ␊ |
196 | struct vm_region_submap_info {␊ |
197 | ␉vm_prot_t␉␉protection; /* present access protection */␊ |
198 | ␉vm_prot_t␉␉max_protection; /* max avail through vm_prot */␊ |
199 | ␉vm_inherit_t␉␉inheritance;/* behavior of map/obj on fork */␊ |
200 | ␉uint32_t␉␉offset;␉␉/* offset into object/map */␊ |
201 | unsigned int user_tag;␉/* user tag on map entry */␊ |
202 | unsigned int pages_resident;␉/* only valid for objects */␊ |
203 | unsigned int pages_shared_now_private; /* only for objects */␊ |
204 | unsigned int pages_swapped_out; /* only for objects */␊ |
205 | unsigned int pages_dirtied; /* only for objects */␊ |
206 | unsigned int ref_count;␉ /* obj/map mappers, etc */␊ |
207 | unsigned short shadow_depth; ␉/* only for obj */␊ |
208 | unsigned char external_pager; /* only for obj */␊ |
209 | unsigned char share_mode;␉/* see enumeration */␊ |
210 | ␉boolean_t␉␉is_submap;␉/* submap vs obj */␊ |
211 | ␉vm_behavior_t␉␉behavior;␉/* access behavior hint */␊ |
212 | ␉vm32_object_id_t␉␉object_id;␉/* obj/map name, not a handle */␊ |
213 | ␉unsigned short␉␉user_wired_count; ␊ |
214 | };␊ |
215 | ␊ |
216 | typedef struct vm_region_submap_info␉␉*vm_region_submap_info_t;␊ |
217 | typedef struct vm_region_submap_info␉␉ vm_region_submap_info_data_t;␊ |
218 | ␊ |
219 | #define VM_REGION_SUBMAP_INFO_COUNT ((mach_msg_type_number_t) \␊ |
220 | ␉(sizeof(vm_region_submap_info_data_t)/sizeof(int)))␊ |
221 | ␊ |
222 | struct vm_region_submap_info_64 {␊ |
223 | ␉vm_prot_t␉␉protection; /* present access protection */␊ |
224 | ␉vm_prot_t␉␉max_protection; /* max avail through vm_prot */␊ |
225 | ␉vm_inherit_t␉␉inheritance;/* behavior of map/obj on fork */␊ |
226 | ␉memory_object_offset_t␉offset;␉␉/* offset into object/map */␊ |
227 | unsigned int user_tag;␉/* user tag on map entry */␊ |
228 | unsigned int pages_resident;␉/* only valid for objects */␊ |
229 | unsigned int pages_shared_now_private; /* only for objects */␊ |
230 | unsigned int pages_swapped_out; /* only for objects */␊ |
231 | unsigned int pages_dirtied; /* only for objects */␊ |
232 | unsigned int ref_count;␉ /* obj/map mappers, etc */␊ |
233 | unsigned short shadow_depth; ␉/* only for obj */␊ |
234 | unsigned char external_pager; /* only for obj */␊ |
235 | unsigned char share_mode;␉/* see enumeration */␊ |
236 | ␉boolean_t␉␉is_submap;␉/* submap vs obj */␊ |
237 | ␉vm_behavior_t␉␉behavior;␉/* access behavior hint */␊ |
238 | ␉vm32_object_id_t␉␉object_id;␉/* obj/map name, not a handle */␊ |
239 | ␉unsigned short␉␉user_wired_count; ␊ |
240 | };␊ |
241 | ␊ |
242 | typedef struct vm_region_submap_info_64␉␉*vm_region_submap_info_64_t;␊ |
243 | typedef struct vm_region_submap_info_64␉␉ vm_region_submap_info_data_64_t;␊ |
244 | ␊ |
245 | #define VM_REGION_SUBMAP_INFO_COUNT_64␉␉((mach_msg_type_number_t) \␊ |
246 | ␉(sizeof(vm_region_submap_info_data_64_t)/sizeof(int)))␊ |
247 | ␊ |
248 | struct vm_region_submap_short_info_64 {␊ |
249 | ␉vm_prot_t␉␉protection; /* present access protection */␊ |
250 | ␉vm_prot_t␉␉max_protection; /* max avail through vm_prot */␊ |
251 | ␉vm_inherit_t␉␉inheritance;/* behavior of map/obj on fork */␊ |
252 | ␉memory_object_offset_t␉offset;␉␉/* offset into object/map */␊ |
253 | unsigned int user_tag;␉/* user tag on map entry */␊ |
254 | unsigned int ref_count;␉ /* obj/map mappers, etc */␊ |
255 | unsigned short shadow_depth; ␉/* only for obj */␊ |
256 | unsigned char external_pager; /* only for obj */␊ |
257 | unsigned char share_mode;␉/* see enumeration */␊ |
258 | ␉boolean_t␉␉is_submap;␉/* submap vs obj */␊ |
259 | ␉vm_behavior_t␉␉behavior;␉/* access behavior hint */␊ |
260 | ␉vm32_object_id_t␉␉object_id;␉/* obj/map name, not a handle */␊ |
261 | ␉unsigned short␉␉user_wired_count; ␊ |
262 | };␊ |
263 | ␊ |
264 | typedef struct vm_region_submap_short_info_64␉*vm_region_submap_short_info_64_t;␊ |
265 | typedef struct vm_region_submap_short_info_64␉ vm_region_submap_short_info_data_64_t;␊ |
266 | ␊ |
267 | #define VM_REGION_SUBMAP_SHORT_INFO_COUNT_64␉((mach_msg_type_number_t) \␊ |
268 | ␉(sizeof(vm_region_submap_short_info_data_64_t)/sizeof(int)))␊ |
269 | ␊ |
270 | ␊ |
271 | struct mach_vm_read_entry {␊ |
272 | ␉mach_vm_address_t address;␊ |
273 | ␉mach_vm_size_t size;␊ |
274 | };␊ |
275 | ␊ |
276 | struct vm_read_entry {␊ |
277 | ␉vm_address_t␉address;␊ |
278 | ␉vm_size_t␉size;␊ |
279 | };␊ |
280 | ␊ |
281 | #if VM32_SUPPORT␊ |
282 | struct vm32_read_entry {␊ |
283 | ␉vm32_address_t␉address;␊ |
284 | ␉vm32_size_t␉size;␊ |
285 | };␊ |
286 | #endif␊ |
287 | ␊ |
288 | ␊ |
289 | #define VM_MAP_ENTRY_MAX (256)␊ |
290 | ␊ |
291 | typedef struct mach_vm_read_entry␉mach_vm_read_entry_t[VM_MAP_ENTRY_MAX];␊ |
292 | typedef struct vm_read_entry␉␉vm_read_entry_t[VM_MAP_ENTRY_MAX];␊ |
293 | #if VM32_SUPPORT␊ |
294 | typedef struct vm32_read_entry␉␉vm32_read_entry_t[VM_MAP_ENTRY_MAX];␊ |
295 | #endif␊ |
296 | ␊ |
297 | #pragma pack()␊ |
298 | ␊ |
299 | ␊ |
300 | #define VM_PAGE_INFO_MAX ␊ |
301 | typedef int *vm_page_info_t;␊ |
302 | typedef int vm_page_info_data_t[VM_PAGE_INFO_MAX];␊ |
303 | typedef int vm_page_info_flavor_t;␊ |
304 | ␊ |
305 | #define VM_PAGE_INFO_BASIC␉␉1␊ |
306 | struct vm_page_info_basic {␊ |
307 | ␉int␉␉␉disposition;␊ |
308 | ␉int␉␉␉ref_count;␊ |
309 | ␉vm_object_id_t␉␉object_id;␊ |
310 | ␉memory_object_offset_t␉offset;␊ |
311 | ␉int␉␉␉depth;␊ |
312 | };␊ |
313 | typedef struct vm_page_info_basic␉␉*vm_page_info_basic_t;␊ |
314 | typedef struct vm_page_info_basic␉␉vm_page_info_basic_data_t;␊ |
315 | ␊ |
316 | #define VM_PAGE_INFO_BASIC_COUNT␉((mach_msg_type_number_t) \␊ |
317 | ␉(sizeof(vm_page_info_basic_data_t)/sizeof(int)))␊ |
318 | ␊ |
319 | ␊ |
320 | #endif␉/*_MACH_VM_REGION_H_*/␊ |
321 |