From: Tom Musta <tommusta@gmail.com>
To: qemu-devel@nongnu.org
Cc: Tom Musta <tommusta@gmail.com>, qemu-ppc@nongnu.org
Subject: [Qemu-devel] [V3 PATCH 2/2] monitor: QEMU Monitor Instruction Disassembly Incorrect for PowerPC LE Mode
Date: Tue, 8 Apr 2014 14:26:14 -0500 [thread overview]
Message-ID: <1396985174-13212-3-git-send-email-tommusta@gmail.com> (raw)
In-Reply-To: <1396985174-13212-1-git-send-email-tommusta@gmail.com>
The monitor support for disassembling instructions does not honor the MSR[LE]
bit for PowerPC processors.
This change enhances the monitor_disas() routine by supporting a flag bit
for Little Endian mode. Bit 16 is used since that bit was used in the
analagous guest disassembly routine target_disas().
Also, to be consistent with target_disas(), the disassembler bfd_mach field
can be passed in the flags argument.
Reported-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Tom Musta <tommusta@gmail.com>
---
V2: Look specifically at bit 16 for LE. Support machine configuration in flags.
V3: Changed documentation of 'flags' argument to simply refer to the target_disas
description (per Peter Maydell's review).
The bug can be easily observed by dumping the first few instructions of an
interrupt vector (0x300 is the Data Storage Interrupt handler in PPC)
(qemu) xp/8i 0x300
0x0000000000000300: .long 0x60
0x0000000000000304: lhzu r18,-19843(r3)
0x0000000000000308: .long 0x60
0x000000000000030c: lhzu r18,-20099(r2)
0x0000000000000310: lwz r0,11769(0)
0x0000000000000314: lhzu r23,8317(r2)
0x0000000000000318: .long 0x7813427c
0x000000000000031c: lbz r0,19961(0)
With the patch applied, the disassembly now looks correct:
(qemu) xp/8i 0x300
0x0000000000000300: nop
0x0000000000000304: mtsprg 2,r13
0x0000000000000308: nop
0x000000000000030c: mfsprg r13,1
0x0000000000000310: std r9,128(r13)
0x0000000000000314: mfspr r9,896
0x0000000000000318: mr r2,r2
0x000000000000031c: std r10,136(r13)
disas.c | 14 ++++++++++++--
monitor.c | 4 ++++
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/disas.c b/disas.c
index a427d18..f300102 100644
--- a/disas.c
+++ b/disas.c
@@ -445,6 +445,8 @@ monitor_fprintf(FILE *stream, const char *fmt, ...)
return 0;
}
+/* Disassembler for the monitor. See target_disas for a description of 'flags'.
+ */
void monitor_disas(Monitor *mon, CPUArchState *env,
target_ulong pc, int nb_insn, int is_physical, int flags)
{
@@ -485,11 +487,19 @@ void monitor_disas(Monitor *mon, CPUArchState *env,
s.info.mach = bfd_mach_sparc_v9b;
#endif
#elif defined(TARGET_PPC)
+ if (flags & 0xFFFF) {
+ /* If we have a precise definitions of the instructions set, use it */
+ s.info.mach = flags & 0xFFFF;
+ } else {
#ifdef TARGET_PPC64
- s.info.mach = bfd_mach_ppc64;
+ s.info.mach = bfd_mach_ppc64;
#else
- s.info.mach = bfd_mach_ppc;
+ s.info.mach = bfd_mach_ppc;
#endif
+ }
+ if ((flags >> 16) & 1) {
+ s.info.endian = BFD_ENDIAN_LITTLE;
+ }
print_insn = print_insn_ppc;
#elif defined(TARGET_M68K)
print_insn = print_insn_m68k;
diff --git a/monitor.c b/monitor.c
index 342e83b..3ae561b 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1309,6 +1309,10 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize,
}
}
#endif
+#ifdef TARGET_PPC
+ flags = msr_le << 16;
+ flags |= env->bfd_mach;
+#endif
monitor_disas(mon, env, addr, count, is_physical, flags);
return;
}
--
1.7.1
next prev parent reply other threads:[~2014-04-08 19:26 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-08 19:26 [Qemu-devel] [V3 PATCH 0/2] QEMU Monitor Instruction Disassembly Incorrect for PPC LE Tom Musta
2014-04-08 19:26 ` [Qemu-devel] [V3 PATCH 1/2] target-ppc: Fix target_disas Tom Musta
2014-04-09 7:31 ` Peter Maydell
2014-04-08 19:26 ` Tom Musta [this message]
2014-04-09 7:34 ` [Qemu-devel] [V3 PATCH 2/2] monitor: QEMU Monitor Instruction Disassembly Incorrect for PowerPC LE Mode Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1396985174-13212-3-git-send-email-tommusta@gmail.com \
--to=tommusta@gmail.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).