* config/tc-sparc.c (md_show_usage): Add missing backslash at end
[deliverable/binutils-gdb.git] / gdb / i386aix-nat.c
index 0c26c8f8a726a97ae69317021459ede9399cd22f..6bf3d69c5f27126e77b900a81f8708c4859cc414 100644 (file)
@@ -15,7 +15,7 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "defs.h"
 #include "frame.h"
@@ -35,7 +35,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include <fcntl.h>
 
 #include <sys/file.h>
-#include <sys/stat.h>
+#include "gdb_stat.h"
 
 #include <stddef.h>
 #include <sys/ptrace.h>
@@ -47,11 +47,12 @@ extern int errno;
 #include <sys/reg.h>
 #endif
 
-#include "ieee-float.h"
+#include "floatformat.h"
 
 #include "target.h"
 
-extern struct ext_format ext_format_i387;
+static void fetch_core_registers PARAMS ((char *, unsigned, int, CORE_ADDR));
+
 \f
 /* this table must line up with REGISTER_NAMES in tm-i386v.h */
 /* symbols like 'EAX' come from <sys/reg.h> */
@@ -145,16 +146,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 +178,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 +215,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.  */
@@ -307,12 +314,12 @@ static int core_regmap[] =
   CD_DS, CD_ES, CD_FS, CD_GS,
 };
 
-void
+static void
 fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
      char *core_reg_sect;
      unsigned core_reg_size;
      int which;
-     unsigned int reg_addr;    /* ignored */
+     CORE_ADDR reg_addr;       /* ignored */
 {
 
   if (which == 0)
@@ -336,3 +343,20 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr)
        fprintf_unfiltered (gdb_stderr, "Couldn't read float regs from core file\n");
     }
 }
+
+\f
+/* Register that we are able to handle i386aix core file formats.
+   FIXME: is this really bfd_target_unknown_flavour? */
+
+static struct core_fns i386aix_core_fns =
+{
+  bfd_target_unknown_flavour,
+  fetch_core_registers,
+  NULL
+};
+
+void
+_initialize_core_i386aix ()
+{
+  add_core_fns (&i386aix_core_fns);
+}
This page took 0.024196 seconds and 4 git commands to generate.