* cacheflush.c: New file. * Makefile.am (strace_SOURCES): Add it. * system.c: Move inclusion of <asm/cachectl.h> to cacheflush.c. [M68K, BFIN, SH]: Move to cacheflush.c.
		
			
				
	
	
		
			95 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include "defs.h"
 | 
						|
 | 
						|
#ifdef HAVE_ASM_CACHECTL_H
 | 
						|
# include <asm/cachectl.h>
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef M68K
 | 
						|
# include "xlat/cacheflush_scope.h"
 | 
						|
 | 
						|
static const struct xlat cacheflush_flags[] = {
 | 
						|
#ifdef FLUSH_CACHE_BOTH
 | 
						|
	XLAT(FLUSH_CACHE_BOTH),
 | 
						|
#endif
 | 
						|
#ifdef FLUSH_CACHE_DATA
 | 
						|
	XLAT(FLUSH_CACHE_DATA),
 | 
						|
#endif
 | 
						|
#ifdef FLUSH_CACHE_INSN
 | 
						|
	XLAT(FLUSH_CACHE_INSN),
 | 
						|
#endif
 | 
						|
	XLAT_END
 | 
						|
};
 | 
						|
 | 
						|
int
 | 
						|
sys_cacheflush(struct tcb *tcp)
 | 
						|
{
 | 
						|
	if (entering(tcp)) {
 | 
						|
		/* addr */
 | 
						|
		tprintf("%#lx, ", tcp->u_arg[0]);
 | 
						|
		/* scope */
 | 
						|
		printxval(cacheflush_scope, tcp->u_arg[1], "FLUSH_SCOPE_???");
 | 
						|
		tprints(", ");
 | 
						|
		/* flags */
 | 
						|
		printflags(cacheflush_flags, tcp->u_arg[2], "FLUSH_CACHE_???");
 | 
						|
		/* len */
 | 
						|
		tprintf(", %lu", tcp->u_arg[3]);
 | 
						|
	}
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
#endif /* M68K */
 | 
						|
 | 
						|
#ifdef BFIN
 | 
						|
static const struct xlat cacheflush_flags[] = {
 | 
						|
	XLAT(ICACHE),
 | 
						|
	XLAT(DCACHE),
 | 
						|
	XLAT(BCACHE),
 | 
						|
	XLAT_END
 | 
						|
};
 | 
						|
 | 
						|
int
 | 
						|
sys_cacheflush(struct tcb *tcp)
 | 
						|
{
 | 
						|
	if (entering(tcp)) {
 | 
						|
		/* start addr */
 | 
						|
		tprintf("%#lx, ", tcp->u_arg[0]);
 | 
						|
		/* length */
 | 
						|
		tprintf("%ld, ", tcp->u_arg[1]);
 | 
						|
		/* flags */
 | 
						|
		printxval(cacheflush_flags, tcp->u_arg[1], "?CACHE");
 | 
						|
	}
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
#endif /* BFIN */
 | 
						|
 | 
						|
#ifdef SH
 | 
						|
static const struct xlat cacheflush_flags[] = {
 | 
						|
#ifdef CACHEFLUSH_D_INVAL
 | 
						|
	XLAT(CACHEFLUSH_D_INVAL),
 | 
						|
#endif
 | 
						|
#ifdef CACHEFLUSH_D_WB
 | 
						|
	XLAT(CACHEFLUSH_D_WB),
 | 
						|
#endif
 | 
						|
#ifdef CACHEFLUSH_D_PURGE
 | 
						|
	XLAT(CACHEFLUSH_D_PURGE),
 | 
						|
#endif
 | 
						|
#ifdef CACHEFLUSH_I
 | 
						|
	XLAT(CACHEFLUSH_I),
 | 
						|
#endif
 | 
						|
	XLAT_END
 | 
						|
};
 | 
						|
 | 
						|
int
 | 
						|
sys_cacheflush(struct tcb *tcp)
 | 
						|
{
 | 
						|
	if (entering(tcp)) {
 | 
						|
		/* addr */
 | 
						|
		tprintf("%#lx, ", tcp->u_arg[0]);
 | 
						|
		/* len */
 | 
						|
		tprintf("%lu, ", tcp->u_arg[1]);
 | 
						|
		/* flags */
 | 
						|
		printflags(cacheflush_flags, tcp->u_arg[2], "CACHEFLUSH_???");
 | 
						|
	}
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
#endif /* SH */
 |