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.
This commit is contained in:
Ulrich Drepper 1998-06-27 09:52:12 +00:00
parent db24ce47ac
commit 69bf5f7547
15 changed files with 102 additions and 67 deletions

View file

@ -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

View 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));

View file

@ -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;

View 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));

View 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)

View 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));

View 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);
}

View 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

View 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

View 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)

View 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));
}
}

View 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));
}

View file

@ -18,6 +18,7 @@
Boston, MA 02111-1307, USA. */
#include <math.h>
#include "math_private.h"
double

View file

@ -18,6 +18,7 @@
Boston, MA 02111-1307, USA. */
#include <math.h>
#include "math_private.h"
float

View file

@ -18,6 +18,7 @@
Boston, MA 02111-1307, USA. */
#include <math.h>
#include "math_private.h"
long double