aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog111
-rw-r--r--Makefile3
-rw-r--r--PROJECTS15
-rw-r--r--elf/dl-lookup.c1
-rw-r--r--io/ftwtest-sh55
-rw-r--r--libio/libio.h2
-rw-r--r--manual/maint.texi2
-rw-r--r--misc/tsearch.c16
-rw-r--r--misc/tst-tsearch.c8
-rw-r--r--nis/nss_nis/nis-hosts.c12
-rw-r--r--nis/nss_nisplus/nisplus-hosts.c13
-rw-r--r--posix/execle.c1
-rw-r--r--posix/execlp.c1
-rw-r--r--stdio-common/printf_fphex.c1
-rw-r--r--stdlib/strfmon.c7
-rw-r--r--sunrpc/clnt_udp.c2
-rw-r--r--sunrpc/pmap_rmt.c3
-rw-r--r--sunrpc/svc_tcp.c4
-rw-r--r--sunrpc/svc_udp.c11
-rw-r--r--sunrpc/xdr.c1
-rw-r--r--sunrpc/xdr_rec.c17
-rw-r--r--sysdeps/alpha/Makefile4
-rw-r--r--sysdeps/alpha/fpu/fclrexcpt.c36
-rw-r--r--sysdeps/alpha/fpu/fegetenv.c37
-rw-r--r--sysdeps/alpha/fpu/fegetround.c31
-rw-r--r--sysdeps/alpha/fpu/feholdexcpt.c33
-rw-r--r--sysdeps/alpha/fpu/fenvbits.h107
-rw-r--r--sysdeps/alpha/fpu/fesetenv.c45
-rw-r--r--sysdeps/alpha/fpu/fesetround.c41
-rw-r--r--sysdeps/alpha/fpu/feupdateenv.c38
-rw-r--r--sysdeps/alpha/fpu/fgetexcptflg.c33
-rw-r--r--sysdeps/alpha/fpu/fpu_control.h46
-rw-r--r--sysdeps/alpha/fpu/fraiseexcpt.c72
-rw-r--r--sysdeps/alpha/fpu/fsetexcptflg.c36
-rw-r--r--sysdeps/alpha/fpu/ftestexcept.c32
-rw-r--r--sysdeps/generic/memccpy.c1
-rw-r--r--sysdeps/ieee754/huge_val.h38
-rw-r--r--sysdeps/ieee754/nan.h37
-rw-r--r--sysdeps/libm-ieee754/s_log2.c4
-rw-r--r--sysdeps/unix/alpha/sysdep.S4
-rw-r--r--sysdeps/unix/sysv/linux/alpha/brk.S5
-rw-r--r--sysdeps/unix/sysv/linux/alpha/gnu/types.h5
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S8
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S10
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ioperm.c8
-rw-r--r--sysdeps/unix/sysv/linux/alpha/setfpucw.c81
-rw-r--r--sysdeps/unix/sysv/linux/alpha/syscall.S4
-rw-r--r--sysdeps/unix/sysv/linux/sys/ttydefaults.h4
48 files changed, 899 insertions, 187 deletions
diff --git a/ChangeLog b/ChangeLog
index 199ee31..fdbfc61 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,112 @@
+1997-05-31 02:33 Ulrich Drepper <drepper@cygnus.com>
+
+ * io/ftwtest-sh: More tests.
+
+ * misc/tsearch.c: Rewrite tdestroy_recursive.
+
+ * libio/libio.h: Define bits for libg++-2.8.
+
+1997-05-30 22:21 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
+
+ * nis/nss_nis/nis-hosts.c: Same changes as in
+ nss/nss_files/files-hosts.c (Always use inet_pton).
+ * nis/nss_nisplus/nisplus-hosts.c: Likewise.
+
+1997-05-30 09:50 Richard Henderson <rth@tamu.edu>
+
+ * manual/maint.texi: ECOFF hasn't been tested in ages and I don't
+ plan on doing so ever again. Don't say alpha-linuxecoff is known
+ to work.
+
+ * elf/dl-lookup.c: Include <alloca.h>.
+ * misc/tsearch.c: Include <string.h>.
+ * posix/execle.c: Include <alloca.h>.
+ * posix/execlp.c: Likewise.
+ * stdio-common/printf_fphex.c: Include <string.h>.
+ * sunrpc/xdr.c: Include <string.h>.
+ * sysdeps/generic/memccpy.c: Include only <string.h>.
+
+ * sunrpc/clnt_udp.c (clntudp_call): Make fromlen a size_t to fix
+ parameters to network functions.
+ * sunrpc/pmap_rmt.c (clnt_broadcast): Likewise.
+ * sunrpc/svc_tcp.c (svctcp_create): Likewise with `len'.
+ (rendezvous_request): Likewise.
+ * sunrpc/svc_udp.c (svcudp_bufcreate): Likewise.
+ (svcudp_recv): Similar, but go through a local variable. The old code
+ used &xprt->xp_addrlen. Someone should determine if the type of the
+ structure member should be changed instead.
+ * sunrpc/xdr_rec.c (xdrrec_create): Expunge a ptr->int cast warning
+ and transform a nonsense for-loop to a closed form calculation.
+ (fill_input_buf): Another ptr->int warning.
+
+ * sysdeps/alpha/Makefile: Temporarily turn on -mieee globally. This
+ will last until I figure out how to build a parallel libm_ieee.
+
+ * sysdeps/alpha/fpu/fclrexcpt.c,
+ * sysdeps/alpha/fpu/fegetenv.c,
+ * sysdeps/alpha/fpu/fegetround.c,
+ * sysdeps/alpha/fpu/feholdexcpt.c,
+ * sysdeps/alpha/fpu/fenvbits.h,
+ * sysdeps/alpha/fpu/fesetenv.c,
+ * sysdeps/alpha/fpu/fesetround.c,
+ * sysdeps/alpha/fpu/feupdateenv.c,
+ * sysdeps/alpha/fpu/fgetexcptflg.c,
+ * sysdeps/alpha/fpu/fraiseexcpt.c,
+ * sysdeps/alpha/fpu/fsetexcptflg.c,
+ * sysdeps/alpha/fpu/ftestexcept.c: New files. There is, btw, a small
+ kernel patch that must be applied as of 2.0.31-pre1 and 2.1.41 for
+ this to work properly.
+
+ * sysdeps/alpha/fpu/fpu_control.h: Update copyright. Change default
+ FP mode to round to nearest, no exceptions as for Intel.
+ * sysdeps/unix/sysv/linux/alpha/setfpucw.c: Add copyright.
+ (rdfpcr): Use excb rather than trapb. Be more efficient about
+ getting at the fpcr.
+ (wrfpcr): Likewise.
+ (__setfpucw): Reformat.
+
+ * sysdeps/ieee754/huge_val.h: Change GCC's HUGE_VAL definition to use
+ a single DI-mode integer instead of bytes. This produces better code
+ on Alpha. Similar for HUGE_VALF.
+ * sysdeps/ieee754/nan.h: Similar for NAN. Add NANF and NANL.
+
+ * sysdeps/libm-ieee754/s_log2.c: Missing */ and weak_alias.
+
+ * sysdeps/unix/alpha/sysdep.S: Tiny cleanups.
+ * sysdeps/unix/sysv/linux/alpha/syscall.S: Likewise.
+ * sysdeps/unix/sysv/linux/alpha/brk.S: Don't use jmp macro to make
+ sure the stack frame is released the very instruction before the
+ real jump out.
+ * sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S: Likewise.
+ * sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S: Likewise.
+
+ * sysdeps/unix/sysv/linux/alpha/gnu/types.h: Undef some bits we may
+ have gotten from <linux/posix_types.h>.
+
+ * sysdeps/unix/sysv/linux/alpha/ioperm.c: Add definition for Miata.
+
+1997-05-30 13:05 Ulrich Drepper <drepper@cygnus.com>
+
+ * misc/tst-tsearch.c (mangle_tree): Update casts to prevent
+ warnings.
+
+1997-05-29 14:02 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * sysdeps/unix/sysv/linux/sys/ttydefaults.h (CEOL, CSTATUS): Use
+ correct value for _POSIX_VDISABLE.
+
+1997-05-29 13:59 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * Makefile (manual/dir-add.texi): Force execution.
+
+1997-05-29 13:57 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * sysexits.h: New file.
+
+1997-05-29 13:55 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * stdlib/strfmon.c: Don't run past EOS after `='.
+
1997-05-29 12:48 Ulrich Drepper <drepper@cygnus.com>
* io/ftw.c: Complete rewrite. Add implementation of `nftw'.
@@ -4075,7 +4184,7 @@
header since it is wrong for 64 bit systems.
Patch by a sun <asun@zoology.washington.edu>.
-1997-02-27 10:34:11 Richard Henderson <rth@tamu.edu>
+1997-02-27 10:34 Richard Henderson <rth@tamu.edu>
* sysdeps/unix/sysv/linux/alpha/brk.S: Support both the Linux/i386
and OSF/1 style brk syscalls. We may want to change Linux/Alpha
diff --git a/Makefile b/Makefile
index bebffa4..a91999b 100644
--- a/Makefile
+++ b/Makefile
@@ -315,8 +315,9 @@ makeinfo --no-validate --no-warn --no-headers $< -o $@
endef
INSTALL: manual/maint.texi; $(format-me)
NOTES: manual/creature.texi; $(format-me)
-manual/dir-add.texi:
+manual/dir-add.texi: FORCE
$(MAKE) $(PARALLELMFLAGS) -C $(@D) $(@F)
+FORCE:
rpm/%: subdir_distinfo
$(MAKE) $(PARALLELMFLAGS) -C $(@D) subdirs='$(subdirs)' $(@F)
diff --git a/PROJECTS b/PROJECTS
index 0775bd2..59b3d8a 100644
--- a/PROJECTS
+++ b/PROJECTS
@@ -80,12 +80,6 @@ contact <bug-glibc@prep.ai.mit.edu>
work.
-[ 9] Write nftw() function. Perhaps it might be good to reimplement the
- ftw() function as well to share most of the code.
-
-**** Almost done!
-
-
[10] Extend regex and/or rx to work with wide characters and complete
implementation of character class and collation class handling.
@@ -98,21 +92,12 @@ contact <bug-glibc@prep.ai.mit.edu>
hard and not all services must be supported at once.
-[12] Rewrite utmp/wtmp functions to use database functions. This is much
- better than the normal flat file format.
-
-**** There are plans for a new approach to this problem. Please contact
- bug-glibc@prep.ai.mit.edu before starting to work.)
-
-
[13] Several more or less small functions have to be written:
+ tcgetid() and waitid() from XPG4.2
+ grantpt(), ptsname(), unlockpt() from XPG4.2
+ getdate() from XPG4.2
*** Probably underway
- + fmtmsg() from SVID
- *** Probably underway
More information are available on request.
diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
index 63a525e..294dfb9 100644
--- a/elf/dl-lookup.c
+++ b/elf/dl-lookup.c
@@ -17,6 +17,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include <alloca.h>
#include <stddef.h>
#include <link.h>
#include <assert.h>
diff --git a/io/ftwtest-sh b/io/ftwtest-sh
index 1c7c398..da2eaf7 100644
--- a/io/ftwtest-sh
+++ b/io/ftwtest-sh
@@ -16,7 +16,7 @@ testprogram=$2
tmp=${TMPDIR:-/tmp}
tmpdir=$tmp/ftwtest.d
-trap 'rm -fr $tmpdir $testout' 1 2 3 15
+trap 'chmod -R a+x $tmpdir; rm -fr $tmpdir $testout' 1 2 3 15
if test -d $tmpdir; then
chmod -R a+x $tmpdir
@@ -39,7 +39,8 @@ echo > $tmpdir/bar/xo
chmod a-x,a+r $tmpdir/bar
testout=${TMPDIR:-/tmp}/ftwtest.out
-LD_LIBRARY_PATH=$objpfx $objpfx/elf/ld.so $testprogram $tmpdir |
+
+LD_LIBRARY_PATH=$objpfx ${objpfx}elf/ld.so $testprogram $tmpdir |
sort > $testout
cat <<EOF | cmp $testout - || exit 1
@@ -58,27 +59,47 @@ base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F
EOF
rm $testout
-testout=${TMPDIR:-/tmp}/ftwtest.out
-LD_LIBRARY_PATH=$objpfx $objpfx/elf/ld.so $testprogram --depth $tmpdir |
+LD_LIBRARY_PATH=$objpfx ${objpfx}elf/ld.so $testprogram --depth $tmpdir |
sort > $testout
cat <<EOF | cmp $testout - || exit 1
-base = "/tmp/", file = "ftwtest.d", flag = FTW_DP
-base = "/tmp/ftwtest.d/", file = "bar", flag = FTW_DP
-base = "/tmp/ftwtest.d/", file = "baz", flag = FTW_F
-base = "/tmp/ftwtest.d/", file = "foo", flag = FTW_DP
-base = "/tmp/ftwtest.d/bar/", file = "xo", flag = FTW_NS
-base = "/tmp/ftwtest.d/foo/", file = "lvl1", flag = FTW_DP
-base = "/tmp/ftwtest.d/foo/lvl1/", file = "file@1", flag = FTW_F
-base = "/tmp/ftwtest.d/foo/lvl1/", file = "link@1", flag = FTW_SLN
-base = "/tmp/ftwtest.d/foo/lvl1/", file = "lvl2", flag = FTW_DP
-base = "/tmp/ftwtest.d/foo/lvl1/lvl2/", file = "file@2", flag = FTW_F
-base = "/tmp/ftwtest.d/foo/lvl1/lvl2/", file = "lvl3", flag = FTW_DP
-base = "/tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F
+base = "$tmp/", file = "ftwtest.d", flag = FTW_DP
+base = "$tmp/ftwtest.d/", file = "bar", flag = FTW_DP
+base = "$tmp/ftwtest.d/", file = "baz", flag = FTW_F
+base = "$tmp/ftwtest.d/", file = "foo", flag = FTW_DP
+base = "$tmp/ftwtest.d/bar/", file = "xo", flag = FTW_NS
+base = "$tmp/ftwtest.d/foo/", file = "lvl1", flag = FTW_DP
+base = "$tmp/ftwtest.d/foo/lvl1/", file = "file@1", flag = FTW_F
+base = "$tmp/ftwtest.d/foo/lvl1/", file = "link@1", flag = FTW_SLN
+base = "$tmp/ftwtest.d/foo/lvl1/", file = "lvl2", flag = FTW_DP
+base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "file@2", flag = FTW_F
+base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "lvl3", flag = FTW_DP
+base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F
+EOF
+rm $testout
+
+LD_LIBRARY_PATH=$objpfx ${objpfx}elf/ld.so $testprogram --phys $tmpdir |
+ sort > $testout
+
+cat <<EOF | cmp $testout - || exit 1
+base = "$tmp/", file = "ftwtest.d", flag = FTW_D
+base = "$tmp/ftwtest.d/", file = "bar", flag = FTW_D
+base = "$tmp/ftwtest.d/", file = "baz", flag = FTW_F
+base = "$tmp/ftwtest.d/", file = "foo", flag = FTW_D
+base = "$tmp/ftwtest.d/bar/", file = "xo", flag = FTW_NS
+base = "$tmp/ftwtest.d/foo/", file = "lvl1", flag = FTW_D
+base = "$tmp/ftwtest.d/foo/lvl1/", file = "file@1", flag = FTW_F
+base = "$tmp/ftwtest.d/foo/lvl1/", file = "link@1", flag = FTW_SL
+base = "$tmp/ftwtest.d/foo/lvl1/", file = "lvl2", flag = FTW_D
+base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "file@2", flag = FTW_F
+base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "link@2", flag = FTW_SL
+base = "$tmp/ftwtest.d/foo/lvl1/lvl2/", file = "lvl3", flag = FTW_D
+base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "file@3", flag = FTW_F
+base = "$tmp/ftwtest.d/foo/lvl1/lvl2/lvl3/", file = "link@3", flag = FTW_SL
EOF
rm $testout
chmod -R a+x $tmpdir
rm -fr $tmpdir
-exit 0 \ No newline at end of file
+exit 0
diff --git a/libio/libio.h b/libio/libio.h
index d0a76c3..20eb5a9 100644
--- a/libio/libio.h
+++ b/libio/libio.h
@@ -127,6 +127,7 @@ the executable file might be covered by the GNU General Public License. */
#define _IO_CURRENTLY_PUTTING 0x800
#define _IO_IS_APPENDING 0x1000
#define _IO_IS_FILEBUF 0x2000
+#define _IO_BAD_SEEN 0x4000
/* These are "formatting flags" matching the iostream fmtflags enum values. */
#define _IO_SKIPWS 01
@@ -145,6 +146,7 @@ the executable file might be covered by the GNU General Public License. */
#define _IO_UNITBUF 020000
#define _IO_STDIO 040000
#define _IO_DONT_CLOSE 0100000
+#define _IO_BOOLALPHA 0200000
struct _IO_jump_t; struct _IO_FILE;
diff --git a/manual/maint.texi b/manual/maint.texi
index 38d9786..9c542a3 100644
--- a/manual/maint.texi
+++ b/manual/maint.texi
@@ -223,7 +223,6 @@ following patterns:
@smallexample
alpha-@var{anything}-linux
-alpha-@var{anything}-linuxecoff
i@var{x}86-@var{anything}-gnu
i@var{x}86-@var{anything}-linux
m68k-@var{anything}-linux
@@ -234,6 +233,7 @@ versions) used to run on the following configurations:
@smallexample
alpha-dec-osf1
+alpha-@var{anything}-linuxecoff
i@var{x}86-@var{anything}-bsd4.3
i@var{x}86-@var{anything}-isc2.2
i@var{x}86-@var{anything}-isc3.@var{n}
diff --git a/misc/tsearch.c b/misc/tsearch.c
index c06930d..e372a9e 100644
--- a/misc/tsearch.c
+++ b/misc/tsearch.c
@@ -85,6 +85,7 @@
binary tree. */
#include <stdlib.h>
+#include <string.h>
#include <search.h>
typedef struct node_t
@@ -633,16 +634,11 @@ weak_alias (__twalk, twalk)
static void
tdestroy_recurse (node root, __free_fn_t freefct)
{
- if (root->left == NULL && root->right == NULL)
- (*freefct) (root->key);
- else
- {
- if (root->left != NULL)
- tdestroy_recurse (root->left, freefct);
- if (root->right != NULL)
- tdestroy_recurse (root->right, freefct);
- (*freefct) (root->key);
- }
+ if (root->left != NULL)
+ tdestroy_recurse (root->left, freefct);
+ if (root->right != NULL)
+ tdestroy_recurse (root->right, freefct);
+ (*freefct) ((void *) root->key);
/* Free the node itself. */
free (root);
}
diff --git a/misc/tst-tsearch.c b/misc/tst-tsearch.c
index 18cf89c..7a0c5fa 100644
--- a/misc/tst-tsearch.c
+++ b/misc/tst-tsearch.c
@@ -197,14 +197,14 @@ mangle_tree (enum order how, enum action what, void **root, int lag)
case build:
if (i < SIZE)
{
- if (tfind (x + j, (const void **) root, cmp_fn) != NULL)
+ if (tfind (x + j, (void *const *) root, cmp_fn) != NULL)
{
fputs ("Found element which is not in tree yet.\n", stdout);
error = 1;
}
elem = tsearch (x + j, root, cmp_fn);
if (elem == 0
- || tfind (x + j, (const void **) root, cmp_fn) == NULL)
+ || tfind (x + j, (void *const *) root, cmp_fn) == NULL)
{
fputs ("Couldn't find element after it was added.\n",
stdout);
@@ -219,7 +219,7 @@ mangle_tree (enum order how, enum action what, void **root, int lag)
/* fall through */
case delete:
- elem = tfind (x + j, (const void **) root, cmp_fn);
+ elem = tfind (x + j, (void *const *) root, cmp_fn);
if (elem == NULL || tdelete (x + j, root, cmp_fn) == NULL)
{
fputs ("Error deleting element.\n", stdout);
@@ -228,7 +228,7 @@ mangle_tree (enum order how, enum action what, void **root, int lag)
break;
case find:
- if (tfind (x + j, (const void **) root, cmp_fn) == NULL)
+ if (tfind (x + j, (void *const *) root, cmp_fn) == NULL)
{
fputs ("Couldn't find element after it was added.\n", stdout);
error = 1;
diff --git a/nis/nss_nis/nis-hosts.c b/nis/nss_nis/nis-hosts.c
index 5ca24c7..91d30c8 100644
--- a/nis/nss_nis/nis-hosts.c
+++ b/nis/nss_nis/nis-hosts.c
@@ -32,7 +32,6 @@
/* Get implementation for some internal functions. */
#include <resolv/mapv4v6addr.h>
-#include <resolv/mapv4v6hostent.h>
#define ENTNAME hostent
#define DATABASE "hosts"
@@ -56,8 +55,7 @@ LINE_PARSER
STRING_FIELD (addr, isspace, 1);
/* Parse address. */
- if ((_res.options & RES_USE_INET6)
- && inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
+ if (inet_pton (AF_INET6, p, entdata->host_addr) > 0)
{
result->h_addrtype = AF_INET6;
result->h_length = IN6ADDRSZ;
@@ -87,14 +85,6 @@ LINE_PARSER
entdata->h_addr_ptrs[1] = NULL;
result->h_addr_list = entdata->h_addr_ptrs;
- /* If we need the host entry in IPv6 form change it now. */
- if (_res.options & RES_USE_INET6)
- {
- char *bufptr = data->linebuffer;
- size_t buflen = (char *) data + datalen - bufptr;
- map_v4v6_hostent (result, &bufptr, &buflen);
- }
-
STRING_FIELD (result->h_name, isspace, 1);
}
)
diff --git a/nis/nss_nisplus/nisplus-hosts.c b/nis/nss_nisplus/nisplus-hosts.c
index 6f1b4be..0a00540 100644
--- a/nis/nss_nisplus/nisplus-hosts.c
+++ b/nis/nss_nisplus/nisplus-hosts.c
@@ -43,7 +43,6 @@ static nis_name *names = NULL;
/* Get implementation for some internal functions. */
#include "../../resolv/mapv4v6addr.h"
-#include "../../resolv/mapv4v6hostent.h"
#define ENTNAME hostent
#define DATABASE "hosts"
@@ -67,8 +66,7 @@ LINE_PARSER
STRING_FIELD (addr, isspace, 1);
/* Parse address. */
- if ((_res.options & RES_USE_INET6)
- && inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
+ if (inet_pton (AF_INET6, p, entdata->host_addr) > 0)
{
result->h_addrtype = AF_INET6;
result->h_length = IN6ADDRSZ;
@@ -98,15 +96,6 @@ LINE_PARSER
entdata->h_addr_ptrs[1] = NULL;
result->h_addr_list = entdata->h_addr_ptrs;
- /* If we need the host entry in IPv6 form change it now. */
- if (_res.options & RES_USE_INET6)
- {
- char *bufptr = data->linebuffer;
- /* This should be size_t */
- int buflen = (char *) data + datalen - bufptr;
- map_v4v6_hostent (result, &bufptr, &buflen);
- }
-
STRING_FIELD (result->h_name, isspace, 1);
}
)
diff --git a/posix/execle.c b/posix/execle.c
index 3e0fcee..7619a36 100644
--- a/posix/execle.c
+++ b/posix/execle.c
@@ -16,6 +16,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include <alloca.h>
#include <unistd.h>
#include <stdarg.h>
#include <stddef.h>
diff --git a/posix/execlp.c b/posix/execlp.c
index 76b878e..88a5417 100644
--- a/posix/execlp.c
+++ b/posix/execlp.c
@@ -16,6 +16,7 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
+#include <alloca.h>
#include <unistd.h>
#include <stdarg.h>
#include <stddef.h>
diff --git a/stdio-common/printf_fphex.c b/stdio-common/printf_fphex.c
index 6cdda9e..f5a3b49 100644
--- a/stdio-common/printf_fphex.c
+++ b/stdio-common/printf_fphex.c
@@ -25,6 +25,7 @@
#include <printf.h>
#include <stdlib.h>
#include <stdio.h>
+#include <string.h>
#include "_itoa.h"
#include "../locale/localeinfo.h"
diff --git a/stdlib/strfmon.c b/stdlib/strfmon.c
index 5477104..c956ae3 100644
--- a/stdlib/strfmon.c
+++ b/stdlib/strfmon.c
@@ -170,6 +170,13 @@ __strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
{
case '=': /* Set fill character. */
pad = *++fmt;
+ if (pad == '\0')
+ {
+ /* Premature EOS. */
+ __set_errno (EINVAL);
+ va_end (ap);
+ return -1;
+ }
continue;
case '^': /* Don't group digits. */
group = 0;
diff --git a/sunrpc/clnt_udp.c b/sunrpc/clnt_udp.c
index efd6a9f..e19e7e8 100644
--- a/sunrpc/clnt_udp.c
+++ b/sunrpc/clnt_udp.c
@@ -233,7 +233,7 @@ clntudp_call (cl, proc, xargs, argsp, xresults, resultsp, utimeout)
XDR *xdrs;
int outlen;
int inlen;
- int fromlen;
+ size_t fromlen;
#ifdef FD_SETSIZE
fd_set readfds;
fd_set mask;
diff --git a/sunrpc/pmap_rmt.c b/sunrpc/pmap_rmt.c
index 8ae93b8..6117c36 100644
--- a/sunrpc/pmap_rmt.c
+++ b/sunrpc/pmap_rmt.c
@@ -235,7 +235,8 @@ clnt_broadcast (prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult)
AUTH *unix_auth = authunix_create_default ();
XDR xdr_stream;
XDR *xdrs = &xdr_stream;
- int outlen, inlen, fromlen, nets;
+ int outlen, inlen, nets;
+ size_t fromlen;
int sock;
int on = 1;
#ifdef FD_SETSIZE
diff --git a/sunrpc/svc_tcp.c b/sunrpc/svc_tcp.c
index 758b6ba..ec7de3b 100644
--- a/sunrpc/svc_tcp.c
+++ b/sunrpc/svc_tcp.c
@@ -130,7 +130,7 @@ svctcp_create (int sock, u_int sendsize, u_int recvsize)
SVCXPRT *xprt;
struct tcp_rendezvous *r;
struct sockaddr_in addr;
- int len = sizeof (struct sockaddr_in);
+ size_t len = sizeof (struct sockaddr_in);
if (sock == RPC_ANYSOCK)
{
@@ -231,7 +231,7 @@ rendezvous_request (SVCXPRT *xprt, struct rpc_msg *errmsg)
int sock;
struct tcp_rendezvous *r;
struct sockaddr_in addr;
- int len;
+ size_t len;
r = (struct tcp_rendezvous *) xprt->xp_p1;
again:
diff --git a/sunrpc/svc_udp.c b/sunrpc/svc_udp.c
index 8ae18a9..39ecbb0 100644
--- a/sunrpc/svc_udp.c
+++ b/sunrpc/svc_udp.c
@@ -108,7 +108,7 @@ svcudp_bufcreate (sock, sendsz, recvsz)
SVCXPRT *xprt;
struct svcudp_data *su;
struct sockaddr_in addr;
- int len = sizeof (struct sockaddr_in);
+ size_t len = sizeof (struct sockaddr_in);
if (sock == RPC_ANYSOCK)
{
@@ -188,11 +188,14 @@ svcudp_recv (xprt, msg)
int rlen;
char *reply;
u_long replylen;
+ size_t len;
again:
- xprt->xp_addrlen = sizeof (struct sockaddr_in);
+ /* FIXME -- should xp_addrlen be a size_t? */
+ len = sizeof(struct sockaddr_in);
rlen = recvfrom (xprt->xp_sock, rpc_buffer (xprt), (int) su->su_iosz, 0,
- (struct sockaddr *) &(xprt->xp_raddr), &(xprt->xp_addrlen));
+ (struct sockaddr *) &(xprt->xp_raddr), &len);
+ xprt->xp_addrlen = len;
if (rlen == -1 && errno == EINTR)
goto again;
if (rlen < 16) /* < 4 32-bit ints? */
@@ -207,7 +210,7 @@ again:
if (cache_get (xprt, msg, &reply, &replylen))
{
(void) sendto (xprt->xp_sock, reply, (int) replylen, 0,
- (struct sockaddr *) &xprt->xp_raddr, xprt->xp_addrlen);
+ (struct sockaddr *) &xprt->xp_raddr, len);
return TRUE;
}
}
diff --git a/sunrpc/xdr.c b/sunrpc/xdr.c
index becc59b..668d9b6 100644
--- a/sunrpc/xdr.c
+++ b/sunrpc/xdr.c
@@ -43,6 +43,7 @@ static char sccsid[] = "@(#)xdr.c 1.35 87/08/12";
#include <stdio.h>
#include <limits.h>
+#include <string.h>
#include <rpc/types.h>
#include <rpc/xdr.h>
diff --git a/sunrpc/xdr_rec.c b/sunrpc/xdr_rec.c
index e76feeb..e39131c 100644
--- a/sunrpc/xdr_rec.c
+++ b/sunrpc/xdr_rec.c
@@ -138,8 +138,8 @@ xdrrec_create (XDR *xdrs, u_int sendsize,
int (*readit) (char *, char *, int),
int (*writeit) (char *, char *, int))
{
- RECSTREAM *rstrm =
- (RECSTREAM *) mem_alloc (sizeof (RECSTREAM));
+ RECSTREAM *rstrm = (RECSTREAM *) mem_alloc (sizeof (RECSTREAM));
+ caddr_t tmp;
if (rstrm == NULL)
{
@@ -161,10 +161,11 @@ xdrrec_create (XDR *xdrs, u_int sendsize,
(void) fputs (_("xdrrec_create: out of memory\n"), stderr);
return;
}
- for (rstrm->out_base = rstrm->the_buffer;
- (u_int) rstrm->out_base % BYTES_PER_XDR_UNIT != 0;
- rstrm->out_base++);
- rstrm->in_base = rstrm->out_base + sendsize;
+ tmp = rstrm->the_buffer;
+ if ((size_t)tmp % BYTES_PER_XDR_UNIT)
+ tmp += BYTES_PER_XDR_UNIT - (size_t)tmp % BYTES_PER_XDR_UNIT;
+ rstrm->out_base = tmp;
+ rstrm->in_base = tmp + sendsize;
/*
* now the rest ...
*/
@@ -516,11 +517,11 @@ static bool_t /* knows nothing about records! Only about input buffers */
fill_input_buf (RECSTREAM *rstrm)
{
caddr_t where;
- u_int i;
+ size_t i;
int len;
where = rstrm->in_base;
- i = (u_int) rstrm->in_boundry % BYTES_PER_XDR_UNIT;
+ i = (size_t) rstrm->in_boundry % BYTES_PER_XDR_UNIT;
where += i;
len = rstrm->in_size - i;
if ((len = (*(rstrm->readit)) (rstrm->tcp_handle, where, len)) == -1)
diff --git a/sysdeps/alpha/Makefile b/sysdeps/alpha/Makefile
index 841dc98..5fe8e4e 100644
--- a/sysdeps/alpha/Makefile
+++ b/sysdeps/alpha/Makefile
@@ -44,3 +44,7 @@ sysdep-CFLAGS += -mno-fp-regs
endif
divrem := divl divq reml remq
+
+# For now, build everything with full IEEE math support.
+# TODO: build separate libm and libm-ieee.
+sysdep-CFLAGS += -mieee
diff --git a/sysdeps/alpha/fpu/fclrexcpt.c b/sysdeps/alpha/fpu/fclrexcpt.c
new file mode 100644
index 0000000..7aa79af
--- /dev/null
+++ b/sysdeps/alpha/fpu/fclrexcpt.c
@@ -0,0 +1,36 @@
+/* Clear given exceptions in current floating-point environment.
+ Copyright (C) 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Richard Henderson <rth@tamu.edu>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <fenv.h>
+
+void
+feclearexcept (int excepts)
+{
+ unsigned long swcr;
+
+ /* Get the current state. */
+ swcr = __ieee_get_fp_control();
+
+ /* Clear the relevant bits. */
+ swcr &= ~((unsigned long)excepts & FE_ALL_EXCEPT);
+
+ /* Put the new state in effect. */
+ __ieee_set_fp_control(swcr);
+}
diff --git a/sysdeps/alpha/fpu/fegetenv.c b/sysdeps/alpha/fpu/fegetenv.c
new file mode 100644
index 0000000..c8b705d
--- /dev/null
+++ b/sysdeps/alpha/fpu/fegetenv.c
@@ -0,0 +1,37 @@
+/* Store current floating-point environment.
+ Copyright (C) 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Richard Henderson <rth@tamu.edu>, 1997
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <fenv.h>
+
+void
+fegetenv (fenv_t *envp)
+{
+ unsigned long fpcr, swcr;
+
+ /* Get status from software and hardware. Note that we don't need an
+ excb because the callsys is an implied trap barrier. */
+ swcr = __ieee_get_fp_control();
+ __asm__ __volatile__("mf_fpcr %0" : "=f"(fpcr));
+
+ /* Merge the two bits of information. The magic number at the end is
+ the exception enable mask. */
+
+ *envp = (fpcr & (3UL << 58)) | (swcr & (FE_ALL_EXCEPT | 0x3e));
+}
diff --git a/sysdeps/alpha/fpu/fegetround.c b/sysdeps/alpha/fpu/fegetround.c
new file mode 100644
index 0000000..623e2ce
--- /dev/null
+++ b/sysdeps/alpha/fpu/fegetround.c
@@ -0,0 +1,31 @@
+/* Return current rounding direction.
+ Copyright (C) 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Richard Henderson <rth@tamu.edu>, 1997
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <fenv.h>
+
+int
+fegetround (void)
+{
+ unsigned long fpcr;
+
+ __asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr));
+
+ return (fpcr >> 58) & 3;
+}
diff --git a/sysdeps/alpha/fpu/feholdexcpt.c b/sysdeps/alpha/fpu/feholdexcpt.c
new file mode 100644
index 0000000..493d6a1
--- /dev/null
+++ b/sysdeps/alpha/fpu/feholdexcpt.c
@@ -0,0 +1,33 @@
+/* Store current floating-point environment and clear exceptions.
+ Copyright (C) 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Richard Henderson <rth@tamu.edu>, 1997
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <fenv.h>
+
+int
+feholdexcept (fenv_t *envp)
+{
+ /* Save the current state. */
+ fegetenv(envp);
+
+ /* Clear all exception status bits and exception enable bits. */
+ __ieee_set_fp_control(0);
+
+ return 1;
+}
diff --git a/sysdeps/alpha/fpu/fenvbits.h b/sysdeps/alpha/fpu/fenvbits.h
new file mode 100644
index 0000000..02414e4
--- /dev/null
+++ b/sysdeps/alpha/fpu/fenvbits.h
@@ -0,0 +1,107 @@
+/* Copyright (C) 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Richard Henderson <rth@tamu.edu>, 1997
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+/* This file should never be included directly. */
+
+#ifndef _FENVBITS_H
+#define _FENVBITS_H 1
+
+/* Define the bits representing the exception.
+
+ Note that these are the bit positions as defined by the OSF/1
+ ieee_{get,set}_control_word interface and not by the hardware fpcr.
+
+ See the Alpha Architecture Handbook section 4.7.7.3 for details,
+ but in summary, trap shadows mean the hardware register can acquire
+ extra exception bits so for proper IEEE support the tracking has to
+ be done in software -- in this case with kernel support.
+
+ As to why the system call interface isn't in the same format as
+ the hardware register, only those crazy folks at DEC can tell you. */
+
+enum
+ {
+ FE_INEXACT = 1UL << 21,
+#define FE_INEXACT FE_INEXACT
+
+ FE_UNDERFLOW = 1UL << 20,
+#define FE_UNDERFLOW FE_UNDERFLOW
+
+ FE_OVERFLOW = 1UL << 19,
+#define FE_OVERFLOW FE_OVERFLOW
+
+ FE_DIVBYZERO = 1UL << 18,
+#define FE_DIVBYZERO FE_DIVBYZERO
+
+ FE_INVALID = 1UL << 17,
+#define FE_INVALID FE_INVALID
+
+ FE_ALL_EXCEPT =
+ (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID)
+#define FE_ALL_EXCEPT FE_ALL_EXCEPT
+ };
+
+
+/* Alpha chips support all four defined rouding modes.
+
+ Note that code must be compiled to use dynamic rounding (/d) instructions
+ to see these changes. For gcc this is -mfp-rounding-mode=d; for DEC cc
+ this is -fprm d. The default for both is static rounding to nearest.
+
+ These are shifted down 58 bits from the hardware fpcr because the
+ functions are declared to take integers. */
+
+enum
+ {
+ FE_TOWARDSZERO = 0,
+#define FE_TOWARDSZERO FE_TOWARDSZERO
+
+ FE_DOWNWARD = 1,
+#define FE_DOWNWARD FE_DOWNWARD
+
+ FE_TONEAREST = 2,
+#define FE_TONEAREST FE_TONEAREST
+
+ FE_UPWARD = 3,
+#define FE_UPWARD FE_UPWARD
+ };
+
+
+/* Type representing exception flags. */
+typedef unsigned long fexcept_t;
+
+/* Type representing floating-point environment. */
+typedef unsigned long fenv_t;
+
+/* If the default argument is used we use this value. Note that due to
+ architecture-specified page mappings, no user-space pointer will ever
+ have its two high bits set. Co-opt one. */
+#define FE_DFL_ENV ((fenv_t *) 0x8800000000000000UL)
+
+#ifdef __USE_GNU
+/* Floating-point environment where none of the exceptions are masked. */
+# define FE_NOMASK_ENV ((fenv_t *) 0x880000000000003eUL)
+#endif
+
+/* The system calls to talk to the kernel's FP code. */
+extern unsigned long __ieee_get_fp_control(void);
+extern void __ieee_set_fp_control(unsigned long);
+
+
+#endif /* fenvbits.h */
diff --git a/sysdeps/alpha/fpu/fesetenv.c b/sysdeps/alpha/fpu/fesetenv.c
new file mode 100644
index 0000000..3692967
--- /dev/null
+++ b/sysdeps/alpha/fpu/fesetenv.c
@@ -0,0 +1,45 @@
+/* Install given floating-point environment.
+ Copyright (C) 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Richard Henderson <rth@tamu.edu>, 1997
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <fenv.h>
+
+void
+fesetenv (const fenv_t *envp)
+{
+ unsigned long fpcr;
+ fenv_t env;
+
+ /* Magic encoding of default values: high bit set (never possible for a
+ user-space address) is not indirect. And we don't even have to get
+ rid of it since we mask things around just below. */
+ if ((long)envp >= 0)
+ env = *envp;
+ else
+ env = (unsigned long)envp;
+
+ /* Reset the rounding mode with the hardware fpcr. Note that the following
+ system call is an implied trap barrier for our modification. */
+ __asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr));
+ fpcr = (fpcr & ~(3UL << 58)) | (env & (3UL << 58));
+ __asm__ __volatile__("mt_fpcr %0" : : "f"(fpcr));
+
+ /* Reset the exception status and mask with the kernel's FP code. */
+ __ieee_set_fp_control(env & (FE_ALL_EXCEPT | 0x3e));
+}
diff --git a/sysdeps/alpha/fpu/fesetround.c b/sysdeps/alpha/fpu/fesetround.c
new file mode 100644
index 0000000..f49586c
--- /dev/null
+++ b/sysdeps/alpha/fpu/fesetround.c
@@ -0,0 +1,41 @@
+/* Set current rounding direction.
+ Copyright (C) 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Richard Henderson <rth@tamu.edu>, 1997
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <fenv.h>
+
+int
+fesetround (int round)
+{
+ unsigned long fpcr;
+
+ if (round & ~3)
+ return 0;
+
+ /* Get the current state. */
+ __asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr));
+
+ /* Set the relevant bits. */
+ fpcr = (fpcr & ~(3UL << 58)) | ((unsigned long)round << 58);
+
+ /* Put the new state in effect. */
+ __asm__ __volatile__("mt_fpcr %0; excb" : : "f"(fpcr));
+
+ return 1;
+}
diff --git a/sysdeps/alpha/fpu/feupdateenv.c b/sysdeps/alpha/fpu/feupdateenv.c
new file mode 100644
index 0000000..816575a
--- /dev/null
+++ b/sysdeps/alpha/fpu/feupdateenv.c
@@ -0,0 +1,38 @@
+/* Install given floating-point environment and raise exceptions.
+ Copyright (C) 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Richard Henderson <rth@tamu.edu>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <fenv.h>
+
+void
+feupdateenv (const fenv_t *envp)
+{
+ unsigned long tmp;
+
+ /* Get the current exception state. */
+ tmp = __ieee_get_fp_control();
+
+ /* Install new environment. */
+ fesetenv(envp);
+
+ /* Raise the saved exception. Incidently for us the implementation
+ defined format of the values in objects of type fexcept_t is the
+ same as the ones specified using the FE_* constants. */
+ feraiseexcept((int)tmp & FE_ALL_EXCEPT);
+}
diff --git a/sysdeps/alpha/fpu/fgetexcptflg.c b/sysdeps/alpha/fpu/fgetexcptflg.c
new file mode 100644
index 0000000..28d9e12
--- /dev/null
+++ b/sysdeps/alpha/fpu/fgetexcptflg.c
@@ -0,0 +1,33 @@
+/* Store current representation for exceptions.
+ Copyright (C) 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Richard Henderson <rth@tamu.edu>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <fenv.h>
+
+void
+fegetexceptflag (fexcept_t *flagp, int excepts)
+{
+ unsigned long tmp;
+
+ /* Get the current state. */
+ tmp = __ieee_get_fp_control();
+
+ /* Return that portion that corresponds to the requested exceptions. */
+ *flagp = tmp & excepts & FE_ALL_EXCEPT;
+}
diff --git a/sysdeps/alpha/fpu/fpu_control.h b/sysdeps/alpha/fpu/fpu_control.h
index 219ea55..bcf73e8 100644
--- a/sysdeps/alpha/fpu/fpu_control.h
+++ b/sysdeps/alpha/fpu/fpu_control.h
@@ -1,23 +1,22 @@
-/* FPU control word bits. Alpha version.
-Copyright (C) 1996 Free Software Foundation, Inc.
-Contributed by Olaf Flebbe.
-
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
+/* FPU control word bits. Alpha-maped-to-Intel version.
+ Copyright (C) 1996 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Olaf Flebbe.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
#ifndef _ALPHA_FPU_CONTROL_H
#define _ALPHA_FPU_CONTROL_H
@@ -91,11 +90,12 @@ Cambridge, MA 02139, USA. */
qualifier. By setting the dynamic rounding mode to +infinity,
one can use /d to get round to +infinity with no extra overhead
(so long as the default isn't changed, of course...)
- - exceptions on overflow, zero divide and NaN */
-#define _FPU_DEFAULT 0x1f72
+ - no exceptions enabled. */
+
+#define _FPU_DEFAULT 0x137f
/* IEEE: same as above, but exceptions */
-#define _FPU_IEEE 0x1f7f
+#define _FPU_IEEE 0x137f
/* Type of the control word. */
typedef unsigned int fpu_control_t;
diff --git a/sysdeps/alpha/fpu/fraiseexcpt.c b/sysdeps/alpha/fpu/fraiseexcpt.c
new file mode 100644
index 0000000..6a53e55
--- /dev/null
+++ b/sysdeps/alpha/fpu/fraiseexcpt.c
@@ -0,0 +1,72 @@
+/* Raise given exceptions.
+ Copyright (C) 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Richard Henderson <rth@tamu.edu>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <fenv.h>
+#include <math.h>
+
+void
+feraiseexcept (int excepts)
+{
+ double tmp;
+
+ /* Raise exceptions represented by EXPECTS. But we must raise only
+ one signal at a time. It is important the if the overflow/underflow
+ exception and the inexact exception are given at the same time,
+ the overflow/underflow exception precedes the inexact exception. */
+
+ /* We do these bits in assembly to be certain GCC doesn't optimize
+ away something important. */
+
+ /* First: invalid exception. */
+ if (FE_INVALID & excepts)
+ {
+ /* One example of a invalid operation is 0 * Infinity. */
+ __asm__ __volatile__("mult/sui $f31,%1,%0; trapb"
+ : "=f"(tmp) : "f"(HUGE_VAL));
+ }
+
+ /* Next: division by zero. */
+ if (FE_DIVBYZERO & excepts)
+ {
+ __asm__ __volatile__("cmpteq $f31,$f31,%0; divt/sui %0,$f31,%0; trapb"
+ : "=f"(tmp));
+ }
+
+ /* Next: overflow. */
+ if (FE_OVERFLOW & excepts)
+ {
+ __asm__ __volatile__("mult/sui %1,%1,%0; trapb"
+ : "=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"(16.0));
+ }
+
+ /* Last: inexact. */
+ if (FE_INEXACT & excepts)
+ {
+ __asm__ __volatile__("divt/sui %1,%2,%0; trapb"
+ : "=f"(tmp) : "f"(1.0), "f"(M_PI));
+ }
+}
diff --git a/sysdeps/alpha/fpu/fsetexcptflg.c b/sysdeps/alpha/fpu/fsetexcptflg.c
new file mode 100644
index 0000000..7e373be
--- /dev/null
+++ b/sysdeps/alpha/fpu/fsetexcptflg.c
@@ -0,0 +1,36 @@
+/* Set floating-point environment exception handling.
+ Copyright (C) 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Richard Henderson <rth@tamu.edu>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <fenv.h>
+
+void
+fesetexceptflag (const fexcept_t *flagp, int excepts)
+{
+ unsigned long tmp;
+
+ /* Get the current exception state. */
+ tmp = __ieee_get_fp_control();
+
+ /* Set all the bits that were called for. */
+ tmp = tmp & ~FE_ALL_EXCEPT | *flagp & excepts & FE_ALL_EXCEPT;
+
+ /* And store it back. */
+ __ieee_set_fp_control(tmp);
+}
diff --git a/sysdeps/alpha/fpu/ftestexcept.c b/sysdeps/alpha/fpu/ftestexcept.c
new file mode 100644
index 0000000..9ee9dc9
--- /dev/null
+++ b/sysdeps/alpha/fpu/ftestexcept.c
@@ -0,0 +1,32 @@
+/* Test exception in current environment.
+ Copyright (C) 1997 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Richard Henderson <rth@tamu.edu>, 1997.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#include <fenv.h>
+
+int
+fetestexcept (int excepts)
+{
+ unsigned long tmp;
+
+ /* Get current exceptions. */
+ tmp = __ieee_get_fp_control();
+
+ return tmp & excepts & FE_ALL_EXCEPT;
+}
diff --git a/sysdeps/generic/memccpy.c b/sysdeps/generic/memccpy.c
index 7c2d443..6d85a79 100644
--- a/sysdeps/generic/memccpy.c
+++ b/sysdeps/generic/memccpy.c
@@ -16,7 +16,6 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#include <stddef.h> /* For size_t and NULL. */
#include <string.h>
/*
diff --git a/sysdeps/ieee754/huge_val.h b/sysdeps/ieee754/huge_val.h
index 9d1785b..a252085 100644
--- a/sysdeps/ieee754/huge_val.h
+++ b/sysdeps/ieee754/huge_val.h
@@ -27,6 +27,17 @@
/* IEEE positive infinity (-HUGE_VAL is negative infinity). */
+#ifdef __GNUC__
+
+#define HUGE_VAL \
+ (__extension__ \
+ ((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; }) \
+ { __l: 0x7ff0000000000000ULL }).__d)
+
+#else /* not GCC */
+
+typedef union { unsigned char __c[8]; double __d; } __huge_val_t;
+
#if __BYTE_ORDER == __BIG_ENDIAN
#define __HUGE_VAL_bytes { 0x7f, 0xf0, 0, 0, 0, 0, 0, 0 }
#endif
@@ -34,13 +45,9 @@
#define __HUGE_VAL_bytes { 0, 0, 0, 0, 0, 0, 0xf0, 0x7f }
#endif
-#define __huge_val_t union { unsigned char __c[8]; double __d; }
-#ifdef __GNUC__
-#define HUGE_VAL (__extension__ \
- ((__huge_val_t) { __c: __HUGE_VAL_bytes }).__d)
-#else /* Not GCC. */
static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
#define HUGE_VAL (__huge_val.__d)
+
#endif /* GCC. */
@@ -48,6 +55,17 @@ static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
#ifdef __USE_ISOC9X
+#ifdef __GNUC__
+
+#define HUGE_VALF \
+ (__extension__ \
+ ((union { unsigned __l __attribute__((__mode__(__SI__))); float __d; }) \
+ { __l: 0x7f800000UL }).__d)
+
+#else /* not GCC */
+
+typedef union { unsigned char __c[4]; float __f; } __huge_valf_t;
+
#if __BYTE_ORDER == __BIG_ENDIAN
#define __HUGE_VALF_bytes { 0x7f, 0x80, 0, 0 }
#endif
@@ -55,13 +73,9 @@ static __huge_val_t __huge_val = { __HUGE_VAL_bytes };
#define __HUGE_VALF_bytes { 0, 0, 0x80, 0x7f }
#endif
-#define __huge_valf_t union { unsigned char __c[4]; float __f; }
-#ifdef __GNUC__
-#define HUGE_VALF (__extension__ \
- ((__huge_valf_t) { __c: __HUGE_VALF_bytes }).__f)
-#else /* Not GCC. */
static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes };
#define HUGE_VALF (__huge_valf.__f)
+
#endif /* GCC. */
@@ -69,6 +83,6 @@ static __huge_valf_t __huge_valf = { __HUGE_VALF_bytes };
same as `double'. */
#define HUGE_VALL HUGE_VAL
-#endif /* __USE_ISOC9X. */
+#endif /* __USE_ISOC9X. */
-#endif /* huge_val.h */
+#endif /* huge_val.h */
diff --git a/sysdeps/ieee754/nan.h b/sysdeps/ieee754/nan.h
index bea98d9..d4e6842 100644
--- a/sysdeps/ieee754/nan.h
+++ b/sysdeps/ieee754/nan.h
@@ -1,5 +1,5 @@
/* `NAN' constant for IEEE 754 machines.
- Copyright (C) 1992, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1992, 1996, 1997 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
@@ -23,23 +23,42 @@
/* IEEE Not A Number. */
+#ifdef __GNUC__
+
+#define NAN \
+ (__extension__ \
+ ((union { unsigned __l __attribute__((__mode__(__DI__))); double __d; }) \
+ { __l: 0x7ff8000000000000ULL }).__d)
+
+#define NANF \
+ (__extension__ \
+ ((union { unsigned __l __attribute__((__mode__(__SI__))); flaot __d; }) \
+ { __l: 0x7fc00000UL }).__d)
+
+#else
+
#include <endian.h>
#if __BYTE_ORDER == __BIG_ENDIAN
#define __nan_bytes { 0x7f, 0xf8, 0, 0, 0, 0, 0, 0 }
+#define __nanf_bytes { 0x7f, 0xc0, 0, 0 }
#endif
#if __BYTE_ORDER == __LITTLE_ENDIAN
#define __nan_bytes { 0, 0, 0, 0, 0, 0, 0xf8, 0x7f }
+#define __nanf_bytes { 0, 0, 0xc0, 0x7f }
#endif
-#ifdef __GNUC__
-#define NAN \
- (__extension__ ((union { unsigned char __c[8]; \
- double __d; }) \
- { __nan_bytes }).__d)
-#else /* Not GCC. */
-static CONST char __nan[8] = __nan_bytes;
-#define NAN (*(CONST double *) __nan)
+static union { unsigned char __c[8]; double __d; } __nan = { __nan_bytes };
+#define NAN (__nan.__d)
+
+static union { unsigned char __c[4]; double __d; } __nanf = { __nanf_bytes };
+#define NANF (__nanf.__d)
+
#endif /* GCC. */
+/* Generally there is no separate `long double' format and it is the
+ same as `double'. */
+
+#define NANL NAN
+
#endif /* nan.h */
diff --git a/sysdeps/libm-ieee754/s_log2.c b/sysdeps/libm-ieee754/s_log2.c
index 03a7dea..7950dfa 100644
--- a/sysdeps/libm-ieee754/s_log2.c
+++ b/sysdeps/libm-ieee754/s_log2.c
@@ -1,4 +1,4 @@
-/* Adapted for log2 by Ulrich Drepper <drepper@cygnus.com>.
+/* Adapted for log2 by Ulrich Drepper <drepper@cygnus.com>. */
/*
* ====================================================
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
@@ -127,3 +127,5 @@ static double zero = 0.0;
return dk-((s*(f-R))-f);
}
}
+
+weak_alias (__log2, log2)
diff --git a/sysdeps/unix/alpha/sysdep.S b/sysdeps/unix/alpha/sysdep.S
index 9df3134..fc5cc04 100644
--- a/sysdeps/unix/alpha/sysdep.S
+++ b/sysdeps/unix/alpha/sysdep.S
@@ -38,7 +38,7 @@ __errno = errno
.globl __syscall_error
.ent __syscall_error
__syscall_error:
- ldgp gp, 0(t12)
+ ldgp gp, 0(pv)
lda sp, -16(sp)
.frame sp, 16, ra, 0
stq ra, 0(sp)
@@ -53,7 +53,7 @@ __syscall_error:
jsr ra, __errno_location
/* Store the error value. */
- ldl t0, 8(sp)
+ ldq t0, 8(sp)
stl t0, 0(v0)
/* And kick back a -1. */
diff --git a/sysdeps/unix/sysv/linux/alpha/brk.S b/sysdeps/unix/sysv/linux/alpha/brk.S
index 74fef64..be0539b 100644
--- a/sysdeps/unix/sysv/linux/alpha/brk.S
+++ b/sysdeps/unix/sysv/linux/alpha/brk.S
@@ -73,8 +73,9 @@ $ok: stq a0, __curbrk
/* What a horrible way to die. */
$err0: ldi v0, ENOMEM
-$err1: addq sp, 8, sp
- jmp zero, __syscall_error
+$err1: lda pv, __syscall_error
+ addq sp, 8, sp
+ jmp zero, (pv), __syscall_error
END(__brk)
diff --git a/sysdeps/unix/sysv/linux/alpha/gnu/types.h b/sysdeps/unix/sysv/linux/alpha/gnu/types.h
index 5c1e407..b23deb8 100644
--- a/sysdeps/unix/sysv/linux/alpha/gnu/types.h
+++ b/sysdeps/unix/sysv/linux/alpha/gnu/types.h
@@ -68,6 +68,11 @@ typedef long int __clock_t;
/* One element in the file descriptor mask array. */
typedef unsigned int __fd_mask;
+/* Due to incaution, we may have gotten these from a kernel header file. */
+#undef __FD_SETSIZE
+#undef __NFDBITS
+#undef __FDMASK
+
/* Number of descriptors that can fit in an `fd_set'. */
#define __FD_SETSIZE 1024
diff --git a/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S b/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
index dbc25bc..e118ff1 100644
--- a/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
+++ b/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
@@ -41,18 +41,20 @@ LEAF(__ieee_get_fp_control, 16)
ldi a0, GSI_IEEE_FP_CONTROL
ldi v0, __NR_osf_getsysinfo
call_pal PAL_callsys
- bne a3, error
+ bne a3, $error
ldq v0, 0(sp)
lda sp, 16(sp)
ret
-error: lda sp, 16(sp)
+$error:
#ifndef PROF
br gp, 1f
1: ldgp gp, 0(gp)
#endif
- jmp zero, __syscall_error
+ lda pv, __syscall_error
+ lda sp, 16(sp)
+ jmp zero, (pv), __syscall_error
END(__ieee_get_fp_control)
diff --git a/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S b/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S
index d2d2add..b38d67e 100644
--- a/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S
+++ b/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S
@@ -41,17 +41,19 @@ LEAF(__ieee_set_fp_control, 16)
ldi v0, __NR_osf_setsysinfo
call_pal PAL_callsys
- lda sp, 16(sp)
+ bne a3, $error
- bne a3, error
+ lda sp, 16(sp)
ret
-error:
+$error:
#ifndef PROF
br gp, 1f
1: ldgp gp, 0(gp)
#endif
- jmp zero, __syscall_error
+ lda pv, __syscall_error
+ lda sp, 16(sp)
+ jmp zero, (pv), __syscall_error
END(__ieee_set_fp_control)
diff --git a/sysdeps/unix/sysv/linux/alpha/ioperm.c b/sysdeps/unix/sysv/linux/alpha/ioperm.c
index 63bf175..76a744d 100644
--- a/sysdeps/unix/sysv/linux/alpha/ioperm.c
+++ b/sysdeps/unix/sysv/linux/alpha/ioperm.c
@@ -55,14 +55,13 @@
#define JENSEN_IO_BASE (0xfffffc0300000000UL)
#define JENSEN_SPARSE_MEM (0xfffffc0200000000UL)
-/*
- * With respect to the I/O architecture, APECS and LCA are identical,
- * so the following defines apply to LCA as well.
- */
+/* With respect to the I/O architecture, APECS and LCA are identical,
+ so the following defines apply to LCA as well. */
#define APECS_IO_BASE (0xfffffc01c0000000UL)
#define APECS_SPARSE_MEM (0xfffffc0200000000UL)
#define APECS_DENSE_MEM (0xfffffc0300000000UL)
+/* The same holds for CIA and PYXIS. */
#define CIA_IO_BASE (0xfffffc8580000000UL)
#define CIA_SPARSE_MEM (0xfffffc8000000000UL)
#define CIA_DENSE_MEM (0xfffffc8600000000UL)
@@ -104,6 +103,7 @@ static struct platform {
{"Mustang", IOSYS_APECS, 5, APECS_DENSE_MEM, APECS_SPARSE_MEM},
{"Noname", IOSYS_APECS, 5, APECS_DENSE_MEM, APECS_SPARSE_MEM},
{"Sable", IOSYS_T2, 5, T2_DENSE_MEM, T2_SPARSE_MEM},
+ {"Miata", IOSYS_CIA, 5, CIA_DENSE_MEM, CIA_SPARSE_MEM},
};
diff --git a/sysdeps/unix/sysv/linux/alpha/setfpucw.c b/sysdeps/unix/sysv/linux/alpha/setfpucw.c
index 43e8536..9133c81 100644
--- a/sysdeps/unix/sysv/linux/alpha/setfpucw.c
+++ b/sysdeps/unix/sysv/linux/alpha/setfpucw.c
@@ -1,65 +1,78 @@
-#include <fpu_control.h>
+/* Set FP exception mask and rounding mode.
+ Copyright (C) 1996, 1997 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
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+#include <fpu_control.h>
#include <asm/fpu.h>
+
extern void __ieee_set_fp_control (unsigned long);
extern unsigned long __ieee_get_fp_control (void);
-
static inline unsigned long
rdfpcr (void)
{
- unsigned long fpcr;
-
- asm ("trapb; mf_fpcr $f0; trapb; stt $f0,%0" : "m="(fpcr));
- return fpcr;
+ unsigned long fpcr;
+ asm ("excb; mf_fpcr %0" : "=f"(fpcr));
+ return fpcr;
}
static inline void
wrfpcr (unsigned long fpcr)
{
- asm volatile ("ldt $f0,%0; trapb; mt_fpcr $f0; trapb" :: "m"(fpcr));
+ asm volatile ("mt_fpcr %0; excb" : : "f"(fpcr));
}
void
__setfpucw (unsigned short fpu_control)
{
- unsigned long fpcr = 0, fpcw = 0;
+ unsigned long fpcr = 0, fpcw = 0;
- if (!fpu_control)
- fpu_control = _FPU_DEFAULT;
+ if (!fpu_control)
+ fpu_control = _FPU_DEFAULT;
- /* first, set dynamic rounding mode: */
+ /* first, set dynamic rounding mode: */
- fpcr = rdfpcr();
- fpcr &= ~FPCR_DYN_MASK;
- switch (fpu_control & 0xc00) {
- case _FPU_RC_NEAREST: fpcr |= FPCR_DYN_NORMAL; break;
- case _FPU_RC_DOWN: fpcr |= FPCR_DYN_MINUS; break;
- case _FPU_RC_UP: fpcr |= FPCR_DYN_PLUS; break;
- case _FPU_RC_ZERO: fpcr |= FPCR_DYN_CHOPPED; break;
+ fpcr = rdfpcr();
+ fpcr &= ~FPCR_DYN_MASK;
+ switch (fpu_control & 0xc00)
+ {
+ case _FPU_RC_NEAREST: fpcr |= FPCR_DYN_NORMAL; break;
+ case _FPU_RC_DOWN: fpcr |= FPCR_DYN_MINUS; break;
+ case _FPU_RC_UP: fpcr |= FPCR_DYN_PLUS; break;
+ case _FPU_RC_ZERO: fpcr |= FPCR_DYN_CHOPPED; break;
}
- wrfpcr(fpcr);
+ wrfpcr(fpcr);
- /* now tell kernel about traps that we like to hear about: */
+ /* now tell kernel about traps that we like to hear about: */
- fpcw = __ieee_get_fp_control();
- fpcw &= ~IEEE_TRAP_ENABLE_MASK;
+ fpcw = __ieee_get_fp_control();
+ fpcw &= ~IEEE_TRAP_ENABLE_MASK;
- if (!(fpu_control & _FPU_MASK_IM))
- fpcw |= IEEE_TRAP_ENABLE_INV;
- if (!(fpu_control & _FPU_MASK_DM))
- fpcw |= IEEE_TRAP_ENABLE_UNF;
- if (!(fpu_control & _FPU_MASK_ZM))
- fpcw |= IEEE_TRAP_ENABLE_DZE;
- if (!(fpu_control & _FPU_MASK_OM))
- fpcw |= IEEE_TRAP_ENABLE_OVF;
- if (!(fpu_control & _FPU_MASK_PM))
- fpcw |= IEEE_TRAP_ENABLE_INE;
+ if (!(fpu_control & _FPU_MASK_IM)) fpcw |= IEEE_TRAP_ENABLE_INV;
+ if (!(fpu_control & _FPU_MASK_DM)) fpcw |= IEEE_TRAP_ENABLE_UNF;
+ if (!(fpu_control & _FPU_MASK_ZM)) fpcw |= IEEE_TRAP_ENABLE_DZE;
+ if (!(fpu_control & _FPU_MASK_OM)) fpcw |= IEEE_TRAP_ENABLE_OVF;
+ if (!(fpu_control & _FPU_MASK_PM)) fpcw |= IEEE_TRAP_ENABLE_INE;
- __ieee_set_fp_control(fpcw);
+ __fpu_control = fpu_control; /* update global copy */
- __fpu_control = fpu_control; /* update global copy */
+ __ieee_set_fp_control(fpcw);
}
diff --git a/sysdeps/unix/sysv/linux/alpha/syscall.S b/sysdeps/unix/sysv/linux/alpha/syscall.S
index 75e1260..d25dd6b 100644
--- a/sysdeps/unix/sysv/linux/alpha/syscall.S
+++ b/sysdeps/unix/sysv/linux/alpha/syscall.S
@@ -62,10 +62,10 @@ LEAF(__syscall, 0)
mov a5, a4
call_pal PAL_callsys /* Invoke system call */
- bne a3, error
+ bne a3, $error
ret
-error:
+$error:
#ifndef PROF
br gp, 2f
2: ldgp gp, 0(gp)
diff --git a/sysdeps/unix/sysv/linux/sys/ttydefaults.h b/sysdeps/unix/sysv/linux/sys/ttydefaults.h
index 28512eb..b21c6d5 100644
--- a/sysdeps/unix/sysv/linux/sys/ttydefaults.h
+++ b/sysdeps/unix/sysv/linux/sys/ttydefaults.h
@@ -61,14 +61,14 @@
#ifdef _POSIX_VDISABLE
# define CEOL _POSIX_VDISABLE
#else
-# define CEOL ((unsigned char)'\377') /* XXX avoid _POSIX_VDISABLE */
+# define CEOL '\0' /* XXX avoid _POSIX_VDISABLE */
#endif
#define CERASE 0177
#define CINTR CTRL('c')
#ifdef _POSIX_VDISABLE
# define CSTATUS _POSIX_VDISABLE
#else
-# define CSTATUS ((unsigned char)'\377') /* XXX avoid _POSIX_VDISABLE */
+# define CSTATUS '\0' /* XXX avoid _POSIX_VDISABLE */
#endif
#define CKILL CTRL('u')
#define CMIN 1