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