From dfd4c728fa4aad5c2975966d280d3ae976dce121 Mon Sep 17 00:00:00 2001 From: Jim Kingdon Date: Sat, 22 Jan 1994 22:14:04 +0000 Subject: [PATCH] * i386aix-nat.c (i386_float_info): Reverse order of registers before passing them to print_387_status. (print_387_status): Don't subtract top from 7 before using it. * i387-tdep.c: Remove comment about AIX wanting "top" subtracted from 7; the above explains it. --- gdb/ChangeLog | 8 ++++++++ gdb/i386aix-nat.c | 20 +++++++++++++------- gdb/i387-tdep.c | 3 --- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 03a6c480e12..477e03af312 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +Sat Jan 22 17:08:48 1994 Jim Kingdon (kingdon@lioth.cygnus.com) + + * i386aix-nat.c (i386_float_info): Reverse order of registers before + passing them to print_387_status. + (print_387_status): Don't subtract top from 7 before using it. + * i387-tdep.c: Remove comment about AIX wanting "top" subtracted + from 7; the above explains it. + Sat Jan 22 20:25:11 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) * mips-tdep.c (init_extra_frame_info): Use frame relative stack diff --git a/gdb/i386aix-nat.c b/gdb/i386aix-nat.c index 0c26c8f8a72..15e02b0fb40 100644 --- a/gdb/i386aix-nat.c +++ b/gdb/i386aix-nat.c @@ -145,16 +145,16 @@ print_387_status (status, ep) printf_unfiltered ("%s; ", local_hex_string(ep->eip)); printf_unfiltered ("operand %s", local_hex_string(ep->operand_seg)); printf_unfiltered (":%s\n", local_hex_string(ep->operand)); - - top = 7- ((ep->status >> 11) & 7); - + + top = ((ep->status >> 11) & 7); + printf_unfiltered ("regno tag msb lsb value\n"); for (fpreg = 7; fpreg >= 0; fpreg--) { double val; - + printf_unfiltered ("%s %d: ", fpreg == top ? "=>" : " ", fpreg); - + switch ((ep->tag >> ((7 - fpreg) * 2)) & 3) { case 0: printf_unfiltered ("valid "); break; @@ -177,6 +177,10 @@ i386_float_info () { struct env387 fps; int fpsaved = 0; + /* We need to reverse the order of the registers. Apparently AIX stores + the highest-numbered ones first. */ + struct env387 fps_fixed; + int i; if (inferior_pid) { @@ -210,8 +214,10 @@ i386_float_info () MIN(10, sizeof(fps) - offset)); } } - - print_387_status (0, (struct env387 *)&fps); + fps_fixed = fps; + for (i = 0; i < 8; ++i) + memcpy (fps_fixed.regs[i], fps.regs[7 - i], 10); + print_387_status (0, &fps_fixed); } /* Fetch one register. */ diff --git a/gdb/i387-tdep.c b/gdb/i387-tdep.c index 6c2b6f98325..1e5da17b5c9 100644 --- a/gdb/i387-tdep.c +++ b/gdb/i387-tdep.c @@ -108,8 +108,5 @@ print_387_status_word (status) (status & 0x0200) != 0, (status & 0x0100) != 0); - /* FIXME: Someone claims this should be 7 - (status >> 11) & 7 for AIX. - What's the story? Is the following just wrong or are differing - notations in use? */ printf_unfiltered ("top %d\n", (status >> 11) & 7); } -- 2.30.2