X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Fld-acess.so_src%2Felf.c;fp=Usermode%2FLibraries%2Fld-acess.so_src%2Felf.c;h=0b3656b26a44ed4745b2595a360074eef5227029;hb=1409c5235c5228061ba6605fc1f41302f4f3fe78;hp=9a2668a7c6a4f43b8e663d0e87043a956be304c4;hpb=3bcb89ec409dc04c55465bdb79ffc7828f003e3c;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/ld-acess.so_src/elf.c b/Usermode/Libraries/ld-acess.so_src/elf.c index 9a2668a7..0b3656b2 100644 --- a/Usermode/Libraries/ld-acess.so_src/elf.c +++ b/Usermode/Libraries/ld-acess.so_src/elf.c @@ -260,7 +260,7 @@ void *Elf32Relocate(void *Base, char **envp, const char *Filename) // - Will be reversed at the end of the function for( i = 0; i < iSegmentCount; i ++ ) { - if(phtab[i].Type == PT_LOAD && phtab[i].Flags & PF_R ) { + if(phtab[i].Type == PT_LOAD && !(phtab[i].Flags & PF_W) ) { uintptr_t addr = phtab[i].VAddr + iBaseDiff; uintptr_t end = addr + phtab[i].MemSize; for( ; addr < end; addr += PAGE_SIZE ) @@ -447,7 +447,8 @@ void *Elf32Relocate(void *Base, char **envp, const char *Filename) // Re-set readonly for( i = 0; i < iSegmentCount; i ++ ) { - if(phtab[i].Type == PT_LOAD && phtab[i].Flags & PF_R ) { + // If load and not writable + if(phtab[i].Type == PT_LOAD && !(phtab[i].Flags & PF_W) ) { uintptr_t addr = phtab[i].VAddr + iBaseDiff; uintptr_t end = addr + phtab[i].MemSize; for( ; addr < end; addr += PAGE_SIZE ) @@ -705,12 +706,14 @@ void *Elf64Relocate(void *Base, char **envp, const char *Filename) } // Relocation function + auto int _Elf64DoReloc(Elf64_Xword r_info, void *ptr, Elf64_Sxword addend); int _Elf64DoReloc(Elf64_Xword r_info, void *ptr, Elf64_Sxword addend) { int sym = ELF64_R_SYM(r_info); int type = ELF64_R_TYPE(r_info); const char *symname = strtab + symtab[sym].st_name; void *symval; + //DEBUGS("_Elf64DoReloc: %s", symname); switch( type ) { case R_X86_64_NONE: @@ -739,6 +742,7 @@ void *Elf64Relocate(void *Base, char **envp, const char *Filename) SysDebug("ld-acess - _Elf64DoReloc: Unknown relocation type %i", type); return 2; } + //DEBUGS("_Elf64DoReloc: - Good"); return 0; }