2009-01-08 Kai Tietz <kai.tietz@onevision.com>
[deliverable/binutils-gdb.git] / gdb / arm-tdep.h
index a5fc99df5b4a9d2fffc9d0040c515b22eb6901a8..1f4c38a7103ae4ad90e602b9968bd9af53267dad 100644 (file)
@@ -1,11 +1,11 @@
 /* Common target dependent code for GDB on ARM systems.
-   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2007, 2008, 2009 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -14,9 +14,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., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef ARM_TDEP_H
 #define ARM_TDEP_H
 struct gdbarch;
 struct regset;
 
-/* Register numbers of various important registers.  Note that some of
-   these values are "real" register numbers, and correspond to the
-   general registers of the machine, and some are "phony" register
-   numbers which are too large to be actual register numbers as far as
-   the user is concerned but do serve to get the desired values when
-   passed to read_register.  */
+/* Register numbers of various important registers.  */
 
 enum gdb_regnum {
   ARM_A1_REGNUM = 0,           /* first integer-like argument */
   ARM_A4_REGNUM = 3,           /* last integer-like argument */
   ARM_AP_REGNUM = 11,
+  ARM_IP_REGNUM = 12,
   ARM_SP_REGNUM = 13,          /* Contains address of top of stack */
   ARM_LR_REGNUM = 14,          /* address to return to from a function call */
   ARM_PC_REGNUM = 15,          /* Contains program counter */
@@ -44,6 +38,20 @@ enum gdb_regnum {
   ARM_F7_REGNUM = 23,          /* last floating point register */
   ARM_FPS_REGNUM = 24,         /* floating point status register */
   ARM_PS_REGNUM = 25,          /* Contains processor status */
+  ARM_CPSR_REGNUM = ARM_PS_REGNUM,
+  ARM_WR0_REGNUM,              /* WMMX data registers.  */
+  ARM_WR15_REGNUM = ARM_WR0_REGNUM + 15,
+  ARM_WC0_REGNUM,              /* WMMX control registers.  */
+  ARM_WCSSF_REGNUM = ARM_WC0_REGNUM + 2,
+  ARM_WCASF_REGNUM = ARM_WC0_REGNUM + 3,
+  ARM_WC7_REGNUM = ARM_WC0_REGNUM + 7,
+  ARM_WCGR0_REGNUM,            /* WMMX general purpose registers.  */
+  ARM_WCGR3_REGNUM = ARM_WCGR0_REGNUM + 3,
+  ARM_WCGR7_REGNUM = ARM_WCGR0_REGNUM + 7,
+
+  ARM_NUM_REGS,
+
+  /* Other useful registers.  */
   ARM_FP_REGNUM = 11,          /* Frame register in ARM code, if used.  */
   THUMB_FP_REGNUM = 7,         /* Frame register in Thumb code, if used.  */
   ARM_NUM_ARG_REGS = 4, 
@@ -60,13 +68,8 @@ enum gdb_regnum {
    bits.  DWORD aligned they use 96 bits.  */
 #define FP_REGISTER_SIZE       12
 
-/* Status registers are the same size as general purpose registers.
-   Used for documentation purposes and code readability in this
-   header.  */
-#define STATUS_REGISTER_SIZE   4
-
 /* Number of machine registers.  The only define actually required 
-   is NUM_REGS.  The other definitions are used for documentation
+   is gdbarch_num_regs.  The other definitions are used for documentation
    purposes and code readability.  */
 /* For 26 bit ARM code, a fake copy of the PC is placed in register 25 (PS)
    (and called PS for processor status) so the status bits can be cleared
@@ -100,6 +103,8 @@ enum gdb_regnum {
 #define FLAG_C         0x20000000
 #define FLAG_V         0x10000000
 
+#define CPSR_T         0x20
+
 /* Type of floating-point code in use by inferior.  There are really 3 models
    that are traditionally supported (plus the endianness issue), but gcc can
    only generate 2 of those.  The third is APCS_FLOAT, where arguments to
@@ -146,6 +151,8 @@ struct gdbarch_tdep
 
   enum arm_float_model fp_model; /* Floating point calling conventions.  */
 
+  int have_fpa_registers;      /* Does the target report the FPA registers?  */
+
   CORE_ADDR lowest_pc;         /* Lowest address at which instructions 
                                   will appear.  */
 
@@ -167,19 +174,9 @@ struct gdbarch_tdep
 };
 
 
-
-#ifndef LOWEST_PC
-#define LOWEST_PC (gdbarch_tdep (current_gdbarch)->lowest_pc)
-#endif
-
-/* Prototypes for internal interfaces needed by more than one MD file.  */
-int arm_pc_is_thumb_dummy (CORE_ADDR);
-
-int arm_pc_is_thumb (CORE_ADDR);
-
-CORE_ADDR thumb_get_next_pc (CORE_ADDR);
-
-CORE_ADDR arm_get_next_pc (CORE_ADDR);
+CORE_ADDR arm_skip_stub (struct frame_info *, CORE_ADDR);
+CORE_ADDR arm_get_next_pc (struct frame_info *, CORE_ADDR);
+int arm_software_single_step (struct frame_info *);
 
 /* Functions exported from armbsd-tdep.h.  */
 
This page took 0.025471 seconds and 4 git commands to generate.