Use the vCPU endianness (CP0_Config0.BE) to select the disassembler.
Default the "big-endian" property from target_big_endian() in
instance_init(), as the endianness might only be known at runtime
once user emulation selects it from the guest binary.

Signed-off-by: Philippe Mathieu-Daudé <[email protected]>
---
 target/mips/cpu.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/target/mips/cpu.c b/target/mips/cpu.c
index c5193dbc8e35..8ad5e49ade41 100644
--- a/target/mips/cpu.c
+++ b/target/mips/cpu.c
@@ -21,6 +21,7 @@
 #include "qemu/osdep.h"
 #include "qemu/cutils.h"
 #include "qemu/qemu-print.h"
+#include "qemu/target-info.h"
 #include "qemu/error-report.h"
 #include "qapi/error.h"
 #include "cpu.h"
@@ -500,10 +501,11 @@ static void mips_cpu_disas_set_info(const CPUState *cs, 
disassemble_info *info)
         info->cap_insn_split = 6;
         cap_mode = CS_MODE_NANOMIPS;
     } else {
-        info->endian = TARGET_BIG_ENDIAN ? BFD_ENDIAN_BIG
-                                         : BFD_ENDIAN_LITTLE;
-        info->print_insn = TARGET_BIG_ENDIAN ? print_insn_big_mips
-                                             : print_insn_little_mips;
+        bool big_endian = mips_env_is_bigendian(env);
+
+        info->endian = big_endian ? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE;
+        info->print_insn = big_endian ? print_insn_big_mips
+                                      : print_insn_little_mips;
 
         if (env->hflags & MIPS_HFLAG_M16) {
             cap_mode = (env->insn_flags & ASE_MICROMIPS
@@ -636,6 +638,7 @@ static void mips_cpu_initfn(Object *obj)
     cpu->count_div = clock_new(OBJECT(obj), "clk-div-count");
     cpu->count_clock = clock_new(OBJECT(obj), "clk-count");
     env->cpu_model = mcc->cpu_def;
+    cpu->is_big_endian = target_big_endian();
 }
 
 static char *mips_cpu_type_name(const char *cpu_model)
@@ -665,7 +668,7 @@ static const struct SysemuCPUOps mips_sysemu_ops = {
 #endif
 
 static const Property mips_cpu_properties[] = {
-    DEFINE_PROP_BOOL("big-endian", MIPSCPU, is_big_endian, TARGET_BIG_ENDIAN),
+    DEFINE_PROP_BOOL("big-endian", MIPSCPU, is_big_endian, false),
 };
 
 #ifdef CONFIG_TCG
-- 
2.55.0


Reply via email to