[mupen64plus-core] 93/310: Don't require executable memory for cached interpreter

Sven Eckelmann ecsv-guest at moszumanska.debian.org
Thu Nov 26 05:57:25 UTC 2015


This is an automated email from the git hooks/post-receive script.

ecsv-guest pushed a commit to branch armhf_test
in repository mupen64plus-core.

commit 9843f10a5dd00183c719da903740775895701716
Author: Sven Eckelmann <sven at narfation.org>
Date:   Sun Jul 24 13:08:11 2011 +0200

    Don't require executable memory for cached interpreter
---
 debian/changelog                           |  2 +
 debian/patches/interpreter_rw_memory.patch | 63 ++++++++++++++++++++++++++++++
 debian/patches/series                      |  1 +
 3 files changed, 66 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 11c7e84..186f226 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -25,6 +25,8 @@ mupen64plus-core (1.99.4-3) UNRELEASED; urgency=low
     - Add allocate_mmap.patch, Allocate exec memory using mmap
     - Add interpreter_fpu_modes.patch, Use common fpu implementation for
       interpreter modes to fix missing round/trunc/ceil/floor/set_rounding
+    - Add interpreter_rw_memory.patch, Don't require executable memory for
+      cached interpreter
 
  -- Sven Eckelmann <sven at narfation.org>  Wed, 13 Jul 2011 08:38:54 +0200
 
diff --git a/debian/patches/interpreter_rw_memory.patch b/debian/patches/interpreter_rw_memory.patch
new file mode 100644
index 0000000..17d383e
--- /dev/null
+++ b/debian/patches/interpreter_rw_memory.patch
@@ -0,0 +1,63 @@
+Description: Don't require executable memory for cached interpreter
+Origin: upstream, https://bitbucket.org/richard42/mupen64plus-core/changeset/432d55e201d5
+Author: Sven Eckelmann <sven at narfation.org>
+
+---
+diff --git a/src/r4300/r4300.c b/src/r4300/r4300.c
+index a969dab7cc37fd1358d0e11fc605f66fa2cc6952..6a0e1792b088e1068b79c9dd5afaac3b380b978a 100644
+--- a/src/r4300/r4300.c
++++ b/src/r4300/r4300.c
+@@ -1926,7 +1926,7 @@ void r4300_execute(void)
+         init_blocks();
+ 
+         /* Prevent segfault on failed init_blocks */
+-        if (!actual->block || !actual->code)
++        if (!actual->block)
+             return;
+ 
+         last_addr = PC->addr;
+diff --git a/src/r4300/recomp.c b/src/r4300/recomp.c
+index 07261c7a8808bcf9fe004fad6a1eb91828739dcd..f20ac5dfcf2b464553fb19d6df83351a061e2c10 100644
+--- a/src/r4300/recomp.c
++++ b/src/r4300/recomp.c
+@@ -2187,11 +2187,21 @@ void init_block(int *source, precomp_block *block)
+   if (!block->block)
+   {
+     size_t memsize = get_block_memsize(block);
+-    block->block = (precomp_instr *) malloc_exec(memsize);
+-    if (!block->block) {
+-        DebugMessage(M64MSG_ERROR, "Memory error: couldn't allocate executable memory for dynamic recompiler/cached interpreter. Try to use the pure interpreter.");
+-        return;
++    if (r4300emu == CORE_DYNAREC) {
++        block->block = (precomp_instr *) malloc_exec(memsize);
++        if (!block->block) {
++            DebugMessage(M64MSG_ERROR, "Memory error: couldn't allocate executable memory for dynamic recompiler. Try to use an interpreter mode.");
++            return;
++        }
+     }
++    else {
++        block->block = (precomp_instr *) malloc(memsize);
++        if (!block->block) {
++            DebugMessage(M64MSG_ERROR, "Memory error: couldn't allocate memory for cached interpreter.");
++            return;
++        }
++    }
++
+     memset(block->block, 0, memsize);
+     already_exist = 0;
+   }
+@@ -2357,7 +2367,13 @@ void free_block(precomp_block *block)
+ {
+     size_t memsize = get_block_memsize(block);
+ 
+-    if (block->block) { free_exec(block->block, memsize);; block->block = NULL; }
++    if (block->block) {
++        if (r4300emu == CORE_DYNAREC)
++            free_exec(block->block, memsize);
++        else
++            free(block->block);
++        block->block = NULL;
++    }
+     if (block->code) { free_exec(block->code, block->max_code_length); block->code = NULL; }
+     if (block->jumps_table) { free(block->jumps_table); block->jumps_table = NULL; }
+     if (block->riprel_table) { free(block->riprel_table); block->riprel_table = NULL; }
diff --git a/debian/patches/series b/debian/patches/series
index 49ec560..05d31e8 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -12,3 +12,4 @@ conflicting_symbol.patch
 osd_memory_corruption.patch
 allocate_mmap.patch
 interpreter_fpu_modes.patch
+interpreter_rw_memory.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/mupen64plus-core.git



More information about the Pkg-games-commits mailing list