From 7a004907c750f754bf3686abb329813c7fd2efc7 Mon Sep 17 00:00:00 2001
From: Peter Crosthwaite <crosthwaitepeter@gmail.com>
Date: Thu, 15 Feb 2018 14:53:32 -0500
Subject: [PATCH] translate-all: Move tcg_handle_interrupt() to -common

Move this function to common code. It has no arch specific
dependencies. Prepares support for multi-arch where the translate-all
interface needs to be virtualised. One less thing to virtualise.

Backports commit 9b68a7754a892d8deb7696cfe609fe2ec3c6034a from qemu
---
 qemu/Makefile.target    |  1 +
 qemu/translate-all.c    | 10 ----------
 qemu/translate-common.c | 33 +++++++++++++++++++++++++++++++++
 3 files changed, 34 insertions(+), 10 deletions(-)
 create mode 100644 qemu/translate-common.c

diff --git a/qemu/Makefile.target b/qemu/Makefile.target
index 7fe3535b..088c665f 100644
--- a/qemu/Makefile.target
+++ b/qemu/Makefile.target
@@ -41,6 +41,7 @@ all: $(PROGS)
 #########################################################
 # cpu emulator library
 obj-y = exec.o translate-all.o cpu-exec.o
+obj-y += translate-common.o
 obj-y += cpu-exec-common.o
 obj-y += tcg/tcg.o tcg/tcg-op.o tcg/optimize.o
 obj-y += fpu/softfloat.o
diff --git a/qemu/translate-all.c b/qemu/translate-all.c
index 2bf73769..de1c33f5 100644
--- a/qemu/translate-all.c
+++ b/qemu/translate-all.c
@@ -1541,16 +1541,6 @@ void tb_check_watchpoint(CPUState *cpu)
 }
 
 #ifndef CONFIG_USER_ONLY
-/* mask must never be zero, except for A20 change call */
-static void tcg_handle_interrupt(CPUState *cpu, int mask)
-{
-    cpu->interrupt_request |= mask;
-
-    cpu->tcg_exit_req = 1;
-}
-
-CPUInterruptHandler cpu_interrupt_handler = tcg_handle_interrupt;
-
 /* in deterministic execution mode, instructions doing device I/Os
    must be at the end of the TB */
 void cpu_io_recompile(CPUState *cpu, uintptr_t retaddr)
diff --git a/qemu/translate-common.c b/qemu/translate-common.c
new file mode 100644
index 00000000..98e1bf83
--- /dev/null
+++ b/qemu/translate-common.c
@@ -0,0 +1,33 @@
+/*
+ *  Host code generation common components
+ *
+ *  Copyright (c) 2015 Peter Crosthwaite <crosthwaite.peter@gmail.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "qemu-common.h"
+#include "qom/cpu.h"
+
+#ifndef CONFIG_USER_ONLY
+/* mask must never be zero, except for A20 change call */
+static void tcg_handle_interrupt(CPUState *cpu, int mask)
+{
+    cpu->interrupt_request |= mask;
+
+    cpu->tcg_exit_req = 1;
+}
+
+CPUInterruptHandler cpu_interrupt_handler = tcg_handle_interrupt;
+#endif