[12/15] math: Fix log10 template for inputs less than 0

Message ID 20240327164527.3717523-13-adhemerval.zanella@linaro.org
State Superseded
Headers
Series Fix some libm static issues |

Checks

Context Check Description
redhat-pt-bot/TryBot-apply_patch success Patch applied to master at the time it was sent
linaro-tcwg-bot/tcwg_glibc_build--master-arm success Testing passed
linaro-tcwg-bot/tcwg_glibc_check--master-arm success Testing passed
linaro-tcwg-bot/tcwg_glibc_build--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_glibc_check--master-aarch64 success Testing passed

Commit Message

Adhemerval Zanella Netto March 27, 2024, 4:45 p.m. UTC
  The template is used by some ABIs for the static build, and it
fails to correct set the floating exceptions if the argument is
less than 0.

Checked on x86_64-linux-gnu.
---
 math/Makefile           |  1 +
 math/w_log10_template.c | 16 ++++++++++++----
 2 files changed, 13 insertions(+), 4 deletions(-)
  

Patch

diff --git a/math/Makefile b/math/Makefile
index 2b2683a9fa..aa57171f77 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -370,6 +370,7 @@  $(libm-test-c-narrow-obj): $(objpfx)libm-test%.c: libm-test%.inc \
 libm-test-funcs-auto-static = \
   acos \
   exp10 \
+  log10 \
   # libm-test-funcs-auto-static
 libm-test-funcs-noauto-static = \
   copysign \
diff --git a/math/w_log10_template.c b/math/w_log10_template.c
index aca38d4e1e..cc7b503f01 100644
--- a/math/w_log10_template.c
+++ b/math/w_log10_template.c
@@ -32,11 +32,19 @@  M_DECL_FUNC (__log10) (FLOAT x)
   if (__glibc_unlikely (islessequal (x, M_LIT (0.0))))
     {
       if (x == 0)
-	/* Pole error: log10(0).  */
-	__set_errno (ERANGE);
+	{
+	  /* Pole error: log10(0).  */
+	  __feraiseexcept (FE_DIVBYZERO);
+	  __set_errno (ERANGE);
+	  return -INFINITY;
+	}
       else
-	/* Domain error: log10(<0).  */
-	__set_errno (EDOM);
+	{
+	  /* Domain error: log10(<0).  */
+	  __feraiseexcept (FE_INVALID);
+	  __set_errno (EDOM);
+	  return NAN;
+	}
     }
   return M_SUF (__ieee754_log10) (x);
 }