--- base/fs/binfmt_elf.c Mon Mar 17 23:44:55 2003 +++ work/fs/binfmt_elf.c Tue Mar 18 00:03:34 2003 @@ -256,6 +256,8 @@ create_elf_tables(struct linux_binprm *b #ifndef elf_map +asmlinkage long sys_madvise(unsigned long start, size_t len, int behavior); + static inline unsigned long elf_map (struct file *filep, unsigned long addr, struct elf_phdr *eppnt, int prot, int type) { @@ -266,6 +268,10 @@ elf_map (struct file *filep, unsigned lo eppnt->p_filesz + ELF_PAGEOFFSET(eppnt->p_vaddr), prot, type, eppnt->p_offset - ELF_PAGEOFFSET(eppnt->p_vaddr)); up_write(¤t->mm->mmap_sem); + + if(prot & PROT_EXEC) + sys_madvise(map_addr, eppnt->p_filesz, MADV_WILLNEED); + return(map_addr); }