Do not use MAP_JIT by default, instead make this something that is toggled by Xamarin...
authorMiguel de Icaza <miguel@gnome.org>
Wed, 13 Mar 2019 17:38:29 +0000 (13:38 -0400)
committerAlexis Christoforides <alexis@thenull.net>
Tue, 9 Apr 2019 21:35:35 +0000 (17:35 -0400)
Commit migrated from https://github.com/mono/mono/commit/bc4a1ac85a959ecdebfe155cde3ac3aa18d2e9f3

src/mono/mono/mini/driver.c
src/mono/mono/utils/mono-mmap.c
src/mono/mono/utils/mono-mmap.h

index 59e8441..0bf1791 100644 (file)
@@ -2395,6 +2395,8 @@ mono_main (int argc, char* argv[])
                        mono_parse_response_options (response_options, &argc, &argv, FALSE);
                        g_free (response_content);
                } else if (argv [i][0] == '-' && argv [i][1] == '-' && mini_parse_debug_option (argv [i] + 2)) {
+               } else if (strcmp (argv [i], "--use-map-jit") == 0){
+                       mono_setmmapjit (TRUE);
                } else {
                        fprintf (stderr, "Unknown command line option: '%s'\n", argv [i]);
                        return 1;
index 35e5174..40e5625 100644 (file)
@@ -236,6 +236,22 @@ get_darwin_version (void)
 }
 #endif
 
+static int use_mmap_jit;
+
+/**
+ * mono_setmmapjit:
+ * \param flag indicating whether to enable or disable the use of MAP_JIT in mmap
+ *
+ * Call this method to enable or disable the use of MAP_JIT to create the pages
+ * for the JIT to use.   This is only needed for scenarios where Mono is bundled
+ * as an App in MacOS
+ */
+void
+mono_setmmapjit (int flag)
+{
+       use_mmap_jit = flag;
+}
+
 /**
  * mono_valloc:
  * \param addr memory address
@@ -271,7 +287,7 @@ mono_valloc (void *addr, size_t length, int flags, MonoMemAccountType type)
 #endif
 
 #if defined(__APPLE__) && defined(MAP_JIT)
-       if (flags & MONO_MMAP_JIT) {
+       if ((flags & MONO_MMAP_JIT) && use_mmap_jit) {
                if (get_darwin_version () >= DARWIN_VERSION_MOJAVE) {
                        mflags |= MAP_JIT;
                }
index 5b5c27c..8cf629a 100644 (file)
@@ -53,6 +53,7 @@ MONO_API guint64      mono_file_map_size  (MonoFileMap *fmap);
 MONO_API int          mono_file_map_fd    (MonoFileMap *fmap);
 MONO_API int          mono_file_map_close (MonoFileMap *fmap);
 
+MONO_API void  mono_setmmapjit (int flag);
 MONO_API int   mono_pagesize   (void);
 MONO_API int   mono_valloc_granule (void);
 MONO_API void* mono_valloc     (void *addr, size_t length, int flags, MonoMemAccountType type);