Merge pull request #8503 from unknownbrackets/hle-minor

Minor logging adjustments, not used yet
This commit is contained in:
Henrik Rydgård committed 2016-01-27 12:29:43 +01:00
commit 194e9eddec
3 files changed
+96 -70

No files matched your search

+23 -27
View File
@@ -43,6 +43,10 @@
#include "Core/HLE/sceKernelInterrupt.h"
#include "Core/HLE/HLE.h"
#ifdef BLACKBERRY
using std::strnlen;
#endif
enum
{
// Do nothing after the syscall.
@@ -596,9 +600,22 @@ size_t hleFormatLogArgs(char *message, size_t sz, const char *argmask) {
}
break;
case 'P':
if (Memory::IsValidAddress(regval)) {
APPEND_FMT("%08x[%016llx]", regval, Memory::Read_U64(regval));
} else {
APPEND_FMT("%08x[invalid]", regval);
}
break;
case 's':
if (Memory::IsValidAddress(regval)) {
APPEND_FMT("%s", Memory::GetCharPointer(regval));
const char *s = Memory::GetCharPointer(regval);
if (strnlen(s, 64) >= 64) {
APPEND_FMT("%.64s...", Memory::GetCharPointer(regval));
} else {
APPEND_FMT("%s", Memory::GetCharPointer(regval));
}
} else {
APPEND_FMT("(invalid)");
}
@@ -649,22 +666,7 @@ size_t hleFormatLogArgs(char *message, size_t sz, const char *argmask) {
return used;
}
u32 hleDoLog(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, u32 res, const char *file, int line, const char *reportTag, char retmask, const char *reason, ...) {
if (level > MAX_LOGLEVEL || !GenericLogEnabled(level, t)) {
return res;
}
char formatted_reason[4096] = {0};
if (reason != nullptr) {
va_list args;
va_start(args, reason);
formatted_reason[0] = ':';
formatted_reason[1] = ' ';
vsnprintf(formatted_reason + 2, sizeof(formatted_reason) - 3, reason, args);
formatted_reason[sizeof(formatted_reason) - 1] = '\0';
va_end(args);
}
void hleDoLogInternal(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, u64 res, const char *file, int line, const char *reportTag, char retmask, const char *reason, const char *formatted_reason) {
char formatted_args[4096];
hleFormatLogArgs(formatted_args, sizeof(formatted_args), latestSyscall->argmask);
@@ -675,12 +677,12 @@ u32 hleDoLog(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, u32 res, const ch
const char *fmt;
// TODO: Floats and other types... move to another func (for return type?) Hmm.
if (retmask == 'x') {
fmt = "%08x=%s(%s)%s";
} else if (retmask == 'i') {
fmt = "%d=%s(%s)%s";
fmt = "%08llx=%s(%s)%s";
} else if (retmask == 'i' || retmask == 'I') {
fmt = "%lld=%s(%s)%s";
} else {
_assert_msg_(HLE, false, "Invalid return format: %c", retmask);
fmt = "%08x=%s(%s)%s";
fmt = "%08llx=%s(%s)%s";
}
GenericLog(level, t, file, line, fmt, res, latestSyscall->name, formatted_args, formatted_reason);
@@ -698,10 +700,4 @@ u32 hleDoLog(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, u32 res, const ch
Reporting::ReportMessageFormatted(key.c_str(), formatted_message);
}
}
return res;
}
u32 hleDoLog(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, u32 res, const char *file, int line, const char *reportTag, char retmask) {
return hleDoLog(t, level, res, file, line, reportTag, retmask, nullptr);
}
+34 -4
View File
@@ -17,6 +17,7 @@
#pragma once
#include <cstdarg>
#include "Common/CommonTypes.h"
#include "Common/Log.h"
#include "Core/MIPS/MIPS.h"
@@ -146,8 +147,38 @@ const HLEFunction *GetSyscallInfo(MIPSOpcode op);
// For jit, takes arg: const HLEFunction *
void *GetQuickSyscallFunc(MIPSOpcode op);
u32 hleDoLog(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, u32 res, const char *file, int line, const char *reportTag, char retmask, const char *reason, ...);
u32 hleDoLog(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, u32 res, const char *file, int line, const char *reportTag, char retmask);
void hleDoLogInternal(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, u64 res, const char *file, int line, const char *reportTag, char retmask, const char *reason, const char *formatted_reason);
template <typename T>
T hleDoLog(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, T res, const char *file, int line, const char *reportTag, char retmask, const char *reason, ...) {
if (level > MAX_LOGLEVEL || !GenericLogEnabled(level, t)) {
return res;
}
char formatted_reason[4096] = {0};
if (reason != nullptr) {
va_list args;
va_start(args, reason);
formatted_reason[0] = ':';
formatted_reason[1] = ' ';
vsnprintf(formatted_reason + 2, sizeof(formatted_reason) - 3, reason, args);
formatted_reason[sizeof(formatted_reason) - 1] = '\0';
va_end(args);
}
hleDoLogInternal(t, level, res, file, line, reportTag, retmask, reason, formatted_reason);
return res;
}
template <typename T>
T hleDoLog(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, T res, const char *file, int line, const char *reportTag, char retmask) {
if (level > MAX_LOGLEVEL || !GenericLogEnabled(level, t)) {
return res;
}
hleDoLogInternal(t, level, res, file, line, reportTag, retmask, nullptr, "");
return res;
}
// This is just a quick way to force logging to be more visible for one file.
#ifdef HLE_LOG_FORCE
@@ -163,8 +194,7 @@ u32 hleDoLog(LogTypes::LOG_TYPE t, LogTypes::LOG_LEVELS level, u32 res, const ch
#define HLE_LOG_LVERBOSE LVERBOSE
#endif
// Only one side of the ?: is evaluated (per c++ standard), so this should be safe.
#define hleLogHelper(t, level, res, retmask, ...) (LogTypes::level > MAX_LOGLEVEL ? res : hleDoLog(LogTypes::t, LogTypes::level, res, __FILE__, __LINE__, nullptr, retmask, ##__VA_ARGS__))
#define hleLogHelper(t, level, res, retmask, ...) hleDoLog(LogTypes::t, LogTypes::level, res, __FILE__, __LINE__, nullptr, retmask, ##__VA_ARGS__)
#define hleLogError(t, res, ...) hleLogHelper(t, LERROR, res, 'x', ##__VA_ARGS__)
#define hleLogWarning(t, res, ...) hleLogHelper(t, LWARNING, res, 'x', ##__VA_ARGS__)
#define hleLogDebug(t, res, ...) hleLogHelper(t, HLE_LOG_LDEBUG, res, 'x', ##__VA_ARGS__)
+39 -39
View File
@@ -2418,43 +2418,43 @@ KernelObject *__KernelDirListingObject() {
}
const HLEFunction IoFileMgrForUser[] = {
{0XB29DDF9C, &WrapU_C<sceIoDopen>, "sceIoDopen", 'x', "s" },
{0XE3EB004C, &WrapU_IU<sceIoDread>, "sceIoDread", 'x', "ix" },
{0XEB092469, &WrapU_I<sceIoDclose>, "sceIoDclose", 'x', "i" },
{0XE95A012B, &WrapU_UUUUUU<sceIoIoctlAsync>, "sceIoIoctlAsync", 'x', "xxxxxx"},
{0X63632449, &WrapU_UUUUUU<sceIoIoctl>, "sceIoIoctl", 'x', "xxxxxx"},
{0XACE946E8, &WrapU_CU<sceIoGetstat>, "sceIoGetstat", 'x', "sx" },
{0XB8A740F4, &WrapU_CUU<sceIoChstat>, "sceIoChstat", 'x', "sxx" },
{0X55F4717D, &WrapU_C<sceIoChdir>, "sceIoChdir", 'x', "s" },
{0XB29DDF9C, &WrapU_C<sceIoDopen>, "sceIoDopen", 'i', "s" },
{0XE3EB004C, &WrapU_IU<sceIoDread>, "sceIoDread", 'i', "ix" },
{0XEB092469, &WrapU_I<sceIoDclose>, "sceIoDclose", 'i', "i" },
{0XE95A012B, &WrapU_UUUUUU<sceIoIoctlAsync>, "sceIoIoctlAsync", 'i', "ixpipi"},
{0X63632449, &WrapU_UUUUUU<sceIoIoctl>, "sceIoIoctl", 'i', "ixpipi"},
{0XACE946E8, &WrapU_CU<sceIoGetstat>, "sceIoGetstat", 'i', "sx" },
{0XB8A740F4, &WrapU_CUU<sceIoChstat>, "sceIoChstat", 'i', "sxx" },
{0X55F4717D, &WrapU_C<sceIoChdir>, "sceIoChdir", 'i', "s" },
{0X08BD7374, &WrapU_I<sceIoGetDevType>, "sceIoGetDevType", 'x', "i" },
{0XB2A628C1, &WrapU_UUUIUI<sceIoAssign>, "sceIoAssign", 'x', "xxxixi"},
{0XE8BC6571, &WrapU_I<sceIoCancel>, "sceIoCancel", 'x', "i" },
{0XB293727F, &WrapI_II<sceIoChangeAsyncPriority>, "sceIoChangeAsyncPriority", 'i', "ii" },
{0X810C4BC3, &WrapU_I<sceIoClose>, "sceIoClose", 'x', "i" },
{0XB2A628C1, &WrapU_UUUIUI<sceIoAssign>, "sceIoAssign", 'i', "sssixi"},
{0XE8BC6571, &WrapU_I<sceIoCancel>, "sceIoCancel", 'i', "i" },
{0XB293727F, &WrapI_II<sceIoChangeAsyncPriority>, "sceIoChangeAsyncPriority", 'i', "ix" },
{0X810C4BC3, &WrapU_I<sceIoClose>, "sceIoClose", 'i', "i" },
{0XFF5940B6, &WrapI_I<sceIoCloseAsync>, "sceIoCloseAsync", 'i', "i" },
{0X54F5FB11, &WrapU_CIUIUI<sceIoDevctl>, "sceIoDevctl", 'x', "sixixi"},
{0XCB05F8D6, &WrapU_IUU<sceIoGetAsyncStat>, "sceIoGetAsyncStat", 'x', "ixx" },
{0X54F5FB11, &WrapU_CIUIUI<sceIoDevctl>, "sceIoDevctl", 'i', "sxpipi"},
{0XCB05F8D6, &WrapU_IUU<sceIoGetAsyncStat>, "sceIoGetAsyncStat", 'i', "iiP" },
{0X27EB27B8, &WrapI64_II64I<sceIoLseek>, "sceIoLseek", 'I', "iIi" },
{0X68963324, &WrapU_III<sceIoLseek32>, "sceIoLseek32", 'x', "iii" },
{0X1B385D8F, &WrapU_III<sceIoLseek32Async>, "sceIoLseek32Async", 'x', "iii" },
{0X71B19E77, &WrapU_II64I<sceIoLseekAsync>, "sceIoLseekAsync", 'x', "iIi" },
{0X109F50BC, &WrapU_CII<sceIoOpen>, "sceIoOpen", 'x', "sii" },
{0X89AA9906, &WrapU_CII<sceIoOpenAsync>, "sceIoOpenAsync", 'x', "sii" },
{0X06A70004, &WrapU_CI<sceIoMkdir>, "sceIoMkdir", 'x', "si" },
{0X3251EA56, &WrapU_IU<sceIoPollAsync>, "sceIoPollAsync", 'x', "ix" },
{0X6A638D83, &WrapU_IUI<sceIoRead>, "sceIoRead", 'x', "ixi" },
{0XA0B5A7C2, &WrapU_IUI<sceIoReadAsync>, "sceIoReadAsync", 'x', "ixi" },
{0XF27A9C51, &WrapU_C<sceIoRemove>, "sceIoRemove", 'x', "s" },
{0X779103A0, &WrapU_CC<sceIoRename>, "sceIoRename", 'x', "ss" },
{0X1117C65F, &WrapU_C<sceIoRmdir>, "sceIoRmdir", 'x', "s" },
{0XA12A0514, &WrapU_IUU<sceIoSetAsyncCallback>, "sceIoSetAsyncCallback", 'x', "ixx" },
{0XAB96437F, &WrapU_CI<sceIoSync>, "sceIoSync", 'x', "si" },
{0X6D08A871, &WrapU_C<sceIoUnassign>, "sceIoUnassign", 'x', "s" },
{0X42EC03AC, &WrapU_IUI<sceIoWrite>, "sceIoWrite", 'x', "ixi" },
{0X0FACAB19, &WrapU_IUI<sceIoWriteAsync>, "sceIoWriteAsync", 'x', "ixi" },
{0X35DBD746, &WrapI_IU<sceIoWaitAsyncCB>, "sceIoWaitAsyncCB", 'i', "ix" },
{0XE23EEC33, &WrapI_IU<sceIoWaitAsync>, "sceIoWaitAsync", 'i', "ix" },
{0X5C2BE2CC, &WrapU_UIU<sceIoGetFdList>, "sceIoGetFdList", 'x', "xix" },
{0X68963324, &WrapU_III<sceIoLseek32>, "sceIoLseek32", 'i', "iii" },
{0X1B385D8F, &WrapU_III<sceIoLseek32Async>, "sceIoLseek32Async", 'i', "iii" },
{0X71B19E77, &WrapU_II64I<sceIoLseekAsync>, "sceIoLseekAsync", 'i', "iIi" },
{0X109F50BC, &WrapU_CII<sceIoOpen>, "sceIoOpen", 'i', "sii" },
{0X89AA9906, &WrapU_CII<sceIoOpenAsync>, "sceIoOpenAsync", 'i', "sii" },
{0X06A70004, &WrapU_CI<sceIoMkdir>, "sceIoMkdir", 'i', "si" },
{0X3251EA56, &WrapU_IU<sceIoPollAsync>, "sceIoPollAsync", 'i', "iP" },
{0X6A638D83, &WrapU_IUI<sceIoRead>, "sceIoRead", 'i', "ixi" },
{0XA0B5A7C2, &WrapU_IUI<sceIoReadAsync>, "sceIoReadAsync", 'i', "ixi" },
{0XF27A9C51, &WrapU_C<sceIoRemove>, "sceIoRemove", 'i', "s" },
{0X779103A0, &WrapU_CC<sceIoRename>, "sceIoRename", 'i', "ss" },
{0X1117C65F, &WrapU_C<sceIoRmdir>, "sceIoRmdir", 'i', "s" },
{0XA12A0514, &WrapU_IUU<sceIoSetAsyncCallback>, "sceIoSetAsyncCallback", 'i', "ixx" },
{0XAB96437F, &WrapU_CI<sceIoSync>, "sceIoSync", 'i', "si" },
{0X6D08A871, &WrapU_C<sceIoUnassign>, "sceIoUnassign", 'i', "s" },
{0X42EC03AC, &WrapU_IUI<sceIoWrite>, "sceIoWrite", 'i', "ixi" },
{0X0FACAB19, &WrapU_IUI<sceIoWriteAsync>, "sceIoWriteAsync", 'i', "ixi" },
{0X35DBD746, &WrapI_IU<sceIoWaitAsyncCB>, "sceIoWaitAsyncCB", 'i', "iP" },
{0XE23EEC33, &WrapI_IU<sceIoWaitAsync>, "sceIoWaitAsync", 'i', "iP" },
{0X5C2BE2CC, &WrapU_UIU<sceIoGetFdList>, "sceIoGetFdList", 'i', "xip" },
};
void Register_IoFileMgrForUser() {
@@ -2463,11 +2463,11 @@ void Register_IoFileMgrForUser() {
const HLEFunction StdioForUser[] = {
{0X172D316E, &WrapU_V<sceKernelStdin>, "sceKernelStdin", 'x', "" },
{0XA6BAB2E9, &WrapU_V<sceKernelStdout>, "sceKernelStdout", 'x', "" },
{0XF78BA90A, &WrapU_V<sceKernelStderr>, "sceKernelStderr", 'x', "" },
{0X432D8F5C, &WrapU_U<sceKernelRegisterStdoutPipe>, "sceKernelRegisterStdoutPipe", 'x', "x" },
{0X6F797E03, &WrapU_U<sceKernelRegisterStderrPipe>, "sceKernelRegisterStderrPipe", 'x', "x" },
{0X172D316E, &WrapU_V<sceKernelStdin>, "sceKernelStdin", 'i', "" },
{0XA6BAB2E9, &WrapU_V<sceKernelStdout>, "sceKernelStdout", 'i', "" },
{0XF78BA90A, &WrapU_V<sceKernelStderr>, "sceKernelStderr", 'i', "" },
{0X432D8F5C, &WrapU_U<sceKernelRegisterStdoutPipe>, "sceKernelRegisterStdoutPipe", 'i', "x" },
{0X6F797E03, &WrapU_U<sceKernelRegisterStderrPipe>, "sceKernelRegisterStderrPipe", 'i', "x" },
{0XA46785C9, nullptr, "sceKernelStdioSendChar", '?', "" },
{0X0CBB0571, nullptr, "sceKernelStdioLseek", '?', "" },
{0X3054D478, nullptr, "sceKernelStdioRead", '?', "" },