X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Futils%2Fmono-codeman.h;h=1507348b0b5c957ce149510a28465cf2b9b0d9a5;hb=6f76efaedfbbd4be65d20073b7389c59111cf7d8;hp=83c2a5e14f810f4f7ca0efb3b74e3066861228a8;hpb=b7c17c47e6b3c02192e64175cb5ee0ce7f7dda1b;p=mono.git diff --git a/mono/utils/mono-codeman.h b/mono/utils/mono-codeman.h index 83c2a5e14f8..1507348b0b5 100644 --- a/mono/utils/mono-codeman.h +++ b/mono/utils/mono-codeman.h @@ -4,16 +4,36 @@ typedef struct _MonoCodeManager MonoCodeManager; MonoCodeManager* mono_code_manager_new (void); +MonoCodeManager* mono_code_manager_new_dynamic (void); void mono_code_manager_destroy (MonoCodeManager *cman); void mono_code_manager_invalidate (MonoCodeManager *cman); +void mono_code_manager_set_read_only (MonoCodeManager *cman); + +void* mono_code_manager_reserve_align (MonoCodeManager *cman, int size, int alignment); void* mono_code_manager_reserve (MonoCodeManager *cman, int size); void mono_code_manager_commit (MonoCodeManager *cman, void *data, int size, int newsize); +int mono_code_manager_size (MonoCodeManager *cman, int *used_size); /* find the extra block allocated to resolve branches close to code */ typedef int (*MonoCodeManagerFunc) (void *data, int csize, int size, void *user_data); void mono_code_manager_foreach (MonoCodeManager *cman, MonoCodeManagerFunc func, void *user_data); +#if defined( __native_client_codegen__ ) && defined( __native_client__ ) + +#define kNaClBundleSize 32 +#define kNaClBundleMask (kNaClBundleSize-1) + +extern __thread unsigned char **patch_source_base; +extern __thread unsigned char **patch_dest_base; +extern __thread int patch_current_depth; + +int nacl_is_code_address (void *target); +void* nacl_code_manager_get_code_dest (MonoCodeManager *cman, void *data); +void nacl_allow_target_modification (int val); +void* nacl_modify_patch_target (unsigned char *target); +void* nacl_inverse_modify_patch_target (unsigned char *target); +#endif /* __native_client__ */ #endif /* __MONO_CODEMAN_H__ */