From: Bharata B Rao <address@hidden>
Fix ppc64 arch specific dump code to work correctly for little endian
guests.
Signed-off-by: Bharata B Rao <address@hidden>
[ rebased on top of current master branch,
Greg Kurz <address@hidden> ]
Signed-off-by: Greg Kurz <address@hidden>
---
target-ppc/arch_dump.c | 62
++++++++++++++++++++++++++----------------------
1 file changed, 33 insertions(+), 29 deletions(-)
diff --git a/target-ppc/arch_dump.c b/target-ppc/arch_dump.c
index 9dccf1a..a85c872 100644
--- a/target-ppc/arch_dump.c
+++ b/target-ppc/arch_dump.c
@@ -80,93 +80,95 @@ typedef struct noteStruct {
} QEMU_PACKED Note;
-static void ppc64_write_elf64_prstatus(Note *note, PowerPCCPU *cpu)
+static void ppc64_write_elf64_prstatus(Note *note, PowerPCCPU *cpu, int endian)
{
int i;
uint64_t cr;
struct PPC64ElfPrstatus *prstatus;
struct PPC64UserRegStruct *reg;
- note->hdr.n_type = cpu_to_be32(NT_PRSTATUS);
+ note->hdr.n_type = cpu_convert_to_target32(NT_PRSTATUS, endian);
prstatus = ¬e->contents.prstatus;
memset(prstatus, 0, sizeof(*prstatus));
reg = &prstatus->pr_reg;
for (i = 0; i < 32; i++) {
- reg->gpr[i] = cpu_to_be64(cpu->env.gpr[i]);
+ reg->gpr[i] = cpu_convert_to_target64(cpu->env.gpr[i], endian);
}
- reg->nip = cpu_to_be64(cpu->env.nip);
- reg->msr = cpu_to_be64(cpu->env.msr);
- reg->ctr = cpu_to_be64(cpu->env.ctr);
- reg->link = cpu_to_be64(cpu->env.lr);
- reg->xer = cpu_to_be64(cpu_read_xer(&cpu->env));
+ reg->nip = cpu_convert_to_target64(cpu->env.nip, endian);
+ reg->msr = cpu_convert_to_target64(cpu->env.msr, endian);
+ reg->ctr = cpu_convert_to_target64(cpu->env.ctr, endian);
+ reg->link = cpu_convert_to_target64(cpu->env.lr, endian);
+ reg->xer = cpu_convert_to_target64(cpu_read_xer(&cpu->env), endian);