diff options
| author | 2023-06-23 19:46:14 +0100 | |
|---|---|---|
| committer | 2023-06-23 20:26:34 +0000 | |
| commit | 1a950face5cd9cc43af1fbc7be4a60c178800ddf (patch) | |
| tree | 36dbb204695cf1cd070b6e28106fc9924beaf2cd | |
| parent | a8b6a489210919720542d87da1f6e3891b38e704 (diff) | |
Only use mincore on linux.
The API is different on mac.
Test: m
Change-Id: I35d179425cbf2b8c240f20ed19a8e0b0e3057275
| -rw-r--r-- | libartbase/base/mem_map.cc | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/libartbase/base/mem_map.cc b/libartbase/base/mem_map.cc index 25fda674fa..a064f800c4 100644 --- a/libartbase/base/mem_map.cc +++ b/libartbase/base/mem_map.cc @@ -1245,6 +1245,8 @@ static inline void ClearMemory(uint8_t* page_begin, size_t size, bool resident) DCHECK(IsAligned<kPageSize>(page_begin + size)); if (resident) { RawClearMemory(page_begin, page_begin + size); + // Note we check madvise return value against -1, as it seems old kernels + // can return 1. #ifdef MADV_FREE bool res = madvise(page_begin, size, MADV_FREE); CHECK_NE(res, -1) << "madvise failed"; @@ -1280,6 +1282,8 @@ void ZeroMemory(void* address, size_t length, bool release_eagerly) { #else RawClearMemory(mem_begin, page_begin); RawClearMemory(page_end, mem_end); +// mincore() is linux-specific syscall. +#if defined(__linux__) if (!release_eagerly) { size_t vec_len = (page_end - page_begin) / kPageSize; std::unique_ptr<unsigned char[]> vec(new unsigned char[vec_len]); @@ -1308,9 +1312,10 @@ void ZeroMemory(void* address, size_t length, bool release_eagerly) { } // mincore failed, fall through to MADV_DONTNEED. } +#endif // __linux__ bool res = madvise(page_begin, page_end - page_begin, MADV_DONTNEED); CHECK_NE(res, -1) << "madvise failed"; -#endif +#endif // _WIN32 } void MemMap::AlignBy(size_t alignment, bool align_both_ends) { |