diff --git a/Utilities/StrFmt.h b/Utilities/StrFmt.h index 60a925cab3..c89f08e1d9 100644 --- a/Utilities/StrFmt.h +++ b/Utilities/StrFmt.h @@ -654,6 +654,11 @@ namespace fmt char*, const char*, std::string (%s) be_t<> of any appropriate type in this list enum of any appropriate type in this list + + External specializations (can be found in another headers): + vm::ps3::ptr (vm_ptr.h) (of appropriate address type, writing .addr() for printing can be avoided) + vm::ps3::bptr (vm_ptr.h) + vm::psv::ptr (vm_ptr.h) Supported formatting: %d - decimal; only basic std::to_string() functionality diff --git a/rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp b/rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp index 6bc20e3e51..8f75c4adb4 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceLibKernel.cpp @@ -95,8 +95,8 @@ s32 sceKernelCreateThread( s32 cpuAffinityMask, vm::psv::ptr pOptParam) { - sceLibKernel.Error("sceKernelCreateThread(pName_addr=0x%x ('%s'), entry_addr=0x%x, initPriority=%d, stackSize=0x%x, attr=0x%x, cpuAffinityMask=0x%x, pOptParam_addr=0x%x)", - pName.addr(), pName.get_ptr(), entry.addr(), initPriority, stackSize, attr, cpuAffinityMask, pOptParam.addr()); + sceLibKernel.Error("sceKernelCreateThread(pName=0x%x ('%s'), entry=0x%x, initPriority=%d, stackSize=0x%x, attr=0x%x, cpuAffinityMask=0x%x, pOptParam=0x%x)", + pName, pName.get_ptr(), entry, initPriority, stackSize, attr, cpuAffinityMask, pOptParam); std::string name = pName.get_ptr(); @@ -119,7 +119,7 @@ s32 sceKernelCreateThread( s32 sceKernelStartThread(s32 threadId, u32 argSize, vm::psv::ptr pArgBlock) { - sceLibKernel.Error("sceKernelStartThread(threadId=%d, argSize=%d, pArgBlock_addr=0x%x)", threadId, argSize, pArgBlock.addr()); + sceLibKernel.Error("sceKernelStartThread(threadId=%d, argSize=%d, pArgBlock=0x%x)", threadId, argSize, pArgBlock); std::shared_ptr t = Emu.GetCPU().GetThread(threadId); @@ -208,7 +208,7 @@ s32 sceKernelChangeCurrentThreadAttr(u32 clearAttr, u32 setAttr) s32 sceKernelGetThreadExitStatus(s32 threadId, vm::psv::ptr pExitStatus) { - sceLibKernel.Todo("sceKernelGetThreadExitStatus(threadId=%d, pExitStatus_addr=0x%x)", threadId, pExitStatus.addr()); + sceLibKernel.Todo("sceKernelGetThreadExitStatus(threadId=%d, pExitStatus=0x%x)", threadId, pExitStatus); return SCE_OK; } @@ -229,21 +229,21 @@ s32 sceKernelCheckWaitableStatus() s32 sceKernelGetThreadInfo(s32 threadId, vm::psv::ptr pInfo) { - sceLibKernel.Todo("sceKernelGetThreadInfo(threadId=%d, pInfo_addr=0x%x)", threadId, pInfo.addr()); + sceLibKernel.Todo("sceKernelGetThreadInfo(threadId=%d, pInfo=0x%x)", threadId, pInfo); return SCE_OK; } s32 sceKernelGetThreadRunStatus(vm::psv::ptr pStatus) { - sceLibKernel.Todo("sceKernelGetThreadRunStatus(pStatus_addr=0x%x)", pStatus.addr()); + sceLibKernel.Todo("sceKernelGetThreadRunStatus(pStatus=0x%x)", pStatus); return SCE_OK; } s32 sceKernelGetSystemInfo(vm::psv::ptr pInfo) { - sceLibKernel.Todo("sceKernelGetSystemInfo(pInfo_addr=0x%x)", pInfo.addr()); + sceLibKernel.Todo("sceKernelGetSystemInfo(pInfo=0x%x)", pInfo); return SCE_OK; } @@ -285,14 +285,14 @@ s32 sceKernelDelayThreadCB(u32 usec) s32 sceKernelWaitThreadEnd(s32 threadId, vm::psv::ptr pExitStatus, vm::psv::ptr pTimeout) { - sceLibKernel.Todo("sceKernelWaitThreadEnd(threadId=%d, pExitStatus_addr=0x%x, pTimeout_addr=0x%x)", threadId, pExitStatus.addr(), pTimeout.addr()); + sceLibKernel.Todo("sceKernelWaitThreadEnd(threadId=%d, pExitStatus=0x%x, pTimeout=0x%x)", threadId, pExitStatus, pTimeout); return SCE_OK; } s32 sceKernelWaitThreadEndCB(s32 threadId, vm::psv::ptr pExitStatus, vm::psv::ptr pTimeout) { - sceLibKernel.Todo("sceKernelWaitThreadEndCB(threadId=%d, pExitStatus_addr=0x%x, pTimeout_addr=0x%x)", threadId, pExitStatus.addr(), pTimeout.addr()); + sceLibKernel.Todo("sceKernelWaitThreadEndCB(threadId=%d, pExitStatus=0x%x, pTimeout=0x%x)", threadId, pExitStatus, pTimeout); return SCE_OK; } diff --git a/rpcs3/Emu/ARMv7/Modules/sceLibc.cpp b/rpcs3/Emu/ARMv7/Modules/sceLibc.cpp index a9173350a1..95a1339e2d 100644 --- a/rpcs3/Emu/ARMv7/Modules/sceLibc.cpp +++ b/rpcs3/Emu/ARMv7/Modules/sceLibc.cpp @@ -28,7 +28,7 @@ namespace sce_libc_func void printf(vm::psv::ptr fmt) { - sceLibc.Error("printf(fmt_addr=0x%x)", fmt.addr()); + sceLibc.Error("printf(fmt=0x%x)", fmt); LOG_NOTICE(TTY, "%s", fmt.get_ptr()); } @@ -40,14 +40,14 @@ namespace sce_libc_func void memcpy(vm::psv::ptr dst, vm::psv::ptr src, u32 size) { - sceLibc.Error("memcpy(dst_addr=0x%x, src_addr=0x%x, size=0x%x)", dst.addr(), src.addr(), size); + sceLibc.Error("memcpy(dst=0x%x, src=0x%x, size=0x%x)", dst, src, size); ::memcpy(dst.get_ptr(), src.get_ptr(), size); } void _Assert(vm::psv::ptr text, vm::psv::ptr func) { - sceLibc.Error("_Assert(text_addr=0x%x, func_addr=0x%x)", text.addr(), func.addr()); + sceLibc.Error("_Assert(text=0x%x, func=0x%x)", text, func); LOG_ERROR(TTY, "%s : %s", func.get_ptr(), text.get_ptr()); Emu.Pause(); diff --git a/rpcs3/Emu/Memory/vm_ptr.h b/rpcs3/Emu/Memory/vm_ptr.h index df230aad00..8433588d79 100644 --- a/rpcs3/Emu/Memory/vm_ptr.h +++ b/rpcs3/Emu/Memory/vm_ptr.h @@ -494,4 +494,38 @@ namespace vm //PS3 emulation is main now, so lets it be as default using namespace ps3; -} \ No newline at end of file +} + +namespace fmt +{ + // external specializations for fmt::format function + namespace detail + { + template + struct get_fmt, false> + { + __forceinline static std::string text(const char* fmt, size_t len, const vm::ps3::ptr& arg) + { + return get_fmt::text(fmt, len, arg.addr()); + } + }; + + template + struct get_fmt, false> + { + __forceinline static std::string text(const char* fmt, size_t len, const vm::ps3::bptr& arg) + { + return get_fmt::text(fmt, len, arg.addr()); + } + }; + + template + struct get_fmt, false> + { + __forceinline static std::string text(const char* fmt, size_t len, const vm::psv::ptr& arg) + { + return get_fmt::text(fmt, len, arg.addr()); + } + }; + } +} diff --git a/rpcs3/Emu/SysCalls/lv2/cellFs.cpp b/rpcs3/Emu/SysCalls/lv2/cellFs.cpp index 68247910e4..1ee74a1cf8 100644 --- a/rpcs3/Emu/SysCalls/lv2/cellFs.cpp +++ b/rpcs3/Emu/SysCalls/lv2/cellFs.cpp @@ -930,8 +930,8 @@ void fsAioRead(u32 fd, vm::ptr aio, int xid, vm::ptrLog("*** fsAioRead(fd=%d, offset=0x%llx, buf_addr=0x%x, size=0x%x, error=0x%x, res=0x%x, xid=0x%x)", - fd, (u64)aio->offset, aio->buf.addr().ToLE(), (u64)aio->size, error, res, xid); + sys_fs->Log("*** fsAioRead(fd=%d, offset=0x%llx, buf_addr=0x%x, size=0x%llx, error=0x%x, res=0x%llx, xid=0x%x)", + fd, aio->offset, aio->buf, aio->size, error, res, xid); } if (func) @@ -947,7 +947,7 @@ void fsAioRead(u32 fd, vm::ptr aio, int xid, vm::ptr aio, vm::ptr aio_id, vm::ptr xaio, int error, int xid, u64 size)> func) { - sys_fs->Warning("cellFsAioRead(aio_addr=0x%x, id_addr=0x%x, func_addr=0x%x)", aio.addr(), aio_id.addr(), func.addr()); + sys_fs->Warning("cellFsAioRead(aio_addr=0x%x, id_addr=0x%x, func_addr=0x%x)", aio, aio_id, func); if (!aio_init) {