git: faca80fb6688 - stable/15 - msun/arm: convert fenv functions to proper linkage

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Mon, 06 Apr 2026 06:54:51 UTC
The branch stable/15 has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=faca80fb6688f0203544f6bf854092f0383cf436

commit faca80fb6688f0203544f6bf854092f0383cf436
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2026-03-29 03:10:18 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2026-04-05 07:47:10 +0000

    msun/arm: convert fenv functions to proper linkage
    
    PR:     277958
    
    (cherry picked from commit 70674434e2424d61262322702d0415e54d8cc1a2)
---
 lib/msun/arm/fenv.c | 133 +++++++++++++++++++++++++++++++++++++++++-----------
 lib/msun/arm/fenv.h |  58 ++++++++++++++++++-----
 2 files changed, 150 insertions(+), 41 deletions(-)

diff --git a/lib/msun/arm/fenv.c b/lib/msun/arm/fenv.c
index c8edf3fef037..620a05d51b90 100644
--- a/lib/msun/arm/fenv.c
+++ b/lib/msun/arm/fenv.c
@@ -76,19 +76,83 @@ int
 	return (__feclearexcept_int(excepts));
 }
 
-extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts);
-extern inline int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
-extern inline int feraiseexcept(int __excepts);
-extern inline int fetestexcept(int __excepts);
-extern inline int fegetround(void);
-extern inline int fesetround(int __round);
-extern inline int fegetenv(fenv_t *__envp);
-extern inline int feholdexcept(fenv_t *__envp);
-extern inline int fesetenv(const fenv_t *__envp);
-extern inline int feupdateenv(const fenv_t *__envp);
-extern inline int feenableexcept(int __mask);
-extern inline int fedisableexcept(int __mask);
-extern inline int fegetexcept(void);
+int
+(fegetexceptflag)(fexcept_t *flagp, int excepts)
+{
+	return (__fegetexceptflag_int(flagp, excepts));
+}
+
+int
+(fesetexceptflag)(const fexcept_t *flagp, int excepts)
+{
+	return (__fesetexceptflag_int(flagp, excepts));
+}
+
+int
+(feraiseexcept)(int excepts)
+{
+	return (__feraiseexcept_int(excepts));
+}
+
+int
+(fetestexcept)(int excepts)
+{
+	return (__fetestexcept_int(excepts));
+}
+
+int
+(fegetround)(void)
+{
+	return (__fegetround_int());
+}
+
+int
+(fesetround)(int round)
+{
+	return (__fesetround_int(round));
+}
+
+int
+(fegetenv)(fenv_t *envp)
+{
+	return (__fegetenv_int(envp));
+}
+
+int
+(feholdexcept)(fenv_t *envp)
+{
+	return (__feholdexcept_int(envp));
+}
+
+int
+(fesetenv)(const fenv_t *envp)
+{
+	return (__fesetenv_int(envp));
+}
+
+int
+(feupdateenv)(const fenv_t *envp)
+{
+	return (__feupdateenv_int(envp));
+}
+
+int
+(feenableexcept)(int mask)
+{
+	return (__feenableexcept_int(mask));
+}
+
+int
+(fedisableexcept)(int mask)
+{
+	return (__fedisableexcept_int(mask));
+}
+
+int
+(fegetexcept)(void)
+{
+	return (__fegetexcept_int());
+}
 
 #else /* !FENV_MANGLE && SOFTFP_ABI */
 /* Set by libc when the VFP unit is enabled */
@@ -158,7 +222,8 @@ __softfp_round_from_vfp(int round)
 	}
 }
 
-int feclearexcept(int __excepts)
+int
+(feclearexcept)(int __excepts)
 {
 
 	if (_libc_arm_fpu_present)
@@ -168,7 +233,8 @@ int feclearexcept(int __excepts)
 	return (0);
 }
 
-int fegetexceptflag(fexcept_t *__flagp, int __excepts)
+int
+(fegetexceptflag)(fexcept_t *__flagp, int __excepts)
 {
 	fexcept_t __vfp_flagp;
 
@@ -182,7 +248,8 @@ int fegetexceptflag(fexcept_t *__flagp, int __excepts)
 	return (0);
 }
 
