diff options
author | Steve Kargl <kargl@gcc.gnu.org> | 2022-04-25 09:23:56 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2022-04-25 09:25:33 +0200 |
commit | b6e22db8564827c82108e0b7fa1a84675379c12b (patch) | |
tree | 824fbab4d7dc1df7f6a6bd17c4e8dff74592467d | |
parent | 4f77738c3b44cb6b7bfe2a7ef823a5d9d75c0e79 (diff) | |
download | gcc-b6e22db8564827c82108e0b7fa1a84675379c12b.zip gcc-b6e22db8564827c82108e0b7fa1a84675379c12b.tar.gz gcc-b6e22db8564827c82108e0b7fa1a84675379c12b.tar.bz2 |
target/89125 - BSD and math functions
Back story: When GCC is configured and built on non-glibc platforms,
it seems very little to no effort is made to enumerate the available
C99 libm functions. It is all or nothing for C99 libm. The patch
introduces a new function, used on only FreeBSD, to inform gcc that
it has C99 libm functions (minus a few which clearly GCC does not check
nor test).
2022-04-15 Steven G. Kargl <kargl@gcc.gnu.org>
PR target/89125
* config/freebsd.h: Define TARGET_LIBC_HAS_FUNCTION to be
bsd_libc_has_function.
* targhooks.cc (bsd_libc_has_function): New function.
Expand the supported math functions to inclue C99 libm.
* targhooks.h (bsd_libc_has_function): New Prototype.
-rw-r--r-- | gcc/config/freebsd.h | 2 | ||||
-rw-r--r-- | gcc/targhooks.cc | 14 | ||||
-rw-r--r-- | gcc/targhooks.h | 1 |
3 files changed, 16 insertions, 1 deletions
diff --git a/gcc/config/freebsd.h b/gcc/config/freebsd.h index 28ebcad..d89ee7d 100644 --- a/gcc/config/freebsd.h +++ b/gcc/config/freebsd.h @@ -55,7 +55,7 @@ along with GCC; see the file COPYING3. If not see #endif #undef TARGET_LIBC_HAS_FUNCTION -#define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function +#define TARGET_LIBC_HAS_FUNCTION bsd_libc_has_function /* Use --as-needed -lgcc_s for eh support. */ #ifdef HAVE_LD_AS_NEEDED diff --git a/gcc/targhooks.cc b/gcc/targhooks.cc index e22bc66..399d6f8 100644 --- a/gcc/targhooks.cc +++ b/gcc/targhooks.cc @@ -1843,6 +1843,20 @@ no_c99_libc_has_function (enum function_class fn_class ATTRIBUTE_UNUSED, return false; } +/* Assume some c99 functions are present at the runtime including sincos. */ +bool +bsd_libc_has_function (enum function_class fn_class, + tree type ATTRIBUTE_UNUSED) +{ + if (fn_class == function_c94 + || fn_class == function_c99_misc + || fn_class == function_sincos) + return true; + + return false; +} + + tree default_builtin_tm_load_store (tree ARG_UNUSED (type)) { diff --git a/gcc/targhooks.h b/gcc/targhooks.h index ecfa112..ecce55e 100644 --- a/gcc/targhooks.h +++ b/gcc/targhooks.h @@ -212,6 +212,7 @@ extern bool default_libc_has_function (enum function_class, tree); extern bool default_libc_has_fast_function (int fcode); extern bool no_c99_libc_has_function (enum function_class, tree); extern bool gnu_libc_has_function (enum function_class, tree); +extern bool bsd_libc_has_function (enum function_class, tree); extern tree default_builtin_tm_load_store (tree); |