X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Futils%2Fmono-compiler.h;h=f8481d004d10e34da4cf629fef17b4bf38190137;hb=4058c2be43ec605cdcc57e9d678251339349cb5f;hp=3e1b4108b4e2a3c9e27df66843593c7fdea0aff4;hpb=d67c6000ce1d36f882eea059b8f874456055a6b9;p=mono.git diff --git a/mono/utils/mono-compiler.h b/mono/utils/mono-compiler.h index 3e1b4108b4e..f8481d004d1 100644 --- a/mono/utils/mono-compiler.h +++ b/mono/utils/mono-compiler.h @@ -10,6 +10,9 @@ * compiler behaviours. */ #include +#if defined(HAVE_UNISTD_H) +#include +#endif #ifdef __GNUC__ #define MONO_ATTR_USED __attribute__ ((__used__)) @@ -130,5 +133,37 @@ typedef SSIZE_T ssize_t; #define MONO_NO_SANITIZE_THREAD #endif +/* Used when building with Android NDK's unified headers */ +#if defined(HOST_ANDROID) && defined (ANDROID_UNIFIED_HEADERS) +#if __ANDROID_API__ < 21 + +typedef int32_t __mono_off32_t; + +#ifdef HAVE_SYS_MMAN_H +#include +#endif + +#if !defined(mmap) +/* Unified headers before API 21 do not declare mmap when LARGE_FILES are used (via -D_FILE_OFFSET_BITS=64) + * which is always the case when Mono build targets Android. The problem here is that the unified headers + * map `mmap` to `mmap64` if large files are enabled but this api exists only in API21 onwards. Therefore + * we must carefully declare the 32-bit mmap here without changing the ABI along the way. Carefully because + * in this instance off_t is redeclared to be 64-bit and that's not what we want. + */ +void* mmap (void*, size_t, int, int, int, __mono_off32_t); +#endif /* !mmap */ + +#ifdef HAVE_SYS_SENDFILE_H +#include +#endif + +#if !defined(sendfile) +/* The same thing as with mmap happens with sendfile */ +ssize_t sendfile (int out_fd, int in_fd, __mono_off32_t* offset, size_t count); +#endif /* !sendfile */ + +#endif /* __ANDROID_API__ < 21 */ +#endif /* HOST_ANDROID && ANDROID_UNIFIED_HEADERS */ + #endif /* __UTILS_MONO_COMPILER_H__*/