Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / utils / mono-mmap.h
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