summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorEdward O'Callaghan <eocallaghan@auroraux.org>2009-08-08 02:31:50 +0000
committerEdward O'Callaghan <eocallaghan@auroraux.org>2009-08-08 02:31:50 +0000
commitbb119a4fae90e73d48c078024e101bebfdfae5d8 (patch)
treea7fc871d9595c3f2ea98f872bd373a8886b9f6b0 /test
parent37a6a455466e5b197311771a777ab241e471ed8a (diff)
downloadcompiler-rt-bb119a4fae90e73d48c078024e101bebfdfae5d8.tar.gz
compiler-rt-bb119a4fae90e73d48c078024e101bebfdfae5d8.tar.bz2
compiler-rt-bb119a4fae90e73d48c078024e101bebfdfae5d8.tar.xz
Fix signedness warning in mprotect call, Clean up and improve endianness.h header.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@78451 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/Unit/endianness.h79
1 files changed, 54 insertions, 25 deletions
diff --git a/test/Unit/endianness.h b/test/Unit/endianness.h
index 9e192c10..8069bacb 100644
--- a/test/Unit/endianness.h
+++ b/test/Unit/endianness.h
@@ -16,50 +16,79 @@
#ifndef ENDIANNESS_H
#define ENDIANNESS_H
-/* TODO: Improve this to minimal pre-processor hackish'ness. */
-/* config.h build via CMake. */
-/* #include <config.h> */
-/* Solaris header for endian and byte swap */
-/* #if defined HAVE_SYS_BYTEORDER_H */
+/*
+ * Known limitations:
+ * Middle endian systems are not handled currently.
+ */
-#if defined (__SVR4) && defined (__sun)
+#if defined(__SVR4) && defined(__sun)
#include <sys/byteorder.h>
+
#if _BYTE_ORDER == _BIG_ENDIAN
-#define __BIG_ENDIAN__ 1
-#define __LITTLE_ENDIAN__ 0
-#else /* _BYTE_ORDER == _LITTLE_ENDIAN */
-#define __BIG_ENDIAN__ 0
-#define __LITTLE_ENDIAN__ 1
+#define _YUGA_LITTLE_ENDIAN 0
+#define _YUGA_BIG_ENDIAN 1
+#elif _BYTE_ORDER == _LITTLE_ENDIAN
+#define _YUGA_LITTLE_ENDIAN 1
+#define _YUGA_BIG_ENDIAN 0
#endif /* _BYTE_ORDER */
+
#endif /* Solaris and AuroraUX. */
-#if defined (__FreeBSD__)
+/* .. */
+
+#if defined(__FreeBSD__) && defined(__NetBSD__) && defined(__OpenBSD__) && defined(__DragonflyBSD__)
#include <sys/endian.h>
+
#if _BYTE_ORDER == _BIG_ENDIAN
-#define __BIG_ENDIAN__ 1
-#define __LITTLE_ENDIAN__ 0
-#else /* _BYTE_ORDER == _LITTLE_ENDIAN */
-#define __BIG_ENDIAN__ 0
-#define __LITTLE_ENDIAN__ 1
+#define _YUGA_LITTLE_ENDIAN 0
+#define _YUGA_BIG_ENDIAN 1
+#elif _BYTE_ORDER == _LITTLE_ENDIAN
+#define _YUGA_LITTLE_ENDIAN 1
+#define _YUGA_BIG_ENDIAN 0
#endif /* _BYTE_ORDER */
-#endif /* FreeBSD */
+
+#endif /* *BSD */
+
+/* .. */
+
+/* Mac OSX has __BIG_ENDIAN__ or __LITTLE_ENDIAN__ automatically set by the compiler (at least with GCC) */
+#if defined(__APPLE__) && defined(__MACH__)
+
+#ifdef __BIG_ENDIAN__
+#if __BIG_ENDIAN__
+#define _YUGA_LITTLE_ENDIAN 0
+#define _YUGA_BIG_ENDIAN 1
+#endif
+#endif /* __BIG_ENDIAN__ */
#ifdef __LITTLE_ENDIAN__
#if __LITTLE_ENDIAN__
#define _YUGA_LITTLE_ENDIAN 1
#define _YUGA_BIG_ENDIAN 0
#endif
-#endif
+#endif /* __LITTLE_ENDIAN__ */
-#ifdef __BIG_ENDIAN__
-#if __BIG_ENDIAN__
+#endif /* Mac OSX */
+
+/* .. */
+
+#if defined(__Linux__)
+#include <endian.h>
+
+#if __BYTE_ORDER == __BIG_ENDIAN
#define _YUGA_LITTLE_ENDIAN 0
#define _YUGA_BIG_ENDIAN 1
-#endif
-#endif
+#elif __BYTE_ORDER == __LITTLE_ENDIAN
+#define _YUGA_LITTLE_ENDIAN 1
+#define _YUGA_BIG_ENDIAN 0
+#endif /* __BYTE_ORDER */
+
+#endif /* GNU/Linux */
+
+/* . */
#if !defined(_YUGA_LITTLE_ENDIAN) || !defined(_YUGA_BIG_ENDIAN)
-#error unable to determine endian
-#endif
+#error Unable to determine endian
+#endif /* Check we found an endianness correctly. */
#endif /* ENDIANNESS_H */