mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-13 02:08:49 +12:00
fixes to get llvm to compile (excepti for utils.cpp, that'll get fixed
later) Eradicate the Array almost everywhere, some usages like Stack still remains
This commit is contained in:
parent
d65968b41d
commit
25c3aa8e19
92 changed files with 931 additions and 1305 deletions
|
@ -3,7 +3,7 @@
|
|||
#include "Emu/SysCalls/SysCalls.h"
|
||||
#include "Emu/SysCalls/SC_FUNC.h"
|
||||
|
||||
extern ArrayF<SFunc> g_static_funcs_list;
|
||||
extern std::vector<SFunc*> g_static_funcs_list;
|
||||
|
||||
void StaticAnalyse(void* ptr, u32 size, u32 base)
|
||||
{
|
||||
|
@ -15,13 +15,13 @@ void StaticAnalyse(void* ptr, u32 size, u32 base)
|
|||
// TODO: optimize search
|
||||
for (u32 i = 0; i < size; i++)
|
||||
{
|
||||
for (u32 j = 0; j < g_static_funcs_list.GetCount(); j++)
|
||||
for (u32 j = 0; j < g_static_funcs_list.size(); j++)
|
||||
{
|
||||
if ((data[i] & g_static_funcs_list[j].ops[0].mask) == g_static_funcs_list[j].ops[0].crc)
|
||||
if ((data[i] & g_static_funcs_list[j]->ops[0].mask) == g_static_funcs_list[j]->ops[0].crc)
|
||||
{
|
||||
bool found = true;
|
||||
u32 can_skip = 0;
|
||||
for (u32 k = i, x = 0; x + 1 <= g_static_funcs_list[j].ops.GetCount(); k++, x++)
|
||||
for (u32 k = i, x = 0; x + 1 <= g_static_funcs_list[j]->ops.size(); k++, x++)
|
||||
{
|
||||
if (k >= size)
|
||||
{
|
||||
|
@ -36,8 +36,8 @@ void StaticAnalyse(void* ptr, u32 size, u32 base)
|
|||
continue;
|
||||
}
|
||||
|
||||
const u32 mask = g_static_funcs_list[j].ops[x].mask;
|
||||
const u32 crc = g_static_funcs_list[j].ops[x].crc;
|
||||
const u32 mask = g_static_funcs_list[j]->ops[x].mask;
|
||||
const u32 crc = g_static_funcs_list[j]->ops[x].crc;
|
||||
|
||||
if (!mask)
|
||||
{
|
||||
|
@ -83,8 +83,8 @@ void StaticAnalyse(void* ptr, u32 size, u32 base)
|
|||
}
|
||||
if (found)
|
||||
{
|
||||
ConLog.Write("Function '%s' hooked (addr=0x%x)", g_static_funcs_list[j].name, i * 4 + base);
|
||||
g_static_funcs_list[j].found++;
|
||||
ConLog.Write("Function '%s' hooked (addr=0x%x)", g_static_funcs_list[j]->name, i * 4 + base);
|
||||
g_static_funcs_list[j]->found++;
|
||||
data[i+0] = re32(0x39600000 | j); // li r11, j
|
||||
data[i+1] = se32(0x44000003); // sc 3
|
||||
data[i+2] = se32(0x4e800020); // blr
|
||||
|
@ -95,11 +95,11 @@ void StaticAnalyse(void* ptr, u32 size, u32 base)
|
|||
}
|
||||
|
||||
// check function groups
|
||||
for (u32 i = 0; i < g_static_funcs_list.GetCount(); i++)
|
||||
for (u32 i = 0; i < g_static_funcs_list.size(); i++)
|
||||
{
|
||||
if (g_static_funcs_list[i].found) // start from some group
|
||||
if (g_static_funcs_list[i]->found) // start from some group
|
||||
{
|
||||
const u64 group = g_static_funcs_list[i].group;
|
||||
const u64 group = g_static_funcs_list[i]->group;
|
||||
|
||||
enum GroupSearchResult : u32
|
||||
{
|
||||
|
@ -110,24 +110,24 @@ void StaticAnalyse(void* ptr, u32 size, u32 base)
|
|||
u32 res = GSR_SUCCESS;
|
||||
|
||||
// analyse
|
||||
for (u32 j = 0; j < g_static_funcs_list.GetCount(); j++) if (g_static_funcs_list[j].group == group)
|
||||
for (u32 j = 0; j < g_static_funcs_list.size(); j++) if (g_static_funcs_list[j]->group == group)
|
||||
{
|
||||
u32 count = g_static_funcs_list[j].found;
|
||||
u32 count = g_static_funcs_list[j]->found;
|
||||
|
||||
if (count == 0) // not found
|
||||
{
|
||||
// check if this function has been found with different pattern
|
||||
for (u32 k = 0; k < g_static_funcs_list.GetCount(); k++) if (g_static_funcs_list[k].group == group)
|
||||
for (u32 k = 0; k < g_static_funcs_list.size(); k++) if (g_static_funcs_list[k]->group == group)
|
||||
{
|
||||
if (k != j && g_static_funcs_list[k].ptr == g_static_funcs_list[j].ptr)
|
||||
if (k != j && g_static_funcs_list[k]->ptr == g_static_funcs_list[j]->ptr)
|
||||
{
|
||||
count += g_static_funcs_list[k].found;
|
||||
count += g_static_funcs_list[k]->found;
|
||||
}
|
||||
}
|
||||
if (count == 0)
|
||||
{
|
||||
res |= GSR_MISSING;
|
||||
ConLog.Error("Function '%s' not found", g_static_funcs_list[j].name);
|
||||
ConLog.Error("Function '%s' not found", g_static_funcs_list[j]->name);
|
||||
}
|
||||
else if (count > 1)
|
||||
{
|
||||
|
@ -137,14 +137,14 @@ void StaticAnalyse(void* ptr, u32 size, u32 base)
|
|||
else if (count == 1) // found
|
||||
{
|
||||
// ensure that this function has NOT been found with different pattern
|
||||
for (u32 k = 0; k < g_static_funcs_list.GetCount(); k++) if (g_static_funcs_list[k].group == group)
|
||||
for (u32 k = 0; k < g_static_funcs_list.size(); k++) if (g_static_funcs_list[k]->group == group)
|
||||
{
|
||||
if (k != j && g_static_funcs_list[k].ptr == g_static_funcs_list[j].ptr)
|
||||
if (k != j && g_static_funcs_list[k]->ptr == g_static_funcs_list[j]->ptr)
|
||||
{
|
||||
if (g_static_funcs_list[k].found)
|
||||
if (g_static_funcs_list[k]->found)
|
||||
{
|
||||
res |= GSR_EXCESS;
|
||||
ConLog.Error("Function '%s' hooked twice", g_static_funcs_list[j].name);
|
||||
ConLog.Error("Function '%s' hooked twice", g_static_funcs_list[j]->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -152,14 +152,14 @@ void StaticAnalyse(void* ptr, u32 size, u32 base)
|
|||
else
|
||||
{
|
||||
res |= GSR_EXCESS;
|
||||
ConLog.Error("Function '%s' hooked twice", g_static_funcs_list[j].name);
|
||||
ConLog.Error("Function '%s' hooked twice", g_static_funcs_list[j]->name);
|
||||
}
|
||||
}
|
||||
|
||||
// clear data
|
||||
for (u32 j = 0; j < g_static_funcs_list.GetCount(); j++)
|
||||
for (u32 j = 0; j < g_static_funcs_list.size(); j++)
|
||||
{
|
||||
if (g_static_funcs_list[j].group == group) g_static_funcs_list[j].found = 0;
|
||||
if (g_static_funcs_list[j]->group == group) g_static_funcs_list[j]->found = 0;
|
||||
}
|
||||
|
||||
char name[9] = "????????";
|
||||
|
@ -182,9 +182,9 @@ void StaticAnalyse(void* ptr, u32 size, u32 base)
|
|||
|
||||
void StaticExecute(u32 code)
|
||||
{
|
||||
if (code < g_static_funcs_list.GetCount())
|
||||
if (code < g_static_funcs_list.size())
|
||||
{
|
||||
(*g_static_funcs_list[code].func)();
|
||||
(*g_static_funcs_list[code]->func)();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -194,5 +194,5 @@ void StaticExecute(u32 code)
|
|||
|
||||
void StaticFinalize()
|
||||
{
|
||||
g_static_funcs_list.Clear();
|
||||
}
|
||||
g_static_funcs_list.clear();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue