summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authordfr <dfr@FreeBSD.org>1999-01-25 08:42:24 +0000
committerdfr <dfr@FreeBSD.org>1999-01-25 08:42:24 +0000
commitd58f08f33fcaeae672848d0b3824d05303a50b81 (patch)
tree8f3fd371edf337752b5612724f44e12b1a16f3c5 /sys/kern
parent924db72bc603c361cd9ee1dd36e5d5c83aa2a900 (diff)
downloadFreeBSD-src-d58f08f33fcaeae672848d0b3824d05303a50b81.zip
FreeBSD-src-d58f08f33fcaeae672848d0b3824d05303a50b81.tar.gz
Don't try to call SYSUNINIT functions if there was a link error.
Reviewed by: Peter Wemm <peter@netplex.com.au>
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_linker.c7
-rw-r--r--sys/kern/link_aout.c5
-rw-r--r--sys/kern/link_elf.c6
-rw-r--r--sys/kern/link_elf_obj.c6
4 files changed, 19 insertions, 5 deletions
diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c
index 3f69c05..2cd5142 100644
--- a/sys/kern/kern_linker.c
+++ b/sys/kern/kern_linker.c
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: kern_linker.c,v 1.21 1999/01/19 22:26:46 peter Exp $
+ * $Id: kern_linker.c,v 1.22 1999/01/23 03:45:22 peter Exp $
*/
#include "opt_ddb.h"
@@ -355,6 +355,7 @@ linker_make_file(const char* pathname, void* priv, struct linker_file_ops* ops)
lf->refs = 1;
lf->userrefs = 0;
+ lf->flags = 0;
lf->filename = (char*) (lf + 1);
strcpy(lf->filename, filename);
lf->id = next_file_id++;
@@ -410,7 +411,9 @@ linker_file_unload(linker_file_t file)
goto out;
}
- linker_file_sysuninit(file);
+ /* Don't try to run SYSUNINITs if we are unloaded due to a link error */
+ if (file->flags & LINKER_FILE_LINKED)
+ linker_file_sysuninit(file);
TAILQ_REMOVE(&files, file, link);
lockmgr(&lock, LK_RELEASE, 0, curproc);
diff --git a/sys/kern/link_aout.c b/sys/kern/link_aout.c
index 29b5884..27ba4bd 100644
--- a/sys/kern/link_aout.c
+++ b/sys/kern/link_aout.c
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: link_aout.c,v 1.16 1998/11/03 14:25:21 peter Exp $
+ * $Id: link_aout.c,v 1.17 1998/11/04 15:20:57 peter Exp $
*/
#ifndef __alpha__
@@ -115,6 +115,7 @@ link_aout_init(void* arg)
linker_kernel_file->address = (caddr_t) 0xf0100000;
linker_kernel_file->size = -0xf0100000;
linker_current_file = linker_kernel_file;
+ linker_kernel_file->flags |= LINKER_FILE_LINKED;
}
#endif
}
@@ -171,6 +172,7 @@ link_aout_load_module(const char* filename, linker_file_t* result)
linker_file_unload(lf);
return(error);
}
+ lf->flags |= LINKER_FILE_LINKED;
*result = lf;
return(0);
}
@@ -253,6 +255,7 @@ link_aout_load_file(const char* filename, linker_file_t* result)
goto out;
}
+ lf->flags |= LINKER_FILE_LINKED;
*result = lf;
out:
diff --git a/sys/kern/link_elf.c b/sys/kern/link_elf.c
index c5e84da..3d86713 100644
--- a/sys/kern/link_elf.c
+++ b/sys/kern/link_elf.c
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: link_elf.c,v 1.10 1998/11/06 15:16:07 peter Exp $
+ * $Id: link_elf.c,v 1.11 1998/12/31 09:17:20 peter Exp $
*/
#include <sys/param.h>
@@ -175,6 +175,7 @@ link_elf_init(void* arg)
}
(void)parse_module_symbols(linker_kernel_file);
linker_current_file = linker_kernel_file;
+ linker_kernel_file->flags |= LINKER_FILE_LINKED;
}
#endif
}
@@ -384,6 +385,7 @@ link_elf_load_module(const char *filename, linker_file_t *result)
return error;
}
(void)parse_module_symbols(lf);
+ lf->flags |= LINKER_FILE_LINKED;
*result = lf;
return (0);
}
@@ -673,6 +675,8 @@ link_elf_load_file(const char* filename, linker_file_t* result)
ef->ddbstrcnt = strcnt;
ef->ddbstrtab = ef->strbase;
+ lf->flags |= LINKER_FILE_LINKED;
+
nosyms:
*result = lf;
diff --git a/sys/kern/link_elf_obj.c b/sys/kern/link_elf_obj.c
index c5e84da..3d86713 100644
--- a/sys/kern/link_elf_obj.c
+++ b/sys/kern/link_elf_obj.c
@@ -23,7 +23,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: link_elf.c,v 1.10 1998/11/06 15:16:07 peter Exp $
+ * $Id: link_elf.c,v 1.11 1998/12/31 09:17:20 peter Exp $
*/
#include <sys/param.h>
@@ -175,6 +175,7 @@ link_elf_init(void* arg)
}
(void)parse_module_symbols(linker_kernel_file);
linker_current_file = linker_kernel_file;
+ linker_kernel_file->flags |= LINKER_FILE_LINKED;
}
#endif
}
@@ -384,6 +385,7 @@ link_elf_load_module(const char *filename, linker_file_t *result)
return error;
}
(void)parse_module_symbols(lf);
+ lf->flags |= LINKER_FILE_LINKED;
*result = lf;
return (0);
}
@@ -673,6 +675,8 @@ link_elf_load_file(const char* filename, linker_file_t* result)
ef->ddbstrcnt = strcnt;
ef->ddbstrtab = ef->strbase;
+ lf->flags |= LINKER_FILE_LINKED;
+
nosyms:
*result = lf;
OpenPOWER on IntegriCloud