--- orig/fs/binfmt_elf.c Mon Mar 17 18:26:59 2003 +++ work/fs/binfmt_elf.c Mon Mar 17 18:26:31 2003 @@ -259,12 +259,23 @@ create_elf_tables(struct linux_binprm *b static inline unsigned long elf_map (struct file *filep, unsigned long addr, struct elf_phdr *eppnt, int prot, int type) { - unsigned long map_addr; + unsigned long map_addr, pgoff; + struct mm *mm; down_write(¤t->mm->mmap_sem); map_addr = do_mmap(filep, ELF_PAGESTART(addr), eppnt->p_filesz + ELF_PAGEOFFSET(eppnt->p_vaddr), prot, type, eppnt->p_offset - ELF_PAGEOFFSET(eppnt->p_vaddr)); + + /* preload elf image */ + + mm = current->mm; + addr = ELF_PAGESTART(addr); + for(pgoff = 0; pgoff < eppnt->p_filesz;){ + do_mmap_pgoff(mm, filep, addr, PAGE_SIZE, prot, type, pgoff); + addr += PAGE_SIZE; + pgoff += PAGE_SIZE; + } up_write(¤t->mm->mmap_sem); return(map_addr);