Add code manager callbacks so JIT can track memory chunk ranges and register stack...
[mono.git] / mono / utils / mono-codeman.h
1 #ifndef __MONO_CODEMAN_H__
2 #define __MONO_CODEMAN_H__
3
4 #include <mono/utils/mono-publib.h>
5
6 typedef struct _MonoCodeManager MonoCodeManager;
7
8 typedef struct {
9         void (*chunk_new) (void *chunk, int size);
10         void (*chunk_destroy) (void *chunk);
11 } MonoCodeManagerCallbacks;
12
13 MONO_API MonoCodeManager* mono_code_manager_new     (void);
14 MONO_API MonoCodeManager* mono_code_manager_new_dynamic (void);
15 MONO_API void             mono_code_manager_destroy (MonoCodeManager *cman);
16 MONO_API void             mono_code_manager_invalidate (MonoCodeManager *cman);
17 MONO_API void             mono_code_manager_set_read_only (MonoCodeManager *cman);
18
19 MONO_API void*            mono_code_manager_reserve_align (MonoCodeManager *cman, int size, int alignment);
20
21 MONO_API void*            mono_code_manager_reserve (MonoCodeManager *cman, int size);
22 MONO_API void             mono_code_manager_commit  (MonoCodeManager *cman, void *data, int size, int newsize);
23 MONO_API int              mono_code_manager_size    (MonoCodeManager *cman, int *used_size);
24 MONO_API void             mono_code_manager_init (void);
25 MONO_API void             mono_code_manager_cleanup (void);
26 MONO_API void             mono_code_manager_install_callbacks (MonoCodeManagerCallbacks* callbacks);
27
28 /* find the extra block allocated to resolve branches close to code */
29 typedef int    (*MonoCodeManagerFunc)      (void *data, int csize, int size, void *user_data);
30 void            mono_code_manager_foreach  (MonoCodeManager *cman, MonoCodeManagerFunc func, void *user_data);
31
32 #endif /* __MONO_CODEMAN_H__ */
33