aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/linux.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/config/linux.h')
-rw-r--r--gcc/config/linux.h28
1 files changed, 26 insertions, 2 deletions
diff --git a/gcc/config/linux.h b/gcc/config/linux.h
index 507471b..d7ca300 100644
--- a/gcc/config/linux.h
+++ b/gcc/config/linux.h
@@ -99,7 +99,31 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#undef TARGET_HAS_BIONIC
#define TARGET_HAS_BIONIC (OPTION_BIONIC)
+#if (DEFAULT_LIBC == LIBC_UCLIBC) && defined (SINGLE_LIBC) /* uClinux */
+/* This is a *uclinux* target. We don't define below macros to normal linux
+ versions, because doing so would require *uclinux* targets to include
+ linux.c, linux-protos.h, linux.opt, etc. We could, alternatively, add
+ these files to *uclinux* targets, but that would only pollute option list
+ (add -mglibc, etc.) without adding any useful support. */
+
+/* Define TARGET_LIBC_HAS_FUNCTION for *uclinux* targets to
+ no_c99_libc_has_function, because uclibc does not, normally, have
+ c99 runtime. If, in special cases, uclibc does have c99 runtime,
+ this should be defined to a new hook. Also please note that for targets
+ like *-linux-uclibc that similar check will also need to be added to
+ linux_libc_has_function. */
+# undef TARGET_LIBC_HAS_FUNCTION
+# define TARGET_LIBC_HAS_FUNCTION no_c99_libc_has_function
+
+#else /* !uClinux, i.e., normal Linux */
+
+/* IFUNCs are supportted by glibc, but not by uClibc or Bionic. */
+# undef TARGET_HAS_IFUNC_P
+# define TARGET_HAS_IFUNC_P linux_has_ifunc_p
+
/* Determine what functions are present at the runtime;
this includes full c99 runtime and sincos. */
-#undef TARGET_LIBC_HAS_FUNCTION
-#define TARGET_LIBC_HAS_FUNCTION linux_libc_has_function
+# undef TARGET_LIBC_HAS_FUNCTION
+# define TARGET_LIBC_HAS_FUNCTION linux_libc_has_function
+
+#endif