summaryrefslogtreecommitdiff
path: root/libc/ports/sysdeps/unix
diff options
context:
space:
mode:
authorjoseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d>2012-09-25 14:42:18 +0000
committerjoseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d>2012-09-25 14:42:18 +0000
commitaeb5b827c5f7ed858a5b15101d1a3893356cc6ba (patch)
tree5d8e4382197847df3cf875caac4994390b6f1094 /libc/ports/sysdeps/unix
parent598804b7d4191eddbaf24784c3b25a6c4d6f33cd (diff)
Merge changes between r20391 and r20863 from /fsf/trunk.
git-svn-id: svn://svn.eglibc.org/trunk@20864 7b3dc134-2b1b-0410-93df-9e9f96275f8d
Diffstat (limited to 'libc/ports/sysdeps/unix')
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/alpha/nptl/localplt.data6
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/alpha/setfpucw.c88
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/hppa/Versions2
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/hppa/bits/errno.h10
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/hppa/syscalls.list2
-rw-r--r--libc/ports/sysdeps/unix/sysv/linux/tile/sys/procfs.h2
6 files changed, 52 insertions, 58 deletions
diff --git a/libc/ports/sysdeps/unix/sysv/linux/alpha/nptl/localplt.data b/libc/ports/sysdeps/unix/sysv/linux/alpha/nptl/localplt.data
index 00700d1e0..6b2e51599 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/alpha/nptl/localplt.data
+++ b/libc/ports/sysdeps/unix/sysv/linux/alpha/nptl/localplt.data
@@ -1,12 +1,18 @@
libc.so: _OtsAddX ?
+libc.so: _OtsConvertFloatTX ?
libc.so: _OtsConvertFloatXT ?
+libc.so: _OtsCvtQUX ?
libc.so: _OtsCvtQX ?
+libc.so: _OtsCvtXQ ?
libc.so: _OtsDivX ?
libc.so: _OtsEqlX ?
libc.so: _OtsGeqX ?
+libc.so: _OtsGtrX ?
+libc.so: _OtsLeqX ?
libc.so: _OtsLssX ?
libc.so: _OtsMulX ?
libc.so: _OtsNeqX ?
+libc.so: _OtsNintXQ ?
libc.so: _OtsSubX ?
libc.so: _Unwind_Find_FDE
libc.so: calloc ?
diff --git a/libc/ports/sysdeps/unix/sysv/linux/alpha/setfpucw.c b/libc/ports/sysdeps/unix/sysv/linux/alpha/setfpucw.c
index becc11f94..99ffd06fa 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/alpha/setfpucw.c
+++ b/libc/ports/sysdeps/unix/sysv/linux/alpha/setfpucw.c
@@ -1,5 +1,5 @@
/* Set FP exception mask and rounding mode.
- Copyright (C) 1996, 1997, 1998, 2003 Free Software Foundation, Inc.
+ Copyright (C) 1996-2012 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
@@ -17,63 +17,45 @@
<http://www.gnu.org/licenses/>. */
#include <fpu_control.h>
-#include <asm/fpu.h>
+#include <fenv_libc.h>
-extern void __ieee_set_fp_control (unsigned long);
-libc_hidden_proto(__ieee_set_fp_control)
-extern unsigned long __ieee_get_fp_control (void);
-libc_hidden_proto(__ieee_get_fp_control)
-
-static inline unsigned long
-rdfpcr (void)
-{
- unsigned long fpcr;
- asm ("excb; mf_fpcr %0" : "=f"(fpcr));
- return fpcr;
-}
-
-
-static inline void
-wrfpcr (unsigned long fpcr)
-{
- asm volatile ("mt_fpcr %0; excb" : : "f"(fpcr));
-}
+#define convert_bit(M, F, T) \
+ ((T) < (F) \
+ ? ((M) / ((F) / (T))) & (T) \
+ : ((M) & (F)) * ((T) / (F)))
void
__setfpucw (fpu_control_t fpu_control)
{
- unsigned long fpcr = 0, fpcw = 0;
-
- if (!fpu_control)
- fpu_control = _FPU_DEFAULT;
-
- /* 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;
- }
- wrfpcr(fpcr);
-
- /* now tell kernel about traps that we like to hear about: */
-
- 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;
-
- __fpu_control = fpu_control; /* update global copy */
-
- __ieee_set_fp_control(fpcw);
+ unsigned long fpcr, swcr, fc = (int)fpu_control;
+
+ /* ??? If this was a real external interface we'd want to read the current
+ exception state with __ieee_get_fp_control. But this is an internal
+ function only called at process startup, so there's no point in trying
+ to preserve exceptions that cannot have been raised yet. Indeed, this
+ entire function is likely to be one big nop unless the user overrides
+ the default __fpu_control variable. */
+
+ /* Convert the rounding mode from fpu_control.h format. */
+ const unsigned long conv_rnd
+ = ( (FE_TOWARDZERO << (_FPU_RC_ZERO >> 8))
+ | (FE_DOWNWARD << (_FPU_RC_DOWN >> 8))
+ | (FE_TONEAREST << (_FPU_RC_NEAREST >> 8))
+ | (FE_UPWARD << (_FPU_RC_UP >> 8)));
+
+ fpcr = ((conv_rnd >> ((fc >> 8) & 3)) & 3) << FPCR_ROUND_SHIFT;
+
+ /* Convert the exception mask from fpu_control.h format. */
+ swcr = convert_bit (~fc, _FPU_MASK_IM, FE_INVALID >> SWCR_ENABLE_SHIFT);
+ swcr |= convert_bit (~fc, _FPU_MASK_DM, FE_UNDERFLOW >> SWCR_ENABLE_SHIFT);
+ swcr |= convert_bit (~fc, _FPU_MASK_ZM, FE_DIVBYZERO >> SWCR_ENABLE_SHIFT);
+ swcr |= convert_bit (~fc, _FPU_MASK_OM, FE_OVERFLOW >> SWCR_ENABLE_SHIFT);
+ swcr |= convert_bit (~fc, _FPU_MASK_PM, FE_INEXACT >> SWCR_ENABLE_SHIFT);
+
+ /* Install everything. */
+ __fpu_control = fc;
+ asm volatile ("mt_fpcr %0" : : "f"(fpcr));
+ __ieee_set_fp_control(swcr);
}
diff --git a/libc/ports/sysdeps/unix/sysv/linux/hppa/Versions b/libc/ports/sysdeps/unix/sysv/linux/hppa/Versions
index 1e2e320c0..a62ef195a 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/hppa/Versions
+++ b/libc/ports/sysdeps/unix/sysv/linux/hppa/Versions
@@ -28,6 +28,8 @@ libc {
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.17 {
+ #errlist-compat 260
+ _sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
prlimit64;
}
}
diff --git a/libc/ports/sysdeps/unix/sysv/linux/hppa/bits/errno.h b/libc/ports/sysdeps/unix/sysv/linux/hppa/bits/errno.h
index 2487739e3..86a173a66 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/hppa/bits/errno.h
+++ b/libc/ports/sysdeps/unix/sysv/linux/hppa/bits/errno.h
@@ -1,5 +1,5 @@
/* Error constants. Linux/HPPA specific version.
- Copyright (C) 1996,1997,1998,1999,2000,2002 Free Software Foundation, Inc.
+ Copyright (C) 1996-2012 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
@@ -33,12 +33,16 @@
# define EOWNERDEAD 254
# endif
-# ifndef ENOTRECOVERABLE
+# ifndef ENOTRECOVERABLE
# define ENOTRECOVERABLE 255
# endif
# ifndef ERFKILL
-# define ERFKILL 256
+# define ERFKILL 256
+# endif
+
+# ifndef EHWPOISON
+# define EHWPOISON 257
# endif
# ifndef __ASSEMBLER__
diff --git a/libc/ports/sysdeps/unix/sysv/linux/hppa/syscalls.list b/libc/ports/sysdeps/unix/sysv/linux/hppa/syscalls.list
index 78e6568b7..f3ff3e7d7 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/hppa/syscalls.list
+++ b/libc/ports/sysdeps/unix/sysv/linux/hppa/syscalls.list
@@ -35,4 +35,4 @@ socketpair - socketpair i:iiif __socketpair socketpair
setrlimit - setrlimit i:ip __setrlimit setrlimit
getrlimit - getrlimit i:ip __getrlimit getrlimit
-prlimit64 EXTRA prlimit64 i:iipp prlimit64 prlimit64@@GLIBC_2.17
+prlimit64 EXTRA prlimit64 i:iipp __prlimit64 prlimit64@@GLIBC_2.17
diff --git a/libc/ports/sysdeps/unix/sysv/linux/tile/sys/procfs.h b/libc/ports/sysdeps/unix/sysv/linux/tile/sys/procfs.h
index 295ae50aa..f533eb1f1 100644
--- a/libc/ports/sysdeps/unix/sysv/linux/tile/sys/procfs.h
+++ b/libc/ports/sysdeps/unix/sysv/linux/tile/sys/procfs.h
@@ -113,7 +113,7 @@ typedef void *psaddr_t;
typedef elf_gregset_t prgregset_t;
/* Provide dummy declaration here; we don't have FP registers. */
-typedef int prfpregset_t;
+typedef elf_fpregset_t prfpregset_t;
/* We don't have any differences between processes and threads,
therefore have only one PID type. */