* i386aix-nat.c (i386_float_info): Reverse order of registers before
authorJim Kingdon <jkingdon@engr.sgi.com>
Sat, 22 Jan 1994 22:14:04 +0000 (22:14 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Sat, 22 Jan 1994 22:14:04 +0000 (22:14 +0000)
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
gdb/i386aix-nat.c
gdb/i387-tdep.c

index 03a6c480e12cb3ead03e858f7d20627f059cf165..477e03af312797617b1803c43b0d16cfa712ca94 100644 (file)
@@ -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
index 0c26c8f8a726a97ae69317021459ede9399cd22f..15e02b0fb401b6e0125a74a77a077050c1f85649 100644 (file)
@@ -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.  */
index 6c2b6f98325fe407b11dedfd5d78c6fdbc8a4048..1e5da17b5c99ecc4641e82449e55b19304b582e4 100644 (file)
@@ -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);
 }