munmap(, Phdr[C_TEXT=1].p_memsz); // not .p_vaddr

modified:   stub/src/arm64-linux.elf-fold.S
	modified:   stub/src/powerpc64le-linux.elf-fold.S
This commit is contained in:
John Reiser 2022-10-23 10:37:39 -07:00 committed by Markus F.X.J. Oberhumer
parent ab7ef9f511
commit afeaeeddec
2 changed files with 5 additions and 7 deletions

View File

@ -36,6 +36,8 @@ NBPW= 8
sz_Ehdr= 8*NBPW
sz_Phdr= 7*NBPW
p_vaddr= 4+4+8
p_filesz= 4+4+8+8+8
p_memsz= 4+4+8+8+8+8
sz_l_info = 12
sz_p_info = 12
@ -171,10 +173,8 @@ xPMASK .req x20
mov xfexp,x0 // entry address
// Discard pages of compressed input data (includes [ADRC,+LENC) )
ldr x1,[xelfa,#p_vaddr+sz_Phdr+sz_Ehdr] // Phdr[C_TEXT= 1].p_vaddr
ldr x2,[xelfa,#p_vaddr +sz_Ehdr] // Phdr[C_BASE= 0].p_vaddr
ldr x1,[xelfa,#p_memsz+sz_Phdr+sz_Ehdr] // Phdr[C_TEXT= 1].p_memsz
mov x0,xelfa // hi &Elf64_Ehdr
sub x1,x1,x2
call munmap // discard C_TEXT compressed data
// Map 1 page of /proc/self/exe so that munmap does not remove all references

View File

@ -220,12 +220,10 @@ noTOC:
#endif //}
mr r_exp,a0 // save &entry (.entry when BIG_ENDIAN)
p_vaddr= 4+4+8
p_memsz= 4+4+ 4*NBPW
// Discard pages of compressed data (includes [ADRX,+LENX) )
ld a1,p_vaddr+szElf64_Phdr+szElf64_Ehdr(r_elfa) // Phdr[C_TEXT= 1].p_vaddr
ld r0,p_vaddr +szElf64_Ehdr(r_elfa) // Phdr[C_BASE= 0].p_vaddr
ld a1,p_memsz+szElf64_Phdr+szElf64_Ehdr(r_elfa) // Phdr[C_TEXT= 1].p_memsz
movr a0,r_elfa // hi elfaddr
subf a1,r0,a1 // length
call munmap # discard C_TEXT compressed data
// first page of /proc/self/exe, to preserve it despite munmap(ADRU, LENU)