diff options
-rw-r--r-- | ChangeLog | 18 | ||||
-rw-r--r-- | configure.in | 7 | ||||
-rw-r--r-- | elf/dl-close.c | 10 | ||||
-rw-r--r-- | elf/dl-deps.c | 4 |
4 files changed, 31 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog index a9445895e5..53fc68b259 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +1998-03-14 11:47 H.J. Lu <hjl@gnu.org> + + * elf/dl-close.c (_dl_close): Stop unmapping the segments after + unmapping the last loaded segment. + +1998-03-14 15:54 Ulrich Drepper <drepper@cygnus.com> + + * configure.in: Set base_os for Irix6. + Correct test for .weakext. + +1998-03-14 Andreas Jaeger <aj@arthur.rhein-neckar.de> + + * elf/dl-deps.c (_dl_map_object_deps): Add first parameter + (new_line) to _dl_debug_message call. + 1998-03-14 00:52 Tim Waugh <tim@cyberelk.demon.co.uk> * posix/wordexp.c (parse_param): Perform field-splitting after @@ -11,8 +26,7 @@ 1998-03-14 Ulrich Drepper <drepper@cygnus.com> - * locale/programs/linereader.c (lr_token): Return EOF token at - EOF. + * locale/programs/linereader.c (lr_token): Return EOF token at EOF. (get_toplvl_escape): Correctly terminate loop at EOF. Patch by Cristian Gafton <gafton@redhat.com>. diff --git a/configure.in b/configure.in index 0406eacaab..0f3a9a70d5 100644 --- a/configure.in +++ b/configure.in @@ -234,6 +234,8 @@ osf* | sunos* | ultrix* | newsos* | dynix* | *bsd*) base_os=unix/bsd ;; sysv* | isc* | esix* | sco* | minix* | irix4* | linux*) base_os=unix/sysv ;; +irix6*) + base_os=unix/sysv/irix6/$os ;; solaris[2-9]*) base_os=unix/sysv/sysv4 ;; none) @@ -800,8 +802,9 @@ cat > conftest.s <<EOF .text ${libc_cv_asm_global_directive} foo foo: -.weakext foo -.weakext foo, bar +.weakext bar foo +.weakext baz +${libc_cv_asm_global_directive} baz EOF if ${CC-cc} $CFLAGS -c conftest.s 2>/dev/null; then libc_cv_asm_weakext_directive=yes diff --git a/elf/dl-close.c b/elf/dl-close.c index 285457323d..253b073367 100644 --- a/elf/dl-close.c +++ b/elf/dl-close.c @@ -80,6 +80,7 @@ _dl_close (struct link_map *map) /* That was the last reference, and this was a dlopen-loaded object. We can unmap it. */ const ElfW(Phdr) *ph; + const ElfW(Phdr) *eph; if (imap->l_info[DT_FINI]) /* Call its termination function. */ @@ -99,9 +100,14 @@ _dl_close (struct link_map *map) _dl_global_scope_end[1] = NULL; } + /* Find the first entry specifying a load command. We have + to determine this now since the table itself is also loaded. */ + for (eph = imap->l_phdr; eph < imap->l_phdr + imap->l_phnum; ++eph) + if (eph->p_type == PT_LOAD) + break; + /* Unmap the segments. */ - for (ph = imap->l_phdr + (imap->l_phnum - 1); - ph >= imap->l_phdr; --ph) + for (ph = imap->l_phdr + (imap->l_phnum - 1); ph >= eph; --ph) if (ph->p_type == PT_LOAD) { ElfW(Addr) mapstart = ph->p_vaddr & ~(ph->p_align - 1); diff --git a/elf/dl-deps.c b/elf/dl-deps.c index 6327098736..5dbef6cabf 100644 --- a/elf/dl-deps.c +++ b/elf/dl-deps.c @@ -203,7 +203,7 @@ _dl_map_object_deps (struct link_map *map, /* Say that we are about to load an auxiliary library. */ if (_dl_debug_libs) - _dl_debug_message ("load auxiliary object=", + _dl_debug_message (1, "load auxiliary object=", strtab + d->d_un.d_val, " requested by file=", l->l_name[0] @@ -226,7 +226,7 @@ _dl_map_object_deps (struct link_map *map, { /* Say that we are about to load an auxiliary library. */ if (_dl_debug_libs) - _dl_debug_message ("load filtered object=", + _dl_debug_message (1, "load filtered object=", strtab + d->d_un.d_val, " requested by file=", l->l_name[0] |