@@ -436,7 +436,7 @@ static uint64_t roundUp(uint64_t n, uint64_t m)
436
436
437
437
438
438
template <ElfFileParams>
439
- void ElfFile<ElfFileParamNames>::shiftFile(unsigned int extraPages, size_t startOffset)
439
+ void ElfFile<ElfFileParamNames>::shiftFile(unsigned int extraPages, size_t startOffset, size_t extraBytes )
440
440
{
441
441
assert (startOffset >= sizeof (Elf_Ehdr));
442
442
@@ -512,7 +512,7 @@ void ElfFile<ElfFileParamNames>::shiftFile(unsigned int extraPages, size_t start
512
512
wri (phdr.p_offset , phdrs.at (splitIndex).p_offset - splitShift - shift);
513
513
wri (phdr.p_paddr , phdrs.at (splitIndex).p_paddr - splitShift - shift);
514
514
wri (phdr.p_vaddr , phdrs.at (splitIndex).p_vaddr - splitShift - shift);
515
- wri (phdr.p_filesz , wri (phdr.p_memsz , splitShift + shift ));
515
+ wri (phdr.p_filesz , wri (phdr.p_memsz , splitShift + extraBytes ));
516
516
wri (phdr.p_flags , PF_R | PF_W);
517
517
wri (phdr.p_align , getPageSize ());
518
518
}
@@ -912,12 +912,14 @@ void ElfFile<ElfFileParamNames>::rewriteSectionsExecutable()
912
912
neededSpace += sizeof (Elf_Phdr);
913
913
debug (" needed space is %d\n " , neededSpace);
914
914
915
- unsigned int neededPages = roundUp (neededSpace - startOffset, getPageSize ()) / getPageSize ();
915
+ /* Calculate how many bytes are needed out of the additional pages. */
916
+ size_t extraSpace = neededSpace - startOffset;
917
+ unsigned int neededPages = roundUp (extraSpace, getPageSize ()) / getPageSize ();
916
918
debug (" needed pages is %d\n " , neededPages);
917
919
if (neededPages * getPageSize () > firstPage)
918
920
error (" virtual address space underrun!" );
919
921
920
- shiftFile (neededPages, startOffset);
922
+ shiftFile (neededPages, startOffset, extraSpace );
921
923
922
924
firstPage -= neededPages * getPageSize ();
923
925
startOffset += neededPages * getPageSize ();
0 commit comments