mirror of
https://github.com/RPCSX/rpcsx.git
synced 2026-04-20 22:05:12 +00:00
- Fixed loading modules in debug mode.
- Improved Lwmutex. - Implemented events syscalls. - Fixed SPU local storage.
This commit is contained in:
parent
991f281bbd
commit
6d7d3acb43
39 changed files with 1639 additions and 902 deletions
|
|
@ -133,6 +133,16 @@ bool ELF32Loader::LoadPhdrData(u64 offset)
|
|||
{
|
||||
phdr_arr[i].Show();
|
||||
|
||||
if(phdr_arr[i].p_vaddr < min_addr)
|
||||
{
|
||||
min_addr = phdr_arr[i].p_vaddr;
|
||||
}
|
||||
|
||||
if(phdr_arr[i].p_vaddr + phdr_arr[i].p_memsz > max_addr)
|
||||
{
|
||||
max_addr = phdr_arr[i].p_vaddr + phdr_arr[i].p_memsz;
|
||||
}
|
||||
|
||||
if(phdr_arr[i].p_type == 0x00000001) //LOAD
|
||||
{
|
||||
if(phdr_arr[i].p_vaddr != phdr_arr[i].p_paddr)
|
||||
|
|
@ -161,6 +171,7 @@ bool ELF32Loader::LoadShdrData(u64 offset)
|
|||
for(u32 i=0; i<shdr_arr.GetCount(); ++i)
|
||||
{
|
||||
Elf32_Shdr& shdr = shdr_arr[i];
|
||||
|
||||
#ifdef LOADER_DEBUG
|
||||
if(i < shdr_name_arr.GetCount()) ConLog.Write("Name: %s", shdr_name_arr[i]);
|
||||
shdr.Show();
|
||||
|
|
@ -168,6 +179,16 @@ bool ELF32Loader::LoadShdrData(u64 offset)
|
|||
#endif
|
||||
if((shdr.sh_flags & SHF_ALLOC) != SHF_ALLOC) continue;
|
||||
|
||||
if(shdr.sh_addr < min_addr)
|
||||
{
|
||||
min_addr = shdr.sh_addr;
|
||||
}
|
||||
|
||||
if(shdr.sh_addr + shdr.sh_size > max_addr)
|
||||
{
|
||||
max_addr = shdr.sh_addr + shdr.sh_size;
|
||||
}
|
||||
|
||||
//const s64 addr = shdr.sh_addr;
|
||||
//const s64 size = shdr.sh_size;
|
||||
//MemoryBlock* mem = nullptr;
|
||||
|
|
|
|||
|
|
@ -207,6 +207,16 @@ bool ELF64Loader::LoadPhdrData(u64 offset)
|
|||
{
|
||||
phdr_arr[i].Show();
|
||||
|
||||
if(phdr_arr[i].p_vaddr < min_addr)
|
||||
{
|
||||
min_addr = phdr_arr[i].p_vaddr;
|
||||
}
|
||||
|
||||
if(phdr_arr[i].p_vaddr + phdr_arr[i].p_memsz > max_addr)
|
||||
{
|
||||
max_addr = phdr_arr[i].p_vaddr + phdr_arr[i].p_memsz;
|
||||
}
|
||||
|
||||
if(phdr_arr[i].p_vaddr != phdr_arr[i].p_paddr)
|
||||
{
|
||||
ConLog.Warning
|
||||
|
|
@ -403,6 +413,16 @@ bool ELF64Loader::LoadShdrData(u64 offset)
|
|||
{
|
||||
Elf64_Shdr& shdr = shdr_arr[i];
|
||||
|
||||
if(shdr.sh_addr < min_addr)
|
||||
{
|
||||
min_addr = shdr.sh_addr;
|
||||
}
|
||||
|
||||
if(shdr.sh_addr + shdr.sh_size > max_addr)
|
||||
{
|
||||
max_addr = shdr.sh_addr + shdr.sh_size;
|
||||
}
|
||||
|
||||
if(i < shdr_name_arr.GetCount())
|
||||
{
|
||||
const wxString& name = shdr_name_arr[i];
|
||||
|
|
|
|||
|
|
@ -144,11 +144,15 @@ class LoaderBase
|
|||
{
|
||||
protected:
|
||||
u32 entry;
|
||||
u32 min_addr;
|
||||
u32 max_addr;
|
||||
Elf_Machine machine;
|
||||
|
||||
LoaderBase()
|
||||
: machine(MACHINE_Unknown)
|
||||
, entry(0)
|
||||
, min_addr(0)
|
||||
, max_addr(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -157,6 +161,8 @@ public:
|
|||
virtual bool LoadData(u64 offset = 0) { return false; }
|
||||
Elf_Machine GetMachine() { return machine; }
|
||||
u32 GetEntry() { return entry; }
|
||||
u32 GetMinAddr() { return min_addr; }
|
||||
u32 GetMaxAddr() { return min_addr; }
|
||||
};
|
||||
|
||||
class Loader : public LoaderBase
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue