From 6fe3b9fdd591ea8c5590c87bb5aecd922ada6072 Mon Sep 17 00:00:00 2001
From: Claudiu Zissulescu <claziss@synopsys.com>
Date: Mon, 30 Apr 2018 15:16:24 +0200
Subject: [PATCH] [ARC] Clear the instruction cache using syscalls.

Clear the instruction cache from `beg' to `end'.  This makes an inline
system call to SYS_cacheflush.

gcc/
2017-03-28  Claudiu Zissulescu  <claziss@synopsys.com>

	* config/arc/linux.h (CLEAR_INSN_CACHE): Define.

From-SVN: r259764
---
 gcc/ChangeLog          |  4 ++++
 gcc/config/arc/linux.h | 14 ++++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e2afb1f94737..4560dd8f6687 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2018-04-30  Claudiu Zissulescu  <claziss@synopsys.com>
+
+	* config/arc/linux.h (CLEAR_INSN_CACHE): Define.
+
 2018-04-30  Claudiu Zissulescu  <claziss@synopsys.com>
 
 	* config/arc/arc-protos.h (prepare_extend_operands): Remove.
diff --git a/gcc/config/arc/linux.h b/gcc/config/arc/linux.h
index 4e87dfe3ac13..96d548eae341 100644
--- a/gcc/config/arc/linux.h
+++ b/gcc/config/arc/linux.h
@@ -109,3 +109,17 @@ along with GCC; see the file COPYING3.  If not see
 /* Build attribute: procedure call standard.  */
 #undef ATTRIBUTE_PCS
 #define ATTRIBUTE_PCS 3
+
+/* Clear the instruction cache from `beg' to `end'.  This makes an
+   inline system call to SYS_cacheflush.  */
+#undef CLEAR_INSN_CACHE
+#define CLEAR_INSN_CACHE(beg, end)					\
+{									\
+  register unsigned long _beg __asm ("r0") = (unsigned long) (beg);	\
+  register unsigned long _end __asm ("r1") = (unsigned long) (end);	\
+  register unsigned long _xtr __asm ("r2") = 0;				\
+  register unsigned long _scno __asm ("r8") = 244;			\
+  __asm __volatile ("trap_s 0		; sys_cache_sync"		\
+		    : "=r" (_beg)					\
+		    : "0" (_beg), "r" (_end), "r" (_xtr), "r" (_scno));	\
+}
-- 
GitLab