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 |