Libraries: Implement sceKernelIsInSandbox, update OrbisSysModule enum (#3546)

* Implement sceKernelIsInSandbox

libSceSysmodule uses this to determine if it should use sceKernelGetFsSandboxRandomWord or just hardcode "system" for retrieving modules.
Also changes some function types to use our types.

* Update OrbisSysModule enum

Adds missing values based on library testing.

* Clang
This commit is contained in:
Stephen Miller
2025-09-07 15:11:15 -05:00
committed by GitHub
parent d34ae8ce08
commit b5d8426db7
4 changed files with 109 additions and 84 deletions

View File

@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project // SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#include "common/config.h" #include "common/config.h"
@@ -12,18 +12,22 @@
namespace Libraries::Kernel { namespace Libraries::Kernel {
int PS4_SYSV_ABI sceKernelIsNeoMode() { s32 PS4_SYSV_ABI sceKernelIsInSandbox() {
return 1;
}
s32 PS4_SYSV_ABI sceKernelIsNeoMode() {
return Config::isNeoModeConsole() && return Config::isNeoModeConsole() &&
Common::ElfInfo::Instance().GetPSFAttributes().support_neo_mode; Common::ElfInfo::Instance().GetPSFAttributes().support_neo_mode;
} }
int PS4_SYSV_ABI sceKernelGetCompiledSdkVersion(int* ver) { s32 PS4_SYSV_ABI sceKernelGetCompiledSdkVersion(s32* ver) {
int version = Common::ElfInfo::Instance().RawFirmwareVer(); s32 version = Common::ElfInfo::Instance().RawFirmwareVer();
*ver = version; *ver = version;
return (version >= 0) ? ORBIS_OK : ORBIS_KERNEL_ERROR_EINVAL; return (version >= 0) ? ORBIS_OK : ORBIS_KERNEL_ERROR_EINVAL;
} }
int PS4_SYSV_ABI sceKernelGetCpumode() { s32 PS4_SYSV_ABI sceKernelGetCpumode() {
return 0; return 0;
} }
@@ -33,7 +37,7 @@ void* PS4_SYSV_ABI sceKernelGetProcParam() {
} }
s32 PS4_SYSV_ABI sceKernelLoadStartModule(const char* moduleFileName, u64 args, const void* argp, s32 PS4_SYSV_ABI sceKernelLoadStartModule(const char* moduleFileName, u64 args, const void* argp,
u32 flags, const void* pOpt, int* pRes) { u32 flags, const void* pOpt, s32* pRes) {
LOG_INFO(Lib_Kernel, "called filename = {}, args = {}", moduleFileName, args); LOG_INFO(Lib_Kernel, "called filename = {}, args = {}", moduleFileName, args);
ASSERT(flags == 0); ASSERT(flags == 0);
@@ -201,6 +205,7 @@ s32 PS4_SYSV_ABI exit(s32 status) {
} }
void RegisterProcess(Core::Loader::SymbolsResolver* sym) { void RegisterProcess(Core::Loader::SymbolsResolver* sym) {
LIB_FUNCTION("xeu-pV8wkKs", "libkernel", 1, "libkernel", 1, 1, sceKernelIsInSandbox);
LIB_FUNCTION("WB66evu8bsU", "libkernel", 1, "libkernel", 1, 1, sceKernelGetCompiledSdkVersion); LIB_FUNCTION("WB66evu8bsU", "libkernel", 1, "libkernel", 1, 1, sceKernelGetCompiledSdkVersion);
LIB_FUNCTION("WslcK1FQcGI", "libkernel", 1, "libkernel", 1, 1, sceKernelIsNeoMode); LIB_FUNCTION("WslcK1FQcGI", "libkernel", 1, "libkernel", 1, 1, sceKernelIsNeoMode);
LIB_FUNCTION("VOx8NGmHXTs", "libkernel", 1, "libkernel", 1, 1, sceKernelGetCpumode); LIB_FUNCTION("VOx8NGmHXTs", "libkernel", 1, "libkernel", 1, 1, sceKernelGetCpumode);

View File

@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project // SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#pragma once #pragma once
@@ -11,7 +11,7 @@ class SymbolsResolver;
namespace Libraries::Kernel { namespace Libraries::Kernel {
static constexpr size_t ORBIS_DBG_MAX_NAME_LENGTH = 256; static constexpr u64 ORBIS_DBG_MAX_NAME_LENGTH = 256;
struct OrbisModuleInfoForUnwind { struct OrbisModuleInfoForUnwind {
u64 st_size; u64 st_size;
@@ -23,9 +23,9 @@ struct OrbisModuleInfoForUnwind {
u64 seg0_size; u64 seg0_size;
}; };
int PS4_SYSV_ABI sceKernelIsNeoMode(); s32 PS4_SYSV_ABI sceKernelIsNeoMode();
int PS4_SYSV_ABI sceKernelGetCompiledSdkVersion(int* ver); s32 PS4_SYSV_ABI sceKernelGetCompiledSdkVersion(s32* ver);
s32 PS4_SYSV_ABI sceKernelGetModuleInfoForUnwind(VAddr addr, s32 flags, s32 PS4_SYSV_ABI sceKernelGetModuleInfoForUnwind(VAddr addr, s32 flags,
OrbisModuleInfoForUnwind* info); OrbisModuleInfoForUnwind* info);

View File

@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project // SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#define MAGIC_ENUM_RANGE_MIN 0 #define MAGIC_ENUM_RANGE_MIN 0

View File

@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project // SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#pragma once #pragma once
@@ -25,15 +25,15 @@ enum class OrbisSysModule : u16 {
ORBIS_SYSMODULE_NP_SCORE_RANKING = 0x001E, // libSceNpScoreRanking.sprx ORBIS_SYSMODULE_NP_SCORE_RANKING = 0x001E, // libSceNpScoreRanking.sprx
ORBIS_SYSMODULE_RUDP = 0x0021, // libSceRudp.sprx ORBIS_SYSMODULE_RUDP = 0x0021, // libSceRudp.sprx
ORBIS_SYSMODULE_NP_TUS = 0x002C, // libSceNpTus.sprx ORBIS_SYSMODULE_NP_TUS = 0x002C, // libSceNpTus.sprx
ORBIS_SYSMODULE_FACE = 0x0038, ORBIS_SYSMODULE_FACE = 0x0038, // libSceFace.sprx
ORBIS_SYSMODULE_SMART = 0x0039, ORBIS_SYSMODULE_SMART = 0x0039, // libSceSmart.sprx
ORBIS_SYSMODULE_JSON = 0x0080, ORBIS_SYSMODULE_JSON = 0x0080, // libSceJson.sprx
ORBIS_SYSMODULE_GAME_LIVE_STREAMING = 0x0081, // libSceGameLiveStreaming.sprx ORBIS_SYSMODULE_GAME_LIVE_STREAMING = 0x0081, // libSceGameLiveStreaming.sprx
ORBIS_SYSMODULE_COMPANION_UTIL = 0x0082, // libSceCompanionUtil.sprx ORBIS_SYSMODULE_COMPANION_UTIL = 0x0082, // libSceCompanionUtil.sprx
ORBIS_SYSMODULE_PLAYGO = 0x0083, // libScePlayGo.sprx ORBIS_SYSMODULE_PLAYGO = 0x0083, // libScePlayGo.sprx
ORBIS_SYSMODULE_FONT = 0x0084, // libSceFont.sprx ORBIS_SYSMODULE_FONT = 0x0084, // libSceFont.sprx
ORBIS_SYSMODULE_VIDEO_RECORDING = 0x0085, // libSceVideoRecording.sprx ORBIS_SYSMODULE_VIDEO_RECORDING = 0x0085, // libSceVideoRecording.sprx
ORBIS_SYSMODULE_S3DCONVERSION = 0x0086, ORBIS_SYSMODULE_S3DCONVERSION = 0x0086, // libSceS3DConversion
ORBIS_SYSMODULE_AUDIODEC = 0x0088, // libSceAudiodec.sprx ORBIS_SYSMODULE_AUDIODEC = 0x0088, // libSceAudiodec.sprx
ORBIS_SYSMODULE_JPEG_DEC = 0x008A, // libSceJpegDec.sprx ORBIS_SYSMODULE_JPEG_DEC = 0x008A, // libSceJpegDec.sprx
ORBIS_SYSMODULE_JPEG_ENC = 0x008B, // libSceJpegEnc.sprx ORBIS_SYSMODULE_JPEG_ENC = 0x008B, // libSceJpegEnc.sprx
@@ -43,7 +43,7 @@ enum class OrbisSysModule : u16 {
ORBIS_SYSMODULE_MOVE = 0x008F, // libSceMove.sprx ORBIS_SYSMODULE_MOVE = 0x008F, // libSceMove.sprx
ORBIS_SYSMODULE_PAD_TRACKER = 0x0091, // libScePadTracker.sprx ORBIS_SYSMODULE_PAD_TRACKER = 0x0091, // libScePadTracker.sprx
ORBIS_SYSMODULE_DEPTH = 0x0092, // libSceDepth.sprx ORBIS_SYSMODULE_DEPTH = 0x0092, // libSceDepth.sprx
ORBIS_SYSMODULE_HAND = 0x0093, ORBIS_SYSMODULE_HAND = 0x0093, // libSceHand.sprx
ORBIS_SYSMODULE_LIBIME = 0x0095, // libSceIme.sprx ORBIS_SYSMODULE_LIBIME = 0x0095, // libSceIme.sprx
ORBIS_SYSMODULE_IME_DIALOG = 0x0096, // libSceImeDialog.sprx ORBIS_SYSMODULE_IME_DIALOG = 0x0096, // libSceImeDialog.sprx
ORBIS_SYSMODULE_NP_PARTY = 0x0097, // libSceNpParty.sprx ORBIS_SYSMODULE_NP_PARTY = 0x0097, // libSceNpParty.sprx
@@ -95,11 +95,11 @@ enum class OrbisSysModule : u16 {
ORBIS_SYSMODULE_SHARE_UTILITY = 0x00C8, // libSceShareUtility.sprx ORBIS_SYSMODULE_SHARE_UTILITY = 0x00C8, // libSceShareUtility.sprx
ORBIS_SYSMODULE_AUDIODEC_CPU_DTS_HD_LBR = 0x00C9, // libSceAudiodecCpuDtsHdLbr.sprx ORBIS_SYSMODULE_AUDIODEC_CPU_DTS_HD_LBR = 0x00C9, // libSceAudiodecCpuDtsHdLbr.sprx
ORBIS_SYSMODULE_DECI4H = 0x00CA, ORBIS_SYSMODULE_DECI4H = 0x00CA,
ORBIS_SYSMODULE_HEAD_TRACKER = 0x00CB, ORBIS_SYSMODULE_HEAD_TRACKER = 0x00CB, // libSceHeadTracker.sprx
ORBIS_SYSMODULE_GAME_UPDATE = 0x00CC, // libSceGameUpdate.sprx ORBIS_SYSMODULE_GAME_UPDATE = 0x00CC, // libSceGameUpdate.sprx
ORBIS_SYSMODULE_AUTO_MOUNTER_CLIENT = 0x00CD, // libSceAutoMounterClient.sprx ORBIS_SYSMODULE_AUTO_MOUNTER_CLIENT = 0x00CD, // libSceAutoMounterClient.sprx
ORBIS_SYSMODULE_SYSTEM_GESTURE = 0x00CE, // libSceSystemGesture.sprx ORBIS_SYSMODULE_SYSTEM_GESTURE = 0x00CE, // libSceSystemGesture.sprx
ORBIS_SYSMODULE_VIDEODEC2 = 0x00CF, ORBIS_SYSMODULE_VIDEODEC2 = 0x00CF, // libSceVideodec2.sprx
ORBIS_SYSMODULE_VDECWRAP = 0x00D0, // libSceVdecwrap.sprx ORBIS_SYSMODULE_VDECWRAP = 0x00D0, // libSceVdecwrap.sprx
ORBIS_SYSMODULE_AT9_ENC = 0x00D1, // libSceAt9Enc.sprx ORBIS_SYSMODULE_AT9_ENC = 0x00D1, // libSceAt9Enc.sprx
ORBIS_SYSMODULE_CONVERT_KEYCODE = 0x00D2, // libSceConvertKeycode.sprx ORBIS_SYSMODULE_CONVERT_KEYCODE = 0x00D2, // libSceConvertKeycode.sprx
@@ -108,14 +108,14 @@ enum class OrbisSysModule : u16 {
ORBIS_SYSMODULE_USB_STORAGE = 0x00D5, // libSceUsbStorage.sprx ORBIS_SYSMODULE_USB_STORAGE = 0x00D5, // libSceUsbStorage.sprx
ORBIS_SYSMODULE_USB_STORAGE_DIALOG = 0x00D6, // libSceUsbStorageDialog.sprx ORBIS_SYSMODULE_USB_STORAGE_DIALOG = 0x00D6, // libSceUsbStorageDialog.sprx
ORBIS_SYSMODULE_DISC_MAP = 0x00D7, // libSceDiscMap.sprx ORBIS_SYSMODULE_DISC_MAP = 0x00D7, // libSceDiscMap.sprx
ORBIS_SYSMODULE_FACE_TRACKER = 0x00D8, ORBIS_SYSMODULE_FACE_TRACKER = 0x00D8, // libSceFaceTracker.sprx
ORBIS_SYSMODULE_HAND_TRACKER = 0x00D9, ORBIS_SYSMODULE_HAND_TRACKER = 0x00D9, // libSceHandTracker.sprx
ORBIS_SYSMODULE_NP_SNS_YOUTUBE_DIALOG = 0x00DA, // libSceNpSnsYouTubeDialog.sprx ORBIS_SYSMODULE_NP_SNS_YOUTUBE_DIALOG = 0x00DA, // libSceNpSnsYouTubeDialog.sprx
ORBIS_SYSMODULE_PROFILE_CACHE_EXTERNAL = 0x00DC, // libSceProfileCacheExternal.sprx ORBIS_SYSMODULE_PROFILE_CACHE_EXTERNAL = 0x00DC, // libSceProfileCacheExternal.sprx
ORBIS_SYSMODULE_MUSIC_PLAYER_SERVICE = 0x00DD, // libSceMusicPlayerService.sprx ORBIS_SYSMODULE_MUSIC_PLAYER_SERVICE = 0x00DD, // libSceMusicPlayerService.sprx
ORBIS_SYSMODULE_SP_SYS_CALL_WRAPPER = 0x00DE, // libSceSpSysCallWrapper.sprx ORBIS_SYSMODULE_SP_SYS_CALL_WRAPPER = 0x00DE, // libSceSpSysCallWrapper.sprx
ORBIS_SYSMODULE_PS2_EMU_MENU_DIALOG = 0x00DF, // libScePs2EmuMenuDialog.sprx ORBIS_SYSMODULE_PS2_EMU_MENU_DIALOG = 0x00DF, // libScePs2EmuMenuDialog.sprx
ORBIS_SYSMODULE_NP_SNS_DIALYMOTION_DIALOG = 0x00E0, // libSceNpSnsDailyMotionDialog.sprx ORBIS_SYSMODULE_NP_SNS_DAILYMOTION_DIALOG = 0x00E0, // libSceNpSnsDailyMotionDialog.sprx
ORBIS_SYSMODULE_AUDIODEC_CPU_HEVAG = 0x00E1, // libSceAudiodecCpuHevag.sprx ORBIS_SYSMODULE_AUDIODEC_CPU_HEVAG = 0x00E1, // libSceAudiodecCpuHevag.sprx
ORBIS_SYSMODULE_LOGIN_DIALOG = 0x00E2, // libSceLoginDialog.sprx ORBIS_SYSMODULE_LOGIN_DIALOG = 0x00E2, // libSceLoginDialog.sprx
ORBIS_SYSMODULE_LOGIN_SERVICE = 0x00E3, // libSceLoginService.sprx ORBIS_SYSMODULE_LOGIN_SERVICE = 0x00E3, // libSceLoginService.sprx
@@ -123,9 +123,9 @@ enum class OrbisSysModule : u16 {
ORBIS_SYSMODULE_VDECSW = 0x00E5, // libSceVdecsw.sprx ORBIS_SYSMODULE_VDECSW = 0x00E5, // libSceVdecsw.sprx
ORBIS_SYSMODULE_CUSTOM_MUSIC_CORE = 0x00E6, // libSceCustomMusicCore.sprx ORBIS_SYSMODULE_CUSTOM_MUSIC_CORE = 0x00E6, // libSceCustomMusicCore.sprx
ORBIS_SYSMODULE_JSON2 = 0x00E7, // libSceJson2.sprx ORBIS_SYSMODULE_JSON2 = 0x00E7, // libSceJson2.sprx
ORBIS_SYSMODULE_AUDIO_LATENCY_ESTIMATION = 0x00E8, ORBIS_SYSMODULE_AUDIO_LATENCY_ESTIMATION = 0x00E8, // libSceAudioLatencyEstimation.sprx
ORBIS_SYSMODULE_WK_FONT_CONFIG = 0x00E9, // libSceWkFontConfig.sprx ORBIS_SYSMODULE_WK_FONT_CONFIG = 0x00E9, // libSceWkFontConfig.sprx
ORBIS_SYSMODULE_RESERVED27 = 0x00EA, ORBIS_SYSMODULE_VORBIS_DEC = 0x00EA, // libSceVorbisDec.sprx
ORBIS_SYSMODULE_HMD_SETUP_DIALOG = 0x00EB, // libSceHmdSetupDialog.sprx ORBIS_SYSMODULE_HMD_SETUP_DIALOG = 0x00EB, // libSceHmdSetupDialog.sprx
ORBIS_SYSMODULE_RESERVED28 = 0x00EC, ORBIS_SYSMODULE_RESERVED28 = 0x00EC,
ORBIS_SYSMODULE_VR_TRACKER = 0x00ED, // libSceVrTracker.sprx ORBIS_SYSMODULE_VR_TRACKER = 0x00ED, // libSceVrTracker.sprx
@@ -137,15 +137,35 @@ enum class OrbisSysModule : u16 {
ORBIS_SYSMODULE_EDIT_MP4 = 0x00F3, // libSceEditMp4.sprx ORBIS_SYSMODULE_EDIT_MP4 = 0x00F3, // libSceEditMp4.sprx
ORBIS_SYSMODULE_PSM_KIT_SYSTEM = 0x00F5, // libScePsmKitSystem.sprx ORBIS_SYSMODULE_PSM_KIT_SYSTEM = 0x00F5, // libScePsmKitSystem.sprx
ORBIS_SYSMODULE_TEXT_TO_SPEECH = 0x00F6, // libSceTextToSpeech.sprx ORBIS_SYSMODULE_TEXT_TO_SPEECH = 0x00F6, // libSceTextToSpeech.sprx
ORBIS_SYSMODULE_NP_TOOLKIT = 0x00F7, ORBIS_SYSMODULE_NP_TOOLKIT = 0x00F7, // libSceNpToolkit.sprx
ORBIS_SYSMODULE_CUSTOM_MUSIC_SERVICE = 0x00F8, // libSceCustomMusicService.sprx ORBIS_SYSMODULE_CUSTOM_MUSIC_SERVICE = 0x00F8, // libSceCustomMusicService.sprx
ORBIS_SYSMODULE_CL_SYS_CALL_WRAPPER = 0x00F9, // libSceClSysCallWrapper.sprx ORBIS_SYSMODULE_CL_SYS_CALL_WRAPPER = 0x00F9, // libSceClSysCallWrapper.sprx
ORBIS_SYSMODULE_SYSTEM_LOGGER = 0x00FA, // libSceSystemLogger.sprx ORBIS_SYSMODULE_SYSTEM_LOGGER = 0x00FA, // libSceSystemLogger.sprx
ORBIS_SYSMODULE_BLUETOOTH_HID = 0x00FB, // libSceBluetoothHid.sprx ORBIS_SYSMODULE_BLUETOOTH_HID = 0x00FB, // libSceBluetoothHid.sprx
ORBIS_SYSMODULE_VIDEO_DECODER_ARBITRATION = 0x00FC, // libSceVideoDecoderArbitration.sprx ORBIS_SYSMODULE_VIDEO_DECODER_ARBITRATION = 0x00FC, // libSceVideoDecoderArbitration.sprx
ORBIS_SYSMODULE_VR_SERVICE_DIALOG = 0x00FD, // libSceVrServiceDialog.sprx ORBIS_SYSMODULE_VR_SERVICE_DIALOG = 0x00FD, // libSceVrServiceDialog.sprx
ORBIS_SYSMODULE_JOB_MANAGER = 0x00FE, ORBIS_SYSMODULE_JOB_MANAGER = 0x00FE, // libSceJobManager.sprx
ORBIS_SYSMODULE_KEYBOARD = 0x0106, ORBIS_SYSMODULE_SHARE_FACTORY_UTIL = 0x00FF, // libSceShareFactoryUtil.sprx
ORBIS_SYSMODULE_SOCIAL_SCREEN_DIALOG = 0x0100, // libSceSocialScreenDialog.sprx
ORBIS_SYSMODULE_NP_SNS_DIALOG = 0x0101, // libSceNpSnsDialog.sprx
ORBIS_SYSMODULE_NP_TOOLKIT2 = 0x0102, // libSceNpToolkit2.sprx
ORBIS_SYSMODULE_SRC_UTL = 0x0103, // libSceSrcUtl.sprx
ORBIS_SYSMODULE_DISC_ID = 0x0104, // libSceDiscId.sprx
ORBIS_SYSMODULE_NP_UNIVERSAL_DATA_SYSTEM = 0x0105, // libSceNpUniversalDataSystem.sprx
ORBIS_SYSMODULE_KEYBOARD = 0x0106, // libSceKeyboard.sprx
ORBIS_SYSMODULE_GIC = 0x0107, // libSceGic.sprx
ORBIS_SYSMODULE_PLAY_READY2 = 0x0108, // libScePlayReady2.sprx
ORBIS_SYSMODULE_CES_CS = 0x010c, // libSceCesCs.sprx
ORBIS_SYSMODULE_PLAYER_INVITATION_DIALOG = 0x010d, // libScePlayerInvitationDialog.sprx
ORBIS_SYSMODULE_NP_SESSION_SIGNALING = 0x0112, // libSceNpSessionSignaling.sprx
ORBIS_SYSMODULE_NP_ENTITLEMENT_ACCESS = 0x0113, // libSceNpEntitlementAccess.sprx
ORBIS_SYSMODULE_NP_CPP_WEB_API = 0x0115, // libSceNpCppWebApi.sprx
ORBIS_SYSMODULE_HUB_APP_UTIL = 0x0116, // libSceHubAppUtil.sprx
ORBIS_SYSMODULE_NP_PARTNER001 = 0x011a, // libSceNpPartner001.sprx
ORBIS_SYSMODULE_FONT_GS = 0x012f, // libSceFontGs.sprx
ORBIS_SYSMODULE_FONT_GSM = 0x0135, // libSceFontGsm.sprx
ORBIS_SYSMODULE_NP_PARTNER_SUBSCRIPTION = 0x0138, // libSceNpPartnerSubscription.sprx
ORBIS_SYSMODULE_NP_AUTH_AUTHORIZED_APP_DIALOG = 0x0139, // libSceNpAuthAuthorizedAppDialog.sprx
}; };
enum class OrbisSysModuleInternal : u32 { enum class OrbisSysModuleInternal : u32 {