From a957f93532bfd2025fe20dd8929866c97b5e4df1 Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Mon, 29 Dec 2014 01:09:07 +0100 Subject: [PATCH] Use printf-like format in JitRegister::Register The API is cleaner (no more magic default parameter) and more extensible like this. --- Source/Core/Common/JitRegister.cpp | 11 +++++------ Source/Core/Common/JitRegister.h | 2 +- Source/Core/Common/StringUtil.cpp | 18 ++++++++++-------- Source/Core/Common/StringUtil.h | 2 ++ .../Core/Core/PowerPC/JitCommon/JitCache.cpp | 2 +- 5 files changed, 19 insertions(+), 16 deletions(-) diff --git a/Source/Core/Common/JitRegister.cpp b/Source/Core/Common/JitRegister.cpp index 69ea7e5bba..7475cb6b85 100644 --- a/Source/Core/Common/JitRegister.cpp +++ b/Source/Core/Common/JitRegister.cpp @@ -72,18 +72,17 @@ void Shutdown() } void Register(const void* base_address, u32 code_size, - const char* name, u32 original_address) + const char* format, ...) { #if !(defined USE_OPROFILE && USE_OPROFILE) && !defined(USE_VTUNE) if (!s_perf_map_file.IsOpen()) return; #endif - std::string symbol_name; - if (original_address) - symbol_name = StringFromFormat("%s_%x", name, original_address); - else - symbol_name = name; + va_list args; + va_start(args, format); + std::string symbol_name = StringFromFormatV(format, args); + va_end(args); #if defined USE_OPROFILE && USE_OPROFILE op_write_native_code(s_agent, symbol_name.data(), (u64)base_address, diff --git a/Source/Core/Common/JitRegister.h b/Source/Core/Common/JitRegister.h index d5f7b72bfb..2e9f168fb4 100644 --- a/Source/Core/Common/JitRegister.h +++ b/Source/Core/Common/JitRegister.h @@ -11,6 +11,6 @@ namespace JitRegister void Init(); void Shutdown(); void Register(const void* base_address, u32 code_size, - const char* name, u32 original_address=0); + const char* format, ...); } diff --git a/Source/Core/Common/StringUtil.cpp b/Source/Core/Common/StringUtil.cpp index cfd7b03577..b922704032 100644 --- a/Source/Core/Common/StringUtil.cpp +++ b/Source/Core/Common/StringUtil.cpp @@ -95,28 +95,30 @@ bool CharArrayFromFormatV(char* out, int outsize, const char* format, va_list ar std::string StringFromFormat(const char* format, ...) { va_list args; + va_start(args, format); + std::string res = StringFromFormatV(format, args); + va_end(args); + return std::move(res); +} + +std::string StringFromFormatV(const char* format, va_list args) +{ char *buf = nullptr; #ifdef _WIN32 - int required = 0; - - va_start(args, format); - required = _vscprintf(format, args); + int required = _vscprintf(format, args); buf = new char[required + 1]; CharArrayFromFormatV(buf, required + 1, format, args); - va_end(args); std::string temp = buf; delete[] buf; #else - va_start(args, format); if (vasprintf(&buf, format, args) < 0) ERROR_LOG(COMMON, "Unable to allocate memory for string"); - va_end(args); std::string temp = buf; free(buf); #endif - return temp; + return std::move(temp); } // For Debugging. Read out an u8 array. diff --git a/Source/Core/Common/StringUtil.h b/Source/Core/Common/StringUtil.h index 90df35189a..eca39d2eb3 100644 --- a/Source/Core/Common/StringUtil.h +++ b/Source/Core/Common/StringUtil.h @@ -13,6 +13,8 @@ #include "Common/Common.h" +std::string StringFromFormatV(const char* format, va_list args); + std::string StringFromFormat(const char* format, ...) #if !defined _WIN32 // On compilers that support function attributes, this gives StringFromFormat diff --git a/Source/Core/Core/PowerPC/JitCommon/JitCache.cpp b/Source/Core/Core/PowerPC/JitCommon/JitCache.cpp index f4c84be65f..6a7b6102d4 100644 --- a/Source/Core/Core/PowerPC/JitCommon/JitCache.cpp +++ b/Source/Core/Core/PowerPC/JitCommon/JitCache.cpp @@ -144,7 +144,7 @@ using namespace Gen; } JitRegister::Register(blockCodePointers[block_num], b.codeSize, - "JIT_PPC", b.originalAddress); + "JIT_PPC_%08x", b.originalAddress); } const u8 **JitBaseBlockCache::GetCodePointers()