summaryrefslogtreecommitdiff
path: root/compiler/common_compiler_test.cc
diff options
context:
space:
mode:
author Roland Levillain <rpl@google.com> 2016-02-01 15:23:20 +0000
committer Roland Levillain <rpl@google.com> 2016-02-01 15:23:20 +0000
commit324302696c0a93511fef1310d309a54ebfb25a46 (patch)
tree3122d6ffaf46bf93364278f387e8c2ff6ff310a4 /compiler/common_compiler_test.cc
parentba5ea7003f071f85936ee351aff46f64a56ee096 (diff)
Ensure instruction cache is flushed in compiler tests with Clang.
Invoke __builtin___clear_cache with Clang in art::CommonCompilerTest::MakeExecutable. This fixes "Illegal instruction" failures in codegen_test on angler. Factor this logic in a function and use it in art::jit::JitCodeCache::CommitCodeInternal too. Bug: 26786447 Change-Id: I81fa056c8d7c6bf2168c9340deeab82231cb1084
Diffstat (limited to 'compiler/common_compiler_test.cc')
-rw-r--r--compiler/common_compiler_test.cc11
1 files changed, 1 insertions, 10 deletions
diff --git a/compiler/common_compiler_test.cc b/compiler/common_compiler_test.cc
index afc8463878..e4bfac9ee7 100644
--- a/compiler/common_compiler_test.cc
+++ b/compiler/common_compiler_test.cc
@@ -122,16 +122,7 @@ void CommonCompilerTest::MakeExecutable(const void* code_start, size_t code_leng
int result = mprotect(reinterpret_cast<void*>(base), len, PROT_READ | PROT_WRITE | PROT_EXEC);
CHECK_EQ(result, 0);
- // Flush instruction cache
- // Only uses __builtin___clear_cache if GCC >= 4.3.3
-#if GCC_VERSION >= 40303
- __builtin___clear_cache(reinterpret_cast<void*>(base), reinterpret_cast<void*>(base + len));
-#else
- // Only warn if not Intel as Intel doesn't have cache flush instructions.
-#if !defined(__i386__) && !defined(__x86_64__)
- UNIMPLEMENTED(WARNING) << "cache flush";
-#endif
-#endif
+ FlushInstructionCache(reinterpret_cast<char*>(base), reinterpret_cast<char*>(base + len));
}
void CommonCompilerTest::MakeExecutable(mirror::ClassLoader* class_loader, const char* class_name) {