mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
Update.
2004-11-13 Jakub Jelinek <jakub@redhat.com> * elf/rtld.c (print_statistics): Avoid segfaults if not all namespaces are used. Fix computation of num_relative_relocations on RELA architectures other than IA-64 and Alpha. 2004-11-13 Ulrich Drepper <drepper@redhat.com> * malloc/malloc.c (_int_free): Use munmap_chunk for handling mmaped memory.
This commit is contained in:
11
ChangeLog
11
ChangeLog
@ -1,3 +1,14 @@
|
|||||||
|
2004-11-13 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* elf/rtld.c (print_statistics): Avoid segfaults if not all namespaces
|
||||||
|
are used. Fix computation of num_relative_relocations on RELA
|
||||||
|
architectures other than IA-64 and Alpha.
|
||||||
|
|
||||||
|
2004-11-13 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* malloc/malloc.c (_int_free): Use munmap_chunk for handling
|
||||||
|
mmaped memory.
|
||||||
|
|
||||||
2004-11-12 Ulrich Drepper <drepper@redhat.com>
|
2004-11-12 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
* malloc/malloc.c (_int_free): Remove test for NULL parameter.
|
* malloc/malloc.c (_int_free): Remove test for NULL parameter.
|
||||||
|
20
elf/rtld.c
20
elf/rtld.c
@ -2336,19 +2336,29 @@ print_statistics (hp_timing_t *rtld_total_timep)
|
|||||||
unsigned long int num_relative_relocations = 0;
|
unsigned long int num_relative_relocations = 0;
|
||||||
for (Lmid_t ns = 0; ns < DL_NNS; ++ns)
|
for (Lmid_t ns = 0; ns < DL_NNS; ++ns)
|
||||||
{
|
{
|
||||||
|
if (GL(dl_ns)[ns]._ns_loaded == NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
struct r_scope_elem *scope = &GL(dl_ns)[ns]._ns_loaded->l_searchlist;
|
struct r_scope_elem *scope = &GL(dl_ns)[ns]._ns_loaded->l_searchlist;
|
||||||
|
|
||||||
for (unsigned int i = 0; i < scope->r_nlist; i++)
|
for (unsigned int i = 0; i < scope->r_nlist; i++)
|
||||||
{
|
{
|
||||||
struct link_map *l = scope->r_list [i];
|
struct link_map *l = scope->r_list [i];
|
||||||
|
|
||||||
if (!l->l_addr)
|
if (l->l_addr != 0 && l->l_info[VERSYMIDX (DT_RELCOUNT)])
|
||||||
continue;
|
|
||||||
|
|
||||||
if (l->l_info[VERSYMIDX (DT_RELCOUNT)])
|
|
||||||
num_relative_relocations
|
num_relative_relocations
|
||||||
+= l->l_info[VERSYMIDX (DT_RELCOUNT)]->d_un.d_val;
|
+= l->l_info[VERSYMIDX (DT_RELCOUNT)]->d_un.d_val;
|
||||||
if (l->l_info[VERSYMIDX (DT_RELACOUNT)])
|
#ifndef ELF_MACHINE_REL_RELATIVE
|
||||||
|
/* Relative relocations are processed on these architectures if
|
||||||
|
library is loaded to different address than p_vaddr or
|
||||||
|
if not prelinked. */
|
||||||
|
if ((l->l_addr != 0 || !l->l_info[VALIDX(DT_GNU_PRELINKED)])
|
||||||
|
&& l->l_info[VERSYMIDX (DT_RELACOUNT)])
|
||||||
|
#else
|
||||||
|
/* On e.g. IA-64 or Alpha, relative relocations are processed
|
||||||
|
only if library is loaded to different address than p_vaddr. */
|
||||||
|
if (l->l_addr != 0 && l->l_info[VERSYMIDX (DT_RELACOUNT)])
|
||||||
|
#endif
|
||||||
num_relative_relocations
|
num_relative_relocations
|
||||||
+= l->l_info[VERSYMIDX (DT_RELACOUNT)]->d_un.d_val;
|
+= l->l_info[VERSYMIDX (DT_RELACOUNT)]->d_un.d_val;
|
||||||
}
|
}
|
||||||
|
@ -4370,13 +4370,7 @@ _int_free(mstate av, Void_t* mem)
|
|||||||
|
|
||||||
else {
|
else {
|
||||||
#if HAVE_MMAP
|
#if HAVE_MMAP
|
||||||
int ret;
|
munmap_chunk (p);
|
||||||
INTERNAL_SIZE_T offset = p->prev_size;
|
|
||||||
mp_.n_mmaps--;
|
|
||||||
mp_.mmapped_mem -= (size + offset);
|
|
||||||
ret = munmap((char*)p - offset, size + offset);
|
|
||||||
/* munmap returns non-zero on failure */
|
|
||||||
assert(ret == 0);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user