[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 30/36] target/mips: Move helper_cache() to tcg/sysemu/special_help
From: |
Philippe Mathieu-Daudé |
Subject: |
[PULL 30/36] target/mips: Move helper_cache() to tcg/sysemu/special_helper.c |
Date: |
Sun, 2 May 2021 18:15:32 +0200 |
Move helper_cache() to tcg/sysemu/special_helper.c.
The CACHE opcode is privileged and is not accessible in user
emulation. However we get a link failure when restricting the
symbol to sysemu. For now, add a stub helper to satisfy linking,
which abort if ever called.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <20210428170410.479308-25-f4bug@amsat.org>
---
target/mips/helper.h | 2 --
target/mips/tcg/sysemu_helper.h.inc | 1 +
target/mips/op_helper.c | 35 -------------------------
target/mips/tcg/sysemu/special_helper.c | 33 +++++++++++++++++++++++
target/mips/translate.c | 13 +++++++++
5 files changed, 47 insertions(+), 37 deletions(-)
diff --git a/target/mips/helper.h b/target/mips/helper.h
index 4ee7916d8b2..d49620f9282 100644
--- a/target/mips/helper.h
+++ b/target/mips/helper.h
@@ -614,8 +614,6 @@ DEF_HELPER_FLAGS_3(dmthlip, 0, void, tl, tl, env)
DEF_HELPER_FLAGS_3(wrdsp, 0, void, tl, tl, env)
DEF_HELPER_FLAGS_2(rddsp, 0, tl, tl, env)
-DEF_HELPER_3(cache, void, env, tl, i32)
-
#ifndef CONFIG_USER_ONLY
#include "tcg/sysemu_helper.h.inc"
#endif /* !CONFIG_USER_ONLY */
diff --git a/target/mips/tcg/sysemu_helper.h.inc
b/target/mips/tcg/sysemu_helper.h.inc
index 38e55cbf118..1ccbf687237 100644
--- a/target/mips/tcg/sysemu_helper.h.inc
+++ b/target/mips/tcg/sysemu_helper.h.inc
@@ -173,3 +173,4 @@ DEF_HELPER_1(ei, tl, env)
DEF_HELPER_1(eret, void, env)
DEF_HELPER_1(eretnc, void, env)
DEF_HELPER_1(deret, void, env)
+DEF_HELPER_3(cache, void, env, tl, i32)
diff --git a/target/mips/op_helper.c b/target/mips/op_helper.c
index a077535194b..a7fe1de8c42 100644
--- a/target/mips/op_helper.c
+++ b/target/mips/op_helper.c
@@ -788,38 +788,3 @@ void mips_cpu_do_transaction_failed(CPUState *cs, hwaddr
physaddr,
}
}
#endif /* !CONFIG_USER_ONLY */
-
-void helper_cache(CPUMIPSState *env, target_ulong addr, uint32_t op)
-{
-#ifndef CONFIG_USER_ONLY
- static const char *const type_name[] = {
- "Primary Instruction",
- "Primary Data or Unified Primary",
- "Tertiary",
- "Secondary"
- };
- uint32_t cache_type = extract32(op, 0, 2);
- uint32_t cache_operation = extract32(op, 2, 3);
- target_ulong index = addr & 0x1fffffff;
-
- switch (cache_operation) {
- case 0b010: /* Index Store Tag */
- memory_region_dispatch_write(env->itc_tag, index, env->CP0_TagLo,
- MO_64, MEMTXATTRS_UNSPECIFIED);
- break;
- case 0b001: /* Index Load Tag */
- memory_region_dispatch_read(env->itc_tag, index, &env->CP0_TagLo,
- MO_64, MEMTXATTRS_UNSPECIFIED);
- break;
- case 0b000: /* Index Invalidate */
- case 0b100: /* Hit Invalidate */
- case 0b110: /* Hit Writeback */
- /* no-op */
- break;
- default:
- qemu_log_mask(LOG_UNIMP, "cache operation:%u (type: %s cache)\n",
- cache_operation, type_name[cache_type]);
- break;
- }
-#endif
-}
diff --git a/target/mips/tcg/sysemu/special_helper.c
b/target/mips/tcg/sysemu/special_helper.c
index 971883fa385..2a2afb49e81 100644
--- a/target/mips/tcg/sysemu/special_helper.c
+++ b/target/mips/tcg/sysemu/special_helper.c
@@ -138,3 +138,36 @@ void helper_deret(CPUMIPSState *env)
debug_post_eret(env);
}
+
+void helper_cache(CPUMIPSState *env, target_ulong addr, uint32_t op)
+{
+ static const char *const type_name[] = {
+ "Primary Instruction",
+ "Primary Data or Unified Primary",
+ "Tertiary",
+ "Secondary"
+ };
+ uint32_t cache_type = extract32(op, 0, 2);
+ uint32_t cache_operation = extract32(op, 2, 3);
+ target_ulong index = addr & 0x1fffffff;
+
+ switch (cache_operation) {
+ case 0b010: /* Index Store Tag */
+ memory_region_dispatch_write(env->itc_tag, index, env->CP0_TagLo,
+ MO_64, MEMTXATTRS_UNSPECIFIED);
+ break;
+ case 0b001: /* Index Load Tag */
+ memory_region_dispatch_read(env->itc_tag, index, &env->CP0_TagLo,
+ MO_64, MEMTXATTRS_UNSPECIFIED);
+ break;
+ case 0b000: /* Index Invalidate */
+ case 0b100: /* Hit Invalidate */
+ case 0b110: /* Hit Writeback */
+ /* no-op */
+ break;
+ default:
+ qemu_log_mask(LOG_UNIMP, "cache operation:%u (type: %s cache)\n",
+ cache_operation, type_name[cache_type]);
+ break;
+ }
+}
diff --git a/target/mips/translate.c b/target/mips/translate.c
index f0ae3716022..c03a8ae1fed 100644
--- a/target/mips/translate.c
+++ b/target/mips/translate.c
@@ -39,6 +39,19 @@
#include "fpu_helper.h"
#include "translate.h"
+/*
+ * Many sysemu-only helpers are not reachable for user-only.
+ * Define stub generators here, so that we need not either sprinkle
+ * ifdefs through the translator, nor provide the helper function.
+ */
+#define STUB_HELPER(NAME, ...) \
+ static inline void gen_helper_##NAME(__VA_ARGS__) \
+ { g_assert_not_reached(); }
+
+#ifdef CONFIG_USER_ONLY
+STUB_HELPER(cache, TCGv_env env, TCGv val, TCGv_i32 reg)
+#endif
+
enum {
/* indirect opcode tables */
OPC_SPECIAL = (0x00 << 26),
--
2.26.3
- [PULL 20/36] target/mips: Add simple user-mode mips_cpu_tlb_fill(), (continued)
- [PULL 20/36] target/mips: Add simple user-mode mips_cpu_tlb_fill(), Philippe Mathieu-Daudé, 2021/05/02
- [PULL 21/36] target/mips: Move cpu_signal_handler definition around, Philippe Mathieu-Daudé, 2021/05/02
- [PULL 22/36] target/mips: Move sysemu specific files under sysemu/ subfolder, Philippe Mathieu-Daudé, 2021/05/02
- [PULL 23/36] target/mips: Move physical addressing code to sysemu/physaddr.c, Philippe Mathieu-Daudé, 2021/05/02
- [PULL 24/36] target/mips: Restrict cpu_mips_get_random() / update_pagemask() to TCG, Philippe Mathieu-Daudé, 2021/05/02
- [PULL 26/36] target/mips: Restrict mmu_init() to TCG, Philippe Mathieu-Daudé, 2021/05/02
- [PULL 25/36] target/mips: Move sysemu TCG-specific code to tcg/sysemu/ subfolder, Philippe Mathieu-Daudé, 2021/05/02
- [PULL 27/36] target/mips: Move tlb_helper.c to tcg/sysemu/, Philippe Mathieu-Daudé, 2021/05/02
- [PULL 28/36] target/mips: Restrict CPUMIPSTLBContext::map_address() handlers scope, Philippe Mathieu-Daudé, 2021/05/02
- [PULL 29/36] target/mips: Move Special opcodes to tcg/sysemu/special_helper.c, Philippe Mathieu-Daudé, 2021/05/02
- [PULL 30/36] target/mips: Move helper_cache() to tcg/sysemu/special_helper.c,
Philippe Mathieu-Daudé <=
- [PULL 31/36] target/mips: Move TLB management helpers to tcg/sysemu/tlb_helper.c, Philippe Mathieu-Daudé, 2021/05/02
- [PULL 32/36] target/mips: Move exception management code to exception.c, Philippe Mathieu-Daudé, 2021/05/02
- [PULL 33/36] target/mips: Move CP0 helpers to sysemu/cp0.c, Philippe Mathieu-Daudé, 2021/05/02
- [PULL 34/36] target/mips: Move TCG source files under tcg/ sub directory, Philippe Mathieu-Daudé, 2021/05/02
- [PULL 35/36] hw/mips: Restrict non-virtualized machines to TCG, Philippe Mathieu-Daudé, 2021/05/02
- [PULL 36/36] gitlab-ci: Add KVM mips64el cross-build jobs, Philippe Mathieu-Daudé, 2021/05/02
- Re: [PULL 00/36] MIPS patches for 2021-05-02, no-reply, 2021/05/02
- Re: [PULL 00/36] MIPS patches for 2021-05-02, Peter Maydell, 2021/05/04