aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1997-03-23 01:54:07 +0000
committerUlrich Drepper <drepper@redhat.com>1997-03-23 01:54:07 +0000
commitbc9f6000f6752153e5e1902259d5f491a88a1ae5 (patch)
treeaffff963d9f44f476e13e4ee673f67509456096f
parent5ae9d168f66cc6b40f74cfb4a8f2631fc1df6a2a (diff)
downloadglibc-bc9f6000f6752153e5e1902259d5f491a88a1ae5.tar.xz
glibc-bc9f6000f6752153e5e1902259d5f491a88a1ae5.zip
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.
-rw-r--r--BUGS41
-rw-r--r--ChangeLog89
-rw-r--r--Makefile2
-rw-r--r--elf/dl-lookup.c54
-rw-r--r--elf/dl-reloc.c5
-rw-r--r--elf/dl-support.c4
-rw-r--r--elf/dlsym.c3
-rw-r--r--elf/dlvsym.c2
-rw-r--r--elf/link.h21
-rw-r--r--elf/rtld.c2
-rw-r--r--math/Makefile3
-rw-r--r--math/libm-test.c267
-rw-r--r--sysdeps/generic/dl-sysdep.c2
-rw-r--r--sysdeps/i386/dl-machine.h108
-rw-r--r--sysdeps/libm-i387/s_nextafterl.c2
-rw-r--r--sysdeps/libm-i387/s_remquo.S31
-rw-r--r--sysdeps/libm-i387/s_remquof.S31
-rw-r--r--sysdeps/libm-i387/s_remquol.S31
-rw-r--r--sysdeps/libm-ieee754/s_nan.c47
-rw-r--r--sysdeps/libm-ieee754/s_nanf.c47
-rw-r--r--sysdeps/libm-ieee754/s_nanl.c48
-rw-r--r--sysdeps/libm-ieee754/s_nextafter.c2
-rw-r--r--sysdeps/libm-ieee754/s_nextafterf.c12
-rw-r--r--sysdeps/libm-ieee754/s_nextafterl.c2
-rw-r--r--sysdeps/libm-ieee754/s_remquo.c106
-rw-r--r--sysdeps/libm-ieee754/s_remquof.c105
-rw-r--r--sysdeps/libm-ieee754/s_remquol.c106
-rw-r--r--sysdeps/libm-ieee754/s_rintl.c4
-rw-r--r--sysdeps/libm-ieee754/s_trunc.c61
-rw-r--r--sysdeps/libm-ieee754/s_truncf.c52
-rw-r--r--sysdeps/libm-ieee754/s_truncl.c57
-rw-r--r--sysdeps/sparc/dl-machine.h148
-rw-r--r--sysdeps/unix/sysv/linux/alpha/termbits.h4
-rw-r--r--sysdeps/unix/sysv/linux/termbits.h4
-rw-r--r--termios/sys/ttydefaults.h4
-rw-r--r--time/sys/time.h3
36 files changed, 1282 insertions, 228 deletions
diff --git a/BUGS b/BUGS
index 5b839a0d0a..174d7ccc7e 100644
--- a/BUGS
+++ b/BUGS
@@ -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
diff --git a/ChangeLog b/ChangeLog
index 57b1588e66..ea83c11b61 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/Makefile b/Makefile
index cf97c3019d..0dae836e69 100644
--- a/Makefile
+++ b/Makefile
@@ -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, &current_value,
+ if (do_lookup (undef_name, hash, *ref, &current_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, &current_value,
+ if (! do_lookup (undef_name, hash, *ref, &current_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, &current_value,
+ if (do_lookup (undef_name, hash, *ref, &current_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, &current_value,
+ int res = do_lookup (undef_name, hash, *ref, &current_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, &current_value,
+ if (! do_lookup (undef_name, hash, *ref, &current_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, &current_value,
+ if (do_lookup (undef_name, hash, *ref, &current_value,