diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-02-23 00:40:54 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-02-23 00:40:54 +0000 |
commit | 529c593ece216e4aaffd36bd940cb94f1fa63129 (patch) | |
tree | 78f1c0b805f5656aa7b0417a043c5346f700a2cf /fs/binfmt_elf.c | |
parent | 0bd079751d25808d1972baee5c4eaa1db2227257 (diff) |
Merge with 2.3.43. I did ignore all modifications to the qlogicisp.c
driver due to the Origin A64 hacks.
Diffstat (limited to 'fs/binfmt_elf.c')
-rw-r--r-- | fs/binfmt_elf.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index 0d8a3c109..f4937eb91 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -405,7 +405,7 @@ do_load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs) int elf_exec_fileno; int retval, size, i; unsigned long elf_entry, interp_load_addr = 0; - unsigned long start_code, end_code, end_data; + unsigned long start_code, end_code, start_data, end_data; struct elfhdr elf_ex; struct elfhdr interp_elf_ex; struct exec interp_ex; @@ -470,6 +470,7 @@ do_load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs) start_code = ~0UL; end_code = 0; + start_data = 0; end_data = 0; for (i = 0; i < elf_ex.e_phnum; i++) { @@ -586,6 +587,7 @@ do_load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs) goto out_free_dentry; /* OK, This is the point of no return */ + current->mm->start_data = 0; current->mm->end_data = 0; current->mm->end_code = 0; current->mm->mmap = NULL; @@ -650,7 +652,10 @@ do_load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs) } k = elf_ppnt->p_vaddr; if (k < start_code) start_code = k; + if (start_data < k) start_data = k; + k = elf_ppnt->p_vaddr + elf_ppnt->p_filesz; + if (k > elf_bss) elf_bss = k; if ((elf_ppnt->p_flags & PF_X) && end_code < k) @@ -669,6 +674,7 @@ do_load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs) elf_brk += load_bias; start_code += load_bias; end_code += load_bias; + start_data += load_bias; end_data += load_bias; if (elf_interpreter) { @@ -726,6 +732,7 @@ do_load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs) current->mm->start_brk = current->mm->brk = elf_brk; current->mm->end_code = end_code; current->mm->start_code = start_code; + current->mm->start_data = start_data; current->mm->end_data = end_data; current->mm->start_stack = bprm->p; @@ -740,6 +747,7 @@ do_load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs) printk("(start_brk) %lx\n" , (long) current->mm->start_brk); printk("(end_code) %lx\n" , (long) current->mm->end_code); printk("(start_code) %lx\n" , (long) current->mm->start_code); + printk("(start_data) %lx\n" , (long) current->mm->start_data); printk("(end_data) %lx\n" , (long) current->mm->end_data); printk("(start_stack) %lx\n" , (long) current->mm->start_stack); printk("(brk) %lx\n" , (long) current->mm->brk); |