// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include #include "common/types.h" #include "core/libraries/kernel/orbis_error.h" namespace Core::Loader { class SymbolsResolver; } namespace Libraries::Kernel { void ErrSceToPosix(int result); int ErrnoToSceKernelError(int e); template struct StringLiteral { constexpr StringLiteral(const char (&str)[N]) { std::copy_n(str, N, value); } char value[N]; }; template struct WrapperImpl; template struct WrapperImpl { static constexpr StringLiteral Name{name}; static R PS4_SYSV_ABI wrap(Args... args) { u32 ret = f(args...); if (ret != 0) { // LOG_ERROR(Lib_Kernel, "Function {} returned {}", std::string_view{name.value}, ret); ret += ORBIS_KERNEL_ERROR_UNKNOWN; } return ret; } }; template constexpr auto OrbisWrapper = WrapperImpl::wrap; #define ORBIS(func) WrapperImpl<#func, decltype(&func), func>::wrap int* PS4_SYSV_ABI __Error(); void RegisterKernel(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Kernel