mips: flush the cache in perf/bigcode.c
MIPS needs to flush the cache after memcpy in perf/bigcode.c.
Otherwise, the executed code will likely be wrong.
This fixes issues with bigcode test on some MIPS platforms.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13550 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/perf/bigcode.c b/perf/bigcode.c
index c368798..628cd01 100644
--- a/perf/bigcode.c
+++ b/perf/bigcode.c
@@ -10,6 +10,10 @@
#include <stdio.h>
#include <string.h>
#include <assert.h>
+#if defined(__mips__)
+#include <asm/cachectl.h>
+#include <sys/syscall.h>
+#endif
#include "tests/sys_mman.h"
#define FN_SIZE 996 // Must be big enough to hold the compiled f()
@@ -58,7 +62,11 @@
for (i = 0; i < n_fns; i++) {
memcpy(&a[FN_SIZE*i], f, FN_SIZE);
}
-
+
+#if defined(__mips__)
+ syscall(__NR_cacheflush, a, FN_SIZE * n_fns, ICACHE);
+#endif
+
for (h = 0; h < n_reps; h += 1) {
for (i = 0; i < n_fns; i += 4) {
int(*f1)(int,int) = (void*)&a[FN_SIZE*(i+0)];