diff options
Diffstat (limited to 'runtime/utils.cc')
-rw-r--r-- | runtime/utils.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/runtime/utils.cc b/runtime/utils.cc index ffa9d45812..3fe18c7933 100644 --- a/runtime/utils.cc +++ b/runtime/utils.cc @@ -18,6 +18,7 @@ #include <inttypes.h> #include <pthread.h> +#include <sys/mman.h> // For madvise #include <sys/stat.h> #include <sys/syscall.h> #include <sys/types.h> @@ -940,4 +941,18 @@ void SleepForever() { } } +int MadviseLargestPageAlignedRegion(const uint8_t* begin, const uint8_t* end, int advice) { + DCHECK_LE(begin, end); + begin = AlignUp(begin, kPageSize); + end = AlignDown(end, kPageSize); + if (begin < end) { + int result = madvise(const_cast<uint8_t*>(begin), end - begin, advice); + if (result != 0) { + PLOG(WARNING) << "madvise failed " << result; + } + return result; + } + return 0; +} + } // namespace art |