From 37c8bafd13848ba7f2f4d2edbfe401a0e054678b Mon Sep 17 00:00:00 2001 From: boykopovar Date: Sat, 12 Sep 2026 16:07:14 +0300 Subject: [PATCH] fix(libkernel): fix export non-ps5 functions with extern c --- README.md | 2 +- core/libs/prx/libkernel/Equeue/Equeue.cpp | 3 ++- core/libs/prx/libkernel/Equeue/Equeue.hpp | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index eb3916e62..e1d145001 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Releases will be published after the first full successful launch of at least on Execution reaches `_start`, stack unwinding and exception handling tables are built. All unimplemented functions throw std::runtime_error. `what()` is printed to stderr and the process terminates. Shader initialization via `sceAgcCreate*` passes. -Now: `sceVideoOutOpen not implemented`. +Now: `sceAudioOutInit not implemented`. On Windows, after printing an unhandled exception the process exits with STATUS_STACK_BUFFER_OVERRUN due to the difficulty of manually [implementing proper exception handling](core/libs/prx/libc/src/exception). diff --git a/core/libs/prx/libkernel/Equeue/Equeue.cpp b/core/libs/prx/libkernel/Equeue/Equeue.cpp index 88df72a1e..3b9b49b27 100644 --- a/core/libs/prx/libkernel/Equeue/Equeue.cpp +++ b/core/libs/prx/libkernel/Equeue/Equeue.cpp @@ -11,6 +11,8 @@ static std::unordered_map g_equeues; static std::mutex g_equeueMutex; static uint64_t g_nextEqueue = 1; +extern "C" { + KernelEqueuePrivate::KernelEqueuePrivate(KernelEqueue handle) : m_handle(handle) {} KernelEqueuePrivate::~KernelEqueuePrivate() { @@ -267,7 +269,6 @@ int APS5_VABI EqueueDeleteEvent_nid_postfix(KernelEqueue eq, uintptr_t ident, in return owner->DeleteEvent(ident, filter); } -extern "C" { int APS5_VABI sceKernelCreateEqueue(KernelEqueue* eq, const char* name) { if (eq == nullptr || name == nullptr) { diff --git a/core/libs/prx/libkernel/Equeue/Equeue.hpp b/core/libs/prx/libkernel/Equeue/Equeue.hpp index 2c0babff3..0082a1edd 100644 --- a/core/libs/prx/libkernel/Equeue/Equeue.hpp +++ b/core/libs/prx/libkernel/Equeue/Equeue.hpp @@ -83,10 +83,13 @@ private: }; using KernelEqueueRef = std::shared_ptr; +extern "C" { KernelEqueueRef EqueuePin_nid_postfix(KernelEqueue eq); int APS5_VABI EqueueAddEvent_nid_postfix(KernelEqueue eq, const KernelEqueueEvent& event); int APS5_VABI EqueueTriggerEvent_nid_postfix(KernelEqueue eq, uintptr_t ident, int16_t filter, void* triggerData); int APS5_VABI EqueueDeleteEvent_nid_postfix(KernelEqueue eq, uintptr_t ident, int16_t filter); +} + #endif