summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--elf/dl-deps.c24
2 files changed, 22 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 0cb258bf5a..46b241463e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2001-06-25  Ulrich Drepper  <drepper@redhat.com>
+
+	* elf/dl-deps.c (_dl_map_object_deps): Fix handling of failing
+	_dl_catch_error calls.
+
 2001-06-22  Jakub Jelinek  <jakub@redhat.com>
 
 	* posix/regex.c (regex_compile, re_match_2_internal): Fix comment
diff --git a/elf/dl-deps.c b/elf/dl-deps.c
index 9bdaa46ad7..e40f08aa05 100644
--- a/elf/dl-deps.c
+++ b/elf/dl-deps.c
@@ -222,16 +222,18 @@ _dl_map_object_deps (struct link_map *map,
 	      {
 		/* Map in the needed object.  */
 		struct link_map *dep;
+		int err;
 
 		/* Recognize DSTs.  */
 		name = expand_dst (l, strtab + d->d_un.d_val, 0);
 		/* Store the tag in the argument structure.  */
 		args.name = name;
 
-		if (_dl_catch_error (&objname, &errstring, openaux, &args))
+		err = _dl_catch_error (&objname, &errstring, openaux, &args);
+		if (__builtin_expect (errstring != NULL, 0))
 		  {
-		    if (errno)
-		      errno_reason = errno;
+		    if (err)
+		      errno_reason = err;
 		    else
 		      errno_reason = -1;
 		    goto out;
@@ -273,6 +275,8 @@ _dl_map_object_deps (struct link_map *map,
 
 		if (d->d_tag == DT_AUXILIARY)
 		  {
+		    int err;
+
 		    /* Say that we are about to load an auxiliary library.  */
 		    if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0))
 		      _dl_debug_printf ("load auxiliary object=%s"
@@ -282,7 +286,9 @@ _dl_map_object_deps (struct link_map *map,
 
 		    /* We must be prepared that the addressed shared
 		       object is not available.  */
-		    if (_dl_catch_error (&objname, &errstring, openaux, &args))
+		    err = _dl_catch_error (&objname, &errstring, openaux,
+					   &args);
+		    if (__builtin_expect (errstring != NULL, 0))
 		      {
 			/* We are not interested in the error message.  */
 			assert (errstring != NULL);
@@ -295,6 +301,8 @@ _dl_map_object_deps (struct link_map *map,
 		  }
 		else
 		  {
+		    int err;
+
 		    /* Say that we are about to load an auxiliary library.  */
 		    if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0))
 		      _dl_debug_printf ("load filtered object=%s"
@@ -303,10 +311,12 @@ _dl_map_object_deps (struct link_map *map,
 					? l->l_name : _dl_argv[0]);
 
 		    /* For filter objects the dependency must be available.  */
-		    if (_dl_catch_error (&objname, &errstring, openaux, &args))
+		    err = _dl_catch_error (&objname, &errstring, openaux,
+					   &args);
+		    if (__builtin_expect (errstring != NULL, 0))
 		      {
-			if (errno)
-			  errno_reason = errno;
+			if (err)
+			  errno_reason = err;
 			else
 			  errno_reason = -1;
 			goto out;