-int fesetexceptflag(const fexcept_t *__flagp, int __excepts)
+int
+(fesetexceptflag)(const fexcept_t *__flagp, int __excepts)
 {
 
 	if (_libc_arm_fpu_present)
@@ -192,7 +259,8 @@ int fesetexceptflag(const fexcept_t *__flagp, int __excepts)
 	return (0);
 }
 
-int feraiseexcept(int __excepts)
+int
+(feraiseexcept)(int __excepts)
 {
 
 	if (_libc_arm_fpu_present)
@@ -202,7 +270,8 @@ int feraiseexcept(int __excepts)
 	return (0);
 }
 
-int fetestexcept(int __excepts)
+int
+(fetestexcept)(int __excepts)
 {
 	int __got_excepts;
 
@@ -214,7 +283,8 @@ int fetestexcept(int __excepts)
 	return (__got_excepts);
 }
 
-int fegetround(void)
+int
+(fegetround)(void)
 {
 
 	if (_libc_arm_fpu_present)
@@ -222,7 +292,8 @@ int fegetround(void)
 	return __softfp_fegetround();
 }
 
-int fesetround(int __round)
+int
+(fesetround)(int __round)
 {
 
 	if (_libc_arm_fpu_present)
@@ -232,7 +303,8 @@ int fesetround(int __round)
 	return (0);
 }
 
-int fegetenv(fenv_t *__envp)
+int
+(fegetenv)(fenv_t *__envp)
 {
 	fenv_t __vfp_envp;
 
@@ -245,7 +317,8 @@ int fegetenv(fenv_t *__envp)
 	return (0);
 }
 
-int feholdexcept(fenv_t *__envp)
+int
+(feholdexcept)(fenv_t *__envp)
 {
 	fenv_t __vfp_envp;
 
@@ -258,7 +331,8 @@ int feholdexcept(fenv_t *__envp)
 	return (0);
 }
 
-int fesetenv(const fenv_t *__envp)
+int
+(fesetenv)(const fenv_t *__envp)
 {
 
 	if (_libc_arm_fpu_present)
@@ -268,7 +342,8 @@ int fesetenv(const fenv_t *__envp)
 	return (0);
 }
 
-int feupdateenv(const fenv_t *__envp)
+int
+(feupdateenv)(const fenv_t *__envp)
 {
 
 	if (_libc_arm_fpu_present)
@@ -278,7 +353,8 @@ int feupdateenv(const fenv_t *__envp)
 	return (0);
 }
 
-int feenableexcept(int __mask)
+int
+(feenableexcept)(int __mask)
 {
 	int __unmasked;
 
@@ -290,7 +366,8 @@ int feenableexcept(int __mask)
 	return (__unmasked);
 }
 
-int fedisableexcept(int __mask)
+int
+(fedisableexcept)(int __mask)
 {
 	int __unmasked;
 
@@ -302,7 +379,8 @@ int fedisableexcept(int __mask)
 	return (__unmasked);
 }
 
-int fegetexcept(void)
+int
+(fegetexcept)(void)
 {
 	int __unmasked;
 
@@ -315,4 +393,3 @@ int fegetexcept(void)
 }
 
 #endif
-
diff --git a/lib/msun/arm/fenv.h b/lib/msun/arm/fenv.h
index 14638dd33aa7..78ca9ef0f589 100644
--- a/lib/msun/arm/fenv.h
+++ b/lib/msun/arm/fenv.h
@@ -112,7 +112,39 @@ int fegetexcept(void);
 #define _FPU_MASK_SHIFT	8
 
 int feclearexcept(int);
+int fegetexceptflag(fexcept_t *, int);
+int fesetexceptflag(const fexcept_t *, int);
+int feraiseexcept(int);
+int fetestexcept(int);
+int fegetround(void);
+int fesetround(int);
+int fegetenv(fenv_t *);
+int feholdexcept(fenv_t *);
+int fesetenv(const fenv_t *);
+int feupdateenv(const fenv_t *);
+int fegetexcept(void);
+#if __BSD_VISIBLE
+int feenableexcept(int);
+int fedisableexcept(int);
+int fegetexcept(void);
+#endif
+
 #define	feclearexcept(a)	__feclearexcept_int(a)
+#define	fegetexceptflag(e, a)	__fegetexceptflag_int(e, a)
+#define	fesetexceptflag(e, a)	__fesetexceptflag_int(e, a)
+#define	feraiseexcept(a)	__feraiseexcept_int(a)
+#define	fetestexcept(a)		__fetestexcept_int(a)
+#define	fegetround()		__fegetround_int()
+#define	fesetround(a)		__fesetround_int(a)
+#define	fegetenv(e)		__fegetenv_int(e)
+#define	feholdexcept(e)		__feholdexcept_int(e)
+#define	fesetenv(e)		__fesetenv_int(e)
+#define	feupdateenv(e)		__feupdateenv_int(e)
+#if __BSD_VISIBLE
+#define	feenableexcept(a)	__feenableexcept_int(a)
+#define	fedisableexcept(a)	__fedisableexcept_int(a)
+#define	fegetexcept()		__fegetexcept_int()
+#endif
 
 __fenv_static inline int
 __feclearexcept_int(int __excepts)
@@ -126,7 +158,7 @@ __feclearexcept_int(int __excepts)
 }
 
 __fenv_static inline int
-fegetexceptflag(fexcept_t *__flagp, int __excepts)
+__fegetexceptflag_int(fexcept_t *__flagp, int __excepts)
 {
 	fexcept_t __fpsr;
 
@@ -136,7 +168,7 @@ fegetexceptflag(fexcept_t *__flagp, int __excepts)
 }
 
 __fenv_static inline int
-fesetexceptflag(const fexcept_t *__flagp, int __excepts)
+__fesetexceptflag_int(const fexcept_t *__flagp, int __excepts)
 {
 	fexcept_t __fpsr;
 
@@ -148,7 +180,7 @@ fesetexceptflag(const fexcept_t *__flagp, int __excepts)
 }
 
 __fenv_static inline int
-feraiseexcept(int __excepts)
+__feraiseexcept_int(int __excepts)
 {
 	fexcept_t __ex = __excepts;
 
@@ -157,7 +189,7 @@ feraiseexcept(int __excepts)
 }
 
 __fenv_static inline int
-fetestexcept(int __excepts)
+__fetestexcept_int(int __excepts)
 {
 	fexcept_t __fpsr;
 
@@ -166,7 +198,7 @@ fetestexcept(int __excepts)
 }
 
 __fenv_static inline int
-fegetround(void)
+__fegetround_int(void)
 {
 	fenv_t __fpsr;
 
@@ -175,7 +207,7 @@ fegetround(void)
 }
 
 __fenv_static inline int
-fesetround(int __round)
+__fesetround_int(int __round)
 {
 	fenv_t __fpsr;
 
@@ -187,7 +219,7 @@ fesetround(int __round)
 }
 
 __fenv_static inline int
-fegetenv(fenv_t *__envp)
+__fegetenv_int(fenv_t *__envp)
 {
 
 	vmrs_fpscr(*__envp);
@@ -195,7 +227,7 @@ fegetenv(fenv_t *__envp)
 }
 
 __fenv_static inline int
-feholdexcept(fenv_t *__envp)
+__feholdexcept_int(fenv_t *__envp)
 {
 	fenv_t __env;
 
@@ -207,7 +239,7 @@ feholdexcept(fenv_t *__envp)
 }
 
 __fenv_static inline int
-fesetenv(const fenv_t *__envp)
+__fesetenv_int(const fenv_t *__envp)
 {
 
 	vmsr_fpscr(*__envp);
@@ -215,7 +247,7 @@ fesetenv(const fenv_t *__envp)
 }
 
 __fenv_static inline int
-feupdateenv(const fenv_t *__envp)
+__feupdateenv_int(const fenv_t *__envp)
 {
 	fexcept_t __fpsr;
 
@@ -230,7 +262,7 @@ feupdateenv(const fenv_t *__envp)
 /* We currently provide no external definitions of the functions below. */
 
 __fenv_static inline int
-feenableexcept(int __mask)
+__feenableexcept_int(int __mask)
 {
 	fenv_t __old_fpsr, __new_fpsr;
 
@@ -242,7 +274,7 @@ feenableexcept(int __mask)
 }
 
 __fenv_static inline int
-fedisableexcept(int __mask)
+__fedisableexcept_int(int __mask)
 {
 	fenv_t __old_fpsr, __new_fpsr;
 
@@ -254,7 +286,7 @@ fedisableexcept(int __mask)
 }
 
 __fenv_static inline int
-fegetexcept(void)
+__fegetexcept_int(void)
 {
 	fenv_t __fpsr;