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:
Bigpet 2014-04-10 00:54:32 +02:00 committed by Peter Tissen
parent d65968b41d
commit 25c3aa8e19
92 changed files with 931 additions and 1305 deletions

View file

@ -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();
}