summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--elf/dl-load.c8
2 files changed, 11 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 212eaa8274..b34bde49b4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2000-09-07  Ulrich Drepper  <drepper@redhat.com>
 
+	* elf/dl-load.c (lose): Decrement _nl_loaded.
+	(_dl_map_object_from_fd): Don't try to dlopen executables.
+
 	* iconvdata/tst-tables.sh: Actually return with an error if
 	something goes wrong.
 	* iconvdata/tst-table.sh: Return with an error if any of the cmp fails.
diff --git a/elf/dl-load.c b/elf/dl-load.c
index 4fd4dfbe2e..2911e0778d 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -709,6 +709,7 @@ lose (int code, int fd, const char *name, char *realname, struct link_map *l,
 	l->l_prev->l_next = l->l_next;
       if (l->l_next)
 	l->l_next->l_prev = l->l_prev;
+      --_dl_nloaded;
       free (l);
     }
   free (realname);
@@ -997,6 +998,13 @@ _dl_map_object_from_fd (const char *name, int fd, char *realname,
       }
     else
       {
+	/* This object is loaded at a fixed address.  This must never
+           happen for objects loaded with dlopen().  */
+	if (mode & __RTLD_DLOPEN)
+	  {
+	    LOSE (0, N_("cannot dynamically load executable"));
+	  }
+
 	/* Notify ELF_PREFERRED_ADDRESS that we have to load this one
 	   fixed.  */
 	ELF_FIXED_ADDRESS (loader, c->mapstart);