1 /* 2 * Copyright 2011, The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef FLUSH_CPU_CACHE_H 18 #define FLUSH_CPU_CACHE_H 19 20 #if defined(__arm__) || defined(__mips__) 21 22 // Note: Though we wish to use the gcc builtin function __clear_cache to 23 // invalidate the instruction cache; however, the toolchain of Android 24 // has not supported it properly. We are going to use cacheflush system 25 // call to invalidate the instruction cache. 26 // 27 // As a side note, Dalvik VM use the same system call to invalidate the 28 // instruction as well. 29 30 #include <unistd.h> 31 32 #define FLUSH_CPU_CACHE(BEGIN, END) \ 33 cacheflush(((long)(BEGIN)), ((long)(END)), 0) 34 35 #if 0 && defined(__mips__) 36 37 // Note: Following code does not work with Android Toolchain, though they 38 // works while using standalone mips-linux-gnu-gcc. 39 40 #include <sys/cachectl.h> 41 #define FLUSH_CPU_CACHE(BEGIN, END) \ 42 _flush_cache(reinterpret_cast<char*>(BEGIN), END-BEGIN+1, BCACHE); 43 44 #endif 45 46 #else 47 48 #define FLUSH_CPU_CACHE(BEGIN, END) do { } while (0) 49 50 #endif 51 52 #endif // FLUSH_CPU_CACHE_H 53