1 #ifndef __MONO_CODEMAN_H__
2 #define __MONO_CODEMAN_H__
4 #include <mono/utils/mono-publib.h>
6 typedef struct _MonoCodeManager MonoCodeManager;
8 MONO_API MonoCodeManager* mono_code_manager_new (void);
9 MONO_API MonoCodeManager* mono_code_manager_new_dynamic (void);
10 MONO_API void mono_code_manager_destroy (MonoCodeManager *cman);
11 MONO_API void mono_code_manager_invalidate (MonoCodeManager *cman);
12 MONO_API void mono_code_manager_set_read_only (MonoCodeManager *cman);
14 MONO_API void* mono_code_manager_reserve_align (MonoCodeManager *cman, int size, int alignment);
16 MONO_API void* mono_code_manager_reserve (MonoCodeManager *cman, int size);
17 MONO_API void mono_code_manager_commit (MonoCodeManager *cman, void *data, int size, int newsize);
18 MONO_API int mono_code_manager_size (MonoCodeManager *cman, int *used_size);
19 MONO_API void mono_code_manager_init (void);
20 MONO_API void mono_code_manager_cleanup (void);
22 /* find the extra block allocated to resolve branches close to code */
23 typedef int (*MonoCodeManagerFunc) (void *data, int csize, int size, void *user_data);
24 void mono_code_manager_foreach (MonoCodeManager *cman, MonoCodeManagerFunc func, void *user_data);
26 #if defined( __native_client_codegen__ ) && defined( __native_client__ )
29 #define kNaClBundleSize 16
31 #define kNaClBundleSize 32
33 #define kNaClBundleMask (kNaClBundleSize-1)
35 #ifndef USE_JUMP_TABLES
36 extern __thread unsigned char **patch_source_base;
37 extern __thread unsigned char **patch_dest_base;
38 extern __thread int patch_current_depth;
41 int nacl_is_code_address (void *target);
42 void* nacl_code_manager_get_code_dest (MonoCodeManager *cman, void *data);
43 void nacl_allow_target_modification (int val);
44 void* nacl_modify_patch_target (unsigned char *target);
45 void* nacl_inverse_modify_patch_target (unsigned char *target);
46 #endif /* __native_client__ */
48 #endif /* __MONO_CODEMAN_H__ */