Skip to content

Commit

Permalink
Updated to fedora-glibc-20070510T0634
Browse files Browse the repository at this point in the history
  • Loading branch information
Jakub Jelinek committed May 10, 2007
1 parent 2a0a747 commit 96bad00
Show file tree
Hide file tree
Showing 46 changed files with 817 additions and 215 deletions.
109 changes: 106 additions & 3 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,104 @@
2007-05-09 Jakub Jelinek <jakub@redhat.com>

* sysdeps/ia64/fpu/fraiseexcpt.c (feraiseexcept): Don't raise overflow
exception in addition to inexact when asked to raise only FE_INEXACT.

[BZ #3427]
* sysdeps/s390/fpu/feholdexcpt.c (feholdexcept): Don't clear exceptions
in *envp.

2007-05-07 Ulrich Drepper <drepper@redhat.com>

[BZ #4403]
* string/strfry.c (strfry): Make result more random.

2007-05-07 Richard Henderson <rth@redhat.com>

* sysdeps/alpha/fpu/bits/mathinline.h (__isnanl): Don't define
if __NO_LONG_DOUBLE_MATH.
* sysdeps/unix/sysv/linux/alpha/ioperm.c: If BWX insns not
available in the compiler, add .arch directive to the assembly.

2007-05-07 Jakub Jelinek <jakub@redhat.com>

* sysdeps/alpha/fpu/s_nearbyint.c (nearbyintl): Fix version on
compat_symbol to GLIBC_2_1.
* sysdeps/alpha/fpu/s_fmin.S (fminl): Likewise.
* sysdeps/alpha/fpu/s_trunc.c (truncl): Likewise.
* sysdeps/alpha/fpu/s_fmax.S (fmaxl): Likewise.
* sysdeps/alpha/fpu/s_lrint.c (lrintl, llrintl): Likewise.
* sysdeps/alpha/fpu/s_lround.c (lroundl, llroundl): Likewise.
* sysdeps/alpha/fpu/s_round.c (roundl): Likewise.
* sysdeps/alpha/fpu/s_isnan.c (isnanl): Provide compat_symbol in
libc, not libm.
(__isnanl): New compat_symbol.

2007-05-07 Ulrich Drepper <drepper@redhat.com>
Jakub Jelinek <jakub@redhat.com>

* malloc/arena.c (heap_info): Add mprotect_size field, adjust pad.
(new_heap): Initialize mprotect_size.
(grow_heap): When growing, only mprotect from mprotect_size till
new_size if mprotect_size is smaller. When shrinking, use PROT_NONE
MMAP for __libc_enable_secure only, otherwise use MADV_DONTNEED.

2007-04-30 Steven Munroe <sjmunroe@us.ibm.com>
Peter Bergner <bergner@us.ibm.com>

* sysdeps/powerpc/bits/fenv.h: Declare __fe_mask_env extern.
Define FE_NOMASK_ENV as FE_EANBLED_ENV. Define FE_MASK_ENV.
* sysdeps/powerpc/fpu/Makefile: Add fe_mask to libm-support.
* sysdeps/powerpc/fpu/fe_mask.c: New file.
* sysdeps/powerpc/fpu/fe_nomask.c: Correct comment.
* sysdeps/powerpc/fpu/fedisblxcpt.c (fedisableexcept):
Call __fe_mask_env() if all FP exceptions disabled.
* sysdeps/powerpc/fpu/feholdexcpt.c (feholdexcept): Copy high 32-bits
from old FPSCR to new fenv to propagate DFP rounding modes.
Call __fe_mask_env() if FP exceptions previously enabled.
* sysdeps/powerpc/fpu/fesetenv.c (fesetenv): Change mask to merge
exceptions from env. Use __fe_nomask_env() or __fe_mask_env() when
transitioning from all exceptions disabled to any exception enabled
or visa versa.
* sysdeps/powerpc/fpu/feupdateenv.c (__feupdateenv): Change mask to
merge exceptions from env. Call __fe_nomask_env or __fe_mask_env
when transitioning from all exceptions disabled to any exception
enabled or visa versa.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fe_nomask.c: Moved to...
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_nomask.c: ...here.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/fe_nomask.c: Moved to...
* sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_nomask.c: ...here.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_mask.c: New file.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_mask.c: New file.

2007-05-06 Ulrich Drepper <drepper@redhat.com>

[BZ #4465]
* posix/unistd.h: Remove __THROW from fdatasync.

2007-05-06 Mike Frysinger <vapier@gentoo.org>

[BZ #4465]
* sysdeps/unix/sysv/linux/syscalls.list (fdatasync): Add "C" to args.

2007-05-06 Ulrich Drepper <drepper@redhat.com>

* stdio-common/vfprintf.c (process_string_arg): Optimize
ridiculous precision in wide char code printing multi-byte string.
Reported by Jim Meyering <jim@meyering.net>.

[BZ #4131]
* elf/dl-addr.c (_dl_addr): Compare address with actual segment
boundaries to work around systems with overlapping binary loading.
Based on a patch by Suzuki <suzuki@in.ibm.com>.

2007-05-04 Ulrich Drepper <drepper@redhat.com>

* stdio-common/vfprintf.c (process_string_arg): Adjust call to
__mbsnrtowcs after last change.

* locale/programs/linereader.c (get_symname): Fix adding final NUL.
(get_ident): Likewise.

2007-05-03 Jakub Jelinek <jakub@redhat.com>

* soft-fp/op-common.h (FP_TRUNC): Replace raising of FP_EX_INEXACT
Expand Down Expand Up @@ -27,8 +128,10 @@
(FP_PACK_SEMIRAW_EP): Use FP_PACK_RAW_EP instead of
undefined _FP_PACK_RAW_EP.

* op-2.h (_FP_FRAC_COPY_2_2): Define as alias to _FP_FRAC_COPY_2.
* op-4.h (_FP_FRAC_COPY_2_2): Define as alias to _FP_FRAC_COPY_4.
* soft-fp/op-2.h (_FP_FRAC_COPY_2_2): Define as alias to
_FP_FRAC_COPY_2.
* soft-fp/op-4.h (_FP_FRAC_COPY_2_2): Define as alias to
_FP_FRAC_COPY_4.

2007-04-16 Uros Bizjak <ubizjak@gmail.com>
Jakub Jelinek <jakub@redhat.com>
Expand Down Expand Up @@ -702,7 +805,7 @@

2007-03-13 Richard Henderson <rth@redhat.com>

* elf/dl-support.c (_dl_aux_init): Honor DL_PLATFORM_AUXV.
* elf/dl-support.c (_dl_aux_init): Honor DL_PLATFORM_AUXV.
* sysdeps/unix/sysv/linux/alpha/dl-auxv.h: New file.
* sysdeps/unix/sysv/linux/alpha/dl-support.c: New file.
* sysdeps/unix/sysv/linux/alpha/dl-sysdep.c (__libc_alpha_cache_shape):
Expand Down
226 changes: 113 additions & 113 deletions elf/dl-addr.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* Locate the shared object symbol nearest a given address.
Copyright (C) 1996-2004, 2005, 2006 Free Software Foundation, Inc.
Copyright (C) 1996-2004, 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
Expand All @@ -22,137 +22,137 @@
#include <ldsodefs.h>


int
internal_function
_dl_addr (const void *address, Dl_info *info,
struct link_map **mapp, const ElfW(Sym) **symbolp)
static void
__attribute ((always_inline))
determine_info (const ElfW(Addr) addr, struct link_map *match, Dl_info *info,
struct link_map **mapp, const ElfW(Sym) **symbolp)
{
const ElfW(Addr) addr = DL_LOOKUP_ADDRESS (address);
/* Now we know what object the address lies in. */
info->dli_fname = match->l_name;
info->dli_fbase = (void *) match->l_map_start;

/* Protect against concurrent loads and unloads. */
__rtld_lock_lock_recursive (GL(dl_load_lock));
/* If this is the main program the information is incomplete. */
if (__builtin_expect (match->l_name[0], 'a') == '\0'
&& match->l_type == lt_executable)
info->dli_fname = _dl_argv[0];

/* Find the highest-addressed object that ADDRESS is not below. */
struct link_map *match = NULL;
for (Lmid_t ns = 0; ns < DL_NNS; ++ns)
for (struct link_map *l = GL(dl_ns)[ns]._ns_loaded; l; l = l->l_next)
if (addr >= l->l_map_start && addr < l->l_map_end)
{
/* We know ADDRESS lies within L if in any shared object.
Make sure it isn't past the end of L's segments. */
size_t n = l->l_phnum;
if (n > 0)
{
do
--n;
while (l->l_phdr[n].p_type != PT_LOAD);
if (addr >= (l->l_addr +
l->l_phdr[n].p_vaddr + l->l_phdr[n].p_memsz))
/* Off the end of the highest-addressed shared object. */
continue;
}
const ElfW(Sym) *symtab
= (const ElfW(Sym) *) D_PTR (match, l_info[DT_SYMTAB]);
const char *strtab = (const char *) D_PTR (match, l_info[DT_STRTAB]);

match = l;
break;
}
ElfW(Word) strtabsize = match->l_info[DT_STRSZ]->d_un.d_val;

int result = 0;
if (match != NULL)
const ElfW(Sym) *matchsym = NULL;
if (match->l_info[DT_ADDRTAGIDX (DT_GNU_HASH) + DT_NUM + DT_THISPROCNUM
+ DT_VERSIONTAGNUM + DT_EXTRANUM + DT_VALNUM] != NULL)
{
/* Now we know what object the address lies in. */
info->dli_fname = match->l_name;
info->dli_fbase = (void *) match->l_map_start;

/* If this is the main program the information is incomplete. */
if (__builtin_expect (match->l_name[0], 'a') == '\0'
&& match->l_type == lt_executable)
info->dli_fname = _dl_argv[0];

const ElfW(Sym) *symtab
= (const ElfW(Sym) *) D_PTR (match, l_info[DT_SYMTAB]);
const char *strtab = (const char *) D_PTR (match, l_info[DT_STRTAB]);

ElfW(Word) strtabsize = match->l_info[DT_STRSZ]->d_un.d_val;

const ElfW(Sym) *matchsym = NULL;
if (match->l_info[DT_ADDRTAGIDX (DT_GNU_HASH) + DT_NUM + DT_THISPROCNUM
+ DT_VERSIONTAGNUM + DT_EXTRANUM + DT_VALNUM] != NULL)
/* We look at all symbol table entries referenced by the hash
table. */
for (Elf_Symndx bucket = 0; bucket < match->l_nbuckets; ++bucket)
{
/* We look at all symbol table entries referenced by the
hash table. */
for (Elf_Symndx bucket = 0; bucket < match->l_nbuckets; ++bucket)
Elf32_Word symndx = match->l_gnu_buckets[bucket];
if (symndx != 0)
{
Elf32_Word symndx = match->l_gnu_buckets[bucket];
if (symndx != 0)
const Elf32_Word *hasharr = &match->l_gnu_chain_zero[symndx];

do
{
const Elf32_Word *hasharr = &match->l_gnu_chain_zero[symndx];

do
{
/* The hash table never references local symbols
so we can omit that test here. */
if ((symtab[symndx].st_shndx != SHN_UNDEF
|| symtab[symndx].st_value != 0)
&& ELFW(ST_TYPE) (symtab[symndx].st_info) != STT_TLS
&& DL_ADDR_SYM_MATCH (match, &symtab[symndx],
matchsym, addr)
&& symtab[symndx].st_name < strtabsize)
matchsym = (ElfW(Sym) *) &symtab[symndx];

++symndx;
}
while ((*hasharr++ & 1u) == 0);
/* The hash table never references local symbols so
we can omit that test here. */
if ((symtab[symndx].st_shndx != SHN_UNDEF
|| symtab[symndx].st_value != 0)
&& ELFW(ST_TYPE) (symtab[symndx].st_info) != STT_TLS
&& DL_ADDR_SYM_MATCH (match, &symtab[symndx],
matchsym, addr)
&& symtab[symndx].st_name < strtabsize)
matchsym = (ElfW(Sym) *) &symtab[symndx];

++symndx;
}
while ((*hasharr++ & 1u) == 0);
}
}
}
else
{
const ElfW(Sym) *symtabend;
if (match->l_info[DT_HASH] != NULL)
symtabend = (symtab
+ ((Elf_Symndx *) D_PTR (match, l_info[DT_HASH]))[1]);
else
{
const ElfW(Sym) *symtabend;
if (match->l_info[DT_HASH] != NULL)
symtabend = (symtab
+ ((Elf_Symndx *) D_PTR (match, l_info[DT_HASH]))[1]);
else
/* There is no direct way to determine the number of symbols in the
dynamic symbol table and no hash table is present. The ELF
binary is ill-formed but what shall we do? Use the beginning of
the string table which generally follows the symbol table. */
symtabend = (const ElfW(Sym) *) strtab;

for (; (void *) symtab < (void *) symtabend; ++symtab)
if ((ELFW(ST_BIND) (symtab->st_info) == STB_GLOBAL
|| ELFW(ST_BIND) (symtab->st_info) == STB_WEAK)
&& ELFW(ST_TYPE) (symtab->st_info) != STT_TLS
&& (symtab->st_shndx != SHN_UNDEF
|| symtab->st_value != 0)
&& DL_ADDR_SYM_MATCH (match, symtab, matchsym, addr)
&& symtab->st_name < strtabsize)
matchsym = (ElfW(Sym) *) symtab;
}
/* There is no direct way to determine the number of symbols in the
dynamic symbol table and no hash table is present. The ELF
binary is ill-formed but what shall we do? Use the beginning of
the string table which generally follows the symbol table. */
symtabend = (const ElfW(Sym) *) strtab;

for (; (void *) symtab < (void *) symtabend; ++symtab)
if ((ELFW(ST_BIND) (symtab->st_info) == STB_GLOBAL
|| ELFW(ST_BIND) (symtab->st_info) == STB_WEAK)
&& ELFW(ST_TYPE) (symtab->st_info) != STT_TLS
&& (symtab->st_shndx != SHN_UNDEF
|| symtab->st_value != 0)
&& DL_ADDR_SYM_MATCH (match, symtab, matchsym, addr)
&& symtab->st_name < strtabsize)
matchsym = (ElfW(Sym) *) symtab;
}

if (mapp)
*mapp = match;
if (symbolp)
*symbolp = matchsym;
if (mapp)
*mapp = match;
if (symbolp)
*symbolp = matchsym;

if (matchsym)
{
/* We found a symbol close by. Fill in its name and exact
address. */
lookup_t matchl = LOOKUP_VALUE (match);
if (matchsym)
{
/* We found a symbol close by. Fill in its name and exact
address. */
lookup_t matchl = LOOKUP_VALUE (match);

info->dli_sname = strtab + matchsym->st_name;
info->dli_saddr = DL_SYMBOL_ADDRESS (matchl, matchsym);
}
else
info->dli_sname = strtab + matchsym->st_name;
info->dli_saddr = DL_SYMBOL_ADDRESS (matchl, matchsym);
}
else
{
/* No symbol matches. We return only the containing object. */
info->dli_sname = NULL;
info->dli_saddr = NULL;
}
}


int
internal_function
_dl_addr (const void *address, Dl_info *info,
struct link_map **mapp, const ElfW(Sym) **symbolp)
{
const ElfW(Addr) addr = DL_LOOKUP_ADDRESS (address);
int result = 0;

/* Protect against concurrent loads and unloads. */
__rtld_lock_lock_recursive (GL(dl_load_lock));

/* Find the highest-addressed object that ADDRESS is not below. */
for (Lmid_t ns = 0; ns < DL_NNS; ++ns)
for (struct link_map *l = GL(dl_ns)[ns]._ns_loaded; l; l = l->l_next)
if (addr >= l->l_map_start && addr < l->l_map_end)
{
/* No symbol matches. We return only the containing object. */
info->dli_sname = NULL;
info->dli_saddr = NULL;
/* Make sure it lies within one of L's segments. */
int n = l->l_phnum;
const ElfW(Addr) reladdr = addr - l->l_addr;
while (--n >= 0)
if (l->l_phdr[n].p_type == PT_LOAD)
{
if (reladdr - l->l_phdr[n].p_vaddr >= 0
&& reladdr - l->l_phdr[n].p_vaddr < l->l_phdr[n].p_memsz)
{
determine_info (addr, l, info, mapp, symbolp);
result = 1;
goto out;
}
}
}

result = 1;
}

out:
__rtld_lock_unlock_recursive (GL(dl_load_lock));

return result;
Expand Down
4 changes: 2 additions & 2 deletions fedora/branch.mk
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ glibc-branch := fedora
glibc-base := HEAD
DIST_BRANCH := devel
COLLECTION := dist-fc7
fedora-sync-date := 2007-05-04 09:17 UTC
fedora-sync-tag := fedora-glibc-20070504T0917
fedora-sync-date := 2007-05-10 06:34 UTC
fedora-sync-tag := fedora-glibc-20070510T0634
Loading

0 comments on commit 96bad00

Please sign in to comment.