feat(libs): declare the exports PPSA14632 imports that no library provides

LEGO Horizon Adventures imports 19 functions that no library exports
and no open pull request adds, so it fails eager binding. They are
declared as throwing stubs. The two libSceAjmWVorbis imports have no
known name and are exported by NID from libSceAjm.native.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
alfalfa-star 2026-10-05 20:22:33 +02:00
parent 9ab937b261
commit e91fe0f063
13 changed files with 99 additions and 0 deletions

View File

@ -53,4 +53,14 @@ int APS5_VABI sceAcm_ConvReverb_SharedInput(void) {
return 0;
}
int APS5_VABI sceAcm_FFT() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceAcm_Panner() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -55,4 +55,16 @@ const char* APS5_VABI sceAjmStrError(int error) {
return nullptr;
}
APS5_EXPORT("Z4HDpe1ZEa4", sceAjmWVorbisUnknown00);
int APS5_VABI sceAjmWVorbisUnknown00(void) {
NotImplemented_nid_no_patch("Z4HDpe1ZEa4");
return 0;
}
APS5_EXPORT("oXShHcqMcX0", sceAjmWVorbisUnknown01);
int APS5_VABI sceAjmWVorbisUnknown01(void) {
NotImplemented_nid_no_patch("oXShHcqMcX0");
return 0;
}
}

View File

@ -14,4 +14,14 @@ int APS5_VABI sceGameLiveStreamingTerminate(void) {
return 0;
}
int APS5_VABI sceGameLiveStreamingGetCurrentStatus2() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceGameLiveStreamingGetProgramInfo() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -1053,4 +1053,9 @@ int APS5_VABI sceNetResolverAbort(void) {
return 0;
}
int APS5_VABI sceNetResolverStartNtoaMultipleRecords() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -149,4 +149,24 @@ int APS5_VABI sceNpEntitlementAccessGetPftFlag(void) {
return 0;
}
int APS5_VABI sceNpEntitlementAccessPollServiceEntitlementInfoList() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceNpEntitlementAccessPollUnifiedEntitlementInfoList() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceNpEntitlementAccessRequestServiceEntitlementInfoList() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceNpEntitlementAccessRequestUnifiedEntitlementInfoList() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -191,4 +191,9 @@ int APS5_VABI sceNpUnregisterPremiumEventCallback(void) {
return 0;
}
int APS5_VABI sceNpGetUserIdByAccountId() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -153,4 +153,9 @@ int APS5_VABI sceNpWebApi2PushEventUnregisterPushContextCallback() {
return 0;
}
int APS5_VABI sceNpWebApi2SetRequestTimeout() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -82,4 +82,9 @@ int APS5_VABI sceVoiceQoSWritePacket() {
return 0;
}
int APS5_VABI sceVoiceQoSGetLocalEndpointAttribute() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -69,4 +69,14 @@ int APS5_VABI sceWebBrowserDialogSetCookie(void) {
return 0;
}
int APS5_VABI sceWebBrowserDialogOpenForPredeterminedContent() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
int APS5_VABI sceWebBrowserDialogResetCookie() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -306,4 +306,9 @@ int APS5_VABI sceKernelAioWaitRequest(int32_t id, int32_t* state, uint32_t* usec
}
}
int APS5_VABI sceKernelAioPollRequests() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -184,4 +184,9 @@ int APS5_VABI sceKernelUnlink(const char* path) {
return 0;
}
int APS5_VABI sceKernelFcntl() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -110,4 +110,9 @@ int APS5_VABI pthread_attr_setstacksize_nid_postfix(PthreadAttr* attr, size_t st
return PosixThread::ToErrno(scePthreadAttrSetstacksize(attr, stack_size));
}
int APS5_VABI pthread_attr_setsolosched_np_nid_postfix() {
NotImplemented_nid_no_patch(__func__);
return 0;
}
}

View File

@ -125,6 +125,8 @@ Throughout the project, every function at every stage either **does exactly what
- [sceKernelGetOperationMode](../../core/libs/prx/libkernel/System/src/Process.cpp) (libkernel) - the signature `(int* mode, int* submode)` comes from PPSA12544, which logs both values after the call; the values are unknown and 0 is reported for both, as in the [prosper](https://github.com/mattias800/prosper/pull/4153) reimplementation. Null outputs throw
- Font, Http2, Net, Ssl, SystemService and libkernel exports imported by PPSA12544 and added without an implementation have unknown signatures
- [libSceVrSetupDialog](../../core/libs/prx/libSceVrSetupDialog/Export.cpp), and the Share, NpTrophy2, NpEntitlementAccess and WebBrowserDialog exports imported by PPSA12544's Unity plugins and added without an implementation, have unknown signatures
- [Z4HDpe1ZEa4, oXShHcqMcX0](../../core/libs/prx/libSceAjm.native/Export.cpp) (libSceAjmWVorbis, implemented in libSceAjm.native) - unknown name, signature
- Acm, GameLiveStreaming, Net, NpEntitlementAccess, NpManager, NpWebApi2, VoiceQoS, WebBrowserDialog and libkernel exports imported by PPSA14632 and added without an implementation are declared without parameters
- [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
- [NGS2 mastering voice gain](../../core/libs/prx/libSceNgs2.native/src/Voice.cpp) (libSceNgs2.native) - the param id 0x30000004 is taken from PPSA22520 and the layout from [shadPS4](https://github.com/shadps4-emu/shadPS4)'s `OrbisNgs2MasteringVoiceGainParam`; no reference gives the units or range. The levels are assumed to be linear factors applied when the mastering voice is mixed into the render buffer, so the voice's own samples stay unscaled; the LFE level applies to channel 3 of 6- and 8-channel voices, assuming the L R C LFE order of the AudioOut2 entries above, and the full-band level to the rest. Negative levels are accepted, and a new setup resets both levels to 1
- [NGS2 stereo mastering voice into a surround buffer](../../core/libs/prx/libSceNgs2.native/src/Render.cpp) (libSceNgs2.native) - PPSA21402 renders a 2-channel mastering voice into a 6- or 8-channel render buffer, which the mixing stage rejected. The console's conversion is unknown: the left and right channels are assumed to go to the first two buffer channels (front left and right) and the remaining channels stay silent, with no centre, LFE or surround content. Any other channel count mismatch still throws