summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmake/Modules/DefineCompilerFlags.cmake2
-rw-r--r--lib/enable_execute_stack.c3
-rw-r--r--lib/endianness.h79
-rw-r--r--test/Unit/endianness.h79
4 files changed, 111 insertions, 52 deletions
diff --git a/cmake/Modules/DefineCompilerFlags.cmake b/cmake/Modules/DefineCompilerFlags.cmake
index ddfc2e36..ff3fbd0e 100644
--- a/cmake/Modules/DefineCompilerFlags.cmake
+++ b/cmake/Modules/DefineCompilerFlags.cmake
@@ -1,4 +1,4 @@
# Define compiler flags
#ADD_DEFINITIONS( -Wall -W -Werror -pedantic )
-ADD_DEFINITIONS( -Wall -W -pedantic )
+ADD_DEFINITIONS( -std=gnu99 -Wall -Wextra -W -pedantic -Wno-unused-parameter )
diff --git a/lib/enable_execute_stack.c b/lib/enable_execute_stack.c
index c2ebc30f..aed1b88c 100644
--- a/lib/enable_execute_stack.c
+++ b/lib/enable_execute_stack.c
@@ -36,7 +36,8 @@ void __enable_execute_stack(void* addr)
uintptr_t p = (uintptr_t)addr;
unsigned char* startPage = (unsigned char*)(p & pageAlignMask);
unsigned char* endPage = (unsigned char*)((p+48+pageSize) & pageAlignMask);
- mprotect(startPage, endPage-startPage, PROT_READ | PROT_WRITE | PROT_EXEC);
+ size_t length = endPage - startPage;
+ (void) mprotect((void *)startPage, length, PROT_READ | PROT_WRITE | PROT_EXEC);
}
diff --git a/lib/endianness.h b/lib/endianness.h
index 9e192c10..8069bacb 100644
--- a/lib/endianness.h
+++ b/lib/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 */
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 */