Index: lib/msun/Makefile =================================================================== --- lib/msun/Makefile +++ lib/msun/Makefile @@ -34,6 +34,10 @@ CFLAGS+= -I${.CURDIR}/${ARCH_SUBDIR} +# Avoid builtins, to force the compiler to emit calls to the libm +# functions, and not calculate any results in advance. +.include "math-builtins.mk" + .PATH: ${.CURDIR}/bsdsrc .PATH: ${.CURDIR}/src .PATH: ${.CURDIR}/man Index: lib/msun/math-builtins.mk =================================================================== --- /dev/null +++ lib/msun/math-builtins.mk @@ -0,0 +1,273 @@ +# $FreeBSD$ + +# Disable compiler builtins which are math-related, to force the compiler to +# emit calls to the libm functions, and not calculate any results in advance, +# even optimize away such calls. + +MATH_BUILTINS+= acos +MATH_BUILTINS+= acosf +MATH_BUILTINS+= acosh +MATH_BUILTINS+= acoshf +MATH_BUILTINS+= acoshl +MATH_BUILTINS+= acosl +MATH_BUILTINS+= asin +MATH_BUILTINS+= asinf +MATH_BUILTINS+= asinh +MATH_BUILTINS+= asinhf +MATH_BUILTINS+= asinhl +MATH_BUILTINS+= asinl +MATH_BUILTINS+= atan +MATH_BUILTINS+= atan2 +MATH_BUILTINS+= atan2f +MATH_BUILTINS+= atan2l +MATH_BUILTINS+= atanf +MATH_BUILTINS+= atanh +MATH_BUILTINS+= atanhf +MATH_BUILTINS+= atanhl +MATH_BUILTINS+= atanl +MATH_BUILTINS+= cabs +MATH_BUILTINS+= cabsf +MATH_BUILTINS+= cabsl +MATH_BUILTINS+= cacos +MATH_BUILTINS+= cacosf +MATH_BUILTINS+= cacosh +MATH_BUILTINS+= cacoshf +MATH_BUILTINS+= cacoshl +MATH_BUILTINS+= cacosl +MATH_BUILTINS+= carg +MATH_BUILTINS+= cargf +MATH_BUILTINS+= cargl +MATH_BUILTINS+= casin +MATH_BUILTINS+= casinf +MATH_BUILTINS+= casinh +MATH_BUILTINS+= casinhf +MATH_BUILTINS+= casinhl +MATH_BUILTINS+= casinl +MATH_BUILTINS+= catan +MATH_BUILTINS+= catanf +MATH_BUILTINS+= catanh +MATH_BUILTINS+= catanhf +MATH_BUILTINS+= catanhl +MATH_BUILTINS+= catanl +MATH_BUILTINS+= cbrt +MATH_BUILTINS+= cbrtf +MATH_BUILTINS+= cbrtl +MATH_BUILTINS+= ccos +MATH_BUILTINS+= ccosf +MATH_BUILTINS+= ccosh +MATH_BUILTINS+= ccoshf +MATH_BUILTINS+= ceil +MATH_BUILTINS+= ceilf +MATH_BUILTINS+= ceill +MATH_BUILTINS+= cexp +MATH_BUILTINS+= cexpf +MATH_BUILTINS+= cimag +MATH_BUILTINS+= cimagf +MATH_BUILTINS+= cimagl +MATH_BUILTINS+= clog +MATH_BUILTINS+= clogf +MATH_BUILTINS+= clogl +MATH_BUILTINS+= conj +MATH_BUILTINS+= conjf +MATH_BUILTINS+= conjl +MATH_BUILTINS+= copysign +MATH_BUILTINS+= copysignf +MATH_BUILTINS+= copysignl +MATH_BUILTINS+= cos +MATH_BUILTINS+= cosf +MATH_BUILTINS+= cosh +MATH_BUILTINS+= coshf +MATH_BUILTINS+= coshl +MATH_BUILTINS+= cosl +MATH_BUILTINS+= cpow +MATH_BUILTINS+= cpowf +MATH_BUILTINS+= cpowl +MATH_BUILTINS+= cproj +MATH_BUILTINS+= cprojf +MATH_BUILTINS+= cprojl +MATH_BUILTINS+= creal +MATH_BUILTINS+= crealf +MATH_BUILTINS+= creall +MATH_BUILTINS+= csin +MATH_BUILTINS+= csinf +MATH_BUILTINS+= csinh +MATH_BUILTINS+= csinhf +MATH_BUILTINS+= csqrt +MATH_BUILTINS+= csqrtf +MATH_BUILTINS+= csqrtl +MATH_BUILTINS+= ctan +MATH_BUILTINS+= ctanf +MATH_BUILTINS+= ctanh +MATH_BUILTINS+= ctanhf +MATH_BUILTINS+= drem +MATH_BUILTINS+= dremf +MATH_BUILTINS+= erf +MATH_BUILTINS+= erfc +MATH_BUILTINS+= erfcf +MATH_BUILTINS+= erfcl +MATH_BUILTINS+= erff +MATH_BUILTINS+= erfl +MATH_BUILTINS+= exp +MATH_BUILTINS+= exp2 +MATH_BUILTINS+= exp2f +MATH_BUILTINS+= exp2l +MATH_BUILTINS+= expf +MATH_BUILTINS+= expl +MATH_BUILTINS+= expm1 +MATH_BUILTINS+= expm1f +MATH_BUILTINS+= expm1l +MATH_BUILTINS+= fabs +MATH_BUILTINS+= fabsf +MATH_BUILTINS+= fabsl +MATH_BUILTINS+= fdim +MATH_BUILTINS+= fdimf +MATH_BUILTINS+= fdiml +MATH_BUILTINS+= finite +MATH_BUILTINS+= finitef +MATH_BUILTINS+= floor +MATH_BUILTINS+= floorf +MATH_BUILTINS+= floorl +MATH_BUILTINS+= fma +MATH_BUILTINS+= fmaf +MATH_BUILTINS+= fmal +MATH_BUILTINS+= fmax +MATH_BUILTINS+= fmaxf +MATH_BUILTINS+= fmaxl +MATH_BUILTINS+= fmin +MATH_BUILTINS+= fminf +MATH_BUILTINS+= fminl +MATH_BUILTINS+= fmod +MATH_BUILTINS+= fmodf +MATH_BUILTINS+= fmodl +MATH_BUILTINS+= frexp +MATH_BUILTINS+= frexpf +MATH_BUILTINS+= frexpl +MATH_BUILTINS+= gamma +MATH_BUILTINS+= gamma_r +MATH_BUILTINS+= gammaf +MATH_BUILTINS+= gammaf_r +MATH_BUILTINS+= hypot +MATH_BUILTINS+= hypotf +MATH_BUILTINS+= hypotl +MATH_BUILTINS+= ilogb +MATH_BUILTINS+= ilogbf +MATH_BUILTINS+= ilogbl +MATH_BUILTINS+= isinf +MATH_BUILTINS+= isnan +MATH_BUILTINS+= isnanf +MATH_BUILTINS+= j0 +MATH_BUILTINS+= j0f +MATH_BUILTINS+= j1 +MATH_BUILTINS+= j1f +MATH_BUILTINS+= jn +MATH_BUILTINS+= jnf +MATH_BUILTINS+= ldexp +MATH_BUILTINS+= ldexpf +MATH_BUILTINS+= ldexpl +MATH_BUILTINS+= lgamma +MATH_BUILTINS+= lgamma_r +MATH_BUILTINS+= lgammaf +MATH_BUILTINS+= lgammaf_r +MATH_BUILTINS+= lgammal +MATH_BUILTINS+= lgammal_r +MATH_BUILTINS+= llrint +MATH_BUILTINS+= llrintf +MATH_BUILTINS+= llrintl +MATH_BUILTINS+= llround +MATH_BUILTINS+= llroundf +MATH_BUILTINS+= llroundl +MATH_BUILTINS+= log +MATH_BUILTINS+= log10 +MATH_BUILTINS+= log10f +MATH_BUILTINS+= log10l +MATH_BUILTINS+= log1p +MATH_BUILTINS+= log1pf +MATH_BUILTINS+= log1pl +MATH_BUILTINS+= log2 +MATH_BUILTINS+= log2f +MATH_BUILTINS+= log2l +MATH_BUILTINS+= logb +MATH_BUILTINS+= logbf +MATH_BUILTINS+= logbl +MATH_BUILTINS+= logf +MATH_BUILTINS+= logl +MATH_BUILTINS+= lrint +MATH_BUILTINS+= lrintf +MATH_BUILTINS+= lrintl +MATH_BUILTINS+= lround +MATH_BUILTINS+= lroundf +MATH_BUILTINS+= lroundl +MATH_BUILTINS+= modf +MATH_BUILTINS+= modff +MATH_BUILTINS+= modfl +MATH_BUILTINS+= nan +MATH_BUILTINS+= nanf +MATH_BUILTINS+= nanl +MATH_BUILTINS+= nearbyint +MATH_BUILTINS+= nearbyintf +MATH_BUILTINS+= nearbyintl +MATH_BUILTINS+= nextafter +MATH_BUILTINS+= nextafterf +MATH_BUILTINS+= nextafterl +MATH_BUILTINS+= nexttoward +MATH_BUILTINS+= nexttowardf +MATH_BUILTINS+= nexttowardl +MATH_BUILTINS+= pow +MATH_BUILTINS+= powf +MATH_BUILTINS+= powl +MATH_BUILTINS+= remainder +MATH_BUILTINS+= remainderf +MATH_BUILTINS+= remainderl +MATH_BUILTINS+= remquo +MATH_BUILTINS+= remquof +MATH_BUILTINS+= remquol +MATH_BUILTINS+= rint +MATH_BUILTINS+= rintf +MATH_BUILTINS+= rintl +MATH_BUILTINS+= round +MATH_BUILTINS+= roundf +MATH_BUILTINS+= roundl +MATH_BUILTINS+= scalb +MATH_BUILTINS+= scalbf +MATH_BUILTINS+= scalbln +MATH_BUILTINS+= scalblnf +MATH_BUILTINS+= scalblnl +MATH_BUILTINS+= scalbn +MATH_BUILTINS+= scalbnf +MATH_BUILTINS+= scalbnl +MATH_BUILTINS+= significand +MATH_BUILTINS+= significandf +MATH_BUILTINS+= sin +MATH_BUILTINS+= sincos +MATH_BUILTINS+= sincosf +MATH_BUILTINS+= sincosl +MATH_BUILTINS+= sinf +MATH_BUILTINS+= sinh +MATH_BUILTINS+= sinhf +MATH_BUILTINS+= sinhl +MATH_BUILTINS+= sinl +MATH_BUILTINS+= sqrt +MATH_BUILTINS+= sqrtf +MATH_BUILTINS+= sqrtl +MATH_BUILTINS+= tan +MATH_BUILTINS+= tanf +MATH_BUILTINS+= tanh +MATH_BUILTINS+= tanhf +MATH_BUILTINS+= tanhl +MATH_BUILTINS+= tanl +MATH_BUILTINS+= tgamma +MATH_BUILTINS+= tgammaf +MATH_BUILTINS+= tgammal +MATH_BUILTINS+= trunc +MATH_BUILTINS+= truncf +MATH_BUILTINS+= truncl +MATH_BUILTINS+= y0 +MATH_BUILTINS+= y0f +MATH_BUILTINS+= y1 +MATH_BUILTINS+= y1f +MATH_BUILTINS+= yn +MATH_BUILTINS+= ynf + +.for func in ${MATH_BUILTINS} +CFLAGS+= -fno-builtin-${func} +.endfor Index: lib/msun/tests/Makefile =================================================================== --- lib/msun/tests/Makefile +++ lib/msun/tests/Makefile @@ -19,6 +19,10 @@ CFLAGS+= -D__HAVE_LONG_DOUBLE .endif +# Avoid builtins, to force the compiler to emit calls to the libm +# functions, and not calculate any results in advance. +.include "../math-builtins.mk" + NETBSD_ATF_TESTS_C= acos_test NETBSD_ATF_TESTS_C+= asin_test NETBSD_ATF_TESTS_C+= atan_test