|
|
1.1 ! root 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: #include <mach/vm_prot.h> ! 33: ! 34: #ifdef MACH_KERNEL_PRIVATE ! 35: ! 36: #include <kern/queue.h> ! 37: #include <vm/vm_object.h> ! 38: ! 39: extern ipc_port_t shared_text_region_handle; ! 40: extern ipc_port_t shared_data_region_handle; ! 41: #else /* MACH_KERNEL_PRIVATE */ ! 42: ! 43: #ifdef KERNEL_PRIVATE ! 44: extern mach_port_t shared_text_region_handle; ! 45: extern mach_port_t shared_data_region_handle; ! 46: #endif ! 47: #endif /* MACH_KERNEL_PRIVATE*/ ! 48: ! 49: #ifdef KERNEL_PRIVATE ! 50: extern vm_offset_t shared_file_mapping_array; ! 51: #endif ! 52: ! 53: ! 54: #define SHARED_LIB_ALIAS 0x10 ! 55: ! 56: ! 57: /* flags field aliases for copyin_shared_file and load_shared_file */ ! 58: ! 59: /* IN */ ! 60: #define ALTERNATE_LOAD_SITE 0x1 ! 61: ! 62: /* OUT */ ! 63: #define SF_PREV_LOADED 0x1 ! 64: ! 65: ! 66: #define load_file_hash(file_object, size) \ ! 67: ((((natural_t)file_object) & 0xffffff) % size) ! 68: ! 69: #define VM_PROT_COW 0x8 /* must not interfere with normal prot assignments */ ! 70: ! 71: struct sf_mapping { ! 72: vm_offset_t mapping_offset; ! 73: vm_size_t size; ! 74: vm_offset_t file_offset; ! 75: vm_prot_t protection; /* read/write/execute/COW */ ! 76: ! 77: struct sf_mapping *next; ! 78: }; ! 79: ! 80: typedef struct sf_mapping sf_mapping_t; ! 81: ! 82: #ifdef MACH_KERNEL_PRIVATE ! 83: ! 84: struct load_struct { ! 85: queue_chain_t links; ! 86: int file_object; ! 87: vm_offset_t base_address; ! 88: int mapping_cnt; ! 89: sf_mapping_t *mappings; ! 90: }; ! 91: ! 92: #endif /* MACH_KERNEL_PRIVATE */ ! 93: ! 94: typedef struct load_struct load_struct_t; ! 95: typedef struct load_struct *load_struct_ptr_t; ! 96: ! 97: #ifdef MACH_KERNEL_PRIVATE ! 98: ! 99: struct load_file_ele { ! 100: union { ! 101: sf_mapping_t mapping; ! 102: load_struct_t element; ! 103: } u; ! 104: }; ! 105: ! 106: struct shared_file_info { ! 107: mutex_t lock; /* lock for the structure */ ! 108: queue_head_t *hash; /* for later perf enhance */ ! 109: int hash_size; ! 110: boolean_t hash_init; ! 111: }; ! 112: ! 113: typedef struct shared_file_info shared_file_info_t; ! 114: ! 115: extern kern_return_t ! 116: copyin_shared_file( ! 117: vm_offset_t mapped_file, ! 118: vm_size_t mapped_file_size, ! 119: vm_offset_t *base_address, ! 120: int map_cnt, ! 121: sf_mapping_t *mappings, ! 122: vm_object_t file_object, ! 123: int *flags); ! 124: ! 125: extern kern_return_t ! 126: shared_file_init( ! 127: ipc_port_t *shared_text_region_handle, ! 128: vm_size_t text_region_size, ! 129: ipc_port_t *shared_data_region_handle, ! 130: vm_size_t data_region_size, ! 131: vm_offset_t *shared_file_mapping_array); ! 132: ! 133: extern load_struct_t * ! 134: lsf_hash_lookup( ! 135: queue_head_t *hash_table, ! 136: void *file_object, ! 137: int size, ! 138: boolean_t alternate); ! 139: ! 140: extern load_struct_t * ! 141: lsf_hash_delete( ! 142: void *file_object); ! 143: ! 144: extern void ! 145: lsf_hash_insert( ! 146: load_struct_t *entry); ! 147: ! 148: extern kern_return_t ! 149: lsf_load( ! 150: vm_offset_t mapped_file, ! 151: vm_size_t mapped_file_size, ! 152: vm_offset_t *base_address, ! 153: sf_mapping_t *mappings, ! 154: int map_cnt, ! 155: void *file_object, ! 156: int flags); ! 157: ! 158: extern void ! 159: lsf_unload( ! 160: void *file_object); ! 161: ! 162: #endif /* MACH_KERNEL_PRIVATE */ ! 163: #endif /* _SHARED_MEMORY_SERVER_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.