This commit is contained in:
Techflash 2025-11-15 16:40:02 +00:00 committed by GitHub
commit 43fec34868
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -143,17 +143,23 @@ bool ElfReader::LoadIntoMemory(Core::System& system, bool only_in_mem1) const
{
Elf32_Phdr* p = segments + i;
INFO_LOG_FMT(BOOT, "Type: {} Vaddr: {:08x} Filesz: {} Memsz: {}", p->p_type, p->p_vaddr,
p->p_filesz, p->p_memsz);
INFO_LOG_FMT(BOOT, "Type: {} Vaddr: {:08x} Paddr: {:08x} Filesz: {} Memsz: {}", p->p_type,
p->p_vaddr, p->p_paddr, p->p_filesz, p->p_memsz);
if (p->p_type == PT_LOAD)
{
u32 writeAddr = p->p_vaddr;
// Check LMA (paddr) first - some are nonsense, so fall back to VMA (vaddr) if invalid
u32 writeAddr = p->p_paddr;
if (writeAddr)
writeAddr |= 0x80000000; // map to virtual address
else
writeAddr = p->p_vaddr; // LMA is empty, fall back to VMA
const u8* src = GetSegmentPtr(i);
u32 srcSize = p->p_filesz;
u32 dstSize = p->p_memsz;
if (only_in_mem1 && p->p_vaddr >= memory.GetRamSizeReal())
if (only_in_mem1 && writeAddr >= memory.GetRamSizeReal())
continue;
memory.CopyToEmu(writeAddr, src, srcSize);