5 #ifndef __MONO_UTILS_MMAP_H__
6 #define __MONO_UTILS_MMAP_H__
9 #include <mono/utils/mono-publib.h>
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
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
,
46 * A simple interface to fopen/fstat/fileno
48 typedef struct _MonoFileMap MonoFileMap
;
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
);
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
);
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
);
66 MONO_API
int mono_mprotect (void *addr
, size_t length
, int flags
);
68 MONO_API
const char* mono_mem_account_type_name (MonoMemAccountType type
);
69 MONO_API
void mono_mem_account_register_counters (void);
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
);
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.
82 typedef void *(*mono_file_map_alloc_fn
) (size_t length
);
83 typedef void (*mono_file_map_release_fn
) (void *addr
);
85 MONO_API
void mono_file_map_set_allocator (mono_file_map_alloc_fn alloc
, mono_file_map_release_fn release
);
87 #endif /* __MONO_UTILS_MMAP_H__ */