a891caff7a
The libm template machinery includes a macro declare_mgen_alias_2, to define two function aliases rather than one. This macro is only used in one place, to define ldexp and scalbn, and only has one nondefault definition, for double in the case where long double has the same format. That definition is because declare_mgen_alias for double, in that case, defines <internal-func>l as an alias of <internal-func>, so cannot be called twice for aliases of the same function. Now, I suspect the <internal-func>l aliases are generally not needed (with maybe a few exceptions such as __clog10l, which is an exported function). But even in the presence of them, there is no need for a special declare_mgen_alias_2 macro for this case. This patch eliminates the need for such a macro by defining __wrap_scalbn<suffix> as an alias of __ldexp<suffix>, and then using that when defining the scalbn public aliases. This is similar to how such internal aliases are created for functions with multiple symbol versions, for example. Tested for x86_64, and with build-many-glibcs.py. (There *are* some cases where installed stripped shared libraries change - not in the generated code but because such changes to static symbols on input to ld, even nonexported symbols that don't affect the code or dynamic symbols, can affect the particular representation in the output of string tables, hash tables etc.) * sysdeps/generic/math-type-macros.h [!declare_mgen_alias_2] (declare_mgen_alias_2): Remove. * sysdeps/generic/math-type-macros-double.h [NO_LONG_DOUBLE && !declare_mgen_alias_2] (declare_mgen_alias_2): Likewise. * math/s_ldexp_template.c (M_SUF (__wrap_scalbn)): Define strong alias. (ldexp): Define with declare_mgen_alias. (scalbn): Likewise.
49 lines
1.6 KiB
C
49 lines
1.6 KiB
C
/* Helper macros for double variants of type generic functions of libm.
|
|
Copyright (C) 2016-2017 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/>. */
|
|
|
|
#ifndef _MATH_TYPE_MACROS_DOUBLE
|
|
#define _MATH_TYPE_MACROS_DOUBLE
|
|
|
|
#define M_LIT(c) c
|
|
#define M_MLIT(c) c
|
|
#define M_PFX DBL
|
|
#define M_SUF(c) c
|
|
#define FLOAT double
|
|
#define CFLOAT _Complex double
|
|
#define M_STRTO_NAN __strtod_nan
|
|
|
|
/* Machines without a distinct long double type
|
|
alias long double functions to their double
|
|
equivalent. */
|
|
#if defined NO_LONG_DOUBLE && !defined declare_mgen_alias
|
|
# define declare_mgen_alias(from, to) \
|
|
weak_alias (from, to) \
|
|
strong_alias (from, from ## l) \
|
|
weak_alias (from, to ## l)
|
|
#endif
|
|
|
|
/* Supply the generic macros. */
|
|
#include <math-type-macros.h>
|
|
|
|
/* Do not use the type-generic wrapper templates if compatibility with
|
|
SVID error handling is needed. */
|
|
#include <math-svid-compat.h>
|
|
#define __USE_WRAPPER_TEMPLATE !LIBM_SVID_COMPAT
|
|
|
|
#endif
|