Merge pull request #1337 from RyanMelenaNoesis/master
[mono.git] / mono / utils / mono-codeman.h
index 1507348b0b5c957ce149510a28465cf2b9b0d9a5..17d53b3b0328ab81161646b1e4fade010c367af2 100644 (file)
@@ -1,19 +1,23 @@
 #ifndef __MONO_CODEMAN_H__
 #define __MONO_CODEMAN_H__
 
+#include <mono/utils/mono-publib.h>
+
 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);
+MONO_API MonoCodeManager* mono_code_manager_new     (void);
+MONO_API MonoCodeManager* mono_code_manager_new_dynamic (void);
+MONO_API void             mono_code_manager_destroy (MonoCodeManager *cman);
+MONO_API void             mono_code_manager_invalidate (MonoCodeManager *cman);
+MONO_API void             mono_code_manager_set_read_only (MonoCodeManager *cman);
 
-void*            mono_code_manager_reserve_align (MonoCodeManager *cman, int size, int alignment);
+MONO_API 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);
+MONO_API void*            mono_code_manager_reserve (MonoCodeManager *cman, int size);
+MONO_API void             mono_code_manager_commit  (MonoCodeManager *cman, void *data, int size, int newsize);
+MONO_API int              mono_code_manager_size    (MonoCodeManager *cman, int *used_size);
+MONO_API void             mono_code_manager_init (void);
+MONO_API void             mono_code_manager_cleanup (void);
 
 /* find the extra block allocated to resolve branches close to code */
 typedef int    (*MonoCodeManagerFunc)      (void *data, int csize, int size, void *user_data);
@@ -21,12 +25,18 @@ void            mono_code_manager_foreach  (MonoCodeManager *cman, MonoCodeManag
 
 #if defined( __native_client_codegen__ ) && defined( __native_client__ )
 
+#ifdef __arm__
+#define kNaClBundleSize 16
+#else
 #define kNaClBundleSize 32
+#endif
 #define kNaClBundleMask (kNaClBundleSize-1)
 
+#ifndef USE_JUMP_TABLES
 extern __thread unsigned char **patch_source_base;
 extern __thread unsigned char **patch_dest_base;
 extern __thread int patch_current_depth;
+#endif
 
 int              nacl_is_code_address             (void *target);
 void*            nacl_code_manager_get_code_dest  (MonoCodeManager *cman, void *data);