mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 09:43:32 +08:00
Update.
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:
parent
db24ce47ac
commit
69bf5f7547
23
ChangeLog
23
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
|
||||
|
@ -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));
|
||||
|
||||
|
2
libc.map
2
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;
|
||||
|
@ -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));
|
||||
|
@ -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)
|
||||
|
@ -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));
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <math.h>
|
||||
#include "math_private.h"
|
||||
|
||||
|
||||
double
|
||||
|
@ -18,6 +18,7 @@
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <math.h>
|
||||
#include "math_private.h"
|
||||
|
||||
|
||||
float
|
||||
|
@ -18,6 +18,7 @@
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <math.h>
|
||||
#include "math_private.h"
|
||||
|
||||
|
||||
long double
|
||||
|
Loading…
Reference in New Issue
Block a user