[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commits] r17415 - in /fsf/trunk/libc: ./ manual/ math/ stdio-common/ sysdeps/generic/ sysdeps/i386/fpu/ sysdeps/ieee754/dbl-64/ sysde...
- To: commits@xxxxxxxxxx
- Subject: [Commits] r17415 - in /fsf/trunk/libc: ./ manual/ math/ stdio-common/ sysdeps/generic/ sysdeps/i386/fpu/ sysdeps/ieee754/dbl-64/ sysde...
- From: eglibc@xxxxxxxxxx
- Date: Tue, 06 Mar 2012 00:01:43 -0000
Author: eglibc
Date: Tue Mar 6 00:01:42 2012
New Revision: 17415
Log:
Import glibc-mainline for 2012-03-06
Added:
fsf/trunk/libc/stdio-common/bug-vfprintf-nargs.c
Modified:
fsf/trunk/libc/ChangeLog
fsf/trunk/libc/NEWS
fsf/trunk/libc/manual/lang.texi
fsf/trunk/libc/math/libm-test.inc
fsf/trunk/libc/stdio-common/Makefile
fsf/trunk/libc/stdio-common/vfprintf.c
fsf/trunk/libc/sysdeps/generic/dl-osinfo.h
fsf/trunk/libc/sysdeps/i386/fpu/libm-test-ulps
fsf/trunk/libc/sysdeps/ieee754/dbl-64/e_pow.c
fsf/trunk/libc/sysdeps/ieee754/ldbl-128ibm/e_coshl.c
fsf/trunk/libc/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c
fsf/trunk/libc/sysdeps/powerpc/fpu/libm-test-ulps
fsf/trunk/libc/sysdeps/unix/sysv/linux/dl-osinfo.h
fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/init-first.c
fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/time.c
fsf/trunk/libc/sysdeps/x86_64/fpu/libm-test-ulps
Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Tue Mar 6 00:01:42 2012
@@ -1,3 +1,76 @@
+2012-03-05 Andreas Schwab <schwab@xxxxxxxxxxxxxx>
+
+ * sysdeps/powerpc/fpu/libm-test-ulps: Update.
+
+ * sysdeps/ieee754/ldbl-128ibm/e_coshl.c: Drop exp(-x) term
+ only for |x| >= 40.
+ * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c: Likewise.
+
+2012-03-05 H.J. Lu <hongjiu.lu@xxxxxxxxx>
+
+ * sysdeps/unix/sysv/linux/x86_64/gettimeofday.c (gettimeofday_ifunc):
+ Replace gettimeofday with __vdso_gettimeofday.
+
+ * sysdeps/unix/sysv/linux/x86_64/init-first.c
+ (_libc_vdso_platform_setup): Replace clock_gettime and getcpu with
+ __vdso_clock_gettime and __vdso_getcpu.
+
+ * sysdeps/unix/sysv/linux/x86_64/time.c (time_ifunc): Replace
+ time with __vdso_time.
+
+2012-03-05 Joseph Myers <joseph@xxxxxxxxxxxxxxxx>
+
+ * manual/lang.texi (size_t): Note types to which size_t may be
+ equivalent with the GNU C Library, but do not describe when
+ differences between them are significant.
+
+2012-03-05 Andreas Jaeger <aj@xxxxxxx>
+
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+
+2012-03-05 Joseph Myers <joseph@xxxxxxxxxxxxxxxx>
+
+ [BZ #3976]
+ * sysdeps/ieee754/dbl-64/e_pow.c: Include <fenv.h>.
+ (__ieee754_pow): Save and restore rounding mode and use
+ round-to-nearest for main computations.
+ * math/libm-test.inc (pow_test_tonearest): New function.
+ (pow_test_towardzero): Likewise.
+ (pow_test_downward): Likewise.
+ (pow_test_upward): Likewise.
+ (main): Call the new functions.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+ [BZ #3976]
+ * math/libm-test.inc (cosh_test_tonearest): New function.
+ (cosh_test_towardzero): Likewise.
+ (cosh_test_downward): Likewise.
+ (cosh_test_upward): Likewise.
+ (sinh_test_tonearest): Likewise.
+ (sinh_test_towardzero): Likewise.
+ (sinh_test_downward): Likewise.
+ (sinh_test_upward): Likewise.
+ (main): Call the new functions.
+ * sysdeps/i386/fpu/libm-test-ulps: Update.
+ * sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
+
+2012-03-05 Tom de Vries <tom@xxxxxxxxxxxxxxxx>
+
+ * sysdeps/generic/dl-osinfo.h (_dl_setup_stack_chk_guard): Ensure
+ default stack guard is set in last bytes.
+ * sysdeps/unix/sysv/linux/dl-osinfo.h (_dl_setup_stack_chk_guard): Same.
+
+2012-03-05 Kees Cook <keescook@xxxxxxxxxxxx>
+
+ * stdio-common/vfprintf.c (vfprintf): add missing errno settings.
+
+ [BZ #13656]
+ * stdio-common/vfprintf.c (vfprintf): Check for nargs overflow and
+ possibly allocate from heap instead of stack.
+ * stdio-common/bug-vfprintf-nargs.c: New file.
+ * stdio-common/Makefile (tests): Add nargs overflow test.
+
2012-03-03 Andreas Schwab <schwab@xxxxxxxxxxxxxx>
* sysdeps/powerpc/fpu/libm-test-ulps: Update.
Modified: fsf/trunk/libc/NEWS
==============================================================================
--- fsf/trunk/libc/NEWS (original)
+++ fsf/trunk/libc/NEWS Tue Mar 6 00:01:42 2012
@@ -9,11 +9,12 @@
* The following bugs are resolved with this release:
- 174, 350, 411, 2541, 2547, 2548, 3335, 3992, 4026, 4108, 4596, 4822, 5077,
- 5461, 5805, 5993, 6884, 6907, 9739, 9902, 10110, 10135, 10140, 10210,
- 11174, 11322, 11365, 11494, 12047, 13058, 13525, 13526, 13527, 13528,
- 13529, 13530, 13531, 13532, 13533, 13547, 13551, 13552, 13553, 13555,
- 13559, 13583, 13618, 13637, 13695, 13704, 13706, 13738, 13786
+ 174, 350, 411, 2541, 2547, 2548, 3335, 3976, 3992, 4026, 4108, 4596, 4822,
+ 5077, 5461, 5805, 5993, 6884, 6907, 9739, 9902, 10110, 10135, 10140,
+ 10210, 11174, 11322, 11365, 11494, 12047, 13058, 13525, 13526, 13527,
+ 13528, 13529, 13530, 13531, 13532, 13533, 13547, 13551, 13552, 13553,
+ 13555, 13559, 13583, 13618, 13637, 13656, 13695, 13704, 13706, 13738,
+ 13786
* ISO C11 support:
Modified: fsf/trunk/libc/manual/lang.texi
==============================================================================
--- fsf/trunk/libc/manual/lang.texi (original)
+++ fsf/trunk/libc/manual/lang.texi Tue Mar 6 00:01:42 2012
@@ -629,26 +629,12 @@
The result of the @code{sizeof} operator is of this type, and functions
such as @code{malloc} (@pxref{Unconstrained Allocation}) and
@code{memcpy} (@pxref{Copying and Concatenation}) accept arguments of
-this type to specify object sizes.
+this type to specify object sizes. On systems using @theglibc{}, this
+will be @w{@code{unsigned int}} or @w{@code{unsigned long int}}.
@strong{Usage Note:} @code{size_t} is the preferred way to declare any
arguments or variables that hold the size of an object.
@end deftp
-
-In the GNU system @code{size_t} is equivalent to either
-@w{@code{unsigned int}} or @w{@code{unsigned long int}}. These types
-have identical properties on the GNU system and, for most purposes, you
-can use them interchangeably. However, they are distinct as data types,
-which makes a difference in certain contexts.
-
-For example, when you specify the type of a function argument in a
-function prototype, it makes a difference which one you use. If the
-system header files declare @code{malloc} with an argument of type
-@code{size_t} and you declare @code{malloc} with an argument of type
-@code{unsigned int}, you will get a compilation error if @code{size_t}
-happens to be @code{unsigned long int} on your system. To avoid any
-possibility of error, when a function argument or value is supposed to
-have type @code{size_t}, never declare its type in any other way.
@strong{Compatibility Note:} Implementations of C before the advent of
@w{ISO C} generally used @code{unsigned int} for representing object sizes
Modified: fsf/trunk/libc/math/libm-test.inc
==============================================================================
--- fsf/trunk/libc/math/libm-test.inc (original)
+++ fsf/trunk/libc/math/libm-test.inc Tue Mar 6 00:01:42 2012
@@ -2174,6 +2174,114 @@
TEST_f_f (cosh, 0.75L, 1.29468328467684468784170818539018176L);
END (cosh);
+}
+
+
+static void
+cosh_test_tonearest (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(cosh) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (cosh_tonearest);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TONEAREST))
+ {
+ TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
+ TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
+ TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (cosh_tonearest);
+}
+
+
+static void
+cosh_test_towardzero (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(cosh) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (cosh_towardzero);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TOWARDZERO))
+ {
+ TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
+ TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
+ TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (cosh_towardzero);
+}
+
+
+static void
+cosh_test_downward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(cosh) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (cosh_downward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_DOWNWARD))
+ {
+ TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
+ TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
+ TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (cosh_downward);
+}
+
+
+static void
+cosh_test_upward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(cosh) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (cosh_upward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_UPWARD))
+ {
+ TEST_f_f (cosh, 22, 1792456423.065795780980053377632656584997L);
+ TEST_f_f (cosh, 23, 4872401723.124451300068625740569997090344L);
+ TEST_f_f (cosh, 24, 13244561064.92173614708845674912733665919L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (cosh_upward);
}
@@ -5209,6 +5317,111 @@
END (pow);
}
+
+
+static void
+pow_test_tonearest (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(pow) (0, 0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (pow_tonearest);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TONEAREST))
+ {
+ TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
+ TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (pow_tonearest);
+}
+
+
+static void
+pow_test_towardzero (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(pow) (0, 0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (pow_towardzero);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TOWARDZERO))
+ {
+ TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
+ TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (pow_towardzero);
+}
+
+
+static void
+pow_test_downward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(pow) (0, 0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (pow_downward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_DOWNWARD))
+ {
+ TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
+ TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (pow_downward);
+}
+
+
+static void
+pow_test_upward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(pow) (0, 0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (pow_upward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_UPWARD))
+ {
+ TEST_ff_f (pow, 1.0625L, 1.125L, 1.070582293028761362162622578677070098674L);
+ TEST_ff_f (pow, 1.5L, 1.03125L, 1.519127098714743184071644334163037684948L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (pow_upward);
+}
+
static void
remainder_test (void)
@@ -6243,6 +6456,115 @@
END (sinh);
}
+
+static void
+sinh_test_tonearest (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(sinh) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (sinh_tonearest);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TONEAREST))
+ {
+ TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
+ TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
+ TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (sinh_tonearest);
+}
+
+
+static void
+sinh_test_towardzero (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(sinh) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (sinh_towardzero);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_TOWARDZERO))
+ {
+ TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
+ TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
+ TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (sinh_towardzero);
+}
+
+
+static void
+sinh_test_downward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(sinh) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (sinh_downward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_DOWNWARD))
+ {
+ TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
+ TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
+ TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (sinh_downward);
+}
+
+
+static void
+sinh_test_upward (void)
+{
+ int save_round_mode;
+ errno = 0;
+ FUNC(sinh) (0);
+ if (errno == ENOSYS)
+ /* Function not implemented. */
+ return;
+
+ START (sinh_upward);
+
+ save_round_mode = fegetround ();
+
+ if (!fesetround (FE_UPWARD))
+ {
+ TEST_f_f (sinh, 22, 1792456423.065795780701106568345764104225L);
+ TEST_f_f (sinh, 23, 4872401723.124451299966006944252978187305L);
+ TEST_f_f (sinh, 24, 13244561064.92173614705070540368454568168L);
+ }
+
+ fesetround (save_round_mode);
+
+ END (sinh_upward);
+}
+
+
static void
sqrt_test (void)
{
@@ -6962,7 +7284,15 @@
asinh_test ();
atanh_test ();
cosh_test ();
+ cosh_test_tonearest ();
+ cosh_test_towardzero ();
+ cosh_test_downward ();
+ cosh_test_upward ();
sinh_test ();
+ sinh_test_tonearest ();
+ sinh_test_towardzero ();
+ sinh_test_downward ();
+ sinh_test_upward ();
tanh_test ();
/* Exponential and logarithmic functions: */
@@ -6993,6 +7323,10 @@
fabs_test ();
hypot_test ();
pow_test ();
+ pow_test_tonearest ();
+ pow_test_towardzero ();
+ pow_test_downward ();
+ pow_test_upward ();
sqrt_test ();
/* Error and gamma functions: */
Modified: fsf/trunk/libc/stdio-common/Makefile
==============================================================================
--- fsf/trunk/libc/stdio-common/Makefile (original)
+++ fsf/trunk/libc/stdio-common/Makefile Tue Mar 6 00:01:42 2012
@@ -59,7 +59,8 @@
tst-popen tst-unlockedio tst-fmemopen2 tst-put-error tst-fgets \
tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 bug18 bug18a \
bug19 bug19a tst-popen2 scanf13 scanf14 scanf15 bug20 bug21 bug22 \
- scanf16 scanf17 tst-setvbuf1 tst-grouping bug23 bug24
+ scanf16 scanf17 tst-setvbuf1 tst-grouping bug23 bug24 \
+ bug-vfprintf-nargs
test-srcs = tst-unbputc tst-printf
Added: fsf/trunk/libc/stdio-common/bug-vfprintf-nargs.c
==============================================================================
--- fsf/trunk/libc/stdio-common/bug-vfprintf-nargs.c (added)
+++ fsf/trunk/libc/stdio-common/bug-vfprintf-nargs.c Tue Mar 6 00:01:42 2012
@@ -1,0 +1,78 @@
+/* Test for vfprintf nargs allocation overflow (BZ #13656).
+ Copyright (C) 2012 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+ Contributed by Kees Cook <keescook@xxxxxxxxxxxx>, 2012.
+
+ 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, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <unistd.h>
+#include <inttypes.h>
+#include <string.h>
+#include <signal.h>
+
+static int
+format_failed (const char *fmt, const char *expected)
+{
+ char output[80];
+
+ printf ("%s : ", fmt);
+
+ memset (output, 0, sizeof output);
+ /* Having sprintf itself detect a failure is good. */
+ if (sprintf (output, fmt, 1, 2, 3, "test") > 0
+ && strcmp (output, expected) != 0)
+ {
+ printf ("FAIL (output '%s' != expected '%s')\n", output, expected);
+ return 1;
+ }
+ puts ("ok");
+ return 0;
+}
+
+static int
+do_test (void)
+{
+ int rc = 0;
+ char buf[64];
+
+ /* Regular positionals work. */
+ if (format_failed ("%1$d", "1") != 0)
+ rc = 1;
+
+ /* Regular width positionals work. */
+ if (format_failed ("%1$*2$d", " 1") != 0)
+ rc = 1;
+
+ /* Positional arguments are constructed via read_int, so nargs can only
+ overflow on 32-bit systems. On 64-bit systems, it will attempt to
+ allocate a giant amount of memory and possibly crash, which is the
+ expected situation. Since the 64-bit behavior is arch-specific, only
+ test this on 32-bit systems. */
+ if (sizeof (long int) == 4)
+ {
+ sprintf (buf, "%%1$d %%%" PRIdPTR "$d", UINT32_MAX / sizeof (int));
+ if (format_failed (buf, "1 %$d") != 0)
+ rc = 1;
+ }
+
+ return rc;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
Modified: fsf/trunk/libc/stdio-common/vfprintf.c
==============================================================================
--- fsf/trunk/libc/stdio-common/vfprintf.c (original)
+++ fsf/trunk/libc/stdio-common/vfprintf.c Tue Mar 6 00:01:42 2012
@@ -234,6 +234,9 @@
/* 1 if format is in read-only memory, -1 if it is in writable memory,
0 if unknown. */
int readonly_format = 0;
+
+ /* For the argument descriptions, which may be allocated on the heap. */
+ void *args_malloced = NULL;
/* This table maps a character into a number representing a
class. In each step there is a destination label for each
@@ -819,7 +822,7 @@
\
if (function_done < 0) \
{ \
- /* Error in print handler. */ \
+ /* Error in print handler; up to handler to set errno. */ \
done = -1; \
goto all_done; \
} \
@@ -873,7 +876,7 @@
\
if (function_done < 0) \
{ \
- /* Error in print handler. */ \
+ /* Error in print handler; up to handler to set errno. */ \
done = -1; \
goto all_done; \
} \
@@ -1114,7 +1117,7 @@
&mbstate); \
if (len == (size_t) -1) \
{ \
- /* Something went wron gduring the conversion. Bail out. */ \
+ /* Something went wrong during the conversion. Bail out. */ \
done = -1; \
goto all_done; \
} \
@@ -1185,6 +1188,7 @@
if (__mbsnrtowcs (ignore, &str2, strend - str2, \
ignore_size, &ps) == (size_t) -1) \
{ \
+ /* Conversion function has set errno. */ \
done = -1; \
goto all_done; \
} \
@@ -1602,6 +1606,7 @@
if (spec == L_('\0'))
{
/* The format string ended before the specifier is complete. */
+ __set_errno (EINVAL);
done = -1;
goto all_done;
}
@@ -1647,9 +1652,10 @@
determine the size of the array needed to store the argument
attributes. */
size_t nargs = 0;
+ size_t bytes_per_arg;
+ union printf_arg *args_value;
+ int *args_size;
int *args_type;
- union printf_arg *args_value = NULL;
- int *args_size;
/* Positional parameters refer to arguments directly. This could
also determine the maximum number of arguments. Track the
@@ -1698,13 +1704,38 @@
/* Determine the number of arguments the format string consumes. */
nargs = MAX (nargs, max_ref_arg);
-
- /* Allocate memory for the argument descriptions. */
- args_type = alloca (nargs * sizeof (int));
+ /* Calculate total size needed to represent a single argument across
+ all three argument-related arrays. */
+ bytes_per_arg = sizeof (*args_value) + sizeof (*args_size)
+ + sizeof (*args_type);
+
+ /* Check for potential integer overflow. */
+ if (__builtin_expect (nargs > SIZE_MAX / bytes_per_arg, 0))
+ {
+ __set_errno (ERANGE);
+ done = -1;
+ goto all_done;
+ }
+
+ /* Allocate memory for all three argument arrays. */
+ if (__libc_use_alloca (nargs * bytes_per_arg))
+ args_value = alloca (nargs * bytes_per_arg);
+ else
+ {
+ args_value = args_malloced = malloc (nargs * bytes_per_arg);
+ if (args_value == NULL)
+ {
+ done = -1;
+ goto all_done;
+ }
+ }
+
+ /* Set up the remaining two arrays to each point past the end of the
+ prior array, since space for all three has been allocated now. */
+ args_size = &args_value[nargs].pa_int;
+ args_type = &args_size[nargs];
memset (args_type, s->_flags2 & _IO_FLAGS2_FORTIFY ? '\xff' : '\0',
- nargs * sizeof (int));
- args_value = alloca (nargs * sizeof (union printf_arg));
- args_size = alloca (nargs * sizeof (int));
+ nargs * sizeof (*args_type));
/* XXX Could do sanity check here: If any element in ARGS_TYPE is
still zero after this loop, format is invalid. For now we
@@ -1919,6 +1950,7 @@
about # of chars. */
if (function_done < 0)
{
+ /* Function has set errno. */
done = -1;
goto all_done;
}
@@ -1953,6 +1985,7 @@
of chars. */
if (function_done < 0)
{
+ /* Function has set errno. */
done = -1;
goto all_done;
}
@@ -1973,8 +2006,8 @@
}
all_done:
- if (__builtin_expect (workstart != NULL, 0))
- free (workstart);
+ free (args_malloced);
+ free (workstart);
/* Unlock the stream. */
_IO_funlockfile (s);
_IO_cleanup_region_end (0);
Modified: fsf/trunk/libc/sysdeps/generic/dl-osinfo.h
==============================================================================
--- fsf/trunk/libc/sysdeps/generic/dl-osinfo.h (original)
+++ fsf/trunk/libc/sysdeps/generic/dl-osinfo.h Tue Mar 6 00:01:42 2012
@@ -30,8 +30,8 @@
if (dl_random == NULL)
{
- ret.bytes[sizeof (ret) - 2] = 255;
- ret.bytes[sizeof (ret) - 3] = '\n';
+ ret.bytes[sizeof (ret) - 1] = 255;
+ ret.bytes[sizeof (ret) - 2] = '\n';
}
else
{
Modified: fsf/trunk/libc/sysdeps/i386/fpu/libm-test-ulps
==============================================================================
--- fsf/trunk/libc/sysdeps/i386/fpu/libm-test-ulps (original)
+++ fsf/trunk/libc/sysdeps/i386/fpu/libm-test-ulps Tue Mar 6 00:01:42 2012
@@ -322,6 +322,9 @@
Test "cos_tonearest (8) == -0.1455000338086135258688413818311946826093":
ildouble: 1
ldouble: 1
+Test "cos_tonearest (9) == -0.9111302618846769883682947111811653112463":
+ildouble: 1
+ldouble: 1
# cos_towardzero
Test "cos_towardzero (1) == 0.5403023058681397174009366074429766037323":
@@ -407,6 +410,42 @@
# cosh
Test "cosh (0.75) == 1.29468328467684468784170818539018176":
ildouble: 1
+
+# cosh_downward
+Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
+double: 1
+float: 1
+ldouble: 2
+Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
+double: 1
+float: 1
+ldouble: 1
+Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
+float: 1
+ldouble: 1
+
+# cosh_tonearest
+Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997":
+ldouble: 1
+
+# cosh_towardzero
+Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
+double: 1
+float: 1
+ldouble: 2
+Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
+double: 1
+float: 1
+ldouble: 1
+Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
+float: 1
+ldouble: 1
+
+# cosh_upward
+Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
+ldouble: 1
+Test "cosh_upward (24) == 13244561064.92173614708845674912733665919":
+double: 1
# cpow
Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
@@ -897,6 +936,42 @@
ildouble: 1
ldouble: 1
+# pow_downward
+Test "pow_downward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# pow_towardzero
+Test "pow_towardzero (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# pow_upward
+Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "pow_upward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+double: 1
+idouble: 1
+ildouble: 1
+ldouble: 1
+
# sin_downward
Test "sin_downward (1) == 0.8414709848078965066525023216302989996226":
ildouble: 1
@@ -950,6 +1025,9 @@
Test "sin_tonearest (4) == -0.7568024953079282513726390945118290941359":
ildouble: 1
ldouble: 1
+Test "sin_tonearest (9) == 0.4121184852417565697562725663524351793439":
+ildouble: 1
+ldouble: 1
# sin_towardzero
Test "sin_towardzero (1) == 0.8414709848078965066525023216302989996226":
@@ -1052,6 +1130,58 @@
double: 1
ildouble: 1
+# sinh_downward
+Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ldouble: 4
+Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
+float: 1
+ifloat: 1
+ldouble: 5
+
+# sinh_tonearest
+Test "sinh_tonearest (22) == 1792456423.065795780701106568345764104225":
+ldouble: 3
+Test "sinh_tonearest (23) == 4872401723.124451299966006944252978187305":
+ldouble: 1
+Test "sinh_tonearest (24) == 13244561064.92173614705070540368454568168":
+ldouble: 6
+
+# sinh_towardzero
+Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ldouble: 4
+Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
+float: 1
+ifloat: 1
+ldouble: 5
+
+# sinh_upward
+Test "sinh_upward (22) == 1792456423.065795780701106568345764104225":
+ldouble: 16
+Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
+ldouble: 27
+Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
+double: 1
+idouble: 1
+ldouble: 7
+
# tan
Test "tan (pi/4) == 1":
double: 1
@@ -1081,6 +1211,9 @@
ifloat: 1
ildouble: 1
ldouble: 1
+Test "tan_downward (5) == -3.3805150062465856369827058794473439087096":
+ildouble: 1
+ldouble: 1
Test "tan_downward (6) == -0.2910061913847491570536995888681755428312":
double: 1
float: 1
@@ -1130,6 +1263,8 @@
Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "tan_towardzero (4) == 1.1578212823495775831373424182673239231198":
float: 1
ifloat: 1
@@ -1174,6 +1309,8 @@
Test "tan_upward (3) == -0.1425465430742778052956354105339134932261":
float: 1
ifloat: 1
+ildouble: 1
+ldouble: 1
Test "tan_upward (4) == 1.1578212823495775831373424182673239231198":
double: 1
idouble: 1
@@ -1395,6 +1532,10 @@
ifloat: 1
# Maximal error of functions:
+Function: "acos":
+ildouble: 1
+ldouble: 1
+
Function: "asin":
ildouble: 1
ldouble: 1
@@ -1568,6 +1709,23 @@
Function: "cosh":
ildouble: 1
+Function: "cosh_downward":
+double: 1
+float: 1
+ldouble: 2
+
+Function: "cosh_tonearest":
+ldouble: 1
+
+Function: "cosh_towardzero":
+double: 1
+float: 1
+ldouble: 2
+
+Function: "cosh_upward":
+double: 1
+ldouble: 1
+
Function: Real part of "cpow":
double: 1
float: 4
@@ -1733,6 +1891,30 @@
ildouble: 1
ldouble: 1
+Function: "pow_downward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "pow_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "pow_upward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
Function: "sin_downward":
double: 1
float: 1
@@ -1772,6 +1954,28 @@
Function: "sinh":
double: 1
ildouble: 1
+
+Function: "sinh_downward":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ldouble: 5
+
+Function: "sinh_tonearest":
+ldouble: 6
+
+Function: "sinh_towardzero":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+ldouble: 5
+
+Function: "sinh_upward":
+double: 1
+idouble: 1
+ldouble: 27
Function: "tan":
double: 1
Modified: fsf/trunk/libc/sysdeps/ieee754/dbl-64/e_pow.c
==============================================================================
--- fsf/trunk/libc/sysdeps/ieee754/dbl-64/e_pow.c (original)
+++ fsf/trunk/libc/sysdeps/ieee754/dbl-64/e_pow.c Tue Mar 6 00:01:42 2012
@@ -1,7 +1,7 @@
/*
* IBM Accurate Mathematical Library
* written by International Business Machines Corp.
- * Copyright (C) 2001, 2002, 2004, 2011 Free Software Foundation
+ * Copyright (C) 2001-2012 Free Software Foundation
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
@@ -41,6 +41,7 @@
#include "MathLib.h"
#include "upow.tbl"
#include "math_private.h"
+#include <fenv.h>
#ifndef SECTION
# define SECTION
@@ -84,6 +85,11 @@
(u.i[HIGH_HALF]==0 && u.i[LOW_HALF]!=0)) &&
/* 2^-1023< x<= 2^-1023 * 0x1.0000ffffffff */
(v.i[HIGH_HALF]&0x7fffffff) < 0x4ff00000) { /* if y<-1 or y>1 */
+ fenv_t env;
+ double retval;
+
+ libc_feholdexcept_setround (&env, FE_TONEAREST);
+
z = log1(x,&aa,&error); /* x^y =e^(y log (X)) */
t = y*134217729.0;
y1 = t - (t-y);
@@ -97,7 +103,10 @@
a2 = (a-a1)+aa;
error = error*ABS(y);
t = __exp1(a1,a2,1.9e16*error); /* return -10 or 0 if wasn't computed exactly */
- return (t>0)?t:power1(x,y);
+ retval = (t>0)?t:power1(x,y);
+
+ libc_feupdateenv (&env);
+ return retval;
}
if (x == 0) {
Modified: fsf/trunk/libc/sysdeps/ieee754/ldbl-128ibm/e_coshl.c
==============================================================================
--- fsf/trunk/libc/sysdeps/ieee754/ldbl-128ibm/e_coshl.c (original)
+++ fsf/trunk/libc/sysdeps/ieee754/ldbl-128ibm/e_coshl.c Tue Mar 6 00:01:42 2012
@@ -20,9 +20,9 @@
* 2*exp(x)
*
* exp(x) + 1/exp(x)
- * ln2/2 <= x <= 22 : cosh(x) := -------------------
+ * ln2/2 <= x <= 40 : cosh(x) := -------------------
* 2
- * 22 <= x <= lnovft : cosh(x) := exp(x)/2
+ * 40 <= x <= lnovft : cosh(x) := exp(x)/2
* lnovft <= x <= ln2ovft: cosh(x) := exp(x/2)/2 * exp(x/2)
* ln2ovft < x : cosh(x) := huge*huge (overflow)
*
@@ -57,13 +57,13 @@
return one+(t*t)/(w+w);
}
- /* |x| in [0.5*ln2,22], return (exp(|x|)+1/exp(|x|)/2; */
- if (ix < 0x4036000000000000LL) {
+ /* |x| in [0.5*ln2,40], return (exp(|x|)+1/exp(|x|)/2; */
+ if (ix < 0x4044000000000000LL) {
t = __ieee754_expl(fabsl(x));
return half*t+half/t;
}
- /* |x| in [22, log(maxdouble)] return half*exp(|x|) */
+ /* |x| in [40, log(maxdouble)] return half*exp(|x|) */
if (ix < 0x40862e42fefa39efLL) return half*__ieee754_expl(fabsl(x));
/* |x| in [log(maxdouble), overflowthresold] */
Modified: fsf/trunk/libc/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c
==============================================================================
--- fsf/trunk/libc/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c (original)
+++ fsf/trunk/libc/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c Tue Mar 6 00:01:42 2012
@@ -16,10 +16,10 @@
* 1. Replace x by |x| (sinh(-x) = -sinh(x)).
* 2.
* E + E/(E+1)
- * 0 <= x <= 22 : sinh(x) := --------------, E=expm1(x)
+ * 0 <= x <= 40 : sinh(x) := --------------, E=expm1(x)
* 2
*
- * 22 <= x <= lnovft : sinh(x) := exp(x)/2
+ * 40 <= x <= lnovft : sinh(x) := exp(x)/2
* lnovft <= x <= ln2ovft: sinh(x) := exp(x/2)/2 * exp(x/2)
* ln2ovft < x : sinh(x) := x*shuge (overflow)
*
@@ -48,8 +48,8 @@
h = 0.5;
if (jx<0) h = -h;
- /* |x| in [0,22], return sign(x)*0.5*(E+E/(E+1))) */
- if (ix < 0x4036000000000000LL) { /* |x|<22 */
+ /* |x| in [0,40], return sign(x)*0.5*(E+E/(E+1))) */
+ if (ix < 0x4044000000000000LL) { /* |x|<40 */
if (ix<0x3e20000000000000LL) /* |x|<2**-29 */
if(shuge+x>one) return x;/* sinhl(tiny) = tiny with inexact */
t = __expm1l(fabsl(x));
@@ -57,7 +57,7 @@
return h*(t+t/(t+one));
}
- /* |x| in [22, log(maxdouble)] return 0.5*exp(|x|) */
+ /* |x| in [40, log(maxdouble)] return 0.5*exp(|x|) */
if (ix < 0x40862e42fefa39efLL) return h*__ieee754_expl(fabsl(x));
/* |x| in [log(maxdouble), overflowthresold] */
Modified: fsf/trunk/libc/sysdeps/powerpc/fpu/libm-test-ulps
==============================================================================
--- fsf/trunk/libc/sysdeps/powerpc/fpu/libm-test-ulps (original)
+++ fsf/trunk/libc/sysdeps/powerpc/fpu/libm-test-ulps Tue Mar 6 00:01:42 2012
@@ -430,6 +430,56 @@
Test "cos_upward (9) == -0.9111302618846769883682947111811653112463":
float: 2
ifloat: 2
+
+# cosh_downward
+Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# cosh_tonearest
+Test "cosh_tonearest (24) == 13244561064.92173614708845674912733665919":
+ildouble: 1
+ldouble: 1
+
+# cosh_towardzero
+Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# cosh_upward
+Test "cosh_upward (22) == 1792456423.065795780980053377632656584997":
+ildouble: 2
+ldouble: 2
+Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
+ildouble: 2
+ldouble: 2
+Test "cosh_upward (24) == 13244561064.92173614708845674912733665919":
+ildouble: 2
+ldouble: 2
# cpow
Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
@@ -934,6 +984,30 @@
ildouble: 1
ldouble: 1
+# pow_downward
+Test "pow_downward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+ildouble: 1
+ldouble: 1
+Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+float: 1
+ifloat: 1
+
+# pow_towardzero
+Test "pow_towardzero (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+ildouble: 1
+ldouble: 1
+Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+float: 1
+ifloat: 1
+
+# pow_upward
+Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+float: 1
+ifloat: 1
+Test "pow_upward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+ildouble: 1
+ldouble: 1
+
# sin
Test "sin (16.0) == -0.2879033166650652947844562482186175296207":
ildouble: 2
@@ -1053,6 +1127,44 @@
ildouble: 1
ldouble: 1
+# sinh_downward
+Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
+float: 1
+ifloat: 1
+Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# sinh_towardzero
+Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
+float: 1
+ifloat: 1
+Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# sinh_upward
+Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
+ildouble: 1
+ldouble: 1
+Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
+ildouble: 1
+ldouble: 1
+
# sqrt
Test "sqrt (0.75) == 0.866025403784438646763723170752936183":
double: 1
@@ -1568,6 +1680,26 @@
Function: "cosh":
ildouble: 1
ldouble: 1
+
+Function: "cosh_downward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "cosh_tonearest":
+ildouble: 1
+ldouble: 1
+
+Function: "cosh_towardzero":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "cosh_upward":
+ildouble: 2
+ldouble: 2
Function: Real part of "cpow":
double: 2
@@ -1777,6 +1909,24 @@
ildouble: 1
ldouble: 1
+Function: "pow_downward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "pow_towardzero":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "pow_upward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
Function: "sin":
ildouble: 1
ldouble: 1
@@ -1817,6 +1967,26 @@
ildouble: 1
ldouble: 1
+Function: "sinh_downward":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "sinh_tonearest":
+ildouble: 1
+ldouble: 1
+
+Function: "sinh_towardzero":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "sinh_upward":
+ildouble: 1
+ldouble: 1
+
Function: "sqrt":
double: 1
idouble: 1
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/dl-osinfo.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/dl-osinfo.h (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/dl-osinfo.h Tue Mar 6 00:01:42 2012
@@ -84,8 +84,8 @@
return ret.num;
}
# endif
- ret.bytes[filllen - 2] = 255;
- ret.bytes[filllen - 3] = '\n';
+ ret.bytes[filllen] = 255;
+ ret.bytes[filllen - 1] = '\n';
}
else
#endif
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/gettimeofday.c Tue Mar 6 00:01:42 2012
@@ -30,7 +30,7 @@
PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
/* If the vDSO is not available we fall back on the old vsyscall. */
- return (_dl_vdso_vsym ("gettimeofday", &linux26)
+ return (_dl_vdso_vsym ("__vdso_gettimeofday", &linux26)
?: (void *) VSYSCALL_ADDR_vgettimeofday);
}
__asm (".type __gettimeofday, %gnu_indirect_function");
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/init-first.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/init-first.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/init-first.c Tue Mar 6 00:01:42 2012
@@ -36,13 +36,13 @@
{
PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
- void *p = _dl_vdso_vsym ("clock_gettime", &linux26);
+ void *p = _dl_vdso_vsym ("__vdso_clock_gettime", &linux26);
if (p == NULL)
p = __syscall_clock_gettime;
PTR_MANGLE (p);
__GI___vdso_clock_gettime = p;
- p = _dl_vdso_vsym ("getcpu", &linux26);
+ p = _dl_vdso_vsym ("__vdso_getcpu", &linux26);
/* If the vDSO is not available we fall back on the old vsyscall. */
#define VSYSCALL_ADDR_vgetcpu 0xffffffffff600800
if (p == NULL)
Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/time.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/time.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/time.c Tue Mar 6 00:01:42 2012
@@ -28,7 +28,7 @@
PREPARE_VERSION (linux26, "LINUX_2.6", 61765110);
/* If the vDSO is not available we fall back on the old vsyscall. */
- return _dl_vdso_vsym ("time", &linux26) ?: (void *) VSYSCALL_ADDR_vtime;
+ return _dl_vdso_vsym ("__vdso_time", &linux26) ?: (void *) VSYSCALL_ADDR_vtime;
}
__asm (".type time, %gnu_indirect_function");
Modified: fsf/trunk/libc/sysdeps/x86_64/fpu/libm-test-ulps
==============================================================================
--- fsf/trunk/libc/sysdeps/x86_64/fpu/libm-test-ulps (original)
+++ fsf/trunk/libc/sysdeps/x86_64/fpu/libm-test-ulps Tue Mar 6 00:01:42 2012
@@ -428,6 +428,50 @@
float: 2
ifloat: 2
+# cosh_downward
+Test "cosh_downward (22) == 1792456423.065795780980053377632656584997":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "cosh_downward (23) == 4872401723.124451300068625740569997090344":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_downward (24) == 13244561064.92173614708845674912733665919":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# cosh_tonearest
+Test "cosh_tonearest (22) == 1792456423.065795780980053377632656584997":
+ildouble: 1
+ldouble: 1
+
+# cosh_towardzero
+Test "cosh_towardzero (22) == 1792456423.065795780980053377632656584997":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+Test "cosh_towardzero (23) == 4872401723.124451300068625740569997090344":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "cosh_towardzero (24) == 13244561064.92173614708845674912733665919":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# cosh_upward
+Test "cosh_upward (23) == 4872401723.124451300068625740569997090344":
+ildouble: 1
+ldouble: 1
+
# cpow
Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
float: 1
@@ -932,6 +976,36 @@
float: 1
ifloat: 1
+# pow_downward
+Test "pow_downward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+ildouble: 1
+ldouble: 1
+Test "pow_downward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# pow_towardzero
+Test "pow_towardzero (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+ildouble: 1
+ldouble: 1
+Test "pow_towardzero (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+# pow_upward
+Test "pow_upward (1.0625, 1.125) == 1.070582293028761362162622578677070098674":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+Test "pow_upward (1.5, 1.03125) == 1.519127098714743184071644334163037684948":
+ildouble: 1
+ldouble: 1
+
# sin_downward
Test "sin_downward (1) == 0.8414709848078965066525023216302989996226":
ildouble: 1
@@ -1064,6 +1138,58 @@
Test "sinh (0x8p-32) == 1.86264514923095703232705808926175479e-9":
ildouble: 1
ldouble: 1
+
+# sinh_downward
+Test "sinh_downward (22) == 1792456423.065795780701106568345764104225":
+float: 1
+ifloat: 1
+ildouble: 4
+ldouble: 4
+Test "sinh_downward (23) == 4872401723.124451299966006944252978187305":
+float: 1
+ifloat: 1
+Test "sinh_downward (24) == 13244561064.92173614705070540368454568168":
+float: 1
+ifloat: 1
+ildouble: 5
+ldouble: 5
+
+# sinh_tonearest
+Test "sinh_tonearest (22) == 1792456423.065795780701106568345764104225":
+ildouble: 3
+ldouble: 3
+Test "sinh_tonearest (23) == 4872401723.124451299966006944252978187305":
+ildouble: 1
+ldouble: 1
+Test "sinh_tonearest (24) == 13244561064.92173614705070540368454568168":
+ildouble: 6
+ldouble: 6
+
+# sinh_towardzero
+Test "sinh_towardzero (22) == 1792456423.065795780701106568345764104225":
+float: 1
+ifloat: 1
+ildouble: 4
+ldouble: 4
+Test "sinh_towardzero (23) == 4872401723.124451299966006944252978187305":
+float: 1
+ifloat: 1
+Test "sinh_towardzero (24) == 13244561064.92173614705070540368454568168":
+float: 1
+ifloat: 1
+ildouble: 5
+ldouble: 5
+
+# sinh_upward
+Test "sinh_upward (22) == 1792456423.065795780701106568345764104225":
+ildouble: 16
+ldouble: 16
+Test "sinh_upward (23) == 4872401723.124451299966006944252978187305":
+ildouble: 27
+ldouble: 27
+Test "sinh_upward (24) == 13244561064.92173614705070540368454568168":
+ildouble: 7
+ldouble: 7
# tan
Test "tan (pi/4) == 1":
@@ -1546,6 +1672,26 @@
ildouble: 1
ldouble: 1
+Function: "cosh_downward":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "cosh_tonearest":
+ildouble: 1
+ldouble: 1
+
+Function: "cosh_towardzero":
+float: 1
+ifloat: 1
+ildouble: 2
+ldouble: 2
+
+Function: "cosh_upward":
+ildouble: 1
+ldouble: 1
+
Function: Real part of "cpow":
double: 2
float: 5
@@ -1718,6 +1864,24 @@
float: 1
ifloat: 1
+Function: "pow_downward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "pow_towardzero":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
+Function: "pow_upward":
+float: 1
+ifloat: 1
+ildouble: 1
+ldouble: 1
+
Function: "sin_downward":
float: 1
ifloat: 1
@@ -1753,6 +1917,26 @@
Function: "sinh":
ildouble: 1
ldouble: 1
+
+Function: "sinh_downward":
+float: 1
+ifloat: 1
+ildouble: 5
+ldouble: 5
+
+Function: "sinh_tonearest":
+ildouble: 6
+ldouble: 6
+
+Function: "sinh_towardzero":
+float: 1
+ifloat: 1
+ildouble: 5
+ldouble: 5
+
+Function: "sinh_upward":
+ildouble: 27
+ldouble: 27
Function: "tan":
double: 1
_______________________________________________
Commits mailing list
Commits@xxxxxxxxxx
http://eglibc.org/cgi-bin/mailman/listinfo/commits