mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
Wed Feb 22 00:44:41 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
* sysdeps/mach/hurd/i386/sigreturn.c: Restore the FPU state. * stdlib/random.c (__srandom): Change algorithm used to populate the state array. (randtbl): Recomputed with new algorithm.
This commit is contained in:
@ -1,5 +1,13 @@
|
|||||||
|
Wed Feb 22 00:44:41 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||||
|
|
||||||
|
* sysdeps/mach/hurd/i386/sigreturn.c: Restore the FPU state.
|
||||||
|
|
||||||
Tue Feb 21 21:53:30 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
Tue Feb 21 21:53:30 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
|
||||||
|
|
||||||
|
* stdlib/random.c (__srandom): Change algorithm used to populate
|
||||||
|
the state array.
|
||||||
|
(randtbl): Recomputed with new algorithm.
|
||||||
|
|
||||||
* sysdeps/sparc/Makefile [subdir=crypt] (crypt): Reset only if set
|
* sysdeps/sparc/Makefile [subdir=crypt] (crypt): Reset only if set
|
||||||
to original value of `crypt'.
|
to original value of `crypt'.
|
||||||
* sysdeps/unix/sysv/sysv4/solaris2/sparc/Makefile [subdir=crypt]
|
* sysdeps/unix/sysv/sysv4/solaris2/sparc/Makefile [subdir=crypt]
|
||||||
|
@ -122,12 +122,14 @@ static int seps[MAX_TYPES] = { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 };
|
|||||||
static long int randtbl[DEG_3 + 1] =
|
static long int randtbl[DEG_3 + 1] =
|
||||||
{
|
{
|
||||||
TYPE_3,
|
TYPE_3,
|
||||||
-851904987, -43806228, -2029755270, 1390239686, -1912102820,
|
|
||||||
-485608943, 1969813258, -1590463333, -1944053249, 455935928, 508023712,
|
-1726662223, 379960547, 1735697613, 1040273694, 1313901226,
|
||||||
-1714531963, 1800685987, -2015299881, 654595283, -1149023258,
|
1627687941, -179304937, -2073333483, 1780058412, -1989503057,
|
||||||
-1470005550, -1143256056, -1325577603, -1568001885, 1275120390,
|
-615974602, 344556628, 939512070, -1249116260, 1507946756,
|
||||||
-607508183, -205999574, -1696891592, 1492211999, -1528267240,
|
-812545463, 154635395, 1388815473, -1926676823, 525320961,
|
||||||
-952028296, -189082757, 362343714, 1424981831, 2039449641,
|
-1009028674, 968117788, -123449607, 1284210865, 435012392,
|
||||||
|
-2017506339, -911064859, -370259173, 1132637927, 1398500161,
|
||||||
|
-205601318,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* FPTR and RPTR are two pointers into the state info, a front and a rear
|
/* FPTR and RPTR are two pointers into the state info, a front and a rear
|
||||||
@ -179,11 +181,19 @@ DEFUN(__srandom, (x), unsigned int x)
|
|||||||
{
|
{
|
||||||
register long int i;
|
register long int i;
|
||||||
for (i = 1; i < rand_deg; ++i)
|
for (i = 1; i < rand_deg; ++i)
|
||||||
state[i] = (1103515145 * state[i - 1]) + 12345;
|
{
|
||||||
|
/* This does:
|
||||||
|
state[i] = (16807 * state[i - 1]) % 2147483647;
|
||||||
|
but avoids overflowing 31 bits. */
|
||||||
|
long int hi = state[i - 1] / 127773;
|
||||||
|
long int lo = state[i - 1] % 127773;
|
||||||
|
long int test = 16807 * lo - 2836 * hi;
|
||||||
|
state[i] = test + (test < 0 ? 2147483647 : 0);
|
||||||
|
}
|
||||||
fptr = &state[rand_sep];
|
fptr = &state[rand_sep];
|
||||||
rptr = &state[0];
|
rptr = &state[0];
|
||||||
for (i = 0; i < 10 * rand_deg; ++i)
|
for (i = 0; i < 10 * rand_deg; ++i)
|
||||||
(void) __random();
|
(void) __random ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Convert between signal names and numbers.
|
/* Convert between signal names and numbers.
|
||||||
Copyright (C) 1990, 1992, 1993 Free Software Foundation, Inc.
|
Copyright (C) 1990, 1992, 1993, 1995 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -273,3 +273,20 @@ psignal (signal, message)
|
|||||||
fprintf (stderr, "%s: %s\n", message, sys_siglist[signal]);
|
fprintf (stderr, "%s: %s\n", message, sys_siglist[signal]);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRSIGNAL
|
||||||
|
/* Return the string associated with the signal number. */
|
||||||
|
|
||||||
|
char *
|
||||||
|
strsignal (signal)
|
||||||
|
int signal;
|
||||||
|
{
|
||||||
|
static char buf[] = "Signal 12345678901234567890";
|
||||||
|
|
||||||
|
if (signal > 0 || signal < NSIG)
|
||||||
|
return sys_siglist[signal];
|
||||||
|
|
||||||
|
sprintf (buf, "Signal %d", signal);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Convert between signal names and numbers.
|
/* Convert between signal names and numbers.
|
||||||
Copyright (C) 1990, 1992, 1993 Free Software Foundation, Inc.
|
Copyright (C) 1990, 1992, 1993, 1995 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
@ -29,7 +29,7 @@ char *sig_abbrev (int number);
|
|||||||
signal by that name. */
|
signal by that name. */
|
||||||
int sig_number (const char *abbrev);
|
int sig_number (const char *abbrev);
|
||||||
|
|
||||||
/* Avoid conflicts with a system header file that might define these two. */
|
/* Avoid conflicts with a system header file that might define these three. */
|
||||||
|
|
||||||
#ifndef HAVE_PSIGNAL
|
#ifndef HAVE_PSIGNAL
|
||||||
/* Print to standard error the name of SIGNAL, preceded by MESSAGE and
|
/* Print to standard error the name of SIGNAL, preceded by MESSAGE and
|
||||||
@ -37,6 +37,11 @@ int sig_number (const char *abbrev);
|
|||||||
void psignal (int signal, const char *message);
|
void psignal (int signal, const char *message);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRSIGNAL
|
||||||
|
/* Return the name of SIGNAL. */
|
||||||
|
char *strsignal (int signal);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !defined (HAVE_SYS_SIGLIST)
|
#if !defined (HAVE_SYS_SIGLIST)
|
||||||
/* Names for signals from 0 to NSIG-1. */
|
/* Names for signals from 0 to NSIG-1. */
|
||||||
extern const char *sys_siglist[];
|
extern const char *sys_siglist[];
|
||||||
@ -50,6 +55,9 @@ int sig_number ();
|
|||||||
#if !defined (HAVE_SYS_SIGLIST) && !defined (HAVE_PSIGNAL)
|
#if !defined (HAVE_SYS_SIGLIST) && !defined (HAVE_PSIGNAL)
|
||||||
void psignal ();
|
void psignal ();
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef HAVE_STRSIGNAL
|
||||||
|
char *strsignal (int signal);
|
||||||
|
#endif
|
||||||
#if !defined (HAVE_SYS_SIGLIST)
|
#if !defined (HAVE_SYS_SIGLIST)
|
||||||
extern char *sys_siglist[];
|
extern char *sys_siglist[];
|
||||||
#endif
|
#endif
|
||||||
|
@ -80,10 +80,9 @@ __sigreturn (struct sigcontext *scp)
|
|||||||
*reply_port = scp->sc_reply_port;
|
*reply_port = scp->sc_reply_port;
|
||||||
|
|
||||||
if (scp->sc_fpused)
|
if (scp->sc_fpused)
|
||||||
{
|
/* Restore the FPU state. Mach conveniently stores the state
|
||||||
/* XXX should restore FPU state here XXX roland needs 387 manual */
|
in the format the i387 `frstor' instruction uses to restore it. */
|
||||||
/* abort (); */
|
asm volatile ("frstor %0" : : "m" (scp->sc_fpsave));
|
||||||
}
|
|
||||||
|
|
||||||
{
|
{
|
||||||
/* There are convenient instructions to pop state off the stack, so we
|
/* There are convenient instructions to pop state off the stack, so we
|
||||||
|
Reference in New Issue
Block a user