feat(libs): add exports imported by PPSA12544

Implement scePthreadGetschedparam and scePthreadSetschedparam on top of
the thread priority, POSIX utimes and fsync on top of sceKernelUtimes
and sceKernelFsync, and sceUserServiceGetAccessibilityZoomFollowFocus
like the other accessibility queries. Add the remaining imports of
PPSA12544 as unimplemented exports and record unknown NIDs and
signatures in the technical debt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Merijn 2026-10-05 18:41:52 +02:00
parent 0518f0e021
commit 8f6328242d
13 changed files with 205 additions and 0 deletions

View File

@ -150,4 +150,16 @@ int APS5_VABI sceAgcUnknown_y5K5tPktiL8() {
return 0;
}
APS5_EXPORT("dbOlWdppb4o", sceAgcUnknown_dbOlWdppb4o);
int APS5_VABI sceAgcUnknown_dbOlWdppb4o(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
APS5_EXPORT("vieBRwlh1Lw", sceAgcUnknown_vieBRwlh1Lw);
int APS5_VABI sceAgcUnknown_vieBRwlh1Lw(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -457,6 +457,16 @@ int APS5_VABI sceFontWritingLineWritesOrder() {
return 0;
}
int APS5_VABI sceFontGraphicsDrawupFillTextureImageObject(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceFontGraphicsDrawupFillTexturePatternObject(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}
#pragma GCC visibility pop

View File

@ -214,4 +214,24 @@ int APS5_VABI sceHttp2GetMemoryPoolStats() {
return 0;
}
int APS5_VABI sceHttp2CookieFlush(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceHttp2CreateCookieBox(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceHttp2SetCookieBox(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceHttp2SetRequestNoContentLength(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -911,4 +911,10 @@ int APS5_VABI sceNetResolverStartAton(int rid, const void* addr, char* hostname,
}
return 0;
}
int APS5_VABI sceNetResolverGetError(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -233,4 +233,10 @@ int APS5_VABI scePadSetVibrationTriggerEffectWeakWhileEmbeddedMicInUse(bool enab
return PAD_OK;
}
APS5_EXPORT("fCWdlnmB1Ks", scePadUnknown_fCWdlnmB1Ks);
int APS5_VABI scePadUnknown_fCWdlnmB1Ks(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -73,4 +73,34 @@ int APS5_VABI sceSslGetMemoryPoolStats() {
return 0;
}
int APS5_VABI sceSslFreeSslCertName(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceSslGetIssuerName(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceSslGetNameEntryCount(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceSslGetNameEntryInfo(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceSslGetPem(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceSslGetSubjectName(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -130,4 +130,29 @@ int APS5_VABI sceSystemServiceLaunchPlayerDialog(const void* param) {
return SYSTEM_SERVICE_OK;
}
int APS5_VABI sceSystemServiceDisableMusicPlayer(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceSystemServiceOpenChallengeActivity(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceSystemServiceOpenTournamentOccurrence(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceSystemServiceReenableMusicPlayer(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceSystemServiceShowControllerSettings(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -48,6 +48,14 @@ int APS5_VABI sceUserServiceGetAccessibilityZoomEnabled(int user_id, int32_t* zo
return USER_SERVICE_OK;
}
int APS5_VABI sceUserServiceGetAccessibilityZoomFollowFocus(int user_id, int32_t* zoom_follow_focus) {
if (zoom_follow_focus == nullptr || user_id != USER_SERVICE_INITIAL_USER_ID) {
return USER_SERVICE_ERROR_INVALID_ARGUMENT;
}
*zoom_follow_focus = 0;
return USER_SERVICE_OK;
}
int APS5_VABI sceUserServiceGetAgeLevel(int user_id, uint32_t* age_level) {
(void)user_id;
(void)age_level;

View File

@ -48,4 +48,22 @@ int32_t APS5_VABI sceLibcUnknown_BnMAMrsfVWo(void) {
return 0;
}
APS5_EXPORT("OQ-dzhlnM28", sceLibcInternalExtUnknown_OQ_dzhlnM28);
int APS5_VABI sceLibcInternalExtUnknown_OQ_dzhlnM28(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
APS5_EXPORT("qBS714-Jr3g", sceLibcInternalExtUnknown_qBS714_Jr3g);
int APS5_VABI sceLibcInternalExtUnknown_qBS714_Jr3g(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
APS5_EXPORT("tB59hFLH3SA", sceLibcInternalExtUnknown_tB59hFLH3SA);
int APS5_VABI sceLibcInternalExtUnknown_tB59hFLH3SA(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -487,4 +487,14 @@ int APS5_VABI sceKernelUtimes_nid_postfix(const char* path, const KernelTimeval*
return 0;
}
int APS5_VABI utimes_nid_postfix(const char* path, const KernelTimeval* times) {
if (const int error = PathError(path)) return PosixFailure(error);
return PosixResult(sceKernelUtimes_nid_postfix(path, times));
}
int APS5_VABI fsync_nid_postfix(int fd) {
if (sceKernelFsync(fd) != 0) return PosixFailure(errno);
return 0;
}
}

View File

@ -5,6 +5,7 @@
#include "prx/libc/include/General.hpp"
#include "../include/Pthread.hpp"
#include "Common.hpp"
#include "prx/libkernel/KernelErrors.hpp"
#include <thread>
extern "C" {
@ -39,6 +40,18 @@ void APS5_VABI pthread_exit_nid_postfix(void* value) {
scePthreadExit(value);
}
int APS5_VABI scePthreadGetschedparam(Pthread thread, int* policy, KernelSchedParam* param) {
if (!policy || !param) return SCE_KERNEL_ERROR_EINVAL;
*policy = GUEST_SCHED_FIFO;
return scePthreadGetprio(thread, &param->sched_priority);
}
int APS5_VABI scePthreadSetschedparam(Pthread thread, int policy, const KernelSchedParam* param) {
(void)policy;
if (!param) return SCE_KERNEL_ERROR_EINVAL;
return scePthreadSetprio(thread, param->sched_priority);
}
int APS5_VABI pthread_getschedparam_nid_postfix(Pthread thread, int* policy, KernelSchedParam* param) {
if (!policy || !param) return PosixThread::GUEST_EINVAL;
*policy = GUEST_SCHED_FIFO;

View File

@ -30,4 +30,46 @@ int APS5_VABI sceKernelUnknown02(void) {
NotImplemented_nid_no_patch("0D4-FVvEikw");
return 0;
}
APS5_EXPORT("B2n8aDorSH4", sceKernelUnknown_B2n8aDorSH4);
int APS5_VABI sceKernelUnknown_B2n8aDorSH4(void) {
NotImplemented_nid_no_patch("B2n8aDorSH4");
return 0;
}
APS5_EXPORT("NH6xARDOVv8", sceKernelUnknown_NH6xARDOVv8);
int APS5_VABI sceKernelUnknown_NH6xARDOVv8(void) {
NotImplemented_nid_no_patch("NH6xARDOVv8");
return 0;
}
APS5_EXPORT("PZQhiiLXRFs", sceKernelUnknown_PZQhiiLXRFs);
int APS5_VABI sceKernelUnknown_PZQhiiLXRFs(void) {
NotImplemented_nid_no_patch("PZQhiiLXRFs");
return 0;
}
int APS5_VABI sceKernelFchmod(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI fchmod_nid_postfix(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI futimes_nid_postfix(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI recvmsg_nid_postfix(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sendmsg_nid_postfix(void) {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -60,6 +60,11 @@ Throughout the project, every function at every stage either **does exactly what
- [BnMAMrsfVWo](../../core/libs/prx/libc/src/HeapDiagnostics.cpp) (libc) - unknown name, signature
- [scePngEncEncode](../../core/libs/prx/libScePngEnc/Export.cpp) (libScePngEnc) - whether rows may stay unfiltered when `filter_type` names a subset of the filters is unknown; as in shadPS4, they may only for 0 and for the all-filters mask
- AudioIn, NpSessionSignaling and PlayerInvitationDialog exports added without an implementation have assumed signatures
- [dbOlWdppb4o, vieBRwlh1Lw](../../core/libs/prx/libSceAgc/Unimplemented.cpp) (libSceAgc) - unknown name, signature
- [OQ-dzhlnM28, qBS714-Jr3g, tB59hFLH3SA](../../core/libs/prx/libc/src/HeapDiagnostics.cpp) (libSceLibcInternalExt, implemented in libc) - unknown name, signature
- [fCWdlnmB1Ks](../../core/libs/prx/libScePad/Export.cpp) (libScePad) - unknown name, signature
- [B2n8aDorSH4, NH6xARDOVv8, PZQhiiLXRFs](../../core/libs/prx/libkernel/Unimplemented.cpp) (libkernel) - unknown name, signature
- Font, Http2, Net, Ssl, SystemService and libkernel exports imported by PPSA12544 and added without an implementation have unknown signatures
- [libSceAudioPropagation](../../core/libs/prx/libSceAudioPropagation/Export.cpp) (libSceAudioPropagation) - signatures and struct descriptors recovered from PPSA21567's calls (#481), not from documentation. The system options layout is unknown (only checked for non-null); the fourth argument of `sceAudioPropagationSourceCalculateAudioPaths` is unknown; `sceAudioPropagationSourceGetAudioPath` is assumed to output an 8-byte path handle. The meaning of the `RenderInfo` word at +0x28 is unknown (PPSA21567 and PPSA21564 pass 2); only 2 is accepted. Both titles pass one `RenderInfo` per call: a count of 0 throws, and larger counts are handled element by element without proof. No error code is known, so invalid input throws instead of returning one
- [sceAvPlayerStartEx](../../core/libs/prx/libSceAvPlayer/Export.cpp) (libSceAvPlayer) - start info layout unknown; it is ignored and playback starts as with `sceAvPlayerStart`
- [sceAvPlayerInit / sceAvPlayerInitEx](../../core/libs/prx/libSceAvPlayer/src/Player.cpp) (libSceAvPlayer) - behaviour without a memory replacement unknown; frame and sample buffers then come from the guest heap