patch-1.3.21 linux/fs/binfmt_elf.c
Next file: linux/fs/buffer.c
Previous file: linux/drivers/sound/sound_switch.c
Back to the patch index
Back to the overall index
- Lines: 92
- Date:
Mon Aug 28 10:16:45 1995
- Orig file:
v1.3.20/linux/fs/binfmt_elf.c
- Orig date:
Tue Aug 8 12:31:39 1995
diff -u --recursive --new-file v1.3.20/linux/fs/binfmt_elf.c linux/fs/binfmt_elf.c
@@ -172,7 +172,7 @@
static unsigned int load_elf_interp(struct elfhdr * interp_elf_ex,
struct inode * interpreter_inode, unsigned int *interp_load_addr)
{
- struct file * file;
+ struct file * file;
struct elf_phdr *elf_phdata = NULL;
struct elf_phdr *eppnt;
unsigned int len;
@@ -258,7 +258,7 @@
SYS(close)(elf_exec_fileno);
if(error < 0 && error > -1024) {
- kfree(elf_phdata);
+ kfree(elf_phdata);
return 0xffffffff;
}
@@ -386,7 +386,7 @@
retval = read_exec(bprm->inode, elf_ex.e_phoff, (char *) elf_phdata,
elf_ex.e_phentsize * elf_ex.e_phnum, 1);
if (retval < 0) {
- kfree (elf_phdata);
+ kfree (elf_phdata);
MOD_DEC_USE_COUNT;
return retval;
}
@@ -399,7 +399,7 @@
elf_exec_fileno = open_inode(bprm->inode, O_RDONLY);
if (elf_exec_fileno < 0) {
- kfree (elf_phdata);
+ kfree (elf_phdata);
MOD_DEC_USE_COUNT;
return elf_exec_fileno;
}
@@ -458,7 +458,7 @@
/* Some simple consistency checks for the interpreter */
if(elf_interpreter){
- interpreter_type = INTERPRETER_ELF | INTERPRETER_AOUT;
+ interpreter_type = INTERPRETER_ELF | INTERPRETER_AOUT;
if(retval < 0) {
kfree(elf_interpreter);
kfree(elf_phdata);
@@ -500,10 +500,10 @@
}
}
if (!bprm->p) {
- if(elf_interpreter) {
+ if(elf_interpreter) {
kfree(elf_interpreter);
}
- kfree (elf_phdata);
+ kfree (elf_phdata);
MOD_DEC_USE_COUNT;
return -E2BIG;
}
@@ -662,6 +662,15 @@
MAP_FIXED | MAP_PRIVATE, 0);
}
+ /* SVR4/i386 ABI (pages 3-31, 3-32) says that when the program
+ starts %edx contains a pointer to a function which might be
+ registered using `atexit'. This provides a mean for the
+ dynamic linker to call DT_FINI functions for shared libraries
+ that have been loaded before the code runs.
+
+ A value of 0 tells we have no such handler. */
+ regs->edx = 0;
+
start_thread(regs, elf_entry, bprm->p);
if (current->flags & PF_PTRACED)
send_sig(SIGTRAP, current, 0);
@@ -674,7 +683,7 @@
static int
load_elf_library(int fd){
- struct file * file;
+ struct file * file;
struct elfhdr elf_ex;
struct elf_phdr *elf_phdata = NULL;
struct inode * inode;
@@ -751,7 +760,7 @@
SYS(close)(fd);
if (error != (elf_phdata->p_vaddr & 0xfffff000)) {
- kfree(elf_phdata);
+ kfree(elf_phdata);
MOD_DEC_USE_COUNT;
return error;
}
FUNET's LINUX-ADM group, [email protected]
TCL-scripts by Sam Shen, [email protected]
with Sam's (original) version of this