mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Fix issue with hleLogDebugOrError where the return value argument got repeated.
Not good when the argument is a function call..
This commit is contained in:
parent
5712cf93e9
commit
1f5cfe82ed
4 changed files with 28 additions and 20 deletions
|
@ -174,7 +174,7 @@ void *GetQuickSyscallFunc(MIPSOpcode op);
|
|||
|
||||
void hleDoLogInternal(Log t, LogLevel level, u64 res, const char *file, int line, const char *reportTag, const char *reason, const char *formatted_reason);
|
||||
|
||||
template <bool leave, typename T>
|
||||
template <bool leave, bool convert_code, typename T>
|
||||
[[nodiscard]]
|
||||
#ifdef __GNUC__
|
||||
__attribute__((format(printf, 7, 8)))
|
||||
|
@ -188,6 +188,10 @@ T hleDoLog(Log t, LogLevel level, T res, const char *file, int line, const char
|
|||
return res;
|
||||
}
|
||||
|
||||
if (convert_code && (int)res >= 0) {
|
||||
level = LogLevel::LDEBUG;
|
||||
}
|
||||
|
||||
char formatted_reason[4096] = {0};
|
||||
if (reasonFmt != nullptr) {
|
||||
va_list args;
|
||||
|
@ -213,7 +217,7 @@ T hleDoLog(Log t, LogLevel level, T res, const char *file, int line, const char
|
|||
return res;
|
||||
}
|
||||
|
||||
template <bool leave, typename T>
|
||||
template <bool leave, bool convert_code, typename T>
|
||||
[[nodiscard]]
|
||||
NO_INLINE
|
||||
T hleDoLog(Log t, LogLevel level, T res, const char *file, int line, const char *reportTag) {
|
||||
|
@ -224,6 +228,10 @@ T hleDoLog(Log t, LogLevel level, T res, const char *file, int line, const char
|
|||
return res;
|
||||
}
|
||||
|
||||
if (convert_code && (int)res >= 0) {
|
||||
level = LogLevel::LDEBUG;
|
||||
}
|
||||
|
||||
u64 fmtRes = res;
|
||||
if (std::is_floating_point<T>::value) {
|
||||
// We reinterpret as the bits for now, so we can have a common helper.
|
||||
|
@ -283,18 +291,17 @@ inline R hleCallImpl(std::string_view module, std::string_view funcName, F func,
|
|||
// IMPORTANT: These *must* only be used directly in HLE functions. They cannot be used by utility functions
|
||||
// called by them. Use regular ERROR_LOG etc for those.
|
||||
|
||||
#define hleLogReturnHelper(t, level, res, ...) \
|
||||
(((int)level <= MAX_LOGLEVEL) ? hleDoLog<true>(t, level, (res), __FILE__, __LINE__, nullptr, ##__VA_ARGS__) : (res))
|
||||
#define hleLogReturnHelper(convert, t, level, res, ...) \
|
||||
(((int)level <= MAX_LOGLEVEL) ? hleDoLog<true, convert>(t, level, (res), __FILE__, __LINE__, nullptr, ##__VA_ARGS__) : (res))
|
||||
|
||||
#define hleLogError(t, res, ...) hleLogReturnHelper(t, LogLevel::LERROR, res, ##__VA_ARGS__)
|
||||
#define hleLogWarning(t, res, ...) hleLogReturnHelper(t, LogLevel::LWARNING, res, ##__VA_ARGS__)
|
||||
#define hleLogDebug(t, res, ...) hleLogReturnHelper(t, HLE_LOG_LDEBUG, res, ##__VA_ARGS__)
|
||||
#define hleLogInfo(t, res, ...) hleLogReturnHelper(t, LogLevel::LINFO, res, ##__VA_ARGS__)
|
||||
#define hleLogVerbose(t, res, ...) hleLogReturnHelper(t, HLE_LOG_LVERBOSE, res, ##__VA_ARGS__)
|
||||
#define hleLogError(t, res, ...) hleLogReturnHelper(false, t, LogLevel::LERROR, res, ##__VA_ARGS__)
|
||||
#define hleLogWarning(t, res, ...) hleLogReturnHelper(false, t, LogLevel::LWARNING, res, ##__VA_ARGS__)
|
||||
#define hleLogDebug(t, res, ...) hleLogReturnHelper(false, t, HLE_LOG_LDEBUG, res, ##__VA_ARGS__)
|
||||
#define hleLogInfo(t, res, ...) hleLogReturnHelper(false, t, LogLevel::LINFO, res, ##__VA_ARGS__)
|
||||
#define hleLogVerbose(t, res, ...) hleLogReturnHelper(false, t, HLE_LOG_LVERBOSE, res, ##__VA_ARGS__)
|
||||
|
||||
// If res is negative, log warn/error, otherwise log debug.
|
||||
#define hleLogDebugOrWarn(t, res, ...) hleLogReturnHelper(t, ((int)res < 0 ? LogLevel::LWARNING : HLE_LOG_LDEBUG), res, ##__VA_ARGS__)
|
||||
#define hleLogDebugOrError(t, res, ...) hleLogReturnHelper(t, ((int)res < 0 ? LogLevel::LERROR : HLE_LOG_LDEBUG), res, ##__VA_ARGS__)
|
||||
#define hleLogDebugOrWarn(t, res, ...) hleLogReturnHelper(true, t, LogLevel::LWARNING, res, ##__VA_ARGS__)
|
||||
#define hleLogDebugOrError(t, res, ...) hleLogReturnHelper(true, t, LogLevel::LERROR, res, ##__VA_ARGS__)
|
||||
|
||||
#define hleReportError(t, res, ...) hleDoLog<true>(t, LogLevel::LERROR, res, __FILE__, __LINE__, "", ##__VA_ARGS__)
|
||||
#define hleReportWarning(t, res, ...) hleDoLog<true>(t, LogLevel::LWARNING, res, __FILE__, __LINE__, "", ##__VA_ARGS__)
|
||||
#define hleReportError(t, res, ...) hleDoLog<true, false>(t, LogLevel::LERROR, res, __FILE__, __LINE__, "", ##__VA_ARGS__)
|
||||
#define hleReportWarning(t, res, ...) hleDoLog<true, false>(t, LogLevel::LWARNING, res, __FILE__, __LINE__, "", ##__VA_ARGS__)
|
||||
|
|
|
@ -75,8 +75,9 @@ static int sceKernelCreateHeap(int partitionId, int size, int flags, const char
|
|||
static int sceKernelAllocHeapMemory(int heapId, int size) {
|
||||
u32 error;
|
||||
KernelHeap *heap = kernelObjects.Get<KernelHeap>(heapId, error);
|
||||
if (!heap)
|
||||
if (!heap) {
|
||||
return hleLogError(Log::sceKernel, error, "invalid heapId");
|
||||
}
|
||||
|
||||
// There's 8 bytes at the end of every block, reserved.
|
||||
u32 memSize = KERNEL_HEAP_BLOCK_HEADER_SIZE + size;
|
||||
|
|
|
@ -2173,10 +2173,9 @@ u32 sceKernelLoadModule(const char *name, u32 flags, u32 optionAddr) {
|
|||
return hleDelayResult(hleNoLog(module->GetUID()), "module loaded", 500);
|
||||
}
|
||||
|
||||
static u32 sceKernelLoadModuleNpDrm(const char *name, u32 flags, u32 optionAddr)
|
||||
{
|
||||
// TODO: Handle recursive syscall properly
|
||||
return hleLogDebugOrError(Log::Loader, sceKernelLoadModule(name, flags, optionAddr));
|
||||
static u32 sceKernelLoadModuleNpDrm(const char *name, u32 flags, u32 optionAddr) {
|
||||
// Just forward it, same parameters so the logging will make sense.
|
||||
return sceKernelLoadModule(name, flags, optionAddr);
|
||||
}
|
||||
|
||||
int __KernelStartModule(SceUID moduleId, u32 argsize, u32 argAddr, u32 returnValueAddr, SceKernelSMOption *smoption, bool *needsWait) {
|
||||
|
|
|
@ -358,7 +358,8 @@ u32 GPUCommon::EnqueueList(u32 listpc, u32 stall, int subIntrBase, PSPPointer<Ps
|
|||
|
||||
// If args->size is below 16, it's the old struct without stack info.
|
||||
if (args.IsValid() && args->size >= 16 && args->numStacks >= 256) {
|
||||
return hleLogError(Log::G3D, SCE_KERNEL_ERROR_INVALID_SIZE, "invalid stack depth %d", args->numStacks);
|
||||
ERROR_LOG(Log::G3D, "invalid stack depth %d", args->numStacks);
|
||||
return SCE_KERNEL_ERROR_INVALID_SIZE;
|
||||
}
|
||||
|
||||
int id = -1;
|
||||
|
|
Loading…
Add table
Reference in a new issue