Android uses cacheflush(long start, long end, long flags) for MIPS.
authorAkira Hatanaka <ahatanaka@mips.com>
Thu, 14 Mar 2013 19:01:00 +0000 (19:01 +0000)
committerAkira Hatanaka <ahatanaka@mips.com>
Thu, 14 Mar 2013 19:01:00 +0000 (19:01 +0000)
Patch by Stephen Hines.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@177101 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/Unix/Memory.inc

index e00394ec6aa34a9dffe5ded4e4ed6c9c685a6dea..e9b26bdb80f2e36f3c5e5c2e03b2e296321119ab 100644 (file)
@@ -332,7 +332,16 @@ void Memory::InvalidateInstructionCache(const void *Addr,
   __clear_cache(const_cast<char *>(Start), const_cast<char *>(End));
 #  elif defined(__mips__)
   const char *Start = static_cast<const char *>(Addr);
+#    if defined(ANDROID)
+  // The declaration of "cacheflush" in Android bionic:
+  // extern int cacheflush(long start, long end, long flags);
+  const char *End = Start + Len;
+  long LStart = reinterpret_cast<long>(const_cast<char *>(Start));
+  long LEnd = reinterpret_cast<long>(const_cast<char *>(End));
+  cacheflush(LStart, LEnd, BCACHE);
+#    else
   cacheflush(const_cast<char *>(Start), Len, BCACHE);
+#    endif
 #  endif
 
 #endif  // end apple