X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=rts%2FRtsUtils.c;h=bf02c328fb45e0c4308f12bbaa03127c738fce8b;hp=444c839e0df1c301d0616ab4cb339e12b18d44c4;hb=9da4639011348fb6c318e3cba4b08622f811d9c4;hpb=1eb850d5c4e7b5a838119fe5cb561fbbaba01bf2 diff --git a/rts/RtsUtils.c b/rts/RtsUtils.c index 444c839..bf02c32 100644 --- a/rts/RtsUtils.c +++ b/rts/RtsUtils.c @@ -6,8 +6,7 @@ * * ---------------------------------------------------------------------------*/ -/* gettimeofday isn't POSIX */ -/* #include "PosixSource.h" */ +#include "PosixSource.h" #include "Rts.h" #include "RtsAPI.h" @@ -16,14 +15,7 @@ #include "Ticky.h" #ifdef HAVE_TIME_H -#ifdef solaris2_HOST_OS -// Solaris requires this to get access to the POSIX ctime_r() -#define _POSIX_PTHREAD_SEMANTICS -#endif #include -#ifdef solaris2_HOST_OS -#undef _POSIX_PTHREAD_SEMANTICS -#endif #endif #ifdef HAVE_FCNTL_H @@ -47,19 +39,6 @@ #include #endif -#if defined(openbsd_HOST_OS) || defined(linux_HOST_OS) || defined(darwin_HOST_OS) -#include -#include -#include - -/* no C99 header stdint.h on OpenBSD? */ -#if defined(openbsd_HOST_OS) -typedef unsigned long my_uintptr_t; -#else -#include -typedef uintptr_t my_uintptr_t; -#endif -#endif #if defined(_WIN32) #include @@ -333,42 +312,3 @@ int genericRaise(int sig) { return raise(sig); #endif } - -/* ----------------------------------------------------------------------------- - Allocating executable memory - -------------------------------------------------------------------------- */ - -/* Heavily arch-specific, I'm afraid.. */ - -/* - * Allocate len bytes which are readable, writable, and executable. - * - * ToDo: If this turns out to be a performance bottleneck, one could - * e.g. cache the last VirtualProtect/mprotect-ed region and do - * nothing in case of a cache hit. - */ -void* -stgMallocBytesRWX(int len) -{ - void *addr = stgMallocBytes(len, "mallocBytesRWX"); -#if defined(i386_HOST_ARCH) && defined(_WIN32) - /* This could be necessary for processors which distinguish between READ and - EXECUTE memory accesses, e.g. Itaniums. */ - DWORD dwOldProtect = 0; - if (VirtualProtect (addr, len, PAGE_EXECUTE_READWRITE, &dwOldProtect) == 0) { - barf("mallocBytesRWX: failed to protect 0x%p; error=%lu; old protection: %lu\n", - addr, (unsigned long)GetLastError(), (unsigned long)dwOldProtect); - } -#elif defined(openbsd_HOST_OS) || defined(linux_HOST_OS) || defined(darwin_HOST_OS) - /* malloced memory isn't executable by default on OpenBSD */ - my_uintptr_t pageSize = sysconf(_SC_PAGESIZE); - my_uintptr_t mask = ~(pageSize - 1); - my_uintptr_t startOfFirstPage = ((my_uintptr_t)addr ) & mask; - my_uintptr_t startOfLastPage = ((my_uintptr_t)addr + len - 1) & mask; - my_uintptr_t size = startOfLastPage - startOfFirstPage + pageSize; - if (mprotect((void*)startOfFirstPage, (size_t)size, PROT_EXEC | PROT_READ | PROT_WRITE) != 0) { - barf("mallocBytesRWX: failed to protect 0x%p\n", addr); - } -#endif - return addr; -}