diff --git a/common/lib/kernel/vfio.cpp b/common/lib/kernel/vfio.cpp index c97a845ae..6b12bb2f0 100644 --- a/common/lib/kernel/vfio.cpp +++ b/common/lib/kernel/vfio.cpp @@ -24,6 +24,11 @@ #define _DEFAULT_SOURCE +#ifdef __arm__ + #define _LARGEFILE64_SOURCE 1 + #define _FILE_OFFSET_BITS 64 +#endif + #include #include #include @@ -476,10 +481,15 @@ VfioDevice::regionMap(size_t index) if (!(r->flags & VFIO_REGION_INFO_FLAG_MMAP)) return MAP_FAILED; + int flags = MAP_SHARED; + +#ifndef __arm__ + flags |= MAP_SHARED; +#endif + mappings[index] = mmap(nullptr, r->size, PROT_READ | PROT_WRITE, - MAP_SHARED | MAP_32BIT, - fd, r->offset); + flags, fd, r->offset); return mappings[index]; } diff --git a/common/lib/memory.cpp b/common/lib/memory.cpp index bd1af926a..d2b6fb1d0 100644 --- a/common/lib/memory.cpp +++ b/common/lib/memory.cpp @@ -39,7 +39,7 @@ HostRam::HostRamAllocator::allocateBlock(size_t size) size &= size_t(~0xFFF); } -#ifdef __linux__ +#if defined(__linux__) && !defined(__arm__) const int mmap_flags = MAP_PRIVATE | MAP_ANONYMOUS | MAP_32BIT; #else const int mmap_flags = MAP_PRIVATE | MAP_ANONYMOUS;