summaryrefslogtreecommitdiffstats
path: root/cpukit/aclocal/gcc-sanity.m4
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/aclocal/gcc-sanity.m4')
-rw-r--r--cpukit/aclocal/gcc-sanity.m4114
1 files changed, 114 insertions, 0 deletions
diff --git a/cpukit/aclocal/gcc-sanity.m4 b/cpukit/aclocal/gcc-sanity.m4
new file mode 100644
index 0000000000..0177009e28
--- /dev/null
+++ b/cpukit/aclocal/gcc-sanity.m4
@@ -0,0 +1,114 @@
+# Some GCC sanity checks to check for known bugs in the rtems gcc toolchains
+
+# Internal macro
+# _RTEMS_GCC_WARNING(msg,cache-variable,include,main)
+AC_DEFUN([_RTEMS_GCC_WARNING],[
+ AC_CACHE_CHECK([$1],
+ [$2],[
+ AS_IF([test x"$GCC" = xyes],[
+ save_CFLAGS=$CFLAGS
+ CFLAGS="-Wall -Werror"])
+
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([$3],[$4])],
+ [$2=yes],
+ [$2=no])
+
+ AS_IF([test x"$GCC" = xyes],[
+ CFLAGS=$save_CFLAGS])
+ ])
+])
+
+AC_DEFUN([RTEMS_CHECK_GCC_PRIxPTR],[
+ _RTEMS_GCC_WARNING(
+ [if printf("%" PRIxPTR, uintptr_t) works],
+ [rtems_cv_PRIxPTR],[
+ #include <inttypes.h>
+ #include <stdio.h>
+ ],[
+ uintptr_t ptr = 42;
+ printf("%" PRIxPTR "\n", ptr);
+ ])
+])
+
+AC_DEFUN([RTEMS_CHECK_GCC_PRIuPTR],[
+ _RTEMS_GCC_WARNING(
+ [if printf("%" PRIuPTR, uintptr_t) works],
+ [rtems_cv_PRIuPTR],[
+ #include <inttypes.h>
+ #include <stdio.h>
+ ],[
+ uintptr_t ptr = 42;
+ printf("%" PRIuPTR "\n", ptr);
+ ])
+])
+
+AC_DEFUN([RTEMS_CHECK_GCC_PRIdPTR],[
+ _RTEMS_GCC_WARNING(
+ [if printf("%" PRIdPTR, intptr_t) works],
+ [rtems_cv_PRIdPTR],[
+ #include <inttypes.h>
+ #include <stdio.h>
+ ],[
+ intptr_t ptr = -1;
+ printf("%" PRIdPTR "\n", ptr);
+ ])
+])
+
+AC_DEFUN([RTEMS_CHECK_GCC_PRINTF_ZU_SIZE_T],[
+ _RTEMS_GCC_WARNING(
+ [if printf("%zu", size_t) works],
+ [rtems_cv_PRINTF_ZU_SIZE_T],[
+ #include <sys/types.h>
+ #include <stdio.h>
+ ],[
+ size_t sz = 1;
+ printf("%zu\n", sz);
+ ])
+])
+
+AC_DEFUN([RTEMS_CHECK_GCC_PRINTF_ZD_SSIZE_T],[
+ _RTEMS_GCC_WARNING(
+ [if printf("%zd", ssize_t) works],
+ [rtems_cv_PRINTF_ZD_SSIZE_T],[
+ #include <sys/types.h>
+ #include <stdio.h>
+ ],[
+ ssize_t sz = 1;
+ printf("%zd\n", sz);
+ ])
+])
+
+AC_DEFUN([RTEMS_CHECK_GCC_PRINTF_LD_OFF_T],[
+ _RTEMS_GCC_WARNING(
+ [if printf("%ld", off_t) works],
+ [rtems_cv_PRINTF_LD_OFF_T],[
+ #include <sys/types.h>
+ #include <stdio.h>
+ ],[
+ off_t off = 1;
+ printf("%ld\n", off);
+ ])
+])
+
+AC_DEFUN([RTEMS_CHECK_GCC_PRINTF_LLD_OFF_T],[
+ _RTEMS_GCC_WARNING(
+ [if printf("%lld", off_t) works],
+ [rtems_cv_PRINTF_LLD_OFF_T],[
+ #include <sys/types.h>
+ #include <stdio.h>
+ ],[
+ off_t off = 1;
+ printf("%lld\n", off);
+ ])
+])
+
+AC_DEFUN([RTEMS_CHECK_GCC_SANITY],[
+RTEMS_CHECK_GCC_PRIxPTR
+RTEMS_CHECK_GCC_PRIuPTR
+RTEMS_CHECK_GCC_PRIdPTR
+RTEMS_CHECK_GCC_PRINTF_ZU_SIZE_T
+RTEMS_CHECK_GCC_PRINTF_ZD_SSIZE_T
+RTEMS_CHECK_GCC_PRINTF_LD_OFF_T
+RTEMS_CHECK_GCC_PRINTF_LLD_OFF_T
+])