Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 Jul 2017 17:00:06 +0000 (UTC)
From:      Jan Beich <jbeich@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-branches@freebsd.org
Subject:   svn commit: r446765 - in branches/2017Q3/emulators: ppsspp ppsspp/files rpcs3 rpcs3/files
Message-ID:  <201707271700.v6RH06u1078286@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jbeich
Date: Thu Jul 27 17:00:05 2017
New Revision: 446765
URL: https://svnweb.freebsd.org/changeset/ports/446765

Log:
  MFH: r446352
  
  emulators/{ppsspp,rpcs3}: switch to MAP_32BIT
  
  This may slightly improve JIT stability.
  
  Approved by:	ports-secteam (miwi)

Modified:
  branches/2017Q3/emulators/ppsspp/Makefile
  branches/2017Q3/emulators/ppsspp/files/patch-Common_MemoryUtil.cpp
  branches/2017Q3/emulators/rpcs3/Makefile
  branches/2017Q3/emulators/rpcs3/files/patch-Utilities_JIT.cpp
Directory Properties:
  branches/2017Q3/   (props changed)

Modified: branches/2017Q3/emulators/ppsspp/Makefile
==============================================================================
--- branches/2017Q3/emulators/ppsspp/Makefile	Thu Jul 27 16:48:52 2017	(r446764)
+++ branches/2017Q3/emulators/ppsspp/Makefile	Thu Jul 27 17:00:05 2017	(r446765)
@@ -3,7 +3,7 @@
 PORTNAME=	ppsspp
 DISTVERSIONPREFIX=	v
 DISTVERSION?=	1.4.2
-PORTREVISION?=	0
+PORTREVISION?=	1
 CATEGORIES=	emulators
 # XXX Get from Debian once #697821 lands
 MASTER_SITES=	https://bazaar.launchpad.net/~sergio-br2/${PORTNAME}/debian-sdl/download/5/${PORTNAME}.1-20140802045408-dd26dik367ztj5xg-8/:manpage

Modified: branches/2017Q3/emulators/ppsspp/files/patch-Common_MemoryUtil.cpp
==============================================================================
--- branches/2017Q3/emulators/ppsspp/files/patch-Common_MemoryUtil.cpp	Thu Jul 27 16:48:52 2017	(r446764)
+++ branches/2017Q3/emulators/ppsspp/files/patch-Common_MemoryUtil.cpp	Thu Jul 27 17:00:05 2017	(r446765)
@@ -1,35 +1,31 @@
---- Common/MemoryUtil.cpp.orig	2015-11-19 15:07:48 UTC
+https://github.com/hrydgard/ppsspp/pull/9857
+
+--- Common/MemoryUtil.cpp.orig	2017-05-27 09:58:05 UTC
 +++ Common/MemoryUtil.cpp
-@@ -32,6 +32,10 @@
- #include <mach/vm_param.h>
+@@ -154,7 +154,7 @@ void *AllocateExecutableMemory(size_t size) {
+ 	}
+ #else
+ 	static char *map_hint = 0;
+-#if defined(_M_X64)
++#if defined(_M_X64) && !defined(MAP_32BIT)
+ 	// Try to request one that is close to our memory location if we're in high memory.
+ 	// We use a dummy global variable to give us a good location to start from.
+ 	if (!map_hint) {
+@@ -176,7 +176,7 @@ void *AllocateExecutableMemory(size_t size) {
+ 	void* ptr = mmap(map_hint, size, prot,
+ 		MAP_ANON | MAP_PRIVATE
+ #if defined(_M_X64) && defined(MAP_32BIT)
+-		| ((uintptr_t) map_hint == 0 ? MAP_32BIT : 0)
++		| MAP_32BIT
  #endif
+ 		, -1, 0);
  
-+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
-+#include <sys/resource.h>
-+#endif
-+
- #ifndef _WIN32
- #include <unistd.h>
- #endif
-@@ -149,6 +153,21 @@ void *AllocateExecutableMemory(size_t si
- 			map_hint = (char*)round_page(&hint_location) - 0x20000000; // 0.5gb lower than our approximate location
- 		else
- 			map_hint = (char*)0x20000000; // 0.5GB mark in memory
-+
-+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
-+		// XXX Fix maximum data segment size (data + BSS + heap) to 256 MB.
-+		// This allows avoiding calling mmap(2) with MAP_FIXED.
-+		// On FreeBSD, without lowering this limit, calling mmap(2)
-+		// without MAP_FIXED will result in getting an address just
-+		// beyond maximum data segment size which will be far beyond
-+		// the desired 2 GB.
-+		struct rlimit limit;
-+		limit.rlim_cur = 0x10000000; // 256 MB
-+		limit.rlim_max = 0x10000000;
-+		if(setrlimit(RLIMIT_DATA, &limit) != 0) {
-+		        PanicAlert("Failed to lower maximum data segment size");
-+		}
-+#endif
+@@ -193,7 +193,7 @@ void *AllocateExecutableMemory(size_t size) {
+ 		ERROR_LOG(MEMMAP, "Failed to allocate executable memory (%d)", (int)size);
+ 		PanicAlert("Failed to allocate executable memory\n%s", GetLastErrorMsg());
  	}
- 	else if ((uintptr_t) map_hint > 0xFFFFFFFFULL)
- 	{
+-#if defined(_M_X64) && !defined(_WIN32)
++#if defined(_M_X64) && !defined(MAP_32BIT) && !defined(_WIN32)
+ 	else if ((uintptr_t)map_hint <= 0xFFFFFFFF) {
+ 		// Round up if we're below 32-bit mark, probably allocating sequentially.
+ 		map_hint += round_page(size);

Modified: branches/2017Q3/emulators/rpcs3/Makefile
==============================================================================
--- branches/2017Q3/emulators/rpcs3/Makefile	Thu Jul 27 16:48:52 2017	(r446764)
+++ branches/2017Q3/emulators/rpcs3/Makefile	Thu Jul 27 17:00:05 2017	(r446765)
@@ -3,6 +3,7 @@
 PORTNAME=	rpcs3
 DISTVERSIONPREFIX=	v
 DISTVERSION=	0.0.3
+PORTREVISION=	1
 CATEGORIES=	emulators
 
 MAINTAINER=	jbeich@FreeBSD.org

Modified: branches/2017Q3/emulators/rpcs3/files/patch-Utilities_JIT.cpp
==============================================================================
--- branches/2017Q3/emulators/rpcs3/files/patch-Utilities_JIT.cpp	Thu Jul 27 16:48:52 2017	(r446764)
+++ branches/2017Q3/emulators/rpcs3/files/patch-Utilities_JIT.cpp	Thu Jul 27 17:00:05 2017	(r446765)
@@ -1,35 +1,33 @@
---- Utilities/JIT.cpp.orig	2017-07-10 15:42:02 UTC
+FreeBSD ignores address hints with default RLIMIT_DATA
+
+--- Utilities/JIT.cpp.orig	2017-07-20 15:05:34 UTC
 +++ Utilities/JIT.cpp
-@@ -31,6 +31,10 @@
+@@ -30,6 +30,8 @@
+ 
+ #ifdef _WIN32
  #include <Windows.h>
++#else
++#include <sys/mman.h>
  #endif
  
-+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
-+#include <sys/resource.h>
-+#endif
-+
  #include "JIT.h"
- 
- // Memory manager mutex
-@@ -45,6 +49,21 @@ static void* const s_memory = []() -> void*
- 	llvm::InitializeNativeTarget();
+@@ -47,6 +49,11 @@ static void* const s_memory = []() -> void*
  	llvm::InitializeNativeTargetAsmPrinter();
  	LLVMLinkInMCJIT();
-+
-+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
-+	// XXX Fix maximum data segment size (data + BSS + heap) to 256 MB.
-+	// This allows avoiding calling mmap(2) with MAP_FIXED.
-+	// On FreeBSD, without lowering this limit, calling mmap(2)
-+	// without MAP_FIXED will result in getting an address just
-+	// beyond maximum data segment size which will be far beyond
-+	// the desired 2 GB.
-+	struct rlimit limit;
-+	limit.rlim_cur = 0x10000000; // 256 MB
-+	limit.rlim_max = 0x10000000;
-+	if(setrlimit(RLIMIT_DATA, &limit) != 0) {
-+		LOG_ERROR(GENERAL, "LLVM: Failed to lower maximum data segment size");
-+	}
-+#endif
  
++#ifdef MAP_32BIT
++	auto ptr = ::mmap(nullptr, s_memory_size, PROT_NONE, MAP_ANON | MAP_PRIVATE | MAP_32BIT, -1, 0);
++	if (ptr != MAP_FAILED)
++		return ptr;
++#else
  	for (u64 addr = 0x10000000; addr <= 0x80000000 - s_memory_size; addr += 0x1000000)
  	{
+ 		if (auto ptr = utils::memory_reserve(s_memory_size, (void*)addr))
+@@ -54,6 +61,7 @@ static void* const s_memory = []() -> void*
+ 			return ptr;
+ 		}
+ 	}
++#endif
+ 
+ 	return utils::memory_reserve(s_memory_size);
+ }();



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201707271700.v6RH06u1078286>