| OLD | NEW |
| 1 /* Target-dependent header for the MIPS architecture, for GDB, the GNU Debugger. | 1 /* Target-dependent header for the MIPS architecture, for GDB, the GNU Debugger. |
| 2 | 2 |
| 3 Copyright (C) 2002-2003, 2007-2012 Free Software Foundation, Inc. | 3 Copyright (C) 2002-2003, 2007-2012 Free Software Foundation, Inc. |
| 4 | 4 |
| 5 This file is part of GDB. | 5 This file is part of GDB. |
| 6 | 6 |
| 7 This program is free software; you can redistribute it and/or modify | 7 This program is free software; you can redistribute it and/or modify |
| 8 it under the terms of the GNU General Public License as published by | 8 it under the terms of the GNU General Public License as published by |
| 9 the Free Software Foundation; either version 3 of the License, or | 9 the Free Software Foundation; either version 3 of the License, or |
| 10 (at your option) any later version. | 10 (at your option) any later version. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 MIPS_ABI_N64, | 31 MIPS_ABI_N64, |
| 32 MIPS_ABI_O64, | 32 MIPS_ABI_O64, |
| 33 MIPS_ABI_EABI32, | 33 MIPS_ABI_EABI32, |
| 34 MIPS_ABI_EABI64, | 34 MIPS_ABI_EABI64, |
| 35 MIPS_ABI_LAST | 35 MIPS_ABI_LAST |
| 36 }; | 36 }; |
| 37 | 37 |
| 38 /* Return the MIPS ABI associated with GDBARCH. */ | 38 /* Return the MIPS ABI associated with GDBARCH. */ |
| 39 enum mips_abi mips_abi (struct gdbarch *gdbarch); | 39 enum mips_abi mips_abi (struct gdbarch *gdbarch); |
| 40 | 40 |
| 41 /* Base and compressed MIPS ISA variations. */ |
| 42 enum mips_isa |
| 43 { |
| 44 ISA_MIPS = -1, /* mips_compression_string depends on it. */ |
| 45 ISA_MIPS16, |
| 46 ISA_MICROMIPS |
| 47 }; |
| 48 |
| 41 /* Return the MIPS ISA's register size. Just a short cut to the BFD | 49 /* Return the MIPS ISA's register size. Just a short cut to the BFD |
| 42 architecture's word size. */ | 50 architecture's word size. */ |
| 43 extern int mips_isa_regsize (struct gdbarch *gdbarch); | 51 extern int mips_isa_regsize (struct gdbarch *gdbarch); |
| 44 | 52 |
| 45 /* Return the current index for various MIPS registers. */ | 53 /* Return the current index for various MIPS registers. */ |
| 46 struct mips_regnum | 54 struct mips_regnum |
| 47 { | 55 { |
| 48 int pc; | 56 int pc; |
| 49 int fp0; | 57 int fp0; |
| 50 int fp_implementation_revision; | 58 int fp_implementation_revision; |
| 51 int fp_control_status; | 59 int fp_control_status; |
| 52 int badvaddr; /* Bad vaddr for addressing exception. */ | 60 int badvaddr; /* Bad vaddr for addressing exception. */ |
| 53 int cause; /* Describes last exception. */ | 61 int cause; /* Describes last exception. */ |
| 54 int hi; /* Multiply/divide temp. */ | 62 int hi; /* Multiply/divide temp. */ |
| 55 int lo; /* ... */ | 63 int lo; /* ... */ |
| 64 int dspacc; /* SmartMIPS/DSP accumulators. */ |
| 65 int dspctl; /* DSP control. */ |
| 56 }; | 66 }; |
| 57 extern const struct mips_regnum *mips_regnum (struct gdbarch *gdbarch); | 67 extern const struct mips_regnum *mips_regnum (struct gdbarch *gdbarch); |
| 58 | 68 |
| 59 /* Some MIPS boards don't support floating point while others only | 69 /* Some MIPS boards don't support floating point while others only |
| 60 support single-precision floating-point operations. */ | 70 support single-precision floating-point operations. */ |
| 61 | 71 |
| 62 enum mips_fpu_type | 72 enum mips_fpu_type |
| 63 { | 73 { |
| 64 MIPS_FPU_DOUBLE, /* Full double precision floating point. */ | 74 MIPS_FPU_DOUBLE, /* Full double precision floating point. */ |
| 65 MIPS_FPU_SINGLE, /* Single precision floating point (R4650). */ | 75 MIPS_FPU_SINGLE, /* Single precision floating point (R4650). */ |
| 66 MIPS_FPU_NONE /* No floating point. */ | 76 MIPS_FPU_NONE /* No floating point. */ |
| 67 }; | 77 }; |
| 68 | 78 |
| 69 /* MIPS specific per-architecture information. */ | 79 /* MIPS specific per-architecture information. */ |
| 70 struct gdbarch_tdep | 80 struct gdbarch_tdep |
| 71 { | 81 { |
| 72 /* from the elf header */ | 82 /* from the elf header */ |
| 73 int elf_flags; | 83 int elf_flags; |
| 74 | 84 |
| 75 /* mips options */ | 85 /* mips options */ |
| 76 enum mips_abi mips_abi; | 86 enum mips_abi mips_abi; |
| 77 enum mips_abi found_abi; | 87 enum mips_abi found_abi; |
| 88 enum mips_isa mips_isa; |
| 78 enum mips_fpu_type mips_fpu_type; | 89 enum mips_fpu_type mips_fpu_type; |
| 79 int mips_last_arg_regnum; | 90 int mips_last_arg_regnum; |
| 80 int mips_last_fp_arg_regnum; | 91 int mips_last_fp_arg_regnum; |
| 81 int default_mask_address_p; | 92 int default_mask_address_p; |
| 82 /* Is the target using 64-bit raw integer registers but only | 93 /* Is the target using 64-bit raw integer registers but only |
| 83 storing a left-aligned 32-bit value in each? */ | 94 storing a left-aligned 32-bit value in each? */ |
| 84 int mips64_transfers_32bit_regs_p; | 95 int mips64_transfers_32bit_regs_p; |
| 85 /* Indexes for various registers. IRIX and embedded have | 96 /* Indexes for various registers. IRIX and embedded have |
| 86 different values. This contains the "public" fields. Don't | 97 different values. This contains the "public" fields. Don't |
| 87 add any that do not need to be public. */ | 98 add any that do not need to be public. */ |
| (...skipping 22 matching lines...) Expand all Loading... |
| 110 }; | 121 }; |
| 111 | 122 |
| 112 /* Register numbers of various important registers. */ | 123 /* Register numbers of various important registers. */ |
| 113 | 124 |
| 114 enum | 125 enum |
| 115 { | 126 { |
| 116 MIPS_ZERO_REGNUM = 0, /* Read-only register, always 0. */ | 127 MIPS_ZERO_REGNUM = 0, /* Read-only register, always 0. */ |
| 117 MIPS_AT_REGNUM = 1, | 128 MIPS_AT_REGNUM = 1, |
| 118 MIPS_V0_REGNUM = 2, /* Function integer return value. */ | 129 MIPS_V0_REGNUM = 2, /* Function integer return value. */ |
| 119 MIPS_A0_REGNUM = 4, /* Loc of first arg during a subr call. */ | 130 MIPS_A0_REGNUM = 4, /* Loc of first arg during a subr call. */ |
| 131 MIPS_S2_REGNUM = 18, /* Contains return address in MIPS16 thunks. */ |
| 120 MIPS_T9_REGNUM = 25, /* Contains address of callee in PIC. */ | 132 MIPS_T9_REGNUM = 25, /* Contains address of callee in PIC. */ |
| 133 MIPS_GP_REGNUM = 28, |
| 121 MIPS_SP_REGNUM = 29, | 134 MIPS_SP_REGNUM = 29, |
| 122 MIPS_RA_REGNUM = 31, | 135 MIPS_RA_REGNUM = 31, |
| 123 MIPS_PS_REGNUM = 32, /* Contains processor status. */ | 136 MIPS_PS_REGNUM = 32, /* Contains processor status. */ |
| 124 MIPS_EMBED_LO_REGNUM = 33, | 137 MIPS_EMBED_LO_REGNUM = 33, |
| 125 MIPS_EMBED_HI_REGNUM = 34, | 138 MIPS_EMBED_HI_REGNUM = 34, |
| 126 MIPS_EMBED_BADVADDR_REGNUM = 35, | 139 MIPS_EMBED_BADVADDR_REGNUM = 35, |
| 127 MIPS_EMBED_CAUSE_REGNUM = 36, | 140 MIPS_EMBED_CAUSE_REGNUM = 36, |
| 128 MIPS_EMBED_PC_REGNUM = 37, | 141 MIPS_EMBED_PC_REGNUM = 37, |
| 129 MIPS_EMBED_FP0_REGNUM = 38, | 142 MIPS_EMBED_FP0_REGNUM = 38, |
| 130 MIPS_UNUSED_REGNUM = 73, /* Never used, FIXME. */ | 143 MIPS_UNUSED_REGNUM = 73, /* Never used, FIXME. */ |
| (...skipping 10 matching lines...) Expand all Loading... |
| 141 { | 154 { |
| 142 MIPS_INSN16_SIZE = 2, | 155 MIPS_INSN16_SIZE = 2, |
| 143 MIPS_INSN32_SIZE = 4, | 156 MIPS_INSN32_SIZE = 4, |
| 144 /* The number of floating-point or integer registers. */ | 157 /* The number of floating-point or integer registers. */ |
| 145 MIPS_NUMREGS = 32 | 158 MIPS_NUMREGS = 32 |
| 146 }; | 159 }; |
| 147 | 160 |
| 148 /* Single step based on where the current instruction will take us. */ | 161 /* Single step based on where the current instruction will take us. */ |
| 149 extern int mips_software_single_step (struct frame_info *frame); | 162 extern int mips_software_single_step (struct frame_info *frame); |
| 150 | 163 |
| 164 /* Tell if the program counter value in MEMADDR is in a standard |
| 165 MIPS function. */ |
| 166 extern int mips_pc_is_mips (bfd_vma memaddr); |
| 167 |
| 151 /* Tell if the program counter value in MEMADDR is in a MIPS16 | 168 /* Tell if the program counter value in MEMADDR is in a MIPS16 |
| 152 function. */ | 169 function. */ |
| 153 extern int mips_pc_is_mips16 (bfd_vma memaddr); | 170 extern int mips_pc_is_mips16 (struct gdbarch *gdbarch, bfd_vma memaddr); |
| 171 |
| 172 /* Tell if the program counter value in MEMADDR is in a microMIPS |
| 173 function. */ |
| 174 extern int mips_pc_is_micromips (struct gdbarch *gdbarch, bfd_vma memaddr); |
| 154 | 175 |
| 155 /* Return the currently configured (or set) saved register size. */ | 176 /* Return the currently configured (or set) saved register size. */ |
| 156 extern unsigned int mips_abi_regsize (struct gdbarch *gdbarch); | 177 extern unsigned int mips_abi_regsize (struct gdbarch *gdbarch); |
| 157 | 178 |
| 179 /* Make PC the address of the next instruction to execute. */ |
| 180 extern void mips_write_pc (struct regcache *regcache, CORE_ADDR pc); |
| 181 |
| 158 /* Target descriptions which only indicate the size of general | 182 /* Target descriptions which only indicate the size of general |
| 159 registers. */ | 183 registers. */ |
| 160 extern struct target_desc *mips_tdesc_gp32; | 184 extern struct target_desc *mips_tdesc_gp32; |
| 161 extern struct target_desc *mips_tdesc_gp64; | 185 extern struct target_desc *mips_tdesc_gp64; |
| 162 | 186 |
| 163 #endif /* MIPS_TDEP_H */ | 187 #endif /* MIPS_TDEP_H */ |
| OLD | NEW |