added more proper and faster hex logging conversion

This commit is contained in:
georgemoralis 2023-08-03 13:16:49 +03:00
parent a135981fdd
commit ba8b614afc
5 changed files with 66 additions and 29 deletions

View File

@ -42,10 +42,10 @@ int PS4_SYSV_ABI sceKernelAllocateDirectMemory(s64 searchStart, s64 searchEnd, u
} }
auto memtype = magic_enum::enum_cast<MemoryTypes>(memoryType); auto memtype = magic_enum::enum_cast<MemoryTypes>(memoryType);
LOG_INFO_IF(true, "search_start = {:#018x}\n", searchStart); LOG_INFO_IF(true, "search_start = {}\n", log_hex_full(searchStart));
LOG_INFO_IF(true, "search_end = {:#018x}\n", searchEnd); LOG_INFO_IF(true, "search_end = {}\n", log_hex_full(searchEnd));
LOG_INFO_IF(true, "len = {:#018x}\n", len); LOG_INFO_IF(true, "len = {}\n", log_hex_full(len));
LOG_INFO_IF(true, "alignment = {:#018x}\n", alignment); LOG_INFO_IF(true, "alignment = {}\n", log_hex_full(alignment));
LOG_INFO_IF(true, "memory_type = {}\n", magic_enum::enum_name(memtype.value())); LOG_INFO_IF(true, "memory_type = {}\n", magic_enum::enum_name(memtype.value()));
u64 physical_addr = 0; u64 physical_addr = 0;
@ -55,7 +55,14 @@ int PS4_SYSV_ABI sceKernelAllocateDirectMemory(s64 searchStart, s64 searchEnd, u
return SCE_KERNEL_ERROR_EAGAIN; return SCE_KERNEL_ERROR_EAGAIN;
} }
*physAddrOut = static_cast<s64>(physical_addr); *physAddrOut = static_cast<s64>(physical_addr);
LOG_INFO_IF(true, "physAddrOut = {:#018x}\n", physical_addr); LOG_INFO_IF(true, "physAddrOut = {}\n", log_hex_full(physical_addr));
return SCE_OK;
}
int PS4_SYSV_ABI sceKernelMapDirectMemory(void** addr, u64 len, int prot, int flags, s64 directMemoryStart, u64 alignment)
{
auto* physical_memory = Singleton<HLE::Kernel::Objects::PhysicalMemory>::Instance();
BREAKPOINT();
return SCE_OK; return SCE_OK;
} }

View File

@ -18,5 +18,5 @@ namespace HLE::Libs::LibKernel::MemoryManagement {
u64 PS4_SYSV_ABI sceKernelGetDirectMemorySize(); u64 PS4_SYSV_ABI sceKernelGetDirectMemorySize();
int PS4_SYSV_ABI sceKernelAllocateDirectMemory(s64 searchStart, s64 searchEnd, u64 len, u64 alignment, int memoryType, s64* physAddrOut); int PS4_SYSV_ABI sceKernelAllocateDirectMemory(s64 searchStart, s64 searchEnd, u64 len, u64 alignment, int memoryType, s64* physAddrOut);
int PS4_SYSV_ABI sceKernelMapDirectMemory(void** addr, u64 len, int prot, int flags, s64 directMemoryStart, u64 alignment);
}; // namespace HLE::Libs::LibKernel::MemoryManagement }; // namespace HLE::Libs::LibKernel::MemoryManagement

View File

@ -11,11 +11,6 @@ namespace HLE::Libs::LibKernel {
static u64 g_stack_chk_guard = 0xDEADBEEF54321ABC; //dummy return static u64 g_stack_chk_guard = 0xDEADBEEF54321ABC; //dummy return
int32_t PS4_SYSV_ABI sceKernelMapDirectMemory(void** addr, size_t len, int prot, int flags, off_t directMemoryStart, size_t alignment) {
auto* physical_memory = Singleton<HLE::Kernel::Objects::PhysicalMemory>::Instance();
BREAKPOINT();
return 0;
}
int32_t PS4_SYSV_ABI sceKernelReleaseDirectMemory(off_t start, size_t len) { int32_t PS4_SYSV_ABI sceKernelReleaseDirectMemory(off_t start, size_t len) {
BREAKPOINT(); BREAKPOINT();
return 0; return 0;
@ -45,9 +40,9 @@ namespace HLE::Libs::LibKernel {
//obj //obj
LIB_OBJ("f7uOxY9mM1U", "libkernel", 1, "libkernel", 1, 1, &HLE::Libs::LibKernel::g_stack_chk_guard); LIB_OBJ("f7uOxY9mM1U", "libkernel", 1, "libkernel", 1, 1, &HLE::Libs::LibKernel::g_stack_chk_guard);
//memory //memory
LIB_FUNCTION("rTXw65xmLIA", "libkernel", 1, "libkernel", 1, 1, HLE::Libs::LibKernel::MemoryManagement::sceKernelAllocateDirectMemory); LIB_FUNCTION("rTXw65xmLIA", "libkernel", 1, "libkernel", 1, 1, MemoryManagement::sceKernelAllocateDirectMemory);
LIB_FUNCTION("pO96TwzOm5E", "libkernel", 1, "libkernel", 1, 1, HLE::Libs::LibKernel::MemoryManagement::sceKernelGetDirectMemorySize); LIB_FUNCTION("pO96TwzOm5E", "libkernel", 1, "libkernel", 1, 1, MemoryManagement::sceKernelGetDirectMemorySize);
LIB_FUNCTION("L-Q3LEjIbgA", "libkernel", 1, "libkernel", 1, 1, sceKernelMapDirectMemory); LIB_FUNCTION("L-Q3LEjIbgA", "libkernel", 1, "libkernel", 1, 1, MemoryManagement::sceKernelMapDirectMemory);
LIB_FUNCTION("MBuItvba6z8", "libkernel", 1, "libkernel", 1, 1, sceKernelReleaseDirectMemory); LIB_FUNCTION("MBuItvba6z8", "libkernel", 1, "libkernel", 1, 1, sceKernelReleaseDirectMemory);
//equeue //equeue
LIB_FUNCTION("D0OdFMjp46I", "libkernel", 1, "libkernel", 1, 1, sceKernelCreateEqueue); LIB_FUNCTION("D0OdFMjp46I", "libkernel", 1, "libkernel", 1, 1, sceKernelCreateEqueue);

View File

@ -6,7 +6,7 @@ void LibKernel_Register(SymbolsResolver* sym);
// functions // functions
int PS4_SYSV_ABI sceKernelCreateEqueue(/* SceKernelEqueue* eq*/ int eq, const char* name); int PS4_SYSV_ABI sceKernelCreateEqueue(/* SceKernelEqueue* eq*/ int eq, const char* name);
int32_t PS4_SYSV_ABI sceKernelMapDirectMemory(void** addr, size_t len, int prot, int flags, off_t directMemoryStart, size_t alignment);
int32_t PS4_SYSV_ABI sceKernelReleaseDirectMemory(off_t start, size_t len); int32_t PS4_SYSV_ABI sceKernelReleaseDirectMemory(off_t start, size_t len);
int PS4_SYSV_ABI sceKernelIsNeoMode(); int PS4_SYSV_ABI sceKernelIsNeoMode();
int PS4_SYSV_ABI sceKernelWaitEqueue(/*SceKernelEqueue eq, SceKernelEvent* ev,*/ int num, int* out /*, SceKernelUseconds* timo*/); int PS4_SYSV_ABI sceKernelWaitEqueue(/*SceKernelEqueue eq, SceKernelEvent* ev,*/ int num, int* out /*, SceKernelUseconds* timo*/);

View File

@ -2,7 +2,6 @@
#include <spdlog/spdlog.h> #include <spdlog/spdlog.h>
namespace logging { namespace logging {
#define LOG_TRACE SPDLOG_TRACE #define LOG_TRACE SPDLOG_TRACE
@ -13,23 +12,59 @@ namespace logging {
#define LOG_CRITICAL SPDLOG_CRITICAL #define LOG_CRITICAL SPDLOG_CRITICAL
#define LOG_TRACE_IF(flag, ...) \ #define LOG_TRACE_IF(flag, ...) \
if (flag) \ if (flag) LOG_TRACE(__VA_ARGS__)
LOG_TRACE(__VA_ARGS__)
#define LOG_DEBUG_IF(flag, ...) \ #define LOG_DEBUG_IF(flag, ...) \
if (flag) \ if (flag) LOG_DEBUG(__VA_ARGS__)
LOG_DEBUG(__VA_ARGS__)
#define LOG_INFO_IF(flag, ...) \ #define LOG_INFO_IF(flag, ...) \
if (flag) \ if (flag) LOG_INFO(__VA_ARGS__)
LOG_INFO(__VA_ARGS__)
#define LOG_WARN_IF(flag, ...) \ #define LOG_WARN_IF(flag, ...) \
if (flag) \ if (flag) LOG_WARN(__VA_ARGS__)
LOG_WARN(__VA_ARGS__)
#define LOG_ERROR_IF(flag, ...) \ #define LOG_ERROR_IF(flag, ...) \
if (flag) \ if (flag) LOG_ERROR(__VA_ARGS__)
LOG_ERROR(__VA_ARGS__)
#define LOG_CRITICAL_IF(flag, ...) \ #define LOG_CRITICAL_IF(flag, ...) \
if (flag) \ if (flag) LOG_CRITICAL(__VA_ARGS__)
LOG_CRITICAL(__VA_ARGS__)
int init(bool use_stdout); int init(bool use_stdout);
} // namespace logging
// copyright vita3k emu https://github.com/Vita3K/Vita3K/blob/master/vita3k/util/include/util/log.h
/*
returns: A string with the input number formatted in hexadecimal
Examples:
* `12` returns: `"0xC"`
* `1337` returns: `"0x539"`
* `72742069` returns: `"0x455F4B5"`
*/
template <typename T>
std::string log_hex(T val) {
using unsigned_type = typename std::make_unsigned<T>::type;
std::stringstream ss;
ss << "0x";
ss << std::hex << static_cast<unsigned_type>(val);
return ss.str();
}
/*
returns: A string with the input number formatted in hexadecimal with padding of the inputted type size
Examples:
* `uint8_t 5` returns: `"0x05"`
* `uint8_t 15` returns: `"0x0F"`
* `uint8_t 255` returns: `"0xFF"`
* `uint16_t 15` returns: `"0x000F"`
* `uint16_t 1337` returns: `"0x0539"`
* `uint16_t 65535` returns: `"0xFFFF"`
* `uint32_t 15` returns: `"0x0000000F"`
* `uint32_t 1337` returns: `"0x00000539"`
* `uint32_t 65535` returns: `"0x0000FFFF"`
* `uint32_t 134217728` returns: `"0x08000000"`
*/
template <typename T>
std::string log_hex_full(T val) {
std::stringstream ss;
ss << "0x";
ss << std::setfill('0') << std::setw(sizeof(T) * 2) << std::hex << val;
return ss.str();
} }