aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2014-12-22 18:45:50 +0000
committerJoseph Myers <joseph@codesourcery.com>2014-12-22 18:45:50 +0000
commitf56f91245a0a5aa0facaa14b5608cfb761df7c38 (patch)
tree22f4e47bc078aa8e74c5943bcb75422fed2518a4 /sysdeps/ieee754/k_standardf.c
parentRemove trailing whitespace. (diff)
downloadglibc-f56f91245a0a5aa0facaa14b5608cfb761df7c38.tar.gz
glibc-f56f91245a0a5aa0facaa14b5608cfb761df7c38.tar.bz2
glibc-f56f91245a0a5aa0facaa14b5608cfb761df7c38.zip
Split __kernel_standard* functions (fixes bug 17724).
Bug 17724 reports references to fesetround being brought in by ldbl-128ibm rintl via references to __rintl from __kernel_standard_l. Because all three __kernel_standard* functions are in the same file, this gets brought in even though only the long double version __kernel_standard_l needs __rintl, and the C90 functions use only __kernel_standard. This patch fixes this by splitting the three versions into separate files; it's fine for long double functions to refer to fe* functions directly, unless they get called by C90 double functions. Tested for x86_64 (testsuite; the reordering of code means disassembly of shared libraries can't usefully be compared). Tested for powerpc that the relevant issue disappears from the linknamespace test output. [BZ #17724] * sysdeps/ieee754/k_standard.c: Don't include <float.h>. (__kernel_standard_f): Remove. Moved to k_standardf.c. (__kernel_standard_l): Remove. Moved to k_standardl.c with (char *) casts added. * sysdeps/ieee754/k_standardf.c: New file. * sysdeps/ieee754/k_standardl.c: Likewise. * math/Makefile (libm-support): Remove k_standard. (libm-calls): Add k_standard.
Diffstat (limited to 'sysdeps/ieee754/k_standardf.c')
-rw-r--r--sysdeps/ieee754/k_standardf.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/sysdeps/ieee754/k_standardf.c b/sysdeps/ieee754/k_standardf.c
new file mode 100644
index 0000000000..b4aeadf72e
--- /dev/null
+++ b/sysdeps/ieee754/k_standardf.c
@@ -0,0 +1,31 @@
+/* Implement __kernel_standard_f.
+ Copyright (C) 2011-2014 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 Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <math.h>
+#include <math_private.h>
+
+
+/* Handle errors for a libm function as specified by TYPE (see
+ comments in k_standard.c for details), with arguments X and Y,
+ returning the appropriate return value for that function. */
+
+float
+__kernel_standard_f (float x, float y, int type)
+{
+ return __kernel_standard (x, y, type);
+}