1 //===-- MmapUtils.h ---------------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file contains compatibility-related preprocessor directives related 10 // to mmap. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifdef __linux__ 15 #include <sys/mman.h> 16 #include <sys/syscall.h> 17 18 // Before kernel 4.17, Linux did not support MAP_FIXED_NOREPLACE, so if it is 19 // not available, simplfy define it as MAP_FIXED which performs the same 20 // function but does not guarantee existing mappings won't get clobbered. 21 #ifndef MAP_FIXED_NOREPLACE 22 #define MAP_FIXED_NOREPLACE MAP_FIXED 23 #endif 24 25 // Some 32-bit architectures don't have mmap and define mmap2 instead. The only 26 // difference between the two syscalls is that mmap2's offset parameter is in 27 // terms 4096 byte offsets rather than individual bytes, so for our purposes 28 // they are effectively the same as all ofsets here are set to 0. 29 #if defined(SYS_mmap2) && !defined(SYS_mmap) 30 #define SYS_mmap SYS_mmap2 31 #endif 32 #endif // __linux__ 33