From d8a3218726bd447dfeb407c5212f9f07d4e9574c Mon Sep 17 00:00:00 2001 From: Sepalani Date: Sat, 28 Sep 2019 17:38:43 +0400 Subject: [PATCH] HLE: Fix patching functions with the same name --- Source/Core/Core/HLE/HLE.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Source/Core/Core/HLE/HLE.cpp b/Source/Core/Core/HLE/HLE.cpp index e9fc504528..3ade0d1096 100644 --- a/Source/Core/Core/HLE/HLE.cpp +++ b/Source/Core/Core/HLE/HLE.cpp @@ -192,11 +192,13 @@ u32 GetFunctionIndex(u32 address) u32 GetFirstFunctionIndex(u32 address) { - u32 index = GetFunctionIndex(address); - auto first = std::find_if( - s_original_instructions.begin(), s_original_instructions.end(), - [=](const auto& entry) { return entry.second == index && entry.first < address; }); - return first == std::end(s_original_instructions) ? index : 0; + const u32 index = GetFunctionIndex(address); + // Fixed hooks use a fixed address and don't patch the whole function + if (index == 0 || OSPatches[index].flags == HookFlag::Fixed) + return index; + + const auto symbol = g_symbolDB.GetSymbolFromAddr(address); + return (symbol && symbol->address == address) ? index : 0; } HookType GetFunctionTypeByIndex(u32 index)