Fix signedness warning in mprotect call, Clean up and improve endianness.h header.

llvm-svn: 78451
This commit is contained in:
Edward O'Callaghan 2009-08-08 02:31:50 +00:00
parent 2c742024ff
commit 032ab6f978
4 changed files with 121 additions and 62 deletions

View File

@ -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 )

View File

@ -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);
}

View File

@ -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
#endif /* _BYTE_ORDER */
#endif /* Solaris and AuroraUX. */
#if defined (__FreeBSD__)
#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
#endif /* _BYTE_ORDER */
#endif /* FreeBSD */
#ifdef __LITTLE_ENDIAN__
#if __LITTLE_ENDIAN__
#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
#endif
#endif /* _BYTE_ORDER */
#endif /* Solaris and AuroraUX. */
/* .. */
#if defined(__FreeBSD__) && defined(__NetBSD__) && defined(__OpenBSD__) && defined(__DragonflyBSD__)
#include <sys/endian.h>
#if _BYTE_ORDER == _BIG_ENDIAN
#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 /* *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 /* __LITTLE_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
#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 */

View File

@ -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
#endif /* _BYTE_ORDER */
#endif /* Solaris and AuroraUX. */
#if defined (__FreeBSD__)
#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
#endif /* _BYTE_ORDER */
#endif /* FreeBSD */
#ifdef __LITTLE_ENDIAN__
#if __LITTLE_ENDIAN__
#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
#endif
#endif /* _BYTE_ORDER */
#endif /* Solaris and AuroraUX. */
/* .. */
#if defined(__FreeBSD__) && defined(__NetBSD__) && defined(__OpenBSD__) && defined(__DragonflyBSD__)
#include <sys/endian.h>
#if _BYTE_ORDER == _BIG_ENDIAN
#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 /* *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 /* __LITTLE_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
#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 */