diff --git a/Core/ELF/ElfReader.h b/Core/ELF/ElfReader.h index d95e43eeef..d9052638d1 100644 --- a/Core/ELF/ElfReader.h +++ b/Core/ELF/ElfReader.h @@ -80,12 +80,10 @@ public: int GetNumSegments() { return (int)(header->e_phnum); } int GetNumSections() { return (int)(header->e_shnum); } const char *GetSectionName(int section); - u8 *GetPtr(u32 offset) - { + u8 *GetPtr(u32 offset) const { return (u8*)base + offset; } - u8 *GetSectionDataPtr(int section) - { + u8 *GetSectionDataPtr(int section) const { if (section < 0 || section >= header->e_shnum) return 0; if (sections[section].sh_type != SHT_NOBITS) @@ -93,45 +91,42 @@ public: else return 0; } - u8 *GetSegmentPtr(int segment) - { + u8 *GetSegmentPtr(int segment) const { return GetPtr(segments[segment].p_offset); } - u32 GetSectionAddr(SectionID section) {return sectionAddrs[section];} - int GetSectionSize(SectionID section) - { + u32 GetSectionAddr(SectionID section) const { + return sectionAddrs[section]; + } + int GetSectionSize(SectionID section) const { return sections[section].sh_size; } SectionID GetSectionByName(const char *name, int firstSection=0); //-1 for not found - u32 GetSegmentPaddr(int segment) - { + u32 GetSegmentPaddr(int segment) const { return segments[segment].p_paddr; } - u32 GetSegmentOffset(int segment) - { + u32 GetSegmentOffset(int segment) const { return segments[segment].p_offset; } - u32 GetSegmentVaddr(int segment) - { + u32 GetSegmentVaddr(int segment) const { return segmentVAddr[segment]; } - u32 GetSegmentDataSize(int segment) - { + u32 GetSegmentDataSize(int segment) const { return segments[segment].p_filesz; } + u32 GetSegmentMemSize(int segment) const { + return segments[segment].p_memsz; + } - bool DidRelocate() { + bool DidRelocate() const { return bRelocate; } - u32 GetVaddr() - { + u32 GetVaddr() const { return vaddr; } - u32 GetTotalSize() - { + u32 GetTotalSize() const { return totalSize; } diff --git a/Core/HLE/sceKernelModule.cpp b/Core/HLE/sceKernelModule.cpp index 7722eaba29..2590390b3d 100644 --- a/Core/HLE/sceKernelModule.cpp +++ b/Core/HLE/sceKernelModule.cpp @@ -934,6 +934,8 @@ Module *__KernelLoadELFFromPtr(const u8 *ptr, u32 loadAddress, std::string *erro module->nm.data_size = 0; // TODO: Is summing them up correct? Must not be since the numbers aren't exactly right. for (int i = 0; i < reader.GetNumSegments(); ++i) { + module->nm.segmentaddr[i] = reader.GetSegmentVaddr(i); + module->nm.segmentsize[i] = reader.GetSegmentMemSize(i); module->nm.data_size += reader.GetSegmentDataSize(i); } module->nm.gp_value = modinfo->gp; @@ -1668,6 +1670,7 @@ void sceKernelStartModule(u32 moduleId, u32 argsize, u32 argAddr, u32 returnValu u32 error; Module *module = kernelObjects.Get(moduleId, error); if (!module) { + INFO_LOG(SCEMODULE, "sceKernelStartModule(%d,asize=%08x,aptr=%08x,retptr=%08x,%08x): error %08x", moduleId, argsize, argAddr, returnValueAddr, optionAddr, error); RETURN(error); return; } else if (module->isFake) {