mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
Avoid localplt issues from x86 fereaiseexcept inline.
Building for x86_64 with float128 support, I get a localplt test failure from lrintf128 calling feraiseexcept. The problem is that an inline optimized version of feraiseexcept calls __feraiseexcept_renamed in cases where it doesn't completely expand inline, and that in turn is redirected to feraiseexcept for a library call, so meaning the redirection of feraiseexcept to __GI_feraiseexcept inside libm is lost for that call. This patch fixes the problem by moving the redirect to an internal header in the _LIBC case, with the internal header using __GI_feraiseexcept where appropriate. Tested for x86_64 (in conjunction with float128 patches). * sysdeps/x86/fpu/bits/fenv.h [_LIBC] (__feraiseexcept_renamed): Do not declare. * sysdeps/x86/fpu/include/bits/fenv.h [_LIBC && __USE_EXTERN_INLINES] (__feraiseexcept_renamed): Declare here, redirected to __GI_feraiseexcept if [SHARED && IS_IN (libm)].
This commit is contained in:
parent
049816c3be
commit
16000c8d04
@ -1,3 +1,11 @@
|
||||
2017-06-23 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* sysdeps/x86/fpu/bits/fenv.h [_LIBC] (__feraiseexcept_renamed):
|
||||
Do not declare.
|
||||
* sysdeps/x86/fpu/include/bits/fenv.h [_LIBC &&
|
||||
__USE_EXTERN_INLINES] (__feraiseexcept_renamed): Declare here,
|
||||
redirected to __GI_feraiseexcept if [SHARED && IS_IN (libm)].
|
||||
|
||||
2017-06-23 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S (between_2_3):
|
||||
|
@ -120,7 +120,9 @@ femode_t;
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Optimized versions. */
|
||||
#ifndef _LIBC
|
||||
extern int __REDIRECT_NTH (__feraiseexcept_renamed, (int), feraiseexcept);
|
||||
#endif
|
||||
__extern_always_inline void
|
||||
__NTH (__feraiseexcept_invalid_divbyzero (int __excepts))
|
||||
{
|
||||
|
@ -17,6 +17,15 @@
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _BITS_FENV_H
|
||||
|
||||
#if defined _LIBC && defined __USE_EXTERN_INLINES
|
||||
# if defined SHARED && IS_IN (libm)
|
||||
extern int __REDIRECT_NTH (__feraiseexcept_renamed, (int), __GI_feraiseexcept);
|
||||
# else
|
||||
extern int __REDIRECT_NTH (__feraiseexcept_renamed, (int), feraiseexcept);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include_next <bits/fenv.h>
|
||||
|
||||
# ifndef _ISOMAC
|
||||
|
Loading…
Reference in New Issue
Block a user