Add support to GDB for the Renesas rl78 architecture.
[external/binutils.git] / gdb / mips-tdep.h
index bb2a0d0..d91a1d2 100644 (file)
@@ -1,6 +1,6 @@
 /* Target-dependent header for the MIPS architecture, for GDB, the GNU Debugger.
 
-   Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2002-2003, 2007-2012 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -22,7 +22,7 @@
 
 struct gdbarch;
 
-/* All the possible MIPS ABIs. */
+/* All the possible MIPS ABIs.  */
 enum mips_abi
   {
     MIPS_ABI_UNKNOWN = 0,
@@ -56,6 +56,59 @@ struct mips_regnum
 };
 extern const struct mips_regnum *mips_regnum (struct gdbarch *gdbarch);
 
+/* Some MIPS boards don't support floating point while others only
+   support single-precision floating-point operations.  */
+
+enum mips_fpu_type
+{
+  MIPS_FPU_DOUBLE,             /* Full double precision floating point.  */
+  MIPS_FPU_SINGLE,             /* Single precision floating point (R4650).  */
+  MIPS_FPU_NONE                        /* No floating point.  */
+};
+
+/* MIPS specific per-architecture information.  */
+struct gdbarch_tdep
+{
+  /* from the elf header */
+  int elf_flags;
+
+  /* mips options */
+  enum mips_abi mips_abi;
+  enum mips_abi found_abi;
+  enum mips_fpu_type mips_fpu_type;
+  int mips_last_arg_regnum;
+  int mips_last_fp_arg_regnum;
+  int default_mask_address_p;
+  /* Is the target using 64-bit raw integer registers but only
+     storing a left-aligned 32-bit value in each?  */
+  int mips64_transfers_32bit_regs_p;
+  /* Indexes for various registers.  IRIX and embedded have
+     different values.  This contains the "public" fields.  Don't
+     add any that do not need to be public.  */
+  const struct mips_regnum *regnum;
+  /* Register names table for the current register set.  */
+  const char **mips_processor_reg_names;
+
+  /* The size of register data available from the target, if known.
+     This doesn't quite obsolete the manual
+     mips64_transfers_32bit_regs_p, since that is documented to force
+     left alignment even for big endian (very strange).  */
+  int register_size_valid_p;
+  int register_size;
+
+  /* General-purpose registers.  */
+  struct regset *gregset;
+  struct regset *gregset64;
+
+  /* Floating-point registers.  */
+  struct regset *fpregset;
+  struct regset *fpregset64;
+
+  /* Return the expected next PC if FRAME is stopped at a syscall
+     instruction.  */
+  CORE_ADDR (*syscall_next_pc) (struct frame_info *frame);
+};
+
 /* Register numbers of various important registers.  */
 
 enum
@@ -63,7 +116,7 @@ enum
   MIPS_ZERO_REGNUM = 0,                /* Read-only register, always 0.  */
   MIPS_AT_REGNUM = 1,
   MIPS_V0_REGNUM = 2,          /* Function integer return value.  */
-  MIPS_A0_REGNUM = 4,          /* Loc of first arg during a subr call */
+  MIPS_A0_REGNUM = 4,          /* Loc of first arg during a subr call */
   MIPS_T9_REGNUM = 25,         /* Contains address of callee in PIC.  */
   MIPS_SP_REGNUM = 29,
   MIPS_RA_REGNUM = 31,
@@ -74,13 +127,13 @@ enum
   MIPS_EMBED_CAUSE_REGNUM = 36,
   MIPS_EMBED_PC_REGNUM = 37,
   MIPS_EMBED_FP0_REGNUM = 38,
-  MIPS_UNUSED_REGNUM = 73,     /* Never used, FIXME */
+  MIPS_UNUSED_REGNUM = 73,     /* Never used, FIXME */
   MIPS_FIRST_EMBED_REGNUM = 74,        /* First CP0 register for embedded use.  */
   MIPS_PRID_REGNUM = 89,       /* Processor ID.  */
   MIPS_LAST_EMBED_REGNUM = 89  /* Last one.  */
 };
 
-/* Defined in mips-tdep.c and used in remote-mips.c */
+/* Defined in mips-tdep.c and used in remote-mips.c */
 extern void deprecated_mips_set_processor_regs_hack (void);
 
 /* Instruction sizes and other useful constants.  */
@@ -99,7 +152,7 @@ extern int mips_software_single_step (struct frame_info *frame);
    function.  */
 extern int mips_pc_is_mips16 (bfd_vma memaddr);
 
-/* Return the currently configured (or set) saved register size. */
+/* Return the currently configured (or set) saved register size.  */
 extern unsigned int mips_abi_regsize (struct gdbarch *gdbarch);
 
 /* Target descriptions which only indicate the size of general