Commit Graph

11 Commits

Author SHA1 Message Date
Joseph Myers
dcb133b7a4 Fix __finitel libm compat symbol version.
The changes to restrict implementation-namespace symbol aliases such
as __finitel to compat symbols used code for __finitel in libm
analogous to that for __finitel in libc.  However, the versions for
the two symbols are actually different, GLIBC_2.0 in libc and
GLIBC_2.1 in libm.  This patch fixes the handling of the libm compat
symbol.

Tested for mips (o32), where it fixes an ABI test failure.

	* sysdeps/ieee754/dbl-64/s_finite.c
	[NO_LONG_DOUBLE && LDBL_CLASSIFY_COMPAT] (__finitel): Define
	compat symbol at version GLIBC_2_1 and use GLIBC_2_1 in
	SHLIB_COMPAT condition for libm, not GLIBC_2_0.
	* sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c
	[NO_LONG_DOUBLE && LDBL_CLASSIFY_COMPAT] (__finitel): Likewise.
2016-01-20 19:04:43 +00:00
Chris Metcalf
e59c94fa0e math: add LDBL_CLASSIFY_COMPAT support
If a platform does not define "long-double-fcts = yes" in its
Makefiles and it does define __NO_LONG_DOUBLE_MATH in its installed
headers, it will currently create exported symbols for __finitel,
__isinfl, and __isnanl that can't be reached from userspace by
correct use of the finite(), isinf(), or isnan() macros in <math.h>.

To avoid this situation, by default for such platforms we now no
longer export these symbols, thus causing appropriate link-time
errors.  However, for platforms that previously exported these
symbols, we continue to do so as compat symbols; this is enabled
by adding LDBL_CLASSIFY_COMPAT to math_private.h for the platform.

For tile, remove the now-unnecessary exports of those functions from
libc and libm.
2015-12-03 13:00:46 -05:00
Joseph Myers
b8682397ab Reduce number of constants in __finite* (bug 15384).
Bug 15384 notes that in __finite, two different constants are used
that could be the same constant (the result only depends on the
exponent of the floating-point representation), and that using the
same constant is better for architectures where constants need loading
from a constant pool.  This patch implements that change.

Tested for x86_64, mips64 and powerpc.

	[BZ #15384]
	* sysdeps/ieee754/dbl-64/s_finite.c (FINITE): Use same constant as
	bit-mask as in subtraction.
	* sysdeps/ieee754/dbl-64/wordsize-64/s_finite.c (__finite):
	Likewise.
	* sysdeps/ieee754/flt-32/s_finitef.c (FINITEF): Likewise.
	* sysdeps/ieee754/ldbl-128/s_finitel.c (__finitel): Likewise.
	* sysdeps/ieee754/ldbl-128ibm/s_finitel.c (__finitel): Likewise.
2015-09-17 16:47:14 +00:00
Adhemerval Zanella
ae1a4cd9ff PowerPC: multiarch finite/finitef for PowerPC32 2013-12-06 05:47:03 -06:00
Ondřej Bílka
c5d5d574cb Format floating routines. 2013-10-17 16:03:24 +02:00
Richard Henderson
1ed0291c31 Use <> for math.h and math_private.h everywhere.
Entire tree edited via find | grep | sed.
2012-03-09 16:09:10 -08:00
Joseph Myers
8db2188281 Remove __STDC__ conditionals from libm. 2012-01-27 17:29:45 +00:00
Ulrich Drepper
7edb55ce06 Optimize use of isnan, isinf, finite 2011-10-08 10:18:26 -04:00
Ulrich Drepper
76f2646f3d Update.
2002-09-09  Jakub Jelinek  <jakub@redhat.com>

	* include/math.h (__finite_internal, __finitef_internal,
	__finitel_internal, __isinf_internal, __isnan_internal): Remove.
	(isfinite): Remove.
	(__finite, __isinf, __isnan, __finitef, __isinff, __isnanf, __finitel,
	__isinfl, __isnanl): Add hidden_proto.
	(__fpclassify, __fpclassifyf, __fpclassifyl, __expm1l): Add
	libm_hidden_proto.
	* math/Makefile (libm-calls): Add s_isinf and s_isnan.
	* stdio-common/printf_fp.c (__printf_fp): Remove INTUSE from
	__is{inf,nan} calls.
	* stdio-common/printf_size.c (printf_size): Likewise.
	* sysdeps/generic/printf_fphex.c (__printf_fphex): Likewise.
	* sysdeps/generic/s_ldexp.c (__ldexp): Likewise.
	* sysdeps/generic/s_ldexpf.c (__ldexpf): Likewise.
	* sysdeps/generic/s_ldexpl.c (__ldexpl): Likewise.
	* sysdeps/generic/s_expm1l.c (__expm1l): Add libm_hidden_def.
	* sysdeps/i386/fpu/s_finite.S (__finite_internal): Remove alias.
	(__finite): Add hidden_def.
	* sysdeps/i386/fpu/s_finitef.S (__finitef_internal): Remove alias.
	(__finitef): Add hidden_def.
	* sysdeps/i386/fpu/s_finitel.S (__finitel_internal): Remove alias.
	(__finitel): Add hidden_def.
	* sysdeps/i386/fpu/s_isinfl.c (__isinfl): Remove INTDEF.  Add
	hidden_def.
	* sysdeps/i386/fpu/s_isnanl.c (__isnanl): Likewise.
	* sysdeps/i386/fpu/s_fpclassifyl.c (__fpclassifyl): Add
	libm_hidden_def.
	* sysdeps/i386/fpu/s_expm1l.S (__expm1l): Likewise.
	* sysdeps/ieee754/dbl-64/s_finite.c (__finite): Remove INTDEF.  Add
	hidden_def.
	* sysdeps/ieee754/dbl-64/s_isinf.c (__isinf): Likewise.
	(__isinfl): Remove INTDEF.
	* sysdeps/ieee754/dbl-64/s_isnan.c (__isnan): Remove INTDEF.  Add
	hidden_def.
	(__isnanl): Remove INTDEF.
	* sysdeps/ieee754/dbl-64/s_fpclassify.c (__fpclassify): Add
	libm_hidden_def.
	* sysdeps/ieee754/dbl-64/e_lgamma_r.c (sin_pi): Use __sin and __cos
	instead of sin and cos.
	* sysdeps/ieee754/flt-32/s_finitef.c (__finitef): Remove INTDEF.
	Add hidden_def.
	* sysdeps/ieee754/flt-32/s_isinff.c (__isinff): Likewise.
	* sysdeps/ieee754/flt-32/s_isnanf.c (__isnanf): Likewise.
	* sysdeps/ieee754/flt-32/s_fpclassifyf.c (__fpclassifyf): Add
	libm_hidden_def.
	* sysdeps/ieee754/ldbl-128/s_finitel.c (__finitel): Remove INTDEF.
	Add hidden_def.
	* sysdeps/ieee754/ldbl-128/s_isinfl.c (__isinfl): Likewise.
	* sysdeps/ieee754/ldbl-128/s_isnanl.c (__isnanl): Likewise.
	* sysdeps/ieee754/ldbl-128/s_fpclassifyl.c (__fpclassifyl): Add
	libm_hidden_def.
	* sysdeps/ieee754/ldbl-128/s_expm1l.c (__expm1l): Add
	libm_hidden_def.
	* sysdeps/ieee754/ldbl-96/s_finitel.c (__finitel): Remove INTDEF.
	Add hidden_def.
	* sysdeps/ieee754/ldbl-96/s_isinfl.c (__isinfl): Likewise.
	* sysdeps/ieee754/ldbl-96/s_isnanl.c (__isnanl): Likewise.
	* sysdeps/ieee754/ldbl-96/s_fpclassifyl.c (__fpclassifyl): Add
	libm_hidden_def.
	* sysdeps/ia64/fpu/s_finite.S (__finite_internal, __finitef_internal,
	__finitel_internal): Remove aliases.
	(__finite, __finitef, __finitel): Add hidden_def.
	* sysdeps/ia64/fpu/s_isnan.S (__isnan_internal, __isnanf_internal,
	__isnanl_internal): Remove aliases.
	(__isnan, __isnanf, __isnanl): Add hidden_def.
	* sysdeps/ia64/fpu/s_isinf.S (__isinf_internal, __isinff_internal,
	__isinfl_internal): Remove aliases.
	(__isinf, __isinff, __isinfl): Add hidden_def.
	* sysdeps/ia64/fpu/s_fpclassify.S (__fpclassify, __fpclassifyf,
	__fpclassifyl): Add libm_hidden_def.
	* sysdeps/ia64/fpu/s_expm1l.S (__expm1l): Likewise.
	* sysdeps/m68k/s_isinfl.c (__isinfl): Remove INTDEF.  Add hidden_def.
	* sysdeps/m68k/fpu/s_isinf.c (INTDEFX): Remove.
	(hidden_defx): Define and use.
	* sysdeps/m68k/fpu/s_fpclassifyl.c (__fpclassifyl): Add
	libm_hidden_def.
	* sysdeps/m68k/fpu/s_expm1l.c (__expm1l): Likewise.
	* sysdeps/m68k/s_isnanl.c (__isnanl): Add hidden_def.
	* sysdeps/powerpc/fpu/s_isnan.c (__isnan, __isnanf, __isnanl):
	Remove INTDEF.
	(__isnan, __isnanf): Add hidden_def.
	* sysdeps/x86_64/fpu/s_finitel.S (__finitel_internal): Remove alias.
	(__finitel): Add libm_hidden_def.
	* sysdeps/x86_64/fpu/s_expm1l.S (__expm1l): Likewise.

	* include/fenv.h (feraiseexcept, fesetenv): Add libm_hidden_proto.
	* sysdeps/alpha/fpu/fesetenv.c (fesetenv): Add libm_hidden_ver.
	* sysdeps/alpha/fpu/fraiseexcpt.c (feraiseexcept): Likewise.
	* sysdeps/arm/fpu/fesetenv.c (fesetenv): Likewise.
	* sysdeps/arm/fpu/fraiseexcpt.c (feraiseexcept): Likewise.
	* sysdeps/generic/fesetenv.c (fesetenv): Likewise.
	* sysdeps/generic/fraiseexcpt.c (feraiseexcept): Likewise.
	* sysdeps/i386/fpu/fesetenv.c (fesetenv): Likewise.
	* sysdeps/i386/fpu/fraiseexcpt.c (feraiseexcept): Likewise.
	* sysdeps/m68k/fpu/fesetenv.c (fesetenv): Likewise.
	* sysdeps/m68k/fpu/fraiseexcpt.c (feraiseexcept): Likewise.
	* sysdeps/mips/fpu/fesetenv.c (fesetenv): Likewise.
	* sysdeps/mips/fpu/fraiseexcpt.c (feraiseexcept): Likewise.
	* sysdeps/powerpc/fpu/fesetenv.c (fesetenv): Likewise.
	* sysdeps/powerpc/fpu/fraiseexcpt.c (feraiseexcept): Likewise.
	* sysdeps/sparc/fpu/fesetenv.c (fesetenv): Likewise.
	* sysdeps/sparc/fpu/fraiseexcpt.c (feraiseexcept): Likewise.
	* sysdeps/hppa/fpu/fesetenv.c (fesetenv): Add libm_hidden_def.
	* sysdeps/hppa/fpu/fraiseexcpt.c (feraiseexcept): Likewise.
	* sysdeps/ia64/fpu/fesetenv.c (fesetenv): Likewise.
	* sysdeps/ia64/fpu/fraiseexcpt.c (feraiseexcept): Likewise.
	* sysdeps/sh/sh4/fpu/fesetenv.c (fesetenv): Likewise.
	* sysdeps/sh/sh4/fpu/fraiseexcpt.c (feraiseexcept): Likewise.
	* sysdeps/s390/fpu/fesetenv.c (fesetenv): Likewise.
	* sysdeps/s390/fpu/fraiseexcpt.c (feraiseexcept): Likewise.
	* sysdeps/x86_64/fpu/fesetenv.c (fesetenv): Likewise.
	* sysdeps/x86_64/fpu/fraiseexcpt.c (feraiseexcept): Likewise.
2002-09-10 01:40:26 +00:00
Ulrich Drepper
6b87a5642c Update.
* sysdeps/mach/hurd/chown.c: Use INTDEF for __chown.
	* sysdeps/unix/sysv/aix/chown.c: Likewise.
	* sysdeps/unix/grantpt.c: Use INTUSE for __chown calls.
	* sysdeps/unix/sysv/linux/m68k/chown.c: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/chown.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/chown.c: Use INTDEF2 to define
	__chown_internal.
	* sysdeps/unix/sysv/linux/s390/s390-32//chown.c: Likewise.

	* intl/dcngettext.c [_LIBC]: Use INTUSE for __dcngettext.
	* intl/dngettext.c [_LIBC] (DCNGETTEXT): Use INTUSE.
	* intl/ngettext.c: Likewise.

	* include/sys/socket.h: Declare __connect_internal and define
	__connect macro if not NOT_IN_libc.
	* sysdeps/mach/hurd/connect.c: Use INTDEF for __connect.
	* sysdeps/unix/sysv/aix/connect.c: Likewise.
	* sysdeps/unix/sysv/linux/connect.S: Add __connect_internal alias.

	* include/unistd.h: Declare __close_internal and define __close macro
	if not NOT_IN_libc.
	* libio/libioP.h (JUMO0, JUMP1, JUMP2, JUMP3, WJUMP0, WJUMP1, WJUMP2,
	WJUMP3): Add extra parenthesis to avoid expanding element names with
	macors like __close.
	* sysdeps/unix/syscalls.list: Add __close_internal alias.

	* include/unistd.h: Declare __dup2_internal and define __dup2 macro
	if not NOT_IN_libc.
	* sysdeps/mach/hurd/dup2.c: Use INTDEF for __dup2.
	* sysdeps/posix/dup2.c: Use INTDEF for __dup2.
	* sysdeps/unix/syscalls.list: Add __dup2_internal alias.

	* include/unistd.h: Declare __fork_internal and define __fork macro
	if not NOT_IN_libc.
	* sysdeps/mach/hurd/fork.c: Use INTDEF for __fork.
	* sysdeps/unix/sysv/aix/fork.c: Likewise.
	* sysdeps/unix/sysv/linux/syscalls.list: Add __fork_internal alias.

	* include/stdio_ext.h: Declare __fsetlocking_internal and define
	__fsetlocking macro to use it if not NOT_IN_libc.
	* libio/__fsetlocking.c: Use INTDEF for __fsetlocking.

	* libio/__fbufsize.c: Correct copyright.
	* libio/__flbf.c: Likewise.
	* libio/__fpending.c: Likewise.
	* libio/__fpurge.c: Likewise.
	* libio/__freadable.c: Likewise.
	* libio/__freading.c: Likewise.
	* libio/__fsetlocking.c: Likewise.
	* libio/__fwritable.c: Likewise.
	* libio/__fwriting.c: Likewise.

	* include/stdio.h: Declare __asprintf_internal and define __asprintf
	macro to use it if not NOT_IN_libc.
	* stdio-common/asprintf.c: Use INTDEF for __asprintf.

	* include/mntent.h: Declare __setmntent_internal,
	__getmntent_r_internal, __endmntent_internal.  Define __setmntent,
	__getmntent_r, and __endmntent macros to use these functions if not
	NOT_IN_libc.
	* misc/mntent_r.c: Use INTDEF for __setmntent, __getmntent_r, and
	__endmntent.

	* include/math.h: Declare __finite_internal, __finitef_internal, and
	__finitel_internal.  Redefine isfinite macro if in libc or libm using
	these functions.
	* sysdeps/generic/s_ldexp.c: Use INTUSE for __finite calls.
	* sysdeps/generic/s_ldexpf.c: Use INTUSE for __finitef calls.
	* sysdeps/generic/s_ldexpl.c: Use INTUSE for __finitel calls.
	* sysdeps/i386/fpu/s_finite.S: Define _internal alias.
	* sysdeps/i386/fpu/s_finitef.S: Likewise.
	* sysdeps/i386/fpu/s_finitel.S: Likewise.
	* sysdeps/ieee754/dbl-64/s_finite.c: Likewise.
	* sysdeps/ieee754/flt-32/s_finitef.c: Likewise.
	* sysdeps/ieee754/ldbl-128/s_finitel.c: Likewise.
	* sysdeps/ieee754/ldbl-96/s_finitel.c: Likewise.

	* include/fcntl.h: Declare __fcntl_internal.  Define __fcntl macro
	to use this function if not NOT_IN_libc.
	* libio/iofdopen.c (_IO_fcntl): Use INTUSE.
	* sysdeps/generic/fcntl.c: Use INTDEF for __fcntl.
	* sysdeps/mach/hurd/fcntl.c: Likewise.
	* sysdeps/unix/sysv/aix/fcntl.c: Likewise.
	* sysdeps/unix/sysv/linux/i386/fcntl.c: Likewise.

	* include/argz.h: Declare __argz_count_internal and
	__argz_stringify_internal.
	* intl/l10nflist.c [_LIBC]: Use INTUSE for __argz_count and
	__argz_stringify.
	* string/argz-count.c: Use INTDEF for __argz_count.
	* string/argz-stringify.c: Use INTDEF for __argz_stringify.

	* include/stdlib.h: Declare __cxa_atexit_internal and define
	__cxa_atexit macro if not NOT_IN_libc.
	* stdlib/cxa_atexit.c: Use INTDEF for __cxa_atexit.
	* dlfcn/Makefile: Define NOT_IN_libc when compiling modcxaatexit.c.

	* assert/assert.c: Use INTDEF for __assert_fail.
	* assert/__assert.c: Use INTUSE for call to __assert_fail.
	* include/assert.h: Declare __assert_fail_internal.
2002-04-09 20:36:24 +00:00
Ulrich Drepper
abfbdde177 Update. 1999-07-14 00:54:57 +00:00