From abf96fa96cecf39af42dde35cf628df6815c2642 Mon Sep 17 00:00:00 2001 From: lizzie Date: Fri, 28 Aug 2026 16:50:27 +0000 Subject: [PATCH] merge --- .patch/boost/0004-openorbis.patch | 2 +- .patch/enet/0001-openorbis.patch | 2 +- .patch/mbedtls/0002-aesni-fix.patch | 2 +- src/common/memory_detect.cpp | 4 ++-- .../dynarmic/backend/exception_handler_posix.cpp | 15 ++++++++++++--- src/dynarmic/src/dynarmic/common/context.h | 5 ++++- 6 files changed, 21 insertions(+), 9 deletions(-) diff --git a/.patch/boost/0004-openorbis.patch b/.patch/boost/0004-openorbis.patch index c027956500..09071b599c 100644 --- a/.patch/boost/0004-openorbis.patch +++ b/.patch/boost/0004-openorbis.patch @@ -7,7 +7,7 @@ index 0129511c..10fc9b04 100644 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) +// hacky fix for ps4 -+#if defined(_LIBCPP_HAS_MUSL_LIBC) ++#if defined(__OPENORBIS__) +# define FIONBIO 0 +# define FIONREAD 1 +#endif diff --git a/.patch/enet/0001-openorbis.patch b/.patch/enet/0001-openorbis.patch index 4e6dab279e..744e2f879d 100644 --- a/.patch/enet/0001-openorbis.patch +++ b/.patch/enet/0001-openorbis.patch @@ -7,7 +7,7 @@ index 6669216..86a2faa 100644 #endif -#if !defined(HAS_SOCKLEN_T) && !defined(__socklen_t_defined) -+#if !defined(_LIBCPP_HAS_MUSL_LIBC) && !defined(HAS_SOCKLEN_T) && !defined(__socklen_t_defined) ++#if !defined(__OPENORBIS__) && !defined(HAS_SOCKLEN_T) && !defined(__socklen_t_defined) typedef int socklen_t; #endif diff --git a/.patch/mbedtls/0002-aesni-fix.patch b/.patch/mbedtls/0002-aesni-fix.patch index 5112ded892..e9a1bce5e6 100644 --- a/.patch/mbedtls/0002-aesni-fix.patch +++ b/.patch/mbedtls/0002-aesni-fix.patch @@ -7,7 +7,7 @@ index 754c984c79..59e27afd3e 100644 * target flag is enabled when building the library (e.g. `gcc -mpclmul -msse2` * or `clang -maes -mpclmul`). */ -#if (defined(__GNUC__) || defined(__clang__)) && defined(__AES__) && defined(__PCLMUL__) -+#if (defined(__GNUC__) || defined(__clang__)) && !defined(_LIBCPP_HAS_MUSL_LIBC) ++#if (defined(__GNUC__) || defined(__clang__)) && !defined(__OPENORBIS__) #define MBEDTLS_AESNI_HAVE_INTRINSICS #endif /* For 32-bit, we only support intrinsics */ diff --git a/src/common/memory_detect.cpp b/src/common/memory_detect.cpp index a8e43a1e4b..074c02a9c3 100644 --- a/src/common/memory_detect.cpp +++ b/src/common/memory_detect.cpp @@ -8,7 +8,7 @@ // clang-format on #else #include -#if defined(__APPLE__) || (defined(__FreeBSD__) && !defined(_LIBCPP_HAS_MUSL_LIBC)) +#if defined(__APPLE__) || (defined(__FreeBSD__) && !defined(__OPENORBIS__)) #include #elif defined(__linux__) #include @@ -43,7 +43,7 @@ static MemoryInfo Detect() { sysctlbyname("vm.swapusage", &vmusage, &sizeof_vmusage, nullptr, 0); mem_info.TotalPhysicalMemory = ramsize; mem_info.TotalSwapMemory = vmusage.xsu_total; -#elif defined(__FreeBSD__) && !defined(_LIBCPP_HAS_MUSL_LIBC) +#elif defined(__FreeBSD__) && !defined(__OPENORBIS__) u_long physmem, swap_total; std::size_t sizeof_u_long = sizeof(u_long); // sysctlbyname(const char *, void *, size_t *, const void *, size_t); diff --git a/src/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp b/src/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp index a64423581b..c1b66816a7 100644 --- a/src/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp +++ b/src/dynarmic/src/dynarmic/backend/exception_handler_posix.cpp @@ -66,12 +66,16 @@ public: auto const stack_size = std::max(SIGSTKSZ, 2 * 1024 * 1024); signal_stack_memory = std::make_unique(stack_size); +#ifdef __OPENORBIS__ + fmt::print(stderr, "no fastmem on ps4\n"); + supports_fast_mem = false; +#else stack_t signal_stack{}; signal_stack.ss_sp = signal_stack_memory.get(); signal_stack.ss_size = stack_size; signal_stack.ss_flags = 0; if (sigaltstack(&signal_stack, nullptr) != 0) { - fmt::print(stderr, "dynarmic: POSIX SigHandler: init failure at sigaltstack\n"); + fmt::print(stderr, "POSIX SigHandler: init failure at sigaltstack\n"); supports_fast_mem = false; return; } @@ -82,16 +86,17 @@ public: sa.sa_flags = SA_SIGINFO | SA_ONSTACK | SA_RESTART; sigemptyset(&sa.sa_mask); if (sigaction(SIGSEGV, &sa, &old_sa_segv) != 0) { - fmt::print(stderr, "dynarmic: POSIX SigHandler: could not set SIGSEGV handler\n"); + fmt::print(stderr, "POSIX SigHandler: could not set SIGSEGV handler\n"); supports_fast_mem = false; return; } #if defined(__APPLE__) if (sigaction(SIGBUS, &sa, &old_sa_bus) != 0) { - fmt::print(stderr, "dynarmic: POSIX SigHandler: could not set SIGBUS handler\n"); + fmt::print(stderr, "POSIX SigHandler: could not set SIGBUS handler\n"); supports_fast_mem = false; return; } +# endif #endif } @@ -145,6 +150,9 @@ void SigHandler::SigAction(int sig, siginfo_t* info, void* raw_context) { } LOG_ERROR(Core, "Unhandled {} at {:#018x}\n", sig == SIGSEGV ? "SIGSEGV" : "SIGBUS", CTX_PC); +#ifdef __OPENORBIS__ + // No fastmem +#else struct sigaction* retry_sa = sig == SIGSEGV ? &sig_handler->old_sa_segv : &sig_handler->old_sa_bus; if (retry_sa->sa_flags & SA_SIGINFO) { retry_sa->sa_sigaction(sig, info, raw_context); @@ -158,6 +166,7 @@ void SigHandler::SigAction(int sig, siginfo_t* info, void* raw_context) { return; } retry_sa->sa_handler(sig); +#endif } } // anonymous namespace diff --git a/src/dynarmic/src/dynarmic/common/context.h b/src/dynarmic/src/dynarmic/common/context.h index 0c18807ce5..c07978901b 100644 --- a/src/dynarmic/src/dynarmic/common/context.h +++ b/src/dynarmic/src/dynarmic/common/context.h @@ -88,7 +88,7 @@ # define CTX_Q(i) (fpctx->vregs[i]) # define CTX_FPSR (fpctx->fpsr) # define CTX_FPCR (fpctx->fpcr) -# elif defined(__FreeBSD__) +# elif defined(__FreeBSD__) || defined(__DragonFly__) # define CTX_PC (mctx.mc_gpregs.gp_elr) # define CTX_SP (mctx.mc_gpregs.gp_sp) # define CTX_LR (mctx.mc_gpregs.gp_lr) @@ -131,6 +131,9 @@ # elif defined(__managarm__) # define CTX_PC (mctx.__pollution(gregs)[REG_RIP]) # define CTX_SP (mctx.__pollution(gregs)[REG_RSP]) +# elif defined(__OPENORBIS__) +# define CTX_RIP (mctx.gregs[REG_RIP]) +# define CTX_RSP (mctx.gregs[REG_RSP]) # else # error "unknown platform" # endif