--- linux/fs/binfmt_elf.c.~2~	Sat May 27 13:45:50 1995
+++ linux/fs/binfmt_elf.c	Mon Jun 12 22:55:07 1995
@@ -135,7 +135,9 @@
 	int old_fs, retval;
 	unsigned int last_bss;
 	int error;
-	int i, k;
+	int i;
+	int mmap_flags;
+	unsigned int k;
 	
 	elf_bss = 0;
 	last_bss = 0;
@@ -170,19 +172,21 @@
 	file = current->filp[elf_exec_fileno];
 
 	eppnt = elf_phdata;
+	mmap_flags = MAP_PRIVATE | MAP_DENYWRITE | (interp_elf_ex->e_type == ET_EXEC ? MAP_FIXED : 0);
 	for(i=0; i<interp_elf_ex->e_phnum; i++, eppnt++)
 	  if(eppnt->p_type == PT_LOAD) {
 	    error = do_mmap(file, 
-			    eppnt->p_vaddr & 0xfffff000,
+			    load_addr + (eppnt->p_vaddr & 0xfffff000),
 			    eppnt->p_filesz + (eppnt->p_vaddr & 0xfff),
 			    ((eppnt->p_flags & PF_R ? PROT_READ : 0)
 			     | (eppnt->p_flags & PF_W ? PROT_WRITE : 0)
 			     | (eppnt->p_flags & PF_X ? PROT_EXEC : 0)),
-			    MAP_PRIVATE | MAP_DENYWRITE | (interp_elf_ex->e_type == ET_EXEC ? MAP_FIXED : 0),
+			    mmap_flags,
 			    eppnt->p_offset & 0xfffff000);
 	    
 	    if(!load_addr && interp_elf_ex->e_type == ET_DYN)
 	      load_addr = error;
+	    mmap_flags |= MAP_FIXED;
 	    k = load_addr + eppnt->p_vaddr + eppnt->p_filesz;
 	    if(k > elf_bss) elf_bss = k;
 	    if(error < 0 && error > -1024) break;  /* Real error */
