1 /** 2 * \file 3 */ 4 5 #ifndef __MONO_UTILS_MMAP_H__ 6 #define __MONO_UTILS_MMAP_H__ 7 8 #include <glib.h> 9 #include <mono/utils/mono-publib.h> 10 11 enum { 12 /* protection */ 13 MONO_MMAP_NONE = 0, 14 MONO_MMAP_READ = 1 << 0, 15 MONO_MMAP_WRITE = 1 << 1, 16 MONO_MMAP_EXEC = 1 << 2, 17 /* make the OS discard the dirty data and fill with 0 */ 18 MONO_MMAP_DISCARD = 1 << 3, 19 /* other flags (add commit, sync) */ 20 MONO_MMAP_PRIVATE = 1 << 4, 21 MONO_MMAP_SHARED = 1 << 5, 22 MONO_MMAP_ANON = 1 << 6, 23 MONO_MMAP_FIXED = 1 << 7, 24 MONO_MMAP_32BIT = 1 << 8 25 }; 26 27 typedef enum { 28 MONO_MEM_ACCOUNT_CODE, 29 MONO_MEM_ACCOUNT_HAZARD_POINTERS, 30 MONO_MEM_ACCOUNT_DOMAIN, 31 MONO_MEM_ACCOUNT_SGEN_INTERNAL, 32 MONO_MEM_ACCOUNT_SGEN_NURSERY, 33 MONO_MEM_ACCOUNT_SGEN_LOS, 34 MONO_MEM_ACCOUNT_SGEN_MARKSWEEP, 35 MONO_MEM_ACCOUNT_SGEN_CARD_TABLE, 36 MONO_MEM_ACCOUNT_SGEN_SHADOW_CARD_TABLE, 37 MONO_MEM_ACCOUNT_SGEN_DEBUGGING, 38 MONO_MEM_ACCOUNT_SGEN_BINARY_PROTOCOL, 39 MONO_MEM_ACCOUNT_EXCEPTIONS, 40 MONO_MEM_ACCOUNT_PROFILER, 41 MONO_MEM_ACCOUNT_OTHER, 42 MONO_MEM_ACCOUNT_MAX 43 } MonoMemAccountType; 44 45 /* 46 * A simple interface to fopen/fstat/fileno 47 */ 48 typedef struct _MonoFileMap MonoFileMap; 49 50 MONO_API MonoFileMap *mono_file_map_open (const char* name); 51 MONO_API guint64 mono_file_map_size (MonoFileMap *fmap); 52 MONO_API int mono_file_map_fd (MonoFileMap *fmap); 53 MONO_API int mono_file_map_close (MonoFileMap *fmap); 54 55 MONO_API int mono_pagesize (void); 56 MONO_API int mono_valloc_granule (void); 57 MONO_API void* mono_valloc (void *addr, size_t length, int flags, MonoMemAccountType type); 58 MONO_API void* mono_valloc_aligned (size_t length, size_t alignment, int flags, MonoMemAccountType type); 59 MONO_API int mono_vfree (void *addr, size_t length, MonoMemAccountType type); 60 MONO_API void* mono_file_map (size_t length, int flags, int fd, guint64 offset, void **ret_handle); 61 MONO_API int mono_file_unmap (void *addr, void *handle); 62 #ifndef HOST_WIN32 63 MONO_API void* mono_file_map_fileio (size_t length, int flags, int fd, guint64 offset, void **ret_handle); 64 MONO_API int mono_file_unmap_fileio (void *addr, void *handle); 65 #endif 66 MONO_API int mono_mprotect (void *addr, size_t length, int flags); 67 68 MONO_API const char* mono_mem_account_type_name (MonoMemAccountType type); 69 MONO_API void mono_mem_account_register_counters (void); 70 71 MONO_API void* mono_shared_area (void); 72 MONO_API void mono_shared_area_remove (void); 73 MONO_API void* mono_shared_area_for_pid (void *pid); 74 MONO_API void mono_shared_area_unload (void *area); 75 MONO_API int mono_shared_area_instances (void **array, int count); 76 77 /* 78 * On systems where we have to load code into memory instead of mmaping 79 * we allow for the allocator to be set. This function is only 80 * defined on those platforms. 81 */ 82 typedef void *(*mono_file_map_alloc_fn) (size_t length); 83 typedef void (*mono_file_map_release_fn) (void *addr); 84 85 MONO_API void mono_file_map_set_allocator (mono_file_map_alloc_fn alloc, mono_file_map_release_fn release); 86 87 #endif /* __MONO_UTILS_MMAP_H__ */ 88 89