Index: head/emulators/rpcs3/Makefile =================================================================== --- head/emulators/rpcs3/Makefile (revision 451640) +++ head/emulators/rpcs3/Makefile (revision 451641) @@ -1,84 +1,84 @@ # $FreeBSD$ PORTNAME= rpcs3 DISTVERSIONPREFIX= v -DISTVERSION= 0.0.3-407 -DISTVERSIONSUFFIX= -g3907dd04 +DISTVERSION= 0.0.3-425 +DISTVERSIONSUFFIX= -g1d375cb1 CATEGORIES= emulators MAINTAINER= jbeich@FreeBSD.org COMMENT= PS3 emulator/debugger LICENSE= BSD3CLAUSE BSL GPLv2 MIT ZLIB LICENSE_COMB= multi LICENSE_FILE_BSD3CLAUSE=${WRKSRC}/3rdparty/cereal/LICENSE LICENSE_FILE_BSL= ${WRKSRC}/Utilities/LICENSE_1_0.txt LICENSE_FILE_MIT= ${WRKSRC}/3rdparty/GSL/LICENSE LICENSE_FILE_ZLIB= ${WRKSRC}/asmjit/LICENSE.md LIB_DEPENDS= libpng.so:graphics/png \ libavcodec.so:multimedia/ffmpeg ONLY_FOR_ARCHS= amd64 ONLY_FOR_ARCHS_REASON= requires int128 and SSSE3 USE_GITHUB= yes GH_ACCOUNT= RPCS3 GH_TUPLE= RPCS3:hidapi:hidapi-0.8.0-rc1-25-gca39ce8:hidapi/3rdparty/hidapi \ RPCS3:pugixml:f205aaf:pugixml/3rdparty/pugixml \ RPCS3:yaml-cpp:release-0.5.3-62-g017626a:yamlcpp/Utilities/yaml-cpp \ kobalicek:asmjit:1370fe6:asmjit/asmjit \ Microsoft:GSL:fc5fce4:GSL/3rdparty/GSL \ USCiLab:cereal:v1.2.0:cereal/3rdparty/cereal USES= cmake compiler:c++14-lang iconv:wchar_t localbase:ldflags \ openal:soft pkgconfig USE_GL= gl glew USE_QT5= qmake_build buildtools_build core dbus gui widgets USE_XORG= x11 EXTRA_PATCHES+= ${EXTRA_PATCHES_${OPSYS}_${OSREL}} EXTRA_PATCHES_FreeBSD_10.3= ${PATCHDIR}/extra-patch-no-thread_local CMAKE_ARGS+= -DCMAKE_SKIP_RPATH=on -DUSE_SYSTEM_LIBPNG=on -DUSE_SYSTEM_FFMPEG=on CXXFLAGS+= -D_GLIBCXX_USE_C99 # XXX ports/193528 CXXFLAGS+= -Wno-macro-redefined # __STDC_*_MACROS sys/cdefs.h vs. llvm-config LDFLAGS+= -Wl,--as-needed # GLU PLIST_FILES= bin/${PORTNAME} \ share/applications/${PORTNAME}.desktop \ share/icons/hicolor/48x48/apps/${PORTNAME}.png \ share/icons/hicolor/scalable/apps/${PORTNAME}.svg \ OPTIONS_DEFINE= ALSA EVDEV GDB LLVM PULSEAUDIO VULKAN OPTIONS_DEFAULT=ALSA LLVM VULKAN .if !exists(${.CURDIR:H:H}/graphics/vulkan-sdk) OPTIONS_EXCLUDE=VULKAN # XXX ports/222175 .endif ALSA_LIB_DEPENDS= libasound.so:audio/alsa-lib ALSA_RUN_DEPENDS= ${LOCALBASE}/lib/alsa-lib/libasound_module_pcm_oss.so:audio/alsa-plugins ALSA_CMAKE_BOOL= USE_ALSA EVDEV_DESC= libevdev-based joystick support EVDEV_CMAKE_BOOL= USE_LIBEVDEV EVDEV_LIB_DEPENDS= libevdev.so:devel/libevdev GDB_DESC= GDB remote stub (powerpc64 target) GDB_CMAKE_BOOL= WITH_GDB LLVM_DESC= LLVM-based PPU recompiler LLVM_BUILD_DEPENDS= llvm40>0:devel/llvm40 LLVM_CMAKE_BOOL_OFF= WITHOUT_LLVM PULSEAUDIO_LIB_DEPENDS= libpulse-simple.so:audio/pulseaudio PULSEAUDIO_CMAKE_BOOL= USE_PULSE VULKAN_DESC= Vulkan renderer VULKAN_BUILD_DEPENDS= ${LOCALBASE}/lib/libglslang.a:devel/glslang VULKAN_LIB_DEPENDS= libvulkan.so:graphics/vulkan-sdk VULKAN_CMAKE_BOOL= USE_VULKAN VULKAN_PREBUILT post-patch: @${REINPLACE_CMD} -e '/GIT_BRANCH/s/unknown/master/' \ -e '/GIT_VERSION/s/unknown/${GH_TAGNAME:C/[^-]*-//}/' \ ${WRKSRC}/${PORTNAME}/git-version.cmake .include Index: head/emulators/rpcs3/distinfo =================================================================== --- head/emulators/rpcs3/distinfo (revision 451640) +++ head/emulators/rpcs3/distinfo (revision 451641) @@ -1,15 +1,15 @@ -TIMESTAMP = 1507222297 -SHA256 (RPCS3-rpcs3-v0.0.3-407-g3907dd04_GH0.tar.gz) = bc35c3ba49945051a41329e0f17f60f3733dbddf5282e6747abb400be408ed40 -SIZE (RPCS3-rpcs3-v0.0.3-407-g3907dd04_GH0.tar.gz) = 3522527 +TIMESTAMP = 1507569941 +SHA256 (RPCS3-rpcs3-v0.0.3-425-g1d375cb1_GH0.tar.gz) = 89b133fab7032d4e8dae62889784a1b5213c802c37a1d8f1f9ce85e9e636d511 +SIZE (RPCS3-rpcs3-v0.0.3-425-g1d375cb1_GH0.tar.gz) = 3530456 SHA256 (RPCS3-hidapi-hidapi-0.8.0-rc1-25-gca39ce8_GH0.tar.gz) = e50e4f4e9035e891e16867e995f44aac87ce734a9dde169f02fc9719b2ce3642 SIZE (RPCS3-hidapi-hidapi-0.8.0-rc1-25-gca39ce8_GH0.tar.gz) = 105623 SHA256 (RPCS3-pugixml-f205aaf_GH0.tar.gz) = 3b2a7e21625d8cbeb3aa1841b8816f6cab0752e89008b9fc67a325c800f153b5 SIZE (RPCS3-pugixml-f205aaf_GH0.tar.gz) = 76332 SHA256 (RPCS3-yaml-cpp-release-0.5.3-62-g017626a_GH0.tar.gz) = 1d4b32443f137c23b68d3cb183ba6fb48eb76be2b0b30016970adff5c770d841 SIZE (RPCS3-yaml-cpp-release-0.5.3-62-g017626a_GH0.tar.gz) = 65888 SHA256 (kobalicek-asmjit-1370fe6_GH0.tar.gz) = cc064a8e495959ee525803bd83a4f9b2b3bf6e9aacbc7538e8ac3c20fb12e83e SIZE (kobalicek-asmjit-1370fe6_GH0.tar.gz) = 447958 SHA256 (Microsoft-GSL-fc5fce4_GH0.tar.gz) = 2df1538ff240bf4dd3ef44ba8c832451376fff8e74f7734d32fc8c337557a64d SIZE (Microsoft-GSL-fc5fce4_GH0.tar.gz) = 38809 SHA256 (USCiLab-cereal-v1.2.0_GH0.tar.gz) = 1ccf3ed205a7a2f0d6a060415b123f1ae0d984cd4435db01af8de11a2eda49c1 SIZE (USCiLab-cereal-v1.2.0_GH0.tar.gz) = 299883 Index: head/emulators/rpcs3/files/extra-patch-no-thread_local =================================================================== --- head/emulators/rpcs3/files/extra-patch-no-thread_local (revision 451640) +++ head/emulators/rpcs3/files/extra-patch-no-thread_local (revision 451641) @@ -1,95 +1,136 @@ FreeBSD 10.3 lacks __cxa_thread_atexit, so revert https://github.com/RPCS3/rpcs3/commit/c1450ad61627 --- Utilities/Log.cpp.orig 2017-09-19 12:07:07 UTC +++ Utilities/Log.cpp @@ -255,7 +255,7 @@ void logs::message::broadcast(const char* fmt, const f } // Get text - thread_local std::string text; text.clear(); + std::string text; fmt::raw_append(text, fmt, sup, args); std::string prefix = g_tls_log_prefix(); @@ -275,7 +275,7 @@ void logs::message::broadcast(const char* fmt, const f } // Store message additionally - get_logger()->messages.emplace_back(stored_message{*this, stamp, std::move(prefix), text}); + get_logger()->messages.emplace_back(stored_message{*this, stamp, std::move(prefix), std::move(text)}); } } @@ -405,7 +405,7 @@ logs::file_listener::file_listener(const std::string& void logs::file_listener::log(u64 stamp, const logs::message& msg, const std::string& prefix, const std::string& _text) { - thread_local std::string text; + std::string text; text.reserve(prefix.size() + _text.size() + 200); // Used character: U+00B7 (Middle Dot) switch (msg.sev) +--- Utilities/mutex.cpp.orig 2017-10-08 20:37:54 UTC ++++ Utilities/mutex.cpp +@@ -5,8 +5,10 @@ + #include + #include + ++#if 0 + // TLS variable for tracking owned mutexes + thread_local std::vector g_tls_locks; ++#endif + + void shared_mutex::imp_lock_shared(s64 _old) + { +@@ -258,6 +260,7 @@ bool shared_mutex::try_lock_degrade() + return m_value.compare_and_swap_test(0, c_one - c_min); + } + ++#if 0 + safe_reader_lock::safe_reader_lock(shared_mutex& mutex) + : m_mutex(mutex) + , m_is_owned(false) +@@ -332,3 +335,4 @@ safe_writer_lock::~safe_writer_lock() + + // TODO: order locks + } ++#endif +--- Utilities/mutex.h.orig 2017-10-08 20:37:54 UTC ++++ Utilities/mutex.h +@@ -177,6 +177,7 @@ class writer_lock final (public) + } + }; + ++#if 0 + // Safe reader lock. Can be recursive above other safe locks (reader or writer). + class safe_reader_lock final + { +@@ -229,3 +230,4 @@ class safe_writer_lock final (public) + + ~safe_writer_lock(); + }; ++#endif --- Utilities/types.h.orig 2017-08-24 18:20:18 UTC +++ Utilities/types.h @@ -32,6 +32,7 @@ #define SAFE_BUFFERS #define NEVER_INLINE __attribute__((noinline)) #define FORCE_INLINE __attribute__((always_inline)) inline +#define thread_local __thread #endif #define CHECK_SIZE(type, size) static_assert(sizeof(type) == size, "Invalid " #type " type size") --- rpcs3/Emu/System.cpp.orig 2017-08-24 18:20:18 UTC +++ rpcs3/Emu/System.cpp @@ -797,20 +797,26 @@ void Emulator::Stop() s32 error_code::error_report(const fmt_type_info* sup, u64 arg, const fmt_type_info* sup2, u64 arg2) { - static thread_local std::unordered_map g_tls_error_stats; - static thread_local std::string g_tls_error_str; + static thread_local std::unordered_map* g_tls_error_stats{}; + static thread_local std::string* g_tls_error_str{}; - if (g_tls_error_stats.empty()) + if (!g_tls_error_stats) { + g_tls_error_stats = new std::unordered_map; + g_tls_error_str = new std::string; + thread_ctrl::atexit([] { - for (auto&& pair : g_tls_error_stats) + for (auto&& pair : *g_tls_error_stats) { if (pair.second > 3) { LOG_ERROR(GENERAL, "Stat: %s [x%u]", pair.first, pair.second); } } + + delete g_tls_error_stats; + delete g_tls_error_str; }); } @@ -840,15 +846,15 @@ s32 error_code::error_report(const fmt_type_info* sup, } // Format log message (use preallocated buffer) - g_tls_error_str.clear(); - fmt::append(g_tls_error_str, "'%s' failed with 0x%08x%s%s%s%s", func, arg, sup ? " : " : "", std::make_pair(sup, arg), sup2 ? ", " : "", std::make_pair(sup2, arg2)); + g_tls_error_str->clear(); + fmt::append(*g_tls_error_str, "'%s' failed with 0x%08x%s%s%s%s", func, arg, sup ? " : " : "", std::make_pair(sup, arg), sup2 ? ", " : "", std::make_pair(sup2, arg2)); // Update stats and check log threshold - const auto stat = ++g_tls_error_stats[g_tls_error_str]; + const auto stat = ++(*g_tls_error_stats)[*g_tls_error_str]; if (stat <= 3) { - channel->format(level, "%s [%u]", g_tls_error_str, stat); + channel->format(level, "%s [%u]", *g_tls_error_str, stat); } return static_cast(arg);