diff --git a/Makefile b/Makefile index 1bc35a0..197967b 100644 --- a/Makefile +++ b/Makefile @@ -257,6 +257,7 @@ else ifeq ($(platform), rpi3) CFLAGS += -fomit-frame-pointer -ffast-math CXXFLAGS = $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 CPU_ARCH := arm + HAVE_MMAP = 1 HAVE_DYNAREC = 1 # Raspberry Pi 2 @@ -268,6 +269,7 @@ else ifeq ($(platform), rpi2) CFLAGS += -fomit-frame-pointer -ffast-math CXXFLAGS = $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 CPU_ARCH := arm + HAVE_MMAP = 1 HAVE_DYNAREC = 1 # Raspberry Pi 1 @@ -280,6 +282,7 @@ else ifeq ($(platform), rpi1) CFLAGS += -fomit-frame-pointer -ffast-math CXXFLAGS = $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11 CPU_ARCH := arm + HAVE_MMAP = 1 HAVE_DYNAREC = 1 # Classic Platforms #################### @@ -307,6 +310,7 @@ else ifeq ($(platform), classic_armv7_a7) ARCH = arm BUILTIN_GPU = neon CPU_ARCH := arm + HAVE_MMAP = 1 HAVE_DYNAREC = 1 ifeq ($(shell echo `$(CC) -dumpversion` "< 4.9" | bc -l), 1) CFLAGS += -march=armv7-a @@ -348,6 +352,7 @@ else ifneq (,$(findstring armv,$(platform))) TARGET := $(TARGET_NAME)_libretro.so SHARED := -shared -Wl,--version-script=link.T CPU_ARCH := arm + HAVE_MMAP = 1 fpic := -fPIC ifneq (,$(findstring cortexa5,$(platform))) CFLAGS += -marm -mcpu=cortex-a5 diff --git a/arm/arm_stub.S b/arm/arm_stub.S index 032ed95..1bfee10 100644 --- a/arm/arm_stub.S +++ b/arm/arm_stub.S @@ -844,13 +844,7 @@ defsymbl(palette_ram_converted) @ Make this section executable! .text -#ifdef __ANDROID__ -@ Unfortunately Android builds don't like nobits, so we ship a ton of zeros -@ TODO: Revisit this whenever we upgrade to the latest clang NDK -.section .jit,"awx",%progbits -#else .section .jit,"awx",%nobits -#endif .align 4 defsymbl(rom_translation_cache) .space ROM_TRANSLATION_CACHE_SIZE diff --git a/jni/Android.mk b/jni/Android.mk index 6e2e505..3d1e36a 100644 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -9,7 +9,7 @@ HAVE_DYNAREC := COREFLAGS := -DINLINE=inline -D__LIBRETRO__ -DFRONTEND_SUPPORTS_RGB565 ifeq ($(TARGET_ARCH),arm) - COREFLAGS += -DARM_ARCH + COREFLAGS += -DARM_ARCH -DHAVE_MMAP CPU_ARCH := arm HAVE_DYNAREC := 1 else ifeq ($(TARGET_ARCH),x86) diff --git a/libretro/libretro.c b/libretro/libretro.c index 8f8ee6f..d496489 100644 --- a/libretro/libretro.c +++ b/libretro/libretro.c @@ -459,10 +459,9 @@ void retro_init(void) { #if defined(HAVE_DYNAREC) #if defined(HAVE_MMAP) - rom_translation_cache = mmap(NULL, ROM_TRANSLATION_CACHE_SIZE, - PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, -1, 0); - ram_translation_cache = mmap(NULL, RAM_TRANSLATION_CACHE_SIZE, + rom_translation_cache = mmap(NULL, ROM_TRANSLATION_CACHE_SIZE + RAM_TRANSLATION_CACHE_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, -1, 0); + ram_translation_cache = &rom_translation_cache[ROM_TRANSLATION_CACHE_SIZE]; #elif defined(_3DS) if (__ctr_svchax && !translation_caches_inited) { @@ -550,8 +549,7 @@ void retro_deinit(void) memory_term(); #if defined(HAVE_MMAP) && defined(HAVE_DYNAREC) - munmap(rom_translation_cache, ROM_TRANSLATION_CACHE_SIZE); - munmap(ram_translation_cache, RAM_TRANSLATION_CACHE_SIZE); + munmap(rom_translation_cache, ROM_TRANSLATION_CACHE_SIZE + RAM_TRANSLATION_CACHE_SIZE); #endif #if defined(_3DS) && defined(HAVE_DYNAREC)