Update.
authorUlrich Drepper <drepper@redhat.com>
Sat, 27 Jun 1998 09:52:12 +0000 (09:52 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sat, 27 Jun 1998 09:52:12 +0000 (09:52 +0000)
1998-06-27  7:07  Richard Henderson  <rth@cygnus.com>

* math/atest-exp.c (exp_mpn, main): Cast to mp_limb_t appropriately.
* math/atest-exp2.c (exp_mpn, main): Likewise.
* math/atest-sincos.c (main): Likewise.

* resolv/inet_addr.c (inet_aton): Check for 32-bit overflow.  Move
base handling away from strtoul.  Always reset errno.

* sysdeps/alpha/Makefile (elf): Kill -mno-fp-regs.

* sysdeps/alpha/dl-machine.h (elf_machine_runtime_setup): Only set
_dl_profile_map if _dl_name_match_p.
(RTLD_START): Fix .prologue.  Set __libc_stack_end.
* sysdeps/alpha/elf/start.S: Pass sp as arg 7.  Kill __data_start.

* sysdeps/alpha/fpu/fraiseexcpt.c (feraiseexcept): Mark tmp
as early-clobber.

* sysdeps/libm-ieee754/e_exp10.c: Include "math_private.h".
* sysdeps/libm-ieee754/e_exp10f.c: Likewise.
* sysdeps/libm-ieee754/e_exp10l.c: Likewise.

15 files changed:
ChangeLog
io/sys/poll.h
libc.map
math/atest-exp.c
math/atest-exp2.c
math/atest-sincos.c
resolv/inet_addr.c
sysdeps/alpha/Makefile
sysdeps/alpha/dl-machine.h
sysdeps/alpha/elf/start.S
sysdeps/alpha/fpu/fraiseexcpt.c
sysdeps/i386/fpu/bits/mathinline.h
sysdeps/libm-ieee754/e_exp10.c
sysdeps/libm-ieee754/e_exp10f.c
sysdeps/libm-ieee754/e_exp10l.c

index aaa3e0d..fe2d543 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,26 @@
+1998-06-27  7:07  Richard Henderson  <rth@cygnus.com>
+
+       * math/atest-exp.c (exp_mpn, main): Cast to mp_limb_t appropriately.
+       * math/atest-exp2.c (exp_mpn, main): Likewise.
+       * math/atest-sincos.c (main): Likewise.
+
+       * resolv/inet_addr.c (inet_aton): Check for 32-bit overflow.  Move
+       base handling away from strtoul.  Always reset errno.
+
+       * sysdeps/alpha/Makefile (elf): Kill -mno-fp-regs.
+
+       * sysdeps/alpha/dl-machine.h (elf_machine_runtime_setup): Only set
+       _dl_profile_map if _dl_name_match_p.
+       (RTLD_START): Fix .prologue.  Set __libc_stack_end.
+       * sysdeps/alpha/elf/start.S: Pass sp as arg 7.  Kill __data_start.
+
+       * sysdeps/alpha/fpu/fraiseexcpt.c (feraiseexcept): Mark tmp
+       as early-clobber.
+
+       * sysdeps/libm-ieee754/e_exp10.c: Include "math_private.h".
+       * sysdeps/libm-ieee754/e_exp10f.c: Likewise.
+       * sysdeps/libm-ieee754/e_exp10l.c: Likewise.
+
 1998-06-26  Ulrich Drepper  <drepper@cygnus.com>
 
        * sysdeps/i386/fpu/bits/mathinline.h (__finite): Use alias-safe
index b9af2cf..9cb60e7 100644 (file)
@@ -1,5 +1,5 @@
 /* Compatibility definitions for System V `poll' interface.
-   Copyright (C) 1994, 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1994, 1996, 1997, 1998 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
@@ -41,7 +41,8 @@ struct pollfd
    an event to occur; if TIMEOUT is -1, block until an event occurs.
    Returns the number of file descriptors with events, zero if timed out,
    or -1 for errors.  */
-
+extern int __poll __P ((struct pollfd *__fds, unsigned long int __nfds,
+                       int __timeout));
 extern int poll __P ((struct pollfd *__fds, unsigned long int __nfds,
                      int __timeout));
 
index 314bd8b..ff0d42c 100644 (file)
--- a/libc.map
+++ b/libc.map
@@ -497,7 +497,7 @@ GLIBC_2.1 {
     __xstat64; __fxstat64; __lxstat64;
     __pread64; __pwrite64;
     __backtrace; __backtrace_symbols;
-    _dl_mcount; _dl_mcount_wrapper;
+    _dl_mcount; _dl_mcount_wrapper; __poll;
 
     # helper functions
     __libc_current_sigrtmin; __libc_current_sigrtmax; __libc_allocate_rtsig;
index 28e572c..4cab953 100644 (file)
@@ -67,9 +67,9 @@ exp_mpn (mp1 ex, mp1 x)
 
    memset (xp, 0, sizeof (mp1));
    memset (ex, 0, sizeof (mp1));
-   xp[FRAC / mpbpl] = 1 << FRAC % mpbpl;
+   xp[FRAC / mpbpl] = (mp_limb_t)1 << FRAC % mpbpl;
    memset (tol,0, sizeof (mp1));
-   tol[(FRAC - TOL) / mpbpl] = 1 << (FRAC - TOL) % mpbpl;
+   tol[(FRAC - TOL) / mpbpl] = (mp_limb_t)1 << (FRAC - TOL) % mpbpl;
 
    n = 0;
 
@@ -119,7 +119,7 @@ main (void)
 
    memset (maxerror, 0, sizeof (mp1));
    memset (xt, 0, sizeof (mp1));
-   xt[(FRAC - N2) / mpbpl] = 1 << (FRAC - N2) % mpbpl;
+   xt[(FRAC - N2) / mpbpl] = (mp_limb_t)1 << (FRAC - N2) % mpbpl;
 
    for (i = 0; i < 1 << N2; i++)
    {
@@ -166,7 +166,7 @@ main (void)
 
    /* Check exp_mpn against precomputed value of exp(1).  */
    memset (x, '\0', sizeof (mp1));
-   x[FRAC / mpbpl] = 1 << FRAC % mpbpl;
+   x[FRAC / mpbpl] = (mp_limb_t)1 << FRAC % mpbpl;
    exp_mpn (ex, x);
 
    memset (e2, '\0', sizeof (mp1));
index 1f5d7cc..7243944 100644 (file)
@@ -107,9 +107,9 @@ exp_mpn (mp1 ex, mp1 x)
 
    memset (xp, 0, sizeof (mp1));
    memset (ex, 0, sizeof (mp1));
-   xp[FRAC / mpbpl] = 1 << FRAC % mpbpl;
+   xp[FRAC / mpbpl] = (mp_limb_t)1 << FRAC % mpbpl;
    memset (tol, 0, sizeof (mp1));
-   tol[(FRAC - TOL) / mpbpl] = 1 << (FRAC - TOL) % mpbpl;
+   tol[(FRAC - TOL) / mpbpl] = (mp_limb_t)1 << (FRAC - TOL) % mpbpl;
 
    n = 0;
 
@@ -170,7 +170,7 @@ main (void)
 
   memset (maxerror, 0, sizeof (mp1));
   memset (xt, 0, sizeof (mp1));
-  xt[(FRAC - N2) / mpbpl] = 1 << (FRAC - N2) % mpbpl;
+  xt[(FRAC - N2) / mpbpl] = (mp_limb_t)1 << (FRAC - N2) % mpbpl;
 
   for (i = 0; i < (1 << N2); ++i)
     {
@@ -219,7 +219,7 @@ main (void)
 
   /* Check exp_mpn against precomputed value of exp(1).  */
   memset (x, 0, sizeof (mp1));
-  x[FRAC / mpbpl] = 1 << FRAC % mpbpl;
+  x[FRAC / mpbpl] = (mp_limb_t)1 << FRAC % mpbpl;
   exp_mpn (ex, x);
   read_mpn_hex (e2, exp1);
   if (mpn_cmp (ex, e2, SZ) >= 0)
index 98f1e71..2f4187c 100644 (file)
@@ -156,7 +156,7 @@ main (void)
   memset (sin_maxerror, 0, sizeof (mp1));
   memset (cos_maxerror, 0, sizeof (mp1));
   memset (xt, 0, sizeof (mp1));
-  xt[(FRAC - N2) / mpbpl] = 1 << (FRAC - N2) % mpbpl;
+  xt[(FRAC - N2) / mpbpl] = (mp_limb_t)1 << (FRAC - N2) % mpbpl;
 
   for (i = 0; i < 1 << N2; i++)
     {
@@ -232,7 +232,7 @@ main (void)
 
    /* Check Range-Kutta against precomputed values of sin(1) and cos(1).  */
    memset (x, 0, sizeof (mp1));
-   x[FRAC / mpbpl] = 1 << FRAC % mpbpl;
+   x[FRAC / mpbpl] = (mp_limb_t)1 << FRAC % mpbpl;
    sincosx_mpn (si, co, x, ox);
 
    memset (s2, 0, sizeof (mp1));
index 635dd45..68659e9 100644 (file)
@@ -102,13 +102,14 @@ inet_aton(cp, addr)
        register u_int32_t val; /* changed from u_long --david */
        register int base, n;
        register char c;
-       u_int parts[4];
-       register u_int *pp = parts;
+       u_int32_t parts[4];
+       register u_int32_t *pp = parts;
+
 #ifdef _LIBC
        int saved_errno = errno;
-
        __set_errno (0);
 #endif
+
        c = *cp;
        for (;;) {
                /*
@@ -117,7 +118,18 @@ inet_aton(cp, addr)
                 * 0x=hex, 0=octal, isdigit=decimal.
                 */
                if (!isdigit(c))
-                       return (0);
+                       goto ret_0;
+#ifdef _LIBC
+               {
+                       unsigned long ul = strtoul (cp, (char **) &cp, 0);
+                       if (ul == ULONG_MAX && errno == ERANGE)
+                               goto ret_0;
+                       if (ul > 0xfffffffful)
+                               goto ret_0;
+                       val = ul;
+               }
+               c = *cp;
+#else
                base = 10;
                if (c == '0') {
                        c = *++cp;
@@ -126,15 +138,6 @@ inet_aton(cp, addr)
                        else
                                base = 8;
                }
-#ifdef _LIBC
-               val = strtoul (cp, (char **) &cp, base);
-               if (val == ULONG_MAX && errno == ERANGE)
-               {
-                       __set_errno (saved_errno);
-                       return 0;
-               }
-               c = *cp;
-#else
                val = 0;
                for (;;) {
                        if (isascii(c) && isdigit(c)) {
@@ -156,7 +159,7 @@ inet_aton(cp, addr)
                         *      a.b     (with b treated as 24 bits)
                         */
                        if (pp >= parts + 3)
-                               return (0);
+                               goto ret_0;
                        *pp++ = val;
                        c = *++cp;
                } else
@@ -166,7 +169,7 @@ inet_aton(cp, addr)
         * Check for trailing characters.
         */
        if (c != '\0' && (!isascii(c) || !isspace(c)))
-               return (0);
+               goto ret_0;
        /*
         * Concoct the address according to
         * the number of parts specified.
@@ -175,30 +178,40 @@ inet_aton(cp, addr)
        switch (n) {
 
        case 0:
-               return (0);             /* initial nondigit */
+               goto ret_0;             /* initial nondigit */
 
        case 1:                         /* a -- 32 bits */
                break;
 
        case 2:                         /* a.b -- 8.24 bits */
                if (val > 0xffffff)
-                       return (0);
+                       goto ret_0;
                val |= parts[0] << 24;
                break;
 
        case 3:                         /* a.b.c -- 8.8.16 bits */
                if (val > 0xffff)
-                       return (0);
+                       goto ret_0;
                val |= (parts[0] << 24) | (parts[1] << 16);
                break;
 
        case 4:                         /* a.b.c.d -- 8.8.8.8 bits */
                if (val > 0xff)
-                       return (0);
+                       goto ret_0;
                val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
                break;
        }
        if (addr)
                addr->s_addr = htonl(val);
+
+#ifdef _LIBC
+       __set_errno (saved_errno);
+#endif
        return (1);
+
+ret_0:
+#ifdef _LIBC
+       __set_errno (saved_errno);
+#endif
+       return (0);
 }
index 6cf4a17..250a317 100644 (file)
@@ -31,12 +31,7 @@ endif
 
 ifeq ($(subdir),elf)
 # The ld.so startup code cannot use literals until it self-relocates.
- ifeq ($(elf),yes)
-  CFLAGS-rtld.c = -mbuild-constants
- endif
-# The rest of ld.so shouldn't use FP regs for block moves so
-# that the lazy link trampoline doesn't have to save them.
-sysdep-CFLAGS += -mno-fp-regs
+CFLAGS-rtld.c = -mbuild-constants
 endif
 
 divrem := divl divq reml remq
index 455fd7b..8f639a9 100644 (file)
@@ -106,8 +106,13 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
       else
        {
          *(Elf64_Addr *)(plt + 16) = (Elf64_Addr) &_dl_runtime_profile;
-         /* Say that we really want profiling and the timers are started.  */
-         _dl_profile_map = l;
+
+         if (_dl_name_match_p (_dl_profile, l))
+           {
+             /* This is the object we are looking for.  Say that we really
+                want profiling and the timers are started.  */
+             _dl_profile_map = l;
+           }
        }
 
       /* Identify this shared object */
@@ -131,7 +136,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
 " #tramp_name ":
        lda     $sp, -168($sp)
        .frame  $sp, 168, $26
-       /* Preserve all registers that C normally doesn't.  */
+       /* Preserve all integer registers that C normally doesn't.  */
        stq     $26, 0($sp)
        stq     $0, 8($sp)
        stq     $1, 16($sp)
@@ -157,7 +162,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
        /* Set up our $gp */
        br      $gp, .+4
        ldgp    $gp, 0($gp)
-       .prologue 1
+       .prologue 0
        /* Set up the arguments for fixup: */
        /* $16 = link_map out of plt0 */
        /* $17 = offset of reloc entry = ($28 - $27 - 20) /12 * 24 */
@@ -216,11 +221,13 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
 
 #define RTLD_START asm ("\
 .text
+       .set at
        .globl _start
        .ent _start
 _start:
        br      $gp, 0f
 0:     ldgp    $gp, 0($gp)
+       .prologue 0
        /* Pass pointer to argument block to _dl_start.  */
        mov     $sp, $16
        bsr     $26, "ASM_ALPHA_NG_SYMBOL_PREFIX"_dl_start..ng
@@ -229,8 +236,12 @@ _start:
        .globl _dl_start_user
        .ent _dl_start_user
 _dl_start_user:
+       .frame $30,0,$31,0
+       .prologue 0
        /* Save the user entry point address in s0.  */
        mov     $0, $9
+       /* Store the highest stack address.  */
+       stq     $30, __libc_stack_end
        /* See if we were run as a command with the executable file
           name as an extra leading argument.  If so, adjust the stack
           pointer to skip _dl_skip_args words.  */
@@ -253,15 +264,14 @@ _dl_start_user:
        ldgp    $gp, 0($26)
        br      1b
 2:     /* Clear the startup flag.  */
-       .set at
        stl     $31, _dl_starting_up
-       .set noat
        /* Pass our finalizer function to the user in $0. */
        lda     $0, _dl_fini
        /* Jump to the user's entry point.  */
        mov     $9, $27
        jmp     ($9)
        .end _dl_start_user
+       .set noat
 .previous");
 
 /* Nonzero iff TYPE describes relocation of a PLT entry, so
index 1330d1f..ecb8174 100644 (file)
@@ -29,13 +29,14 @@ _start:
        mov     zero, fp
        br      gp, 1f
 1:     ldgp    gp, 0(gp)
+       subq    sp, 16, sp
        .prologue 1
 
   /* Load address of the user's main function.  */
        lda     a0, main
 
-       ldl     a1, 0(sp)       /* get argc */
-       lda     a2, 8(sp)       /* get argv */
+       ldl     a1, 16(sp)      /* get argc */
+       lda     a2, 24(sp)      /* get argv */
 
   /* Load address of our own entry points to .fini and .init.  */
        lda     a3, _init
@@ -44,10 +45,12 @@ _start:
   /* Store address of the shared library termination function.  */
        mov     v0, a5
 
+  /* Provide the highest stack address to the user code.  */
+       stq     sp, 0(sp)
+
   /* Call the user's main function, and exit with its value.
-     But let the libc call main.    */
+     But let the libc call main.  */
        jsr     ra, __libc_start_main
-       ldgp    gp, 0(ra)
 
   /* Die very horribly if exit returns.  Call_pal hlt is callable from
      kernel mode only; this will result in an illegal instruction trap.  */
@@ -56,16 +59,3 @@ _start:
 
 /* For ECOFF backwards compatibility. */
 weak_alias(_start, __start)
-
-/* Define a symbol for the first piece of initialized data.  */
-       .data
-       .globl __data_start
-__data_start:
-       .long 0
-
-#ifdef __ELF__
-       .size __data_start, 4
-       .type __data_start, @object
-#endif
-
-weak_alias(__data_start, data_start)
index c2a96e3..9b61ddb 100644 (file)
@@ -39,28 +39,28 @@ feraiseexcept (int excepts)
     {
       /* One example of a invalid operation is 0 * Infinity.  */
       __asm__ __volatile__("mult/sui $f31,%1,%0; trapb"
-                          : "=f"(tmp) : "f"(HUGE_VAL));
+                          : "=&f"(tmp) : "f"(HUGE_VAL));
     }
 
   /* Next: division by zero.  */
   if (FE_DIVBYZERO & excepts)
     {
       __asm__ __volatile__("cmpteq $f31,$f31,%1; divt/sui %1,$f31,%0; trapb"
-                          : "=f"(tmp), "=f"(dummy));
+                          : "=&f"(tmp), "=f"(dummy));
     }
 
   /* Next: overflow.  */
   if (FE_OVERFLOW & excepts)
     {
       __asm__ __volatile__("mult/sui %1,%1,%0; trapb"
-                          : "=f"(tmp) : "f"(DBL_MAX));
+                          : "=&f"(tmp) : "f"(DBL_MAX));
     }
 
   /* Next: underflow.  */
   if (FE_UNDERFLOW & excepts)
     {
       __asm__ __volatile__("divt/sui %1,%2,%0; trapb"
-                          : "=f"(tmp) : "f"(DBL_MIN),
+                          : "=&f"(tmp) : "f"(DBL_MIN),
                                         "f"((double) (1UL << 60)));
     }
 
@@ -68,6 +68,6 @@ feraiseexcept (int excepts)
   if (FE_INEXACT & excepts)
     {
       __asm__ __volatile__("divt/sui %1,%2,%0; trapb"
-                          : "=f"(tmp) : "f"(1.0), "f"(M_PI));
+                          : "=&f"(tmp) : "f"(1.0), "f"(M_PI));
     }
 }
index 836e5a3..465592c 100644 (file)
@@ -582,7 +582,7 @@ __MATH_INLINE int
 __finite (double __x)
 {
   return (__extension__
-         (((((union { double __d; int __i[2]; }) {__d: __x}).i[1]
+         (((((union { double __d; int __i[2]; }) {__d: __x}).__i[1]
             | 0x800fffff) + 1) >> 31));
 }
 
index 3b36764..55d676e 100644 (file)
@@ -18,6 +18,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <math.h>
+#include "math_private.h"
 
 
 double
index 200eecd..d6cc9dc 100644 (file)
@@ -18,6 +18,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <math.h>
+#include "math_private.h"
 
 
 float
index e2820d2..cf8658b 100644 (file)
@@ -18,6 +18,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <math.h>
+#include "math_private.h"
 
 
 long double