aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>1996-03-19 20:21:54 +0000
committerRoland McGrath <roland@gnu.org>1996-03-19 20:21:54 +0000
commitb20e47cb14ec8edccab7c722743a731e67280702 (patch)
tree2606832a6d914c9c629494cb47b8a87b1d95f40a /sysdeps/unix/sysv/linux
parente384537164e04d46fe1749899715abd72d33c54e (diff)
downloadglibc-b20e47cb14ec8edccab7c722743a731e67280702.tar.xz
glibc-b20e47cb14ec8edccab7c722743a731e67280702.zip
Tue Mar 19 14:18:42 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/unix/bsd/pause.c: Moved to sysdeps/unix/common/pause.c. Mon Mar 4 20:17:28 1996 David Mosberger-Tang <davidm@azstarnet.com> * sysdeps/unix/sysv/linux/adjtime.c: Use INT_MAX instead of LONG_MAX. * sysdeps/unix/sysv/Makefile (sysdep_routines): Don't add s_getdents. * sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Don't add mount, umount. * sysdeps/alpha/__math.h (atan, cabs): New functions. * sysdeps/unix/sysv/linux/alpha/sigsuspend.S: new file (syscall expects set-value, not pointer to it). Sun Feb 25 22:36:10 1996 David Mosberger-Tang <davidm@azstarnet.com> * sysdeps/unix/sysv/linux/alpha/profil-counter.h: New file. * gmon/gmon.c (__bb_head): new variable. (write_hist, write_call_graph, write_bb_counts): new functions. (_mcleanup): modified to call above functions instead of directly writing out gmon.out. * gmon/sys/gmon.h (struct __bb): New type. (struct gmonhdr): Type removed. (struct gmonparam): New member `log_hashfraction'. (GMONVERSION): Macro removed. * gmon/sys/gmon_out.h, gmon/bb_exit_func.c, sysdeps/generic/bb_init_func.c, sysdeps/alpha/bb_init_func.S: new files. * gmon/Makefile (headers): Add sys/gmon_out.h. (routines): Add bb_init_func, bb_exit_func. * gmon/mcount.c: Avoid integer division. Wed Feb 21 23:56:41 1996 David Mosberger-Tang <davidm@azstarnet.com> * sysdeps/alpha/setjmp.S: switched order in which sp and fp are passed to match what __sigsetjmp_aux() expects. Tue Feb 20 11:33:46 1996 David Mosberger-Tang <davidm@azstarnet.com> * sysdeps/unix/sysv/linux/alpha/syscalls.list (select, bind, connect, getpeername, getsockname, listen, recv, recvfrom, recvmsg, send, sendmsg, sendto, setsockopt, shutdown, socketpair): added to override same-name assembly file in the parent directory. * stdlib/stdlib.h: add include of sys/types.h in front of random etc declarations to ensure int32_t is declared. * stdlib/random.c, stdlib/random_r.c: replaced "long int" by int32_t where 32 bit integers are required. Also change LONG_MAX into 0x7fffffff since the intent is to turn off the sign bit in a 32 bit integer. * time/offtime.c (__offtime): Use Paul Eggert's code to deal with very large values for "days" (e.g., 64 bit values). Mon Feb 19 22:22:12 1996 David Mosberger-Tang <davidm@azstarnet.com> * stdlib/stdlib.h (__random, __random_r, random_r, struct random_data): use int32_t instead of `long int'. Sat Feb 17 11:29:29 1996 David Mosberger-Tang <davidm@azstarnet.com> * sysdeps/unix/sysv/linux/alpha/ioperm.c: new file. * sysdeps/alpha/ffs.S: new file. * sysdeps/alpha/fabs.c: File removed. * time/tzfile.c (__tzfile_read): counter variable is i, *not* num_transitions! * time/offtime.c: make capable of dealing with very large (64 bit) time_t values. Use old algorithm until a year is reached that is an integer multiple of 400, then use DAYS_PER_400_YEARS to do the remainder in a single division. * sysdeps/generic/ffs.c (ffs): fix variable declarations to be unsigned int, not unsigned long. * string/test-ffs.c (main): add test case with all upper bits set. * stdlib/tst-strtol.c: add tests cases for machines where sizeof(long)==8. * stdlib/testrand.c (main): disallow rand() to return negative integers. * stdlib/testmb.c (main): fix format to use %lx instead of %x. * stdlib/stdlib.h: on 64 bit machines, declare struct random_data, __random(), __random_r, and random_r to return "int" instead of "long int". * stdlib/random_r.c: 64 bit machines use "int" instead of "long int". Similarly, use INT_MAX instead of LONG_MAX. * stdlib/random.c: on 64 bit machines, randtbl[] and __random[] need to operate on "int" instead of "long int". * locale/locfile-hash.c (compute_hashval): make shifted constant a long to avoid loosing bits on 64 bit machines. * dirent/tst-seekdir.c (main): fix confusing comment; print a line to mark point where directory is rewound. Fri Feb 16 15:01:49 1996 David Mosberger-Tang <davidm@azstarnet.com> * time/strftime.c (strftime): any hour > 11 is PM (not > 12!). Wed Feb 14 00:21:17 1996 David Mosberger-Tang <davidm@azstarnet.com> * sysdeps/unix/sysv/linux/alpha/Makefile, sysdeps/unix/sysv/linux/alpha/brk.S, sysdeps/unix/sysv/linux/alpha/fpu_control.c, sysdeps/unix/sysv/linux/alpha/fpu_control.h, sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S, sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S, sysdeps/unix/sysv/linux/alpha/pipe.S, sysdeps/unix/sysv/linux/alpha/setfpucw.c, sysdeps/unix/sysv/linux/alpha/sigprocmask.c, sysdeps/unix/sysv/linux/alpha/speed.c, sysdeps/unix/sysv/linux/alpha/start.S, sysdeps/unix/sysv/linux/alpha/syscall.S, sysdeps/unix/sysv/linux/alpha/syscalls.list, sysdeps/unix/sysv/linux/alpha/alpha/regdef.h, sysdeps/unix/sysv/linux/alpha/sysdep.S, sysdeps/unix/sysv/linux/alpha/sysdep.h: New files. * sysdeps/alpha/setjmp_aux.c (__sigsetjmp_aux): restore return address register before returning (gcc 2.7.1 doesn't do it, presumably because $26 is declared as a global variable). * sysdeps/unix/sysv/linux/sys/mman.h: msync was missing "flags" argument. * sysdeps/unix/alarm.c (alarm): do roundup using test & increment instead of multiplication. * sysdeps/posix/sleep.c (sleep): initialize sa_mask to mask of currently blocked signals instead of the empty mask to ensure that execution of alarm handler occurs with none of the currently blocked signals enabled. * sysdeps/unix/alpha/sysdep.h: new file (adapted from OSF/1 version). * sysdeps/unix/bsd/osf/alpha/sysdep.h: include sysdeps/unix/alpha/sysdep.h and removed definitions now in that file. * sysdeps/alpha/divrem.S, sysdeps/alpha/htonl.S, sysdeps/alpha/htons.S, sysdeps/alpha/machine-gmon.h, sysdeps/alpha/_mcount.S, sysdeps/alpha/ntohl.s, sysdeps/alpha/ntohs.s, sysdeps/alpha/strlen.S: New files. * sysdeps/alpha/divl.S, sysdeps/alpha/divlu.S, sysdeps/alpha/divq.S, sysdeps/alpha/divqu.S, sysdeps/alpha/divrem.m4, sysdeps/alpha/macros.m4, sysdeps/alpha/reml.S, sysdeps/alpha/remlu.S, sysdeps/alpha/remq.S, sysdeps/alpha/remqu.S, sysdeps/alpha/strlen.c: Removed. * sysdeps/generic/sbrk.c (__sbrk): argument is of type ptrdiff_t, not int. * sysdeps/alpha/__longjmp.c (__longjmp): moved dummy while loop to end of function to avoid a jump across NOPs. * sysdeps/alpha/Makefile (sysdep_routines): Removed all rules pertaining to integer division/remainder routines since new code doesn't require them. * sunrpc/xdr_mem.c, sunrpc/xdr_stdio.c: Use 4 instead of sizeof(long) where 32 bit quantities are consumed/stored. Various other minor 64-bit cleanups (casting). * sunrpc/xdr.c (xdr_int): test for sizeof(int)==4 to determine whether xdr_long or xdr_short should be used to encode an int. Notice that an xdr_long is 4 bytes independent of the architecture (otherwise no Alpha could interoperate with existing NFS servers, for example). Ditto for enums. * sunrpc/svc_udp.c (svcudp_recv): changed test from 4*sizeof(u_long) to 16 since it really wants 16 bytes. * sunrpc/svc.c (maskp): changed from u_long* to u_int32*. * sunrpc/rpc_cmsg.c (xdr_callmsg), sunrpc/svc_authux.c: increment "buf" pointer by casting it to a char* first since a long* may be 8 bytes or more and oa->oa_length may be any multiple of 4. * sunrpc/rpc/xdr.h (IXDR_GET_LONG, IXDR_PUT_LONG): change casts to u_int32_t (instead of u_long). * sunrpc/clnt_udp.c (clntudp_call): replaced sizeof(u_long) by 4 since it really is testing for 32 bits. Fixed casts to use u_int32 instead of u_long. * sunrpc/xdr_rec.c: Likewise. * sunrpc/clnt_tcp.c (clnttcp_call): replaced u_long by u_int32. * sunrpc/rpc/auth.h: Likewise. * limits.h (LONG_MAX, LONG_MIN, ULONG_MAX): use 64 bit values for Alpha. Tue Mar 19 13:27:49 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu> * sysdeps/i386/fpu/__math.h: New file. Contributed by John C. Bowman <bowman@hagar.ph.utexas.edu>. Sun Mar 17 00:28:16 1996 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * sysdeps/posix/clock.c: Don't multiply the return value by CLOCKS_PER_SEC or CLK_TCK. * sysdeps/mach/hurd/getcwd.c: Fail with ENOENT if a parent directory scan finds no match. * posix/unistd.h (setpgrp): Declare no-arg version unless __FAVOR_BSD. * misc/bsd-compat.c (setpgrp): New function, two arg version. * sysdeps/stub/setpgid.c: Remove setpgrp alias. * sysdeps/mach/hurd/setpgid.c: Likewise. * sysdeps/unix/sysv/sysv4/setpgid.c: Likewise. * sysdeps/unix/common/syscalls.list (setpgid): Remove setpgrp alias. * sysdeps/unix/sysv/irix4/syscalls.list: Likewise. * sysdeps/unix/sysv/linux/setpgrp.c: Obsolete file removed. * posix/setpgrp.c (setpgrp): New file. * posix/Makefile (routines): Add setpgrp. Tue Feb 6 12:46:29 1996 David Mosberger-Tang <davidm@azstarnet.com> * libc-symbols.h (weak_alias, weak_symbol): added definitions for ECOFF (HAVE_ECOFF).
Diffstat (limited to 'sysdeps/unix/sysv/linux')
-rw-r--r--sysdeps/unix/sysv/linux/Makefile2
-rw-r--r--sysdeps/unix/sysv/linux/adjtime.c4
-rw-r--r--sysdeps/unix/sysv/linux/alpha/Makefile7
-rw-r--r--sysdeps/unix/sysv/linux/alpha/alpha/regdef.h44
-rw-r--r--sysdeps/unix/sysv/linux/alpha/brk.S60
-rw-r--r--sysdeps/unix/sysv/linux/alpha/fpu_control.c (renamed from sysdeps/unix/sysv/linux/setpgrp.c)12
-rw-r--r--sysdeps/unix/sysv/linux/alpha/fpu_control.h105
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S44
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S44
-rw-r--r--sysdeps/unix/sysv/linux/alpha/ioperm.c441
-rw-r--r--sysdeps/unix/sysv/linux/alpha/pipe.S43
-rw-r--r--sysdeps/unix/sysv/linux/alpha/profil-counter.h28
-rw-r--r--sysdeps/unix/sysv/linux/alpha/setfpucw.c65
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sigprocmask.c49
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sigsuspend.S39
-rw-r--r--sysdeps/unix/sysv/linux/alpha/speed.c102
-rw-r--r--sysdeps/unix/sysv/linux/alpha/start.S93
-rw-r--r--sysdeps/unix/sysv/linux/alpha/syscall.S61
-rw-r--r--sysdeps/unix/sysv/linux/alpha/syscalls.list45
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sysdep.S33
-rw-r--r--sysdeps/unix/sysv/linux/alpha/sysdep.h60
-rw-r--r--sysdeps/unix/sysv/linux/sys/mman.h2
22 files changed, 1371 insertions, 12 deletions
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 79334e6425..c33a1906bf 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -15,7 +15,7 @@ sysdep_routines += fxstat lxstat xstat
endif
ifeq ($(subdir), misc)
-sysdep_routines += xmknod mount umount s_ptrace
+sysdep_routines += xmknod s_ptrace
headers += sys/mount.h
endif
diff --git a/sysdeps/unix/sysv/linux/adjtime.c b/sysdeps/unix/sysv/linux/adjtime.c
index c4b5002801..44a0cbbdb5 100644
--- a/sysdeps/unix/sysv/linux/adjtime.c
+++ b/sysdeps/unix/sysv/linux/adjtime.c
@@ -20,8 +20,8 @@ Boston, MA 02111-1307, USA. */
#include <sys/time.h>
#include <sys/timex.h>
-#define MAX_SEC (LONG_MAX / 1000000L - 2)
-#define MIN_SEC (LONG_MIN / 1000000L + 2)
+#define MAX_SEC (INT_MAX / 1000000L - 2)
+#define MIN_SEC (INT_MIN / 1000000L + 2)
#ifndef MOD_OFFSET
#define modes mode
diff --git a/sysdeps/unix/sysv/linux/alpha/Makefile b/sysdeps/unix/sysv/linux/alpha/Makefile
new file mode 100644
index 0000000000..9e12a0daa2
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/alpha/Makefile
@@ -0,0 +1,7 @@
+ifeq ($(subdir), misc)
+headers += alpha/regdef.h
+
+sysdep_routines := $(sysdep_routines) \
+ ieee_get_fp_control ieee_set_fp_control fpu_control setfpucw \
+ sethae ioperm osf_sigprocmask fstatfs statfs
+endif
diff --git a/sysdeps/unix/sysv/linux/alpha/alpha/regdef.h b/sysdeps/unix/sysv/linux/alpha/alpha/regdef.h
new file mode 100644
index 0000000000..142df9c4f8
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/alpha/alpha/regdef.h
@@ -0,0 +1,44 @@
+#ifndef __alpha_regdef_h__
+#define __alpha_regdef_h__
+
+#define v0 $0 /* function return value */
+
+#define t0 $1 /* temporary registers (caller-saved) */
+#define t1 $2
+#define t2 $3
+#define t3 $4
+#define t4 $5
+#define t5 $6
+#define t6 $7
+#define t7 $8
+
+#define s0 $9 /* saved-registers (callee-saved registers) */
+#define s1 $10
+#define s2 $11
+#define s3 $12
+#define s4 $13
+#define s5 $14
+#define s6 $15
+#define fp s6 /* frame-pointer (s6 in frame-less procedures) */
+
+#define a0 $16 /* argument registers (caller-saved) */
+#define a1 $17
+#define a2 $18
+#define a3 $19
+#define a4 $20
+#define a5 $21
+
+#define t8 $22 /* more temps (caller-saved) */
+#define t9 $23
+#define t10 $24
+#define t11 $25
+#define ra $26 /* return address register */
+#define t12 $27
+
+#define pv t12 /* procedure-variable register */
+#define AT $at /* assembler temporary */
+#define gp $29 /* global pointer */
+#define sp $30 /* stack pointer */
+#define zero $31 /* reads as zero, writes are noops */
+
+#endif /* __alpha_regdef_h__ */
diff --git a/sysdeps/unix/sysv/linux/alpha/brk.S b/sysdeps/unix/sysv/linux/alpha/brk.S
new file mode 100644
index 0000000000..afd2e3203c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/alpha/brk.S
@@ -0,0 +1,60 @@
+/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
+ Contributed by Brendan Kehoe (brendan@zen.org).
+
+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. */
+
+/* __brk is a special syscall under Linux since it never returns an
+error. Instead, the error condition is indicated by returning the old
+break value (instead of the new, requested one). */
+
+#include <sysdep.h>
+#include <errnos.h>
+
+#ifndef HAVE_GNU_LD
+#define _end end
+#endif
+
+ .extern _end,8
+
+ .data
+
+ .globl __curbrk
+__curbrk:
+ .quad _end
+
+ .text
+ENTRY(__brk)
+ ldgp gp, 0(t12)
+ .prologue 1
+
+ ldi v0, __NR_brk
+ call_pal PAL_callsys
+ subq a0, v0, t0
+ bne t0, error
+
+ /* Update __curbrk and return cleanly. */
+ stl a0, __curbrk
+ mov zero, v0
+ ret
+
+ /* What a horrible way to die. */
+error: ldi v0, ENOMEM
+ lda pv, syscall_error
+ jmp zero,(pv)
+
+ .end __brk
+
+weak_alias (__brk, brk)
diff --git a/sysdeps/unix/sysv/linux/setpgrp.c b/sysdeps/unix/sysv/linux/alpha/fpu_control.c
index 4497e07018..20c032a03c 100644
--- a/sysdeps/unix/sysv/linux/setpgrp.c
+++ b/sysdeps/unix/sysv/linux/alpha/fpu_control.c
@@ -1,5 +1,5 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
+ Contributed by David Mosberger (davidm@azstarnet.com).
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
@@ -16,10 +16,6 @@ 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. */
-#include <unistd.h>
+#include <fpu_control.h>
-int
-setpgrp ()
-{
- return setpgid (0, 0);
-}
+fpu_control_t __fpu_control = _FPU_DEFAULT;
diff --git a/sysdeps/unix/sysv/linux/alpha/fpu_control.h b/sysdeps/unix/sysv/linux/alpha/fpu_control.h
new file mode 100644
index 0000000000..782f33e040
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/alpha/fpu_control.h
@@ -0,0 +1,105 @@
+/* Copyright (C) 1993 Olaf Flebbe
+This file is part of the Linux C Library.
+
+The Linux 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 Linux 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. */
+
+#ifndef _ALPHA_FPU_CONTROL_H
+#define _ALPHA_FPU_CONTROL_H
+
+/*
+ * Since many programs seem to hardcode the values passed to __setfpucw()
+ * (rather than using the manifest constants) we emulate the x87 interface
+ * here (at least where this makes sense).
+ *
+ * 15-13 12 11-10 9-8 7-6 5 4 3 2 1 0
+ * | reserved | IC | RC | PC | reserved | PM | UM | OM | ZM | DM | IM
+ *
+ * IM: Invalid operation mask
+ * DM: Denormalized operand mask
+ * ZM: Zero-divide mask
+ * OM: Overflow mask
+ * UM: Underflow mask
+ * PM: Precision (inexact result) mask
+ *
+ * Mask bit is 1 means no interrupt.
+ *
+ * PC: Precision control
+ * 11 - round to extended precision
+ * 10 - round to double precision
+ * 00 - round to single precision
+ *
+ * RC: Rounding control
+ * 00 - rounding to nearest
+ * 01 - rounding down (toward - infinity)
+ * 10 - rounding up (toward + infinity)
+ * 11 - rounding toward zero
+ *
+ * IC: Infinity control
+ * That is for 8087 and 80287 only.
+ *
+ * The hardware default is 0x037f. I choose 0x1372.
+ */
+
+#include <features.h>
+
+/* masking of interrupts */
+#define _FPU_MASK_IM 0x01
+#define _FPU_MASK_DM 0x02
+#define _FPU_MASK_ZM 0x04
+#define _FPU_MASK_OM 0x08
+#define _FPU_MASK_UM 0x10
+#define _FPU_MASK_PM 0x20
+
+/* precision control */
+#define _FPU_EXTENDED 0x300 /* RECOMMENDED */
+#define _FPU_DOUBLE 0x200
+#define _FPU_SINGLE 0x0 /* DO NOT USE */
+
+/*
+ * rounding control---notice that on the Alpha this affects only
+ * instructions with the dynamic rounding mode qualifier (/d).
+ */
+#define _FPU_RC_NEAREST 0x000 /* RECOMMENDED */
+#define _FPU_RC_DOWN 0x400
+#define _FPU_RC_UP 0x800
+#define _FPU_RC_ZERO 0xC00
+
+#define _FPU_RESERVED 0xF0C0 /* Reserved bits in cw */
+
+
+/* Now two recommended cw */
+
+/* Linux default:
+ - extended precision
+ - rounding to positive infinity. There is no /p instruction
+ 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
+
+/* IEEE: same as above, but exceptions */
+#define _FPU_IEEE 0x1f7f
+
+/* Type of the control word. */
+typedef unsigned int fpu_control_t;
+
+/* Default control word set at startup. */
+extern fpu_control_t __fpu_control;
+
+__BEGIN_DECLS
+
+/* called by start.o. It can be used to manipulate fpu control word. */
+extern void __setfpucw __P ((unsigned short));
+
+__END_DECLS
+
+#endif /* _ALPHA_FPU_CONTROL */
diff --git a/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S b/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
new file mode 100644
index 0000000000..4c86e398d8
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S
@@ -0,0 +1,44 @@
+/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
+ Contributed by David Mosberger (davidm@azstarnet.com).
+
+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. */
+
+#include <sysdep.h>
+
+#define GSI_IEEE_FP_CONTROL 45
+
+ .text
+ENTRY(__ieee_get_fp_control)
+ lda sp, -8(sp)
+ .prologue 1
+
+ mov sp, a1
+ ldi a0, GSI_IEEE_FP_CONTROL
+ ldi v0, __NR_osf_getsysinfo
+ call_pal PAL_callsys
+ bne a3, error
+
+ ldq v0, 0(sp)
+ lda sp, 8(sp)
+ ret
+
+error: lda sp, 8(sp)
+ lda pv, syscall_error
+ jmp zero,(pv)
+
+ .end __ieee_get_fp_control
+
+weak_alias (__ieee_get_fp_control, 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
new file mode 100644
index 0000000000..d10e9bc24c
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S
@@ -0,0 +1,44 @@
+/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
+ Contributed by David Mosberger (davidm@azstarnet.com).
+
+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
+Lic