diff --git a/tools/debugger/gdbsx/gx/gx_local.c b/tools/debugger/gdbsx/gx/gx_local.c index 1bec03d49c..33556a582d 100644 --- a/tools/debugger/gdbsx/gx/gx_local.c +++ b/tools/debugger/gdbsx/gx/gx_local.c @@ -45,8 +45,8 @@ prnt_32regs(struct xg_gdb_regs32 *r32p) static void prnt_64regs(struct xg_gdb_regs64 *r64p) { - printf("rip:"XGF64" rsp:"XGF64" flags:"XGF64"\n", r64p->rip, r64p->rsp, - r64p->rflags); + printf("rip:"XGF64" rsp:"XGF64" flags:%08x\n", r64p->rip, r64p->rsp, + r64p->eflags); printf("rax:"XGF64" rbx:"XGF64" rcx:"XGF64"\n", r64p->rax, r64p->rbx, r64p->rcx); printf("rdx:"XGF64" rsi:"XGF64" rdi:"XGF64"\n", r64p->rdx, r64p->rsi, @@ -57,7 +57,7 @@ prnt_64regs(struct xg_gdb_regs64 *r64p) r64p->r13); printf("r14:"XGF64" r15:"XGF64" rbp:"XGF64"\n", r64p->r14, r64p->r15, r64p->rbp); - printf("cs:"XGF64" ds:"XGF64" fs:"XGF64" gs:"XGF64"\n", r64p->cs, + printf("cs:%08x ds:%08x fs:%08x gs:%08x\n", r64p->cs, r64p->ds, r64p->fs, r64p->gs); printf("\n"); } diff --git a/tools/debugger/gdbsx/xg/xg_main.c b/tools/debugger/gdbsx/xg/xg_main.c index cc640d1d82..a4e8653168 100644 --- a/tools/debugger/gdbsx/xg/xg_main.c +++ b/tools/debugger/gdbsx/xg/xg_main.c @@ -580,14 +580,14 @@ _cp_64ctxt_to_64gdb(struct cpu_user_regs_x86_64 *cp, struct xg_gdb_regs64 *rp) rp->rax = cp->rax; rp->rip = cp->rip; rp->rsp = cp->rsp; - rp->rflags = cp->rflags; + rp->eflags = cp->rflags; - rp->cs = (uint64_t)cp->cs; - rp->ss = (uint64_t)cp->ss; - rp->es = (uint64_t)cp->es; - rp->ds = (uint64_t)cp->ds; - rp->fs = (uint64_t)cp->fs; - rp->gs = (uint64_t)cp->gs; + rp->cs = cp->cs; + rp->ss = cp->ss; + rp->es = cp->es; + rp->ds = cp->ds; + rp->fs = cp->fs; + rp->gs = cp->gs; #if 0 printf("cp:%llx bp:%llx rip:%llx\n", rp->rsp, rp->rbp, rp->rip); printf("rax:%llx rbx:%llx\n", rp->rax, rp->rbx); @@ -635,7 +635,7 @@ _cp_32gdb_to_64ctxt(struct xg_gdb_regs32 *rp, struct cpu_user_regs_x86_64 *cp) cp->ds = rp->ds; cp->fs = rp->fs; cp->gs = rp->gs; - cp->rflags = rp->eflags; + cp->eflags = rp->eflags; } static void @@ -658,7 +658,7 @@ _cp_64gdb_to_64ctxt(struct xg_gdb_regs64 *rp, struct cpu_user_regs_x86_64 *cp) cp->rax = rp->rax; cp->rip = rp->rip; cp->rsp = rp->rsp; - cp->rflags = rp->rflags; + cp->rflags = rp->eflags; cp->cs = (uint16_t)rp->cs; cp->ss = (uint16_t)rp->ss; diff --git a/tools/debugger/gdbsx/xg/xg_public.h b/tools/debugger/gdbsx/xg/xg_public.h index 3f905a2f0d..cffb2f7532 100644 --- a/tools/debugger/gdbsx/xg/xg_public.h +++ b/tools/debugger/gdbsx/xg/xg_public.h @@ -61,7 +61,7 @@ struct xg_gdb_regs32 { uint32_t gs; }; -/* this from: regformats/reg-x86-64.dat in gdbserver */ +/* based on gdb/features/i386/64bit-core.xml in gdb */ struct xg_gdb_regs64 { uint64_t rax; uint64_t rbx; @@ -80,14 +80,14 @@ struct xg_gdb_regs64 { uint64_t r14; uint64_t r15; uint64_t rip; - uint64_t rflags; - uint64_t cs; - uint64_t ss; - uint64_t ds; - uint64_t es; - uint64_t fs; - uint64_t gs; -}; + uint32_t eflags; + uint32_t cs; + uint32_t ss; + uint32_t ds; + uint32_t es; + uint32_t fs; + uint32_t gs; +} __attribute__((__packed__)); union xg_gdb_regs { struct xg_gdb_regs32 gregs_32;