diff options
| author | Ulrich Drepper <drepper@redhat.com> | 1997-03-23 01:54:07 +0000 |
|---|---|---|
| committer | Ulrich Drepper <drepper@redhat.com> | 1997-03-23 01:54:07 +0000 |
| commit | bc9f6000f6752153e5e1902259d5f491a88a1ae5 (patch) | |
| tree | affff963d9f44f476e13e4ee673f67509456096f | |
| parent | 5ae9d168f66cc6b40f74cfb4a8f2631fc1df6a2a (diff) | |
| download | glibc-bc9f6000f6752153e5e1902259d5f491a88a1ae5.tar.xz glibc-bc9f6000f6752153e5e1902259d5f491a88a1ae5.zip | |
Update.cvs/libc-ud-970322
1997-03-23 02:11 Ulrich Drepper <drepper@cygnus.com>
* time/sys/time.h: Make values ITIMER_* also available as macros.
* elf/dl-support.c (_dl_sysdep_read_whole_file): Don't call
__fstat but instead __fxstat directly to avoid dependency on
libc.a when inline failed.
* sysdeps/generic/dl-sysdep.c (_dl_sysdep_read_whole_file): Likewise.
* math/Makefile (libm-routines): Add s_remquo.
* sysdeps/libm-i387/s_remquo.S: New file.
* sysdeps/libm-i387/s_remquof.S: New file.
* sysdeps/libm-i387/s_remquol.S: New file.
* sysdeps/libm-ieee754/s_remquo.c: New file.
* sysdeps/libm-ieee754/s_remquof.c: New file.
* sysdeps/libm-ieee754/s_remquol.c: New file.
* math/libm-test.c (remquo_test): New function.
* sysdeps/libm-ieee754/s_rintl.c: Handle implicit leading one
correctly.
1997-03-22 14:06 Ulrich Drepper <drepper@cygnus.com>
* math/Makefile (libm-calls): Add s_nan.
* sysdeps/libm-ieee754/s_nan.c: New file. Implement `nan' function.
* sysdeps/libm-ieee754/s_nanf.c: New file. Implement `nanf' function.
* sysdeps/libm-ieee754/s_nanl.c: New file. Implement `nanl' function.
* math/libm-test.c (basic_tests): Add tests for `nan' function.
* math/libm-test.c (copysign_test): New function.
(main): Call copysign_test.
1997-03-22 06:28 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/libm-ieee754/s_nextafter.c: Return y if x == y.
* sysdeps/libm-ieee754/s_nextafterf.c: Likewise.
* sysdeps/libm-ieee754/s_nextafterl.c: Likewise.
* sysdeps/libm-i387/s_nextafterl.c: Likewise.
* math/libm-test.c (fdim_test, fmin_test, fmax_test, nextafter_test):
New functions. Test these functions.
(main): Call above new functions.
1997-03-22 04:53 Ulrich Drepper <drepper@cygnus.com>
* Net release 2.0.2.
1997-03-22 04:37 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/unix/sysv/linux/termbits.h (OXTABS): Define as alias for
XTABS.
* sysdeps/unix/sysv/linux/alpha/termbits.h (OXTABS): Likewise.
* termios/sys/ttydefaults.h: Partly revert patch by Andreas Schwab
of Sun Dec 15 16:33:44 1996.
Proposed by Thomas Bushnell <thomas@gnu.ai.mit.edu>.
1997-03-21 13:41 Roland McGrath <roland@baalperazim.frob.com>
* sysdeps/sparc/dl-machine.h (elf_machine_rel): Rewritten as for i386.
Check here for non-SHN_UNDEF STB_LOCAL symbols don't do any lookup or
consult their values.
(elf_machine_lookup_noexec_p, elf_machine_lookup_noplt_p,
ELF_MACHINE_RELOC_NOPLT): New macros.
* elf/rtld.c (dl_main): Pass ELF_MACHINE_RELOC_NOPLT to
_dl_lookup_symbol in place of DL_LOOKUP_NOPLT.
* sysdeps/i386/dl-machine.h (ELF_MACHINE_RELOC_NOPLT): New macro.
* sysdeps/i386/dl-machine.h (elf_machine_rel): Rewritten to do the
symbol lookup before checking reloc type except for R_386_RELATIVE.
(elf_machine_lookup_noexec_p, elf_machine_lookup_noplt_p): New macros.
* elf/dl-reloc.c (RESOLVE): Remove STB_LOCAL check; let it be
per-machine since it supposedly can't happen on i386.
* elf/dl-lookup.c (do_lookup): Change arg FLAGS to RELOC_TYPE. Use
elf_machine_lookup_{noexec,noplt}_p macros on it. Remove gratuitous
indirection from REF arg; change callers.
(_dl_lookup_symbol, _dl_lookup_versioned_symbol): Change arg name.
(_dl_lookup_symbol_skip, _dl_lookup_versioned_symbol_skip): Remove
FLAGS arg altogether.
* elf/dlsym.c: Remove argument of FLAGS parameter.
* elf/dlvsym.c: Likewise.
* elf/link.h: Update decls.
* Makefile (distribute): Add BUGS.
36 files changed, 1282 insertions, 228 deletions
@@ -1,20 +1,27 @@ List of known bugs (certainly very incomplete) ---------------------------------------------- -Time-stamp: <1997-03-20T02:33:37+0100 drepper> +Time-stamp: <1997-03-22T04:31:41+0100 drepper> This following list contains those bugs which I'm aware of. Please -make sure that bugs you report are not listed here. I you can fix one -of these bugs I'll certainly be glad to receive a patch. +make sure that bugs you report are not listed here. If you can fix one +of these bugs/limitations I'll certainly be glad to receive a patch. -Severity: [ *] to [***] +Another source of information about bugs is the problem data base of the +GNU project. There is an easy to use WWW interface is available at + + http://pogo.gnu.ai.mit.edu:8080/cgi-bin/wwwgnats.pl + +I would appreciate it very much if you could verify the problem was not +reported before by looking though the database. To make the information +in this data as useful as possible please report bugs always using the +`glibcbug' shell script which gets installed with GNU libc. -[***] Profiling currently does not work with programs using NSS. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Severity: [ *] to [***] -[***] At least on Linux/Alpha, there seem to be problems with dynamically - loading NSS modules in certain situations. - [PR libc/137] [ **] For GNU libc on Linux, there is still no solution for the UTMP problem. @@ -23,7 +30,7 @@ Severity: [ *] to [***] [ **] There are problems with signal handling when using LinuxThreads. [ **] The `cbrtl' function is inaccurate. The algorithm used for `double' - and `float' is not usable. + and `float' is not usable for `long double'. [ **] Not really a bug, but it could lead to such: The RPC code is ugly ugly ugly. It's more or less verbatim taken @@ -37,3 +44,19 @@ Severity: [ *] to [***] [ *] The syslog function should print to the console if the LOG_CONS flag was given. [PR libc/72] + +[ *] On Linux, the <linux/posix_types.h> is not clean enough to satisfy + the C++ namespace rules. Declaring `struct fd_set' also makes + `fd_set' available in the global namespace which conflicts with + the definition of `fd_set' in glibc. + [PR libc/79] + +[ *] On Linux, there should be a way to prevent defining the symbol + NGROUPS_MAX in the <linux/limits.h> header file. In glibc it + is defined in <posix1_lim.h> which must not make the other + symbols in <linux/limits.h> available. + [PR libc/140] + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Ulrich Drepper +drepper@cygnus.com @@ -1,5 +1,94 @@ +1997-03-23 02:11 Ulrich Drepper <drepper@cygnus.com> + + * time/sys/time.h: Make values ITIMER_* also available as macros. + + * elf/dl-support.c (_dl_sysdep_read_whole_file): Don't call + __fstat but instead __fxstat directly to avoid dependency on + libc.a when inline failed. + * sysdeps/generic/dl-sysdep.c (_dl_sysdep_read_whole_file): Likewise. + + * math/Makefile (libm-routines): Add s_remquo. + * sysdeps/libm-i387/s_remquo.S: New file. + * sysdeps/libm-i387/s_remquof.S: New file. + * sysdeps/libm-i387/s_remquol.S: New file. + * sysdeps/libm-ieee754/s_remquo.c: New file. + * sysdeps/libm-ieee754/s_remquof.c: New file. + * sysdeps/libm-ieee754/s_remquol.c: New file. + + * math/libm-test.c (remquo_test): New function. + + * sysdeps/libm-ieee754/s_rintl.c: Handle implicit leading one + correctly. + +1997-03-22 14:06 Ulrich Drepper <drepper@cygnus.com> + + * math/Makefile (libm-calls): Add s_nan. + * sysdeps/libm-ieee754/s_nan.c: New file. Implement `nan' function. + * sysdeps/libm-ieee754/s_nanf.c: New file. Implement `nanf' function. + * sysdeps/libm-ieee754/s_nanl.c: New file. Implement `nanl' function. + + * math/libm-test.c (basic_tests): Add tests for `nan' function. + + * math/libm-test.c (copysign_test): New function. + (main): Call copysign_test. + +1997-03-22 06:28 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/libm-ieee754/s_nextafter.c: Return y if x == y. + * sysdeps/libm-ieee754/s_nextafterf.c: Likewise. + * sysdeps/libm-ieee754/s_nextafterl.c: Likewise. + * sysdeps/libm-i387/s_nextafterl.c: Likewise. + + * math/libm-test.c (fdim_test, fmin_test, fmax_test, nextafter_test): + New functions. Test these functions. + (main): Call above new functions. + +1997-03-22 04:53 Ulrich Drepper <drepper@cygnus.com> + + * Net release 2.0.2. + +1997-03-22 04:37 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/unix/sysv/linux/termbits.h (OXTABS): Define as alias for + XTABS. + * sysdeps/unix/sysv/linux/alpha/termbits.h (OXTABS): Likewise. + * termios/sys/ttydefaults.h: Partly revert patch by Andreas Schwab + of Sun Dec 15 16:33:44 1996. + Proposed by Thomas Bushnell <thomas@gnu.ai.mit.edu>. + +1997-03-21 13:41 Roland McGrath <roland@baalperazim.frob.com> + + * sysdeps/sparc/dl-machine.h (elf_machine_rel): Rewritten as for i386. + Check here for non-SHN_UNDEF STB_LOCAL symbols don't do any lookup or + consult their values. + (elf_machine_lookup_noexec_p, elf_machine_lookup_noplt_p, + ELF_MACHINE_RELOC_NOPLT): New macros. + + * elf/rtld.c (dl_main): Pass ELF_MACHINE_RELOC_NOPLT to + _dl_lookup_symbol in place of DL_LOOKUP_NOPLT. + * sysdeps/i386/dl-machine.h (ELF_MACHINE_RELOC_NOPLT): New macro. + + * sysdeps/i386/dl-machine.h (elf_machine_rel): Rewritten to do the + symbol lookup before checking reloc type except for R_386_RELATIVE. + (elf_machine_lookup_noexec_p, elf_machine_lookup_noplt_p): New macros. + + * elf/dl-reloc.c (RESOLVE): Remove STB_LOCAL check; let it be + per-machine since it supposedly can't happen on i386. + + * elf/dl-lookup.c (do_lookup): Change arg FLAGS to RELOC_TYPE. Use + elf_machine_lookup_{noexec,noplt}_p macros on it. Remove gratuitous + indirection from REF arg; change callers. + (_dl_lookup_symbol, _dl_lookup_versioned_symbol): Change arg name. + (_dl_lookup_symbol_skip, _dl_lookup_versioned_symbol_skip): Remove + FLAGS arg altogether. + * elf/dlsym.c: Remove argument of FLAGS parameter. + * elf/dlvsym.c: Likewise. + * elf/link.h: Update decls. + 1997-03-21 20:55 Ulrich Drepper <drepper@cygnus.com> + * Makefile (distribute): Add BUGS. + * sysdeps/generic/machine-gmon.h: Update copyright. * sysdeps/i386/Makefile [$(subdir)=gmon] (sysdep_routines): Add @@ -290,7 +290,7 @@ $(objpfx)isomac: isomac.c # Make the distribution tarfile. -distribute := README INSTALL FAQ NOTES NEWS PROJECTS \ +distribute := README INSTALL FAQ NOTES NEWS PROJECTS BUGS \ COPYING.LIB COPYING ChangeLog ChangeLog.[0-9] \ Makefile Makeconfig Makerules Rules Make-dist MakeTAGS \ extra-lib.mk o-iterator.mk isomac.c \ diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c index 8702a85bbb..f85aa373c2 100644 --- a/elf/dl-lookup.c +++ b/elf/dl-lookup.c @@ -22,7 +22,8 @@ #include <assert.h> #include <string.h> -#include <dl-hash.h> +#include "dl-hash.h" +#include <dl-machine.h> #include "../stdio-common/_itoa.h" #define VERSTAG(tag) (DT_NUM + DT_PROCNUM + DT_VERSIONTAGIDX (tag)) @@ -57,10 +58,10 @@ struct sym_val something bad happened. */ static inline int do_lookup (const char *undef_name, unsigned long int hash, - const ElfW(Sym) **ref, struct sym_val *result, + const ElfW(Sym) *ref, struct sym_val *result, struct link_map *list[], size_t i, size_t n, const char *reference_name, const struct r_found_version *version, - struct link_map *skip, int flags) + struct link_map *skip, int reloc_type) { struct link_map *map; @@ -78,7 +79,8 @@ do_lookup (const char *undef_name, unsigned long int hash, continue; /* Don't search the executable when resolving a copy reloc. */ - if (flags & DL_LOOKUP_NOEXEC && map->l_type == lt_executable) + if (elf_machine_lookup_noexec_p (reloc_type) && + map->l_type == lt_executable) continue; symtab = ((void *) map->l_addr + map->l_info[DT_SYMTAB]->d_un.d_ptr); @@ -98,7 +100,7 @@ do_lookup (const char *undef_name, unsigned long int hash, const ElfW(Sym) *sym = &symtab[symidx]; if (sym->st_value == 0 || /* No value. */ - ((flags & DL_LOOKUP_NOPLT) != 0 /* Reject PLT entry. */ + (elf_machine_lookup_noplt_p (reloc_type) /* Reject PLT entry. */ && sym->st_shndx == SHN_UNDEF)) continue; @@ -113,7 +115,7 @@ do_lookup (const char *undef_name, unsigned long int hash, continue; } - if (sym != *ref && strcmp (strtab + sym->st_name, undef_name)) + if (sym != ref && strcmp (strtab + sym->st_name, undef_name)) /* Not the symbol we are looking for. */ continue; @@ -188,16 +190,13 @@ do_lookup (const char *undef_name, unsigned long int hash, } /* Search loaded objects' symbol tables for a definition of the symbol - UNDEF_NAME. FLAGS is a set of flags. If DL_LOOKUP_NOEXEC is set, - then don't search the executable for a definition; this used for - copy relocs. If DL_LOOKUP_NOPLT is set, then a PLT entry cannot - satisfy the reference; some different binding must be found. */ + UNDEF_NAME. */ ElfW(Addr) _dl_lookup_symbol (const char *undef_name, const ElfW(Sym) **ref, struct link_map *symbol_scope[], const char *reference_name, - int flags) + int reloc_type) { const unsigned long int hash = _dl_elf_hash (undef_name); struct sym_val current_value = { 0, NULL }; @@ -205,9 +204,9 @@ _dl_lookup_symbol (const char *undef_name, const ElfW(Sym) **ref, /* Search the relevant loaded objects for a definition. */ for (scope = symbol_scope; *scope; ++scope) - if (do_lookup (undef_name, hash, ref, ¤t_value, + if (do_lookup (undef_name, hash, *ref, ¤t_value, (*scope)->l_searchlist, 0, (*scope)->l_nsearchlist, - reference_name, NULL, NULL, flags)) + reference_name, NULL, NULL, reloc_type)) break; if (current_value.s == NULL && @@ -230,8 +229,7 @@ ElfW(Addr) _dl_lookup_symbol_skip (const char *undef_name, const ElfW(Sym) **ref, struct link_map *symbol_scope[], const char *reference_name, - struct link_map *skip_map, - int flags) + struct link_map *skip_map) { const unsigned long int hash = _dl_elf_hash (undef_name); struct sym_val current_value = { 0, NULL }; @@ -243,13 +241,13 @@ _dl_lookup_symbol_skip (const char *undef_name, const ElfW(Sym) **ref, for (i = 0; (*scope)->l_dupsearchlist[i] != skip_map; ++i) assert (i < (*scope)->l_ndupsearchlist); - if (! do_lookup (undef_name, hash, ref, ¤t_value, + if (! do_lookup (undef_name, hash, *ref, ¤t_value, (*scope)->l_dupsearchlist, i, (*scope)->l_ndupsearchlist, - reference_name, NULL, skip_map, flags)) + reference_name, NULL, skip_map, 0)) while (*++scope) - if (do_lookup (undef_name, hash, ref, ¤t_value, + if (do_lookup (undef_name, hash, *ref, ¤t_value, (*scope)->l_dupsearchlist, 0, (*scope)->l_ndupsearchlist, - reference_name, NULL, skip_map, flags)) + reference_name, NULL, skip_map, 0)) break; *ref = current_value.s; @@ -266,7 +264,8 @@ ElfW(Addr) _dl_lookup_versioned_symbol (const char *undef_name, const ElfW(Sym) **ref, struct link_map *symbol_scope[], const char *reference_name, - const struct r_found_version *version, int flags) + const struct r_found_version *version, + int reloc_type) { const unsigned long int hash = _dl_elf_hash (undef_name); struct sym_val current_value = { 0, NULL }; @@ -275,9 +274,9 @@ _dl_lookup_versioned_symbol (const char *undef_name, const ElfW(Sym) **ref, /* Search the relevant loaded objects for a definition. */ for (scope = symbol_scope; *scope; ++scope) { - int res = do_lookup (undef_name, hash, ref, ¤t_value, + int res = do_lookup (undef_name, hash, *ref, ¤t_value, (*scope)->l_searchlist, 0, (*scope)->l_nsearchlist, - reference_name, version, NULL, flags); + reference_name, version, NULL, reloc_type); if (res > 0) break; @@ -312,8 +311,7 @@ _dl_lookup_versioned_symbol_skip (const char *undef_name, struct link_map *symbol_scope[], const char *reference_name, const struct r_found_version *version, - struct link_map *skip_map, - int flags) + struct link_map *skip_map) { const unsigned long int hash = _dl_elf_hash (undef_name); struct sym_val current_value = { 0, NULL }; @@ -325,13 +323,13 @@ _dl_lookup_versioned_symbol_skip (const char *undef_name, for (i = 0; (*scope)->l_dupsearchlist[i] != skip_map; ++i) assert (i < (*scope)->l_ndupsearchlist); - if (! do_lookup (undef_name, hash, ref, ¤t_value, + if (! do_lookup (undef_name, hash, *ref, ¤t_value, (*scope)->l_dupsearchlist, i, (*scope)->l_ndupsearchlist, - reference_name, version, skip_map, flags)) + reference_name, version, skip_map, 0)) while (*++scope) - if (do_lookup (undef_name, hash, ref, ¤t_value, + if (do_lookup (undef_name, hash, *ref, ¤t_value, |
