diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | elf/dl-deps.c | 24 |
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; |