* libNet: answer sceNpGetAccountLanguage2 as a signed-out user
sceNpGetAccountLanguage2 was not registered, so games that call it hit
the unresolved-import stub. The stub returns 0, which tells the game the
request succeeded and that the language code buffer now holds the
account's language, but nothing was written to it.
Saros (#1053) calls it from its analytics thread right after
sceNpGetAccountAge, each on its own request. sceNpGetAccountAge already
reports SCE_NP_ERROR_SIGNED_OUT there, so the game is told the user is
signed out for one query and signed in for the next. Demon's Souls
(#890), Ghost of Yotei (#1095) and NHL 27 (#1101) import it as well.
Register it next to the other NpManager account queries and answer the
way they do: SCE_NP_ERROR_INVALID_ARGUMENT for a request id <= 0 or a
null output pointer, SCE_NP_ERROR_SIGNED_OUT otherwise. The output is
left untouched because nothing was looked up.
* libNet: reject missing account language requests
---------
Co-authored-by: overlordxrz-source <overlordxrz-source@users.noreply.github.com>
Co-authored-by: nmzik <Nmzik@mail.ru>
* network: handle SO_NBIO on non-Windows hosts
Setsockopt only translated the guest SOL_SOCKET/SO_NBIO (0x1200) option
under _WIN32; other hosts rejected it with ENOPROTOOPT. FMOD Studio's Live
Update listener sets SO_NBIO, so on Linux its socket setup failed and the
Studio async manager latched FMOD_ERR_NET_CONNECT. Every blocking Studio
call then failed: loadBankFile returned FMOD_ERR_NOTREADY for all banks,
leaving the game silent and stuck on the splash screen waiting for
RuntimeManager.HaveAllBanksLoaded (PPSA28997).
Toggle O_NONBLOCK with fcntl on non-Windows hosts.
* network: map connection errors from POSIX socket calls
ConvertHostSocketError only covered a handful of errno values on
non-Windows hosts, so anything else reached the guest as EIO. With
SO_NBIO now honoured there, a nonblocking connect() that is still in
progress returned EIO instead of EINPROGRESS (and EALREADY on retry).
Map the same connection and network errors the Windows branch already
translates.
* network: share nonblocking socket error handling
---------
Co-authored-by: nmzik <Nmzik@mail.ru>
Normalize Winsock WSAEMSGSIZE on receive to the copied byte count before converting the peer address. Preserve other receive errors and oversized send failures.
* macos: POSIX platform layer (host fault handler, virtual memory)
- hostException: Mach/POSIX signal-based host fault handler mirroring the
Windows vectored handler (SIGSEGV/SIGBUS/SIGILL), behind
'#elif defined(__APPLE__)'. Windows and Linux branches are untouched.
- sysLinuxVirtual: mach_vm_region-based is_mapped (no /proc/self/maps on
macOS), PTHREAD_MUTEX_NORMAL, and a MAP_FIXED carve-in-place allocator that
never leaves an unmapped hole for dyld/Rosetta/Metal to claim. All
__APPLE__-guarded; the original Linux allocator path is preserved verbatim.
- sysLinuxDbg/sysLinuxFileIO: libgen.h for basename(), and a POSIX
opendir/readdir implementation of SysFileGetDents (previously a stub).
* macos: guest kernel backing, threads, and POSIX libs
- memory/memoryAddressSpace: anonymous shm_open backing (macOS has no
memfd_create) and re-reserve-on-unmap so a guest MAP_FIXED remap never
destroys a host mapping (__APPLE__-guarded). Drops host <sys/mman.h> MAP_*
macros so the guest's constexpr MAP_* constants compile (no-op on Windows).
- pthread: undef the host PTHREAD_STACK_MIN macro; on non-Windows, pin the
stack-switch asm's guest rsp/rbp to callee-saved r14/r15 (the template
clobbers r12/r13); __APPLE__ no-op for the absent pthread_condattr_setclock.
The Windows stack-switch asm is byte-identical.
- network: define SOCKET/INVALID_SOCKET for the non-Windows paths (were
undefined at 20+ use sites), and rename the non-Windows kernel_clock_*
helpers to the CamelCase names the callers already use. Both repair the
shared non-Windows build. Integer reinterpret_cast -> static_cast.
* loader: pin stack-switch asm operands to callee-saved registers
RunEntry switches to the guest stack with an asm template that clobbers
r12/r13 before consuming its inputs. With plain "r" constraints the compiler
may place func/guest_rsp/guest_rbp into r12/r13, so 'callq *func' jumps
through the saved host rsp -- a latent miscompile on every platform that any
unrelated codegen change can trigger. Pin the inputs to rbx/r14/r15, which the
template never touches and the SysV callee preserves.
General correctness fix (not macOS-specific); the same fix is applied to
pthread RunOnGuestStack.
* macos: Vulkan/MoltenVK graphics enablement
- pageManager: GPU write-tracking via Mach VM queries + mprotect (mprotect
cannot report the previous protection, so the expected-old check is dropped),
thread id via pthread_mach_thread_np, 4 KB page-size check -- __APPLE__-guarded.
- shaders/renderDraw/vulkanWindow: MoltenVK lacks VK_EXT_color_write_enable,
VK_EXT_depth_clip_enable and depthBounds; fall back to static color-write
masks and default depth clipping, request VK_KHR_portability_subset, and
reuse the graphics queue for present when only one queue is exposed. Non-Apple
pipeline/extension setup is unchanged.
- window: optional borderless window (KYTY_BORDERLESS) to sidestep a Rosetta
NSException in macOS window chrome.
* graphics: macOS thread identity for region tracking
Region-ownership locks resolve the current thread via GetCurrentThreadId()
on Windows and EXIT elsewhere. Use the Mach thread port on macOS (nonzero
per-thread id; 0 stays the no-owner sentinel).
* macos: marshal AppKit window operations to the main thread
The present worker thread shows the window, updates its icon and title, and
recreates a lost Vulkan surface. AppKit traps with 'Must only be used from the
main thread' when these run off the main thread. Route them through a small
task queue drained by the SDL main loop (an SDL_USEREVENT wakes the loop when
it is blocked in SDL_WaitEvent). Title updates are fire-and-forget; showing
the window and surface recreation wait for completion.
Windows and Linux call the SDL functions directly, as before.
* build: ignore the _Build output directory
_Build is the conventional out-of-tree build location (only _Build/vscode-clang
was ignored); a stray git add could sweep build artifacts into a commit.
* macos: isolate stack-switch workaround
---------
Co-authored-by: nmzik <Nmzik@mail.ru>