about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@redhat.com>2010-10-24 20:40:14 -0400
committerAndreas Schwab <schwab@redhat.com>2010-12-01 15:35:15 +0100
commit4279c4fbbb83f19ef96d64f4d5c56d329d33a25a (patch)
tree7b2889ddfaed67e6d39028ae2f9046a74db75ef5
parent0430b37c1b39f8df10e3436f329c41589e2b30ca (diff)
downloadglibc-4279c4fbbb83f19ef96d64f4d5c56d329d33a25a.tar.gz
glibc-4279c4fbbb83f19ef96d64f4d5c56d329d33a25a.tar.xz
glibc-4279c4fbbb83f19ef96d64f4d5c56d329d33a25a.zip
Don't expand DST twice in dl_open
(cherry picked from commit 22cd1c9bcf57c5829d65b6da825f7a459d40c9eb)
-rw-r--r--ChangeLog5
-rw-r--r--elf/dl-open.c29
2 files changed, 5 insertions, 29 deletions
diff --git a/ChangeLog b/ChangeLog
index 5031f63a49..d1910d83e1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2010-10-18  Andreas Schwab  <schwab@redhat.com>
+
+	* elf/dl-open.c (dl_open_worker): Don't expand DST here, let
+	_dl_map_object do it.
+
 2010-10-15  Andreas Schwab  <schwab@redhat.com>
 
 	* scripts/data/localplt-s390-linux-gnu.data: New file.
diff --git a/elf/dl-open.c b/elf/dl-open.c
index 023b98ab79..cf8e8cc671 100644
--- a/elf/dl-open.c
+++ b/elf/dl-open.c
@@ -221,35 +221,6 @@ dl_open_worker (void *a)
 
   assert (_dl_debug_initialize (0, args->nsid)->r_state == RT_CONSISTENT);
 
-  /* Maybe we have to expand a DST.  */
-  if (__builtin_expect (dst != NULL, 0))
-    {
-      size_t len = strlen (file);
-
-      /* Determine how much space we need.  We have to allocate the
-	 memory locally.  */
-      size_t required = DL_DST_REQUIRED (call_map, file, len,
-					 _dl_dst_count (dst, 0));
-
-      /* Get space for the new file name.  */
-      char *new_file = (char *) alloca (required + 1);
-
-      /* Generate the new file name.  */
-      _dl_dst_substitute (call_map, file, new_file, 0);
-
-      /* If the substitution failed don't try to load.  */
-      if (*new_file == '\0')
-	_dl_signal_error (0, "dlopen", NULL,
-			  N_("empty dynamic string token substitution"));
-
-      /* Now we have a new file name.  */
-      file = new_file;
-
-      /* It does not matter whether call_map is set even if we
-	 computed it only because of the DST.  Since the path contains
-	 a slash the value is not used.  See dl-load.c.  */
-    }
-
   /* Load the named object.  */
   struct link_map *new;
   args->map = new = _dl_map_object (call_map, file, lt_loaded, 0,