41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
/* ===-- clear_cache.c - Implement __clear_cache ---------------------------===
 | 
						|
 *
 | 
						|
 *                     The LLVM Compiler Infrastructure
 | 
						|
 *
 | 
						|
 * This file is distributed under the University of Illinois Open Source
 | 
						|
 * License. See LICENSE.TXT for details.
 | 
						|
 *
 | 
						|
 * ===----------------------------------------------------------------------===
 | 
						|
 */
 | 
						|
 | 
						|
#include <stdlib.h>
 | 
						|
 | 
						|
#if __APPLE__
 | 
						|
  #include <libkern/OSCacheControl.h>
 | 
						|
#endif
 | 
						|
 | 
						|
/*
 | 
						|
 * The compiler generates calls to __clear_cache() when creating 
 | 
						|
 * trampoline functions on the stack for use with nested functions.
 | 
						|
 * It is expected to invalidate the instruction cache for the 
 | 
						|
 * specified range.
 | 
						|
 */
 | 
						|
 | 
						|
void __clear_cache(void* start, void* end)
 | 
						|
{
 | 
						|
#if __i386__ || __x86_64__
 | 
						|
/*
 | 
						|
 * Intel processors have a unified instruction and data cache
 | 
						|
 * so there is nothing to do
 | 
						|
 */
 | 
						|
#else
 | 
						|
    #if __APPLE__
 | 
						|
        /* On Darwin, sys_icache_invalidate() provides this functionality */
 | 
						|
        sys_icache_invalidate(start, end-start);
 | 
						|
    #else
 | 
						|
        compilerrt_abort();
 | 
						|
    #endif
 | 
						|
#endif
 | 
						|
}
 | 
						|
 |