1/* Target-dependent header for the MIPS architecture, for GDB, the GNU Debugger. 2 3 Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc. 4 5 This file is part of GDB. 6 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 9 the Free Software Foundation; either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20#ifndef MIPS_TDEP_H 21#define MIPS_TDEP_H 22 23struct gdbarch; 24 25/* All the possible MIPS ABIs. */ 26enum mips_abi 27 { 28 MIPS_ABI_UNKNOWN = 0, 29 MIPS_ABI_N32, 30 MIPS_ABI_O32, 31 MIPS_ABI_N64, 32 MIPS_ABI_O64, 33 MIPS_ABI_EABI32, 34 MIPS_ABI_EABI64, 35 MIPS_ABI_LAST 36 }; 37 38/* Return the MIPS ABI associated with GDBARCH. */ 39enum mips_abi mips_abi (struct gdbarch *gdbarch); 40 41/* Return the MIPS ISA's register size. Just a short cut to the BFD 42 architecture's word size. */ 43extern int mips_isa_regsize (struct gdbarch *gdbarch); 44 45/* Return the current index for various MIPS registers. */ 46struct mips_regnum 47{ 48 int pc; 49 int fp0; 50 int fp_implementation_revision; 51 int fp_control_status; 52 int badvaddr; /* Bad vaddr for addressing exception. */ 53 int cause; /* Describes last exception. */ 54 int hi; /* Multiply/divide temp. */ 55 int lo; /* ... */ 56}; 57extern const struct mips_regnum *mips_regnum (struct gdbarch *gdbarch); 58 59/* Register numbers of various important registers. */ 60 61enum 62{ 63 MIPS_ZERO_REGNUM = 0, /* Read-only register, always 0. */ 64 MIPS_AT_REGNUM = 1, 65 MIPS_V0_REGNUM = 2, /* Function integer return value. */ 66 MIPS_A0_REGNUM = 4, /* Loc of first arg during a subr call */ 67 MIPS_T9_REGNUM = 25, /* Contains address of callee in PIC. */ 68 MIPS_SP_REGNUM = 29, 69 MIPS_RA_REGNUM = 31, 70 MIPS_PS_REGNUM = 32, /* Contains processor status. */ 71 MIPS_EMBED_LO_REGNUM = 33, 72 MIPS_EMBED_HI_REGNUM = 34, 73 MIPS_EMBED_BADVADDR_REGNUM = 35, 74 MIPS_EMBED_CAUSE_REGNUM = 36, 75 MIPS_EMBED_PC_REGNUM = 37, 76 MIPS_EMBED_FP0_REGNUM = 38, 77 MIPS_UNUSED_REGNUM = 73, /* Never used, FIXME */ 78 MIPS_FIRST_EMBED_REGNUM = 74, /* First CP0 register for embedded use. */ 79 MIPS_PRID_REGNUM = 89, /* Processor ID. */ 80 MIPS_LAST_EMBED_REGNUM = 89 /* Last one. */ 81}; 82 83/* Defined in mips-tdep.c and used in remote-mips.c */ 84extern void deprecated_mips_set_processor_regs_hack (void); 85 86/* Instruction sizes and other useful constants. */ 87enum 88{ 89 MIPS_INSN16_SIZE = 2, 90 MIPS_INSN32_SIZE = 4, 91 /* The number of floating-point or integer registers. */ 92 MIPS_NUMREGS = 32 93}; 94 95/* Single step based on where the current instruction will take us. */ 96extern int mips_software_single_step (struct frame_info *frame); 97 98/* Tell if the program counter value in MEMADDR is in a MIPS16 99 function. */ 100extern int mips_pc_is_mips16 (bfd_vma memaddr); 101 102/* Return the currently configured (or set) saved register size. */ 103extern unsigned int mips_abi_regsize (struct gdbarch *gdbarch); 104 105#endif /* MIPS_TDEP_H */ 106