OSDN Git Service

include:
[pf3gnuchains/pf3gnuchains3x.git] / gdb / mips-tdep.c
1 /* Target-dependent code for the MIPS architecture, for GDB, the GNU Debugger.
2
3    Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
4    1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
5    Free Software Foundation, Inc.
6
7    Contributed by Alessandro Forin(af@cs.cmu.edu) at CMU
8    and by Per Bothner(bothner@cs.wisc.edu) at U.Wisconsin.
9
10    This file is part of GDB.
11
12    This program is free software; you can redistribute it and/or modify
13    it under the terms of the GNU General Public License as published by
14    the Free Software Foundation; either version 3 of the License, or
15    (at your option) any later version.
16
17    This program is distributed in the hope that it will be useful,
18    but WITHOUT ANY WARRANTY; without even the implied warranty of
19    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20    GNU General Public License for more details.
21
22    You should have received a copy of the GNU General Public License
23    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
24
25 #include "defs.h"
26 #include "gdb_string.h"
27 #include "gdb_assert.h"
28 #include "frame.h"
29 #include "inferior.h"
30 #include "symtab.h"
31 #include "value.h"
32 #include "gdbcmd.h"
33 #include "language.h"
34 #include "gdbcore.h"
35 #include "symfile.h"
36 #include "objfiles.h"
37 #include "gdbtypes.h"
38 #include "target.h"
39 #include "arch-utils.h"
40 #include "regcache.h"
41 #include "osabi.h"
42 #include "mips-tdep.h"
43 #include "block.h"
44 #include "reggroups.h"
45 #include "opcode/mips.h"
46 #include "elf/mips.h"
47 #include "elf-bfd.h"
48 #include "symcat.h"
49 #include "sim-regno.h"
50 #include "dis-asm.h"
51 #include "frame-unwind.h"
52 #include "frame-base.h"
53 #include "trad-frame.h"
54 #include "infcall.h"
55 #include "floatformat.h"
56 #include "remote.h"
57 #include "target-descriptions.h"
58 #include "dwarf2-frame.h"
59 #include "user-regs.h"
60
61 static const struct objfile_data *mips_pdr_data;
62
63 static struct type *mips_register_type (struct gdbarch *gdbarch, int regnum);
64
65 /* A useful bit in the CP0 status register (MIPS_PS_REGNUM).  */
66 /* This bit is set if we are emulating 32-bit FPRs on a 64-bit chip.  */
67 #define ST0_FR (1 << 26)
68
69 /* The sizes of floating point registers.  */
70
71 enum
72 {
73   MIPS_FPU_SINGLE_REGSIZE = 4,
74   MIPS_FPU_DOUBLE_REGSIZE = 8
75 };
76
77 enum
78 {
79   MIPS32_REGSIZE = 4,
80   MIPS64_REGSIZE = 8
81 };
82
83 static const char *mips_abi_string;
84
85 static const char *mips_abi_strings[] = {
86   "auto",
87   "n32",
88   "o32",
89   "n64",
90   "o64",
91   "eabi32",
92   "eabi64",
93   NULL
94 };
95
96 /* The standard register names, and all the valid aliases for them.  */
97 struct register_alias
98 {
99   const char *name;
100   int regnum;
101 };
102
103 /* Aliases for o32 and most other ABIs.  */
104 const struct register_alias mips_o32_aliases[] = {
105   { "ta0", 12 },
106   { "ta1", 13 },
107   { "ta2", 14 },
108   { "ta3", 15 }
109 };
110
111 /* Aliases for n32 and n64.  */
112 const struct register_alias mips_n32_n64_aliases[] = {
113   { "ta0", 8 },
114   { "ta1", 9 },
115   { "ta2", 10 },
116   { "ta3", 11 }
117 };
118
119 /* Aliases for ABI-independent registers.  */
120 const struct register_alias mips_register_aliases[] = {
121   /* The architecture manuals specify these ABI-independent names for
122      the GPRs.  */
123 #define R(n) { "r" #n, n }
124   R(0), R(1), R(2), R(3), R(4), R(5), R(6), R(7),
125   R(8), R(9), R(10), R(11), R(12), R(13), R(14), R(15),
126   R(16), R(17), R(18), R(19), R(20), R(21), R(22), R(23),
127   R(24), R(25), R(26), R(27), R(28), R(29), R(30), R(31),
128 #undef R
129
130   /* k0 and k1 are sometimes called these instead (for "kernel
131      temp").  */
132   { "kt0", 26 },
133   { "kt1", 27 },
134
135   /* This is the traditional GDB name for the CP0 status register.  */
136   { "sr", MIPS_PS_REGNUM },
137
138   /* This is the traditional GDB name for the CP0 BadVAddr register.  */
139   { "bad", MIPS_EMBED_BADVADDR_REGNUM },
140
141   /* This is the traditional GDB name for the FCSR.  */
142   { "fsr", MIPS_EMBED_FP0_REGNUM + 32 }
143 };
144
145 /* Some MIPS boards don't support floating point while others only
146    support single-precision floating-point operations.  */
147
148 enum mips_fpu_type
149 {
150   MIPS_FPU_DOUBLE,              /* Full double precision floating point.  */
151   MIPS_FPU_SINGLE,              /* Single precision floating point (R4650).  */
152   MIPS_FPU_NONE                 /* No floating point.  */
153 };
154
155 #ifndef MIPS_DEFAULT_FPU_TYPE
156 #define MIPS_DEFAULT_FPU_TYPE MIPS_FPU_DOUBLE
157 #endif
158 static int mips_fpu_type_auto = 1;
159 static enum mips_fpu_type mips_fpu_type = MIPS_DEFAULT_FPU_TYPE;
160
161 static int mips_debug = 0;
162
163 /* Properties (for struct target_desc) describing the g/G packet
164    layout.  */
165 #define PROPERTY_GP32 "internal: transfers-32bit-registers"
166 #define PROPERTY_GP64 "internal: transfers-64bit-registers"
167
168 struct target_desc *mips_tdesc_gp32;
169 struct target_desc *mips_tdesc_gp64;
170
171 /* MIPS specific per-architecture information */
172 struct gdbarch_tdep
173 {
174   /* from the elf header */
175   int elf_flags;
176
177   /* mips options */
178   enum mips_abi mips_abi;
179   enum mips_abi found_abi;
180   enum mips_fpu_type mips_fpu_type;
181   int mips_last_arg_regnum;
182   int mips_last_fp_arg_regnum;
183   int default_mask_address_p;
184   /* Is the target using 64-bit raw integer registers but only
185      storing a left-aligned 32-bit value in each?  */
186   int mips64_transfers_32bit_regs_p;
187   /* Indexes for various registers.  IRIX and embedded have
188      different values.  This contains the "public" fields.  Don't
189      add any that do not need to be public.  */
190   const struct mips_regnum *regnum;
191   /* Register names table for the current register set.  */
192   const char **mips_processor_reg_names;
193
194   /* The size of register data available from the target, if known.
195      This doesn't quite obsolete the manual
196      mips64_transfers_32bit_regs_p, since that is documented to force
197      left alignment even for big endian (very strange).  */
198   int register_size_valid_p;
199   int register_size;
200 };
201
202 const struct mips_regnum *
203 mips_regnum (struct gdbarch *gdbarch)
204 {
205   return gdbarch_tdep (gdbarch)->regnum;
206 }
207
208 static int
209 mips_fpa0_regnum (struct gdbarch *gdbarch)
210 {
211   return mips_regnum (gdbarch)->fp0 + 12;
212 }
213
214 #define MIPS_EABI (gdbarch_tdep (current_gdbarch)->mips_abi == MIPS_ABI_EABI32 \
215                    || gdbarch_tdep (current_gdbarch)->mips_abi == MIPS_ABI_EABI64)
216
217 #define MIPS_LAST_FP_ARG_REGNUM (gdbarch_tdep (current_gdbarch)->mips_last_fp_arg_regnum)
218
219 #define MIPS_LAST_ARG_REGNUM (gdbarch_tdep (current_gdbarch)->mips_last_arg_regnum)
220
221 #define MIPS_FPU_TYPE (gdbarch_tdep (current_gdbarch)->mips_fpu_type)
222
223 /* MIPS16 function addresses are odd (bit 0 is set).  Here are some
224    functions to test, set, or clear bit 0 of addresses.  */
225
226 static CORE_ADDR
227 is_mips16_addr (CORE_ADDR addr)
228 {
229   return ((addr) & 1);
230 }
231
232 static CORE_ADDR
233 unmake_mips16_addr (CORE_ADDR addr)
234 {
235   return ((addr) & ~(CORE_ADDR) 1);
236 }
237
238 /* Return the MIPS ABI associated with GDBARCH.  */
239 enum mips_abi
240 mips_abi (struct gdbarch *gdbarch)
241 {
242   return gdbarch_tdep (gdbarch)->mips_abi;
243 }
244
245 int
246 mips_isa_regsize (struct gdbarch *gdbarch)
247 {
248   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
249
250   /* If we know how big the registers are, use that size.  */
251   if (tdep->register_size_valid_p)
252     return tdep->register_size;
253
254   /* Fall back to the previous behavior.  */
255   return (gdbarch_bfd_arch_info (gdbarch)->bits_per_word
256           / gdbarch_bfd_arch_info (gdbarch)->bits_per_byte);
257 }
258
259 /* Return the currently configured (or set) saved register size. */
260
261 unsigned int
262 mips_abi_regsize (struct gdbarch *gdbarch)
263 {
264   switch (mips_abi (gdbarch))
265     {
266     case MIPS_ABI_EABI32:
267     case MIPS_ABI_O32:
268       return 4;
269     case MIPS_ABI_N32:
270     case MIPS_ABI_N64:
271     case MIPS_ABI_O64:
272     case MIPS_ABI_EABI64:
273       return 8;
274     case MIPS_ABI_UNKNOWN:
275     case MIPS_ABI_LAST:
276     default:
277       internal_error (__FILE__, __LINE__, _("bad switch"));
278     }
279 }
280
281 /* Functions for setting and testing a bit in a minimal symbol that
282    marks it as 16-bit function.  The MSB of the minimal symbol's
283    "info" field is used for this purpose.
284
285    gdbarch_elf_make_msymbol_special tests whether an ELF symbol is "special",
286    i.e. refers to a 16-bit function, and sets a "special" bit in a
287    minimal symbol to mark it as a 16-bit function
288
289    MSYMBOL_IS_SPECIAL   tests the "special" bit in a minimal symbol  */
290
291 static void
292 mips_elf_make_msymbol_special (asymbol * sym, struct minimal_symbol *msym)
293 {
294   if (((elf_symbol_type *) (sym))->internal_elf_sym.st_other == STO_MIPS16)
295     {
296       MSYMBOL_INFO (msym) = (char *)
297         (((long) MSYMBOL_INFO (msym)) | 0x80000000);
298       SYMBOL_VALUE_ADDRESS (msym) |= 1;
299     }
300 }
301
302 static int
303 msymbol_is_special (struct minimal_symbol *msym)
304 {
305   return (((long) MSYMBOL_INFO (msym) & 0x80000000) != 0);
306 }
307
308 /* XFER a value from the big/little/left end of the register.
309    Depending on the size of the value it might occupy the entire
310    register or just part of it.  Make an allowance for this, aligning
311    things accordingly.  */
312
313 static void
314 mips_xfer_register (struct gdbarch *gdbarch, struct regcache *regcache,
315                     int reg_num, int length,
316                     enum bfd_endian endian, gdb_byte *in,
317                     const gdb_byte *out, int buf_offset)
318 {
319   int reg_offset = 0;
320
321   gdb_assert (reg_num >= gdbarch_num_regs (gdbarch));
322   /* Need to transfer the left or right part of the register, based on
323      the targets byte order.  */
324   switch (endian)
325     {
326     case BFD_ENDIAN_BIG:
327       reg_offset = register_size (gdbarch, reg_num) - length;
328       break;
329     case BFD_ENDIAN_LITTLE:
330       reg_offset = 0;
331       break;
332     case BFD_ENDIAN_UNKNOWN:    /* Indicates no alignment.  */
333       reg_offset = 0;
334       break;
335     default:
336       internal_error (__FILE__, __LINE__, _("bad switch"));
337     }
338   if (mips_debug)
339     fprintf_unfiltered (gdb_stderr,
340                         "xfer $%d, reg offset %d, buf offset %d, length %d, ",
341                         reg_num, reg_offset, buf_offset, length);
342   if (mips_debug && out != NULL)
343     {
344       int i;
345       fprintf_unfiltered (gdb_stdlog, "out ");
346       for (i = 0; i < length; i++)
347         fprintf_unfiltered (gdb_stdlog, "%02x", out[buf_offset + i]);
348     }
349   if (in != NULL)
350     regcache_cooked_read_part (regcache, reg_num, reg_offset, length,
351                                in + buf_offset);
352   if (out != NULL)
353     regcache_cooked_write_part (regcache, reg_num, reg_offset, length,
354                                 out + buf_offset);
355   if (mips_debug && in != NULL)
356     {
357       int i;
358       fprintf_unfiltered (gdb_stdlog, "in ");
359       for (i = 0; i < length; i++)
360         fprintf_unfiltered (gdb_stdlog, "%02x", in[buf_offset + i]);
361     }
362   if (mips_debug)
363     fprintf_unfiltered (gdb_stdlog, "\n");
364 }
365
366 /* Determine if a MIPS3 or later cpu is operating in MIPS{1,2} FPU
367    compatiblity mode.  A return value of 1 means that we have
368    physical 64-bit registers, but should treat them as 32-bit registers.  */
369
370 static int
371 mips2_fp_compat (struct frame_info *frame)
372 {
373   struct gdbarch *gdbarch = get_frame_arch (frame);
374   /* MIPS1 and MIPS2 have only 32 bit FPRs, and the FR bit is not
375      meaningful.  */
376   if (register_size (gdbarch, mips_regnum (gdbarch)->fp0) == 4)
377     return 0;
378
379 #if 0
380   /* FIXME drow 2002-03-10: This is disabled until we can do it consistently,
381      in all the places we deal with FP registers.  PR gdb/413.  */
382   /* Otherwise check the FR bit in the status register - it controls
383      the FP compatiblity mode.  If it is clear we are in compatibility
384      mode.  */
385   if ((get_frame_register_unsigned (frame, MIPS_PS_REGNUM) & ST0_FR) == 0)
386     return 1;
387 #endif
388
389   return 0;
390 }
391
392 #define VM_MIN_ADDRESS (CORE_ADDR)0x400000
393
394 static CORE_ADDR heuristic_proc_start (CORE_ADDR);
395
396 static void reinit_frame_cache_sfunc (char *, int, struct cmd_list_element *);
397
398 static struct type *mips_float_register_type (void);
399 static struct type *mips_double_register_type (void);
400
401 /* The list of available "set mips " and "show mips " commands */
402
403 static struct cmd_list_element *setmipscmdlist = NULL;
404 static struct cmd_list_element *showmipscmdlist = NULL;
405
406 /* Integer registers 0 thru 31 are handled explicitly by
407    mips_register_name().  Processor specific registers 32 and above
408    are listed in the following tables.  */
409
410 enum
411 { NUM_MIPS_PROCESSOR_REGS = (90 - 32) };
412
413 /* Generic MIPS.  */
414
415 static const char *mips_generic_reg_names[NUM_MIPS_PROCESSOR_REGS] = {
416   "sr", "lo", "hi", "bad", "cause", "pc",
417   "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
418   "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
419   "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
420   "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
421   "fsr", "fir", "" /*"fp" */ , "",
422   "", "", "", "", "", "", "", "",
423   "", "", "", "", "", "", "", "",
424 };
425
426 /* Names of IDT R3041 registers.  */
427
428 static const char *mips_r3041_reg_names[] = {
429   "sr", "lo", "hi", "bad", "cause", "pc",
430   "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
431   "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
432   "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
433   "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
434   "fsr", "fir", "", /*"fp" */ "",
435   "", "", "bus", "ccfg", "", "", "", "",
436   "", "", "port", "cmp", "", "", "epc", "prid",
437 };
438
439 /* Names of tx39 registers.  */
440
441 static const char *mips_tx39_reg_names[NUM_MIPS_PROCESSOR_REGS] = {
442   "sr", "lo", "hi", "bad", "cause", "pc",
443   "", "", "", "", "", "", "", "",
444   "", "", "", "", "", "", "", "",
445   "", "", "", "", "", "", "", "",
446   "", "", "", "", "", "", "", "",
447   "", "", "", "",
448   "", "", "", "", "", "", "", "",
449   "", "", "config", "cache", "debug", "depc", "epc", ""
450 };
451
452 /* Names of IRIX registers.  */
453 static const char *mips_irix_reg_names[NUM_MIPS_PROCESSOR_REGS] = {
454   "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
455   "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
456   "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
457   "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
458   "pc", "cause", "bad", "hi", "lo", "fsr", "fir"
459 };
460
461
462 /* Return the name of the register corresponding to REGNO.  */
463 static const char *
464 mips_register_name (struct gdbarch *gdbarch, int regno)
465 {
466   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
467   /* GPR names for all ABIs other than n32/n64.  */
468   static char *mips_gpr_names[] = {
469     "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
470     "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7",
471     "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
472     "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra",
473   };
474
475   /* GPR names for n32 and n64 ABIs.  */
476   static char *mips_n32_n64_gpr_names[] = {
477     "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
478     "a4", "a5", "a6", "a7", "t0", "t1", "t2", "t3",
479     "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
480     "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra"
481   };
482
483   enum mips_abi abi = mips_abi (gdbarch);
484
485   /* Map [gdbarch_num_regs .. 2*gdbarch_num_regs) onto the raw registers, 
486      but then don't make the raw register names visible.  */
487   int rawnum = regno % gdbarch_num_regs (gdbarch);
488   if (regno < gdbarch_num_regs (gdbarch))
489     return "";
490
491   /* The MIPS integer registers are always mapped from 0 to 31.  The
492      names of the registers (which reflects the conventions regarding
493      register use) vary depending on the ABI.  */
494   if (0 <= rawnum && rawnum < 32)
495     {
496       if (abi == MIPS_ABI_N32 || abi == MIPS_ABI_N64)
497         return mips_n32_n64_gpr_names[rawnum];
498       else
499         return mips_gpr_names[rawnum];
500     }
501   else if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
502     return tdesc_register_name (gdbarch, rawnum);
503   else if (32 <= rawnum && rawnum < gdbarch_num_regs (gdbarch))
504     {
505       gdb_assert (rawnum - 32 < NUM_MIPS_PROCESSOR_REGS);
506       return tdep->mips_processor_reg_names[rawnum - 32];
507     }
508   else
509     internal_error (__FILE__, __LINE__,
510                     _("mips_register_name: bad register number %d"), rawnum);
511 }
512
513 /* Return the groups that a MIPS register can be categorised into.  */
514
515 static int
516 mips_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
517                           struct reggroup *reggroup)
518 {
519   int vector_p;
520   int float_p;
521   int raw_p;
522   int rawnum = regnum % gdbarch_num_regs (gdbarch);
523   int pseudo = regnum / gdbarch_num_regs (gdbarch);
524   if (reggroup == all_reggroup)
525     return pseudo;
526   vector_p = TYPE_VECTOR (register_type (gdbarch, regnum));
527   float_p = TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT;
528   /* FIXME: cagney/2003-04-13: Can't yet use gdbarch_num_regs
529      (gdbarch), as not all architectures are multi-arch.  */
530   raw_p = rawnum < gdbarch_num_regs (gdbarch);
531   if (gdbarch_register_name (gdbarch, regnum) == NULL
532       || gdbarch_register_name (gdbarch, regnum)[0] == '\0')
533     return 0;
534   if (reggroup == float_reggroup)
535     return float_p && pseudo;
536   if (reggroup == vector_reggroup)
537     return vector_p && pseudo;
538   if (reggroup == general_reggroup)
539     return (!vector_p && !float_p) && pseudo;
540   /* Save the pseudo registers.  Need to make certain that any code
541      extracting register values from a saved register cache also uses
542      pseudo registers.  */
543   if (reggroup == save_reggroup)
544     return raw_p && pseudo;
545   /* Restore the same pseudo register.  */
546   if (reggroup == restore_reggroup)
547     return raw_p && pseudo;
548   return 0;
549 }
550
551 /* Return the groups that a MIPS register can be categorised into.
552    This version is only used if we have a target description which
553    describes real registers (and their groups).  */
554
555 static int
556 mips_tdesc_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
557                                 struct reggroup *reggroup)
558 {
559   int rawnum = regnum % gdbarch_num_regs (gdbarch);
560   int pseudo = regnum / gdbarch_num_regs (gdbarch);
561   int ret;
562
563   /* Only save, restore, and display the pseudo registers.  Need to
564      make certain that any code extracting register values from a
565      saved register cache also uses pseudo registers.
566
567      Note: saving and restoring the pseudo registers is slightly
568      strange; if we have 64 bits, we should save and restore all
569      64 bits.  But this is hard and has little benefit.  */
570   if (!pseudo)
571     return 0;
572
573   ret = tdesc_register_in_reggroup_p (gdbarch, rawnum, reggroup);
574   if (ret != -1)
575     return ret;
576
577   return mips_register_reggroup_p (gdbarch, regnum, reggroup);
578 }
579
580 /* Map the symbol table registers which live in the range [1 *
581    gdbarch_num_regs .. 2 * gdbarch_num_regs) back onto the corresponding raw
582    registers.  Take care of alignment and size problems.  */
583
584 static void
585 mips_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
586                            int cookednum, gdb_byte *buf)
587 {
588   int rawnum = cookednum % gdbarch_num_regs (gdbarch);
589   gdb_assert (cookednum >= gdbarch_num_regs (gdbarch)
590               && cookednum < 2 * gdbarch_num_regs (gdbarch));
591   if (register_size (gdbarch, rawnum) == register_size (gdbarch, cookednum))
592     regcache_raw_read (regcache, rawnum, buf);
593   else if (register_size (gdbarch, rawnum) >
594            register_size (gdbarch, cookednum))
595     {
596       if (gdbarch_tdep (gdbarch)->mips64_transfers_32bit_regs_p
597           || gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE)
598         regcache_raw_read_part (regcache, rawnum, 0, 4, buf);
599       else
600         regcache_raw_read_part (regcache, rawnum, 4, 4, buf);
601     }
602   else
603     internal_error (__FILE__, __LINE__, _("bad register size"));
604 }
605
606 static void
607 mips_pseudo_register_write (struct gdbarch *gdbarch,
608                             struct regcache *regcache, int cookednum,
609                             const gdb_byte *buf)
610 {
611   int rawnum = cookednum % gdbarch_num_regs (gdbarch);
612   gdb_assert (cookednum >= gdbarch_num_regs (gdbarch)
613               && cookednum < 2 * gdbarch_num_regs (gdbarch));
614   if (register_size (gdbarch, rawnum) == register_size (gdbarch, cookednum))
615     regcache_raw_write (regcache, rawnum, buf);
616   else if (register_size (gdbarch, rawnum) >
617            register_size (gdbarch, cookednum))
618     {
619       if (gdbarch_tdep (gdbarch)->mips64_transfers_32bit_regs_p
620           || gdbarch_byte_order (gdbarch) == BFD_ENDIAN_LITTLE)
621         regcache_raw_write_part (regcache, rawnum, 0, 4, buf);
622       else
623         regcache_raw_write_part (regcache, rawnum, 4, 4, buf);
624     }
625   else
626     internal_error (__FILE__, __LINE__, _("bad register size"));
627 }
628
629 /* Table to translate MIPS16 register field to actual register number.  */
630 static int mips16_to_32_reg[8] = { 16, 17, 2, 3, 4, 5, 6, 7 };
631
632 /* Heuristic_proc_start may hunt through the text section for a long
633    time across a 2400 baud serial line.  Allows the user to limit this
634    search.  */
635
636 static unsigned int heuristic_fence_post = 0;
637
638 /* Number of bytes of storage in the actual machine representation for
639    register N.  NOTE: This defines the pseudo register type so need to
640    rebuild the architecture vector.  */
641
642 static int mips64_transfers_32bit_regs_p = 0;
643
644 static void
645 set_mips64_transfers_32bit_regs (char *args, int from_tty,
646                                  struct cmd_list_element *c)
647 {
648   struct gdbarch_info info;
649   gdbarch_info_init (&info);
650   /* FIXME: cagney/2003-11-15: Should be setting a field in "info"
651      instead of relying on globals.  Doing that would let generic code
652      handle the search for this specific architecture.  */
653   if (!gdbarch_update_p (info))
654     {
655       mips64_transfers_32bit_regs_p = 0;
656       error (_("32-bit compatibility mode not supported"));
657     }
658 }
659
660 /* Convert to/from a register and the corresponding memory value.  */
661
662 static int
663 mips_convert_register_p (int regnum, struct type *type)
664 {
665   return (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG
666           && register_size (current_gdbarch, regnum) == 4
667           && (regnum % gdbarch_num_regs (current_gdbarch))
668                 >= mips_regnum (current_gdbarch)->fp0
669           && (regnum % gdbarch_num_regs (current_gdbarch))
670                 < mips_regnum (current_gdbarch)->fp0 + 32
671           && TYPE_CODE (type) == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8);
672 }
673
674 static void
675 mips_register_to_value (struct frame_info *frame, int regnum,
676                         struct type *type, gdb_byte *to)
677 {
678   get_frame_register (frame, regnum + 0, to + 4);
679   get_frame_register (frame, regnum + 1, to + 0);
680 }
681
682 static void
683 mips_value_to_register (struct frame_info *frame, int regnum,
684                         struct type *type, const gdb_byte *from)
685 {
686   put_frame_register (frame, regnum + 0, from + 4);
687   put_frame_register (frame, regnum + 1, from + 0);
688 }
689
690 /* Return the GDB type object for the "standard" data type of data in
691    register REG.  */
692
693 static struct type *
694 mips_register_type (struct gdbarch *gdbarch, int regnum)
695 {
696   gdb_assert (regnum >= 0 && regnum < 2 * gdbarch_num_regs (gdbarch));
697   if ((regnum % gdbarch_num_regs (gdbarch)) >= mips_regnum (gdbarch)->fp0
698       && (regnum % gdbarch_num_regs (gdbarch))
699          < mips_regnum (gdbarch)->fp0 + 32)
700     {
701       /* The floating-point registers raw, or cooked, always match
702          mips_isa_regsize(), and also map 1:1, byte for byte.  */
703       if (mips_isa_regsize (gdbarch) == 4)
704         return builtin_type_ieee_single;
705       else
706         return builtin_type_ieee_double;
707     }
708   else if (regnum < gdbarch_num_regs (gdbarch))
709     {
710       /* The raw or ISA registers.  These are all sized according to
711          the ISA regsize.  */
712       if (mips_isa_regsize (gdbarch) == 4)
713         return builtin_type_int32;
714       else
715         return builtin_type_int64;
716     }
717   else
718     {
719       /* The cooked or ABI registers.  These are sized according to
720          the ABI (with a few complications).  */
721       if (regnum >= (gdbarch_num_regs (gdbarch)
722                      + mips_regnum (gdbarch)->fp_control_status)
723           && regnum <= gdbarch_num_regs (gdbarch) + MIPS_LAST_EMBED_REGNUM)
724         /* The pseudo/cooked view of the embedded registers is always
725            32-bit.  The raw view is handled below.  */
726         return builtin_type_int32;
727       else if (gdbarch_tdep (gdbarch)->mips64_transfers_32bit_regs_p)
728         /* The target, while possibly using a 64-bit register buffer,
729            is only transfering 32-bits of each integer register.
730            Reflect this in the cooked/pseudo (ABI) register value.  */
731         return builtin_type_int32;
732       else if (mips_abi_regsize (gdbarch) == 4)
733         /* The ABI is restricted to 32-bit registers (the ISA could be
734            32- or 64-bit).  */
735         return builtin_type_int32;
736       else
737         /* 64-bit ABI.  */
738         return builtin_type_int64;
739     }
740 }
741
742 /* Return the GDB type for the pseudo register REGNUM, which is the
743    ABI-level view.  This function is only called if there is a target
744    description which includes registers, so we know precisely the
745    types of hardware registers.  */
746
747 static struct type *
748 mips_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
749 {
750   const int num_regs = gdbarch_num_regs (gdbarch);
751   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
752   int rawnum = regnum % num_regs;
753   struct type *rawtype;
754
755   gdb_assert (regnum >= num_regs && regnum < 2 * num_regs);
756
757   /* Absent registers are still absent.  */
758   rawtype = gdbarch_register_type (gdbarch, rawnum);
759   if (TYPE_LENGTH (rawtype) == 0)
760     return rawtype;
761
762   if (rawnum >= MIPS_EMBED_FP0_REGNUM && rawnum < MIPS_EMBED_FP0_REGNUM + 32)
763     /* Present the floating point registers however the hardware did;
764        do not try to convert between FPU layouts.  */
765     return rawtype;
766
767   if (rawnum >= MIPS_EMBED_FP0_REGNUM + 32 && rawnum <= MIPS_LAST_EMBED_REGNUM)
768     {
769       /* The pseudo/cooked view of embedded registers is always
770          32-bit, even if the target transfers 64-bit values for them.
771          New targets relying on XML descriptions should only transfer
772          the necessary 32 bits, but older versions of GDB expected 64,
773          so allow the target to provide 64 bits without interfering
774          with the displayed type.  */
775       return builtin_type_int32;
776     }
777
778   /* Use pointer types for registers if we can.  For n32 we can not,
779      since we do not have a 64-bit pointer type.  */
780   if (mips_abi_regsize (gdbarch) == TYPE_LENGTH (builtin_type_void_data_ptr))
781     {
782       if (rawnum == MIPS_SP_REGNUM || rawnum == MIPS_EMBED_BADVADDR_REGNUM)
783         return builtin_type_void_data_ptr;
784       else if (rawnum == MIPS_EMBED_PC_REGNUM)
785         return builtin_type_void_func_ptr;
786     }
787
788   if (mips_abi_regsize (gdbarch) == 4 && TYPE_LENGTH (rawtype) == 8
789       && rawnum >= MIPS_ZERO_REGNUM && rawnum <= MIPS_EMBED_PC_REGNUM)
790     return builtin_type_int32;
791
792   /* For all other registers, pass through the hardware type.  */
793   return rawtype;
794 }
795
796 /* Should the upper word of 64-bit addresses be zeroed? */
797 enum auto_boolean mask_address_var = AUTO_BOOLEAN_AUTO;
798
799 static int
800 mips_mask_address_p (struct gdbarch_tdep *tdep)
801 {
802   switch (mask_address_var)
803     {
804     case AUTO_BOOLEAN_TRUE:
805       return 1;
806     case AUTO_BOOLEAN_FALSE:
807       return 0;
808       break;
809     case AUTO_BOOLEAN_AUTO:
810       return tdep->default_mask_address_p;
811     default:
812       internal_error (__FILE__, __LINE__, _("mips_mask_address_p: bad switch"));
813       return -1;
814     }
815 }
816
817 static void
818 show_mask_address (struct ui_file *file, int from_tty,
819                    struct cmd_list_element *c, const char *value)
820 {
821   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
822
823   deprecated_show_value_hack (file, from_tty, c, value);
824   switch (mask_address_var)
825     {
826     case AUTO_BOOLEAN_TRUE:
827       printf_filtered ("The 32 bit mips address mask is enabled\n");
828       break;
829     case AUTO_BOOLEAN_FALSE:
830       printf_filtered ("The 32 bit mips address mask is disabled\n");
831       break;
832     case AUTO_BOOLEAN_AUTO:
833       printf_filtered
834         ("The 32 bit address mask is set automatically.  Currently %s\n",
835          mips_mask_address_p (tdep) ? "enabled" : "disabled");
836       break;
837     default:
838       internal_error (__FILE__, __LINE__, _("show_mask_address: bad switch"));
839       break;
840     }
841 }
842
843 /* Tell if the program counter value in MEMADDR is in a MIPS16 function.  */
844
845 int
846 mips_pc_is_mips16 (CORE_ADDR memaddr)
847 {
848   struct minimal_symbol *sym;
849
850   /* If bit 0 of the address is set, assume this is a MIPS16 address. */
851   if (is_mips16_addr (memaddr))
852     return 1;
853
854   /* A flag indicating that this is a MIPS16 function is stored by elfread.c in
855      the high bit of the info field.  Use this to decide if the function is
856      MIPS16 or normal MIPS.  */
857   sym = lookup_minimal_symbol_by_pc (memaddr);
858   if (sym)
859     return msymbol_is_special (sym);
860   else
861     return 0;
862 }
863
864 /* MIPS believes that the PC has a sign extended value.  Perhaps the
865    all registers should be sign extended for simplicity? */
866
867 static CORE_ADDR
868 mips_read_pc (struct regcache *regcache)
869 {
870   ULONGEST pc;
871   int regnum = mips_regnum (get_regcache_arch (regcache))->pc;
872   regcache_cooked_read_signed (regcache, regnum, &pc);
873   return pc;
874 }
875
876 static CORE_ADDR
877 mips_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
878 {
879   return frame_unwind_register_signed
880            (next_frame, gdbarch_num_regs (gdbarch) + mips_regnum (gdbarch)->pc);
881 }
882
883 static CORE_ADDR
884 mips_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
885 {
886   return frame_unwind_register_signed
887            (next_frame, gdbarch_num_regs (gdbarch) + MIPS_SP_REGNUM);
888 }
889
890 /* Assuming NEXT_FRAME->prev is a dummy, return the frame ID of that
891    dummy frame.  The frame ID's base needs to match the TOS value
892    saved by save_dummy_frame_tos(), and the PC match the dummy frame's
893    breakpoint.  */
894
895 static struct frame_id
896 mips_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame)
897 {
898   return frame_id_build
899            (frame_unwind_register_signed (next_frame,
900                                           gdbarch_num_regs (gdbarch)
901                                           + MIPS_SP_REGNUM),
902                                           frame_pc_unwind (next_frame));
903 }
904
905 static void
906 mips_write_pc (struct regcache *regcache, CORE_ADDR pc)
907 {
908   int regnum = mips_regnum (get_regcache_arch (regcache))->pc;
909   regcache_cooked_write_unsigned (regcache, regnum, pc);
910 }
911
912 /* Fetch and return instruction from the specified location.  If the PC
913    is odd, assume it's a MIPS16 instruction; otherwise MIPS32.  */
914
915 static ULONGEST
916 mips_fetch_instruction (CORE_ADDR addr)
917 {
918   gdb_byte buf[MIPS_INSN32_SIZE];
919   int instlen;
920   int status;
921
922   if (mips_pc_is_mips16 (addr))
923     {
924       instlen = MIPS_INSN16_SIZE;
925       addr = unmake_mips16_addr (addr);
926     }
927   else
928     instlen = MIPS_INSN32_SIZE;
929   status = read_memory_nobpt (addr, buf, instlen);
930   if (status)
931     memory_error (status, addr);
932   return extract_unsigned_integer (buf, instlen);
933 }
934
935 /* These the fields of 32 bit mips instructions */
936 #define mips32_op(x) (x >> 26)
937 #define itype_op(x) (x >> 26)
938 #define itype_rs(x) ((x >> 21) & 0x1f)
939 #define itype_rt(x) ((x >> 16) & 0x1f)
940 #define itype_immediate(x) (x & 0xffff)
941
942 #define jtype_op(x) (x >> 26)
943 #define jtype_target(x) (x & 0x03ffffff)
944
945 #define rtype_op(x) (x >> 26)
946 #define rtype_rs(x) ((x >> 21) & 0x1f)
947 #define rtype_rt(x) ((x >> 16) & 0x1f)
948 #define rtype_rd(x) ((x >> 11) & 0x1f)
949 #define rtype_shamt(x) ((x >> 6) & 0x1f)
950 #define rtype_funct(x) (x & 0x3f)
951
952 static LONGEST
953 mips32_relative_offset (ULONGEST inst)
954 {
955   return ((itype_immediate (inst) ^ 0x8000) - 0x8000) << 2;
956 }
957
958 /* Determine where to set a single step breakpoint while considering
959    branch prediction.  */
960 static CORE_ADDR
961 mips32_next_pc (struct frame_info *frame, CORE_ADDR pc)
962 {
963   unsigned long inst;
964   int op;
965   inst = mips_fetch_instruction (pc);
966   if ((inst & 0xe0000000) != 0) /* Not a special, jump or branch instruction */
967     {
968       if (itype_op (inst) >> 2 == 5)
969         /* BEQL, BNEL, BLEZL, BGTZL: bits 0101xx */
970         {
971           op = (itype_op (inst) & 0x03);
972           switch (op)
973             {
974             case 0:             /* BEQL */
975               goto equal_branch;
976             case 1:             /* BNEL */
977               goto neq_branch;
978             case 2:             /* BLEZL */
979               goto less_branch;
980             case 3:             /* BGTZL */
981               goto greater_branch;
982             default:
983               pc += 4;
984             }
985         }
986       else if (itype_op (inst) == 17 && itype_rs (inst) == 8)
987         /* BC1F, BC1FL, BC1T, BC1TL: 010001 01000 */
988         {
989           int tf = itype_rt (inst) & 0x01;
990           int cnum = itype_rt (inst) >> 2;
991           int fcrcs =
992             get_frame_register_signed (frame,
993                                        mips_regnum (get_frame_arch (frame))->
994                                                 fp_control_status);
995           int cond = ((fcrcs >> 24) & 0x0e) | ((fcrcs >> 23) & 0x01);
996
997           if (((cond >> cnum) & 0x01) == tf)
998             pc += mips32_relative_offset (inst) + 4;
999           else
1000             pc += 8;
1001         }
1002       else
1003         pc += 4;                /* Not a branch, next instruction is easy */
1004     }
1005   else
1006     {                           /* This gets way messy */
1007
1008       /* Further subdivide into SPECIAL, REGIMM and other */
1009       switch (op = itype_op (inst) & 0x07)      /* extract bits 28,27,26 */
1010         {
1011         case 0:         /* SPECIAL */
1012           op = rtype_funct (inst);
1013           switch (op)
1014             {
1015             case 8:             /* JR */
1016             case 9:             /* JALR */
1017               /* Set PC to that address */
1018               pc = get_frame_register_signed (frame, rtype_rs (inst));
1019               break;
1020             default:
1021               pc += 4;
1022             }
1023
1024           break;                /* end SPECIAL */
1025         case 1:         /* REGIMM */
1026           {
1027             op = itype_rt (inst);       /* branch condition */
1028             switch (op)
1029               {
1030               case 0:           /* BLTZ */
1031               case 2:           /* BLTZL */
1032               case 16:          /* BLTZAL */
1033               case 18:          /* BLTZALL */
1034               less_branch:
1035                 if (get_frame_register_signed (frame, itype_rs (inst)) < 0)
1036                   pc += mips32_relative_offset (inst) + 4;
1037                 else
1038                   pc += 8;      /* after the delay slot */
1039                 break;
1040               case 1:           /* BGEZ */
1041               case 3:           /* BGEZL */
1042               case 17:          /* BGEZAL */
1043               case 19:          /* BGEZALL */
1044                 if (get_frame_register_signed (frame, itype_rs (inst)) >= 0)
1045                   pc += mips32_relative_offset (inst) + 4;
1046                 else
1047                   pc += 8;      /* after the delay slot */
1048                 break;
1049                 /* All of the other instructions in the REGIMM category */
1050               default:
1051                 pc += 4;
1052               }
1053           }
1054           break;                /* end REGIMM */
1055         case 2:         /* J */
1056         case 3:         /* JAL */
1057           {
1058             unsigned long reg;
1059             reg = jtype_target (inst) << 2;
1060             /* Upper four bits get never changed... */
1061             pc = reg + ((pc + 4) & ~(CORE_ADDR) 0x0fffffff);
1062           }
1063           break;
1064           /* FIXME case JALX : */
1065           {
1066             unsigned long reg;
1067             reg = jtype_target (inst) << 2;
1068             pc = reg + ((pc + 4) & ~(CORE_ADDR) 0x0fffffff) + 1;        /* yes, +1 */
1069             /* Add 1 to indicate 16 bit mode - Invert ISA mode */
1070           }
1071           break;                /* The new PC will be alternate mode */
1072         case 4:         /* BEQ, BEQL */
1073         equal_branch:
1074           if (get_frame_register_signed (frame, itype_rs (inst)) ==
1075               get_frame_register_signed (frame, itype_rt (inst)))
1076             pc += mips32_relative_offset (inst) + 4;
1077           else
1078             pc += 8;
1079           break;
1080         case 5:         /* BNE, BNEL */
1081         neq_branch:
1082           if (get_frame_register_signed (frame, itype_rs (inst)) !=
1083               get_frame_register_signed (frame, itype_rt (inst)))
1084             pc += mips32_relative_offset (inst) + 4;
1085           else
1086             pc += 8;
1087           break;
1088         case 6:         /* BLEZ, BLEZL */
1089           if (get_frame_register_signed (frame, itype_rs (inst)) <= 0)
1090             pc += mips32_relative_offset (inst) + 4;
1091           else
1092             pc += 8;
1093           break;
1094         case 7:
1095         default:
1096         greater_branch: /* BGTZ, BGTZL */
1097           if (get_frame_register_signed (frame, itype_rs (inst)) > 0)
1098             pc += mips32_relative_offset (inst) + 4;
1099           else
1100             pc += 8;
1101           break;
1102         }                       /* switch */
1103     }                           /* else */
1104   return pc;
1105 }                               /* mips32_next_pc */
1106
1107 /* Decoding the next place to set a breakpoint is irregular for the
1108    mips 16 variant, but fortunately, there fewer instructions. We have to cope
1109    ith extensions for 16 bit instructions and a pair of actual 32 bit instructions.
1110    We dont want to set a single step instruction on the extend instruction
1111    either.
1112  */
1113
1114 /* Lots of mips16 instruction formats */
1115 /* Predicting jumps requires itype,ritype,i8type
1116    and their extensions      extItype,extritype,extI8type
1117  */
1118 enum mips16_inst_fmts
1119 {
1120   itype,                        /* 0  immediate 5,10 */
1121   ritype,                       /* 1   5,3,8 */
1122   rrtype,                       /* 2   5,3,3,5 */
1123   rritype,                      /* 3   5,3,3,5 */
1124   rrrtype,                      /* 4   5,3,3,3,2 */
1125   rriatype,                     /* 5   5,3,3,1,4 */
1126   shifttype,                    /* 6   5,3,3,3,2 */
1127   i8type,                       /* 7   5,3,8 */
1128   i8movtype,                    /* 8   5,3,3,5 */
1129   i8mov32rtype,                 /* 9   5,3,5,3 */
1130   i64type,                      /* 10  5,3,8 */
1131   ri64type,                     /* 11  5,3,3,5 */
1132   jalxtype,                     /* 12  5,1,5,5,16 - a 32 bit instruction */
1133   exiItype,                     /* 13  5,6,5,5,1,1,1,1,1,1,5 */
1134   extRitype,                    /* 14  5,6,5,5,3,1,1,1,5 */
1135   extRRItype,                   /* 15  5,5,5,5,3,3,5 */
1136   extRRIAtype,                  /* 16  5,7,4,5,3,3,1,4 */
1137   EXTshifttype,                 /* 17  5,5,1,1,1,1,1,1,5,3,3,1,1,1,2 */
1138   extI8type,                    /* 18  5,6,5,5,3,1,1,1,5 */
1139   extI64type,                   /* 19  5,6,5,5,3,1,1,1,5 */
1140   extRi64type,                  /* 20  5,6,5,5,3,3,5 */
1141   extshift64type                /* 21  5,5,1,1,1,1,1,1,5,1,1,1,3,5 */
1142 };
1143 /* I am heaping all the fields of the formats into one structure and
1144    then, only the fields which are involved in instruction extension */
1145 struct upk_mips16
1146 {
1147   CORE_ADDR offset;
1148   unsigned int regx;            /* Function in i8 type */
1149   unsigned int regy;
1150 };
1151
1152
1153 /* The EXT-I, EXT-ri nad EXT-I8 instructions all have the same format
1154    for the bits which make up the immediatate extension.  */
1155
1156 static CORE_ADDR
1157 extended_offset (unsigned int extension)
1158 {
1159   CORE_ADDR value;
1160   value = (extension >> 21) & 0x3f;     /* * extract 15:11 */
1161   value = value << 6;
1162   value |= (extension >> 16) & 0x1f;    /* extrace 10:5 */
1163   value = value << 5;
1164   value |= extension & 0x01f;   /* extract 4:0 */
1165   return value;
1166 }
1167
1168 /* Only call this function if you know that this is an extendable
1169    instruction.  It won't malfunction, but why make excess remote memory
1170    references?  If the immediate operands get sign extended or something,
1171    do it after the extension is performed.  */
1172 /* FIXME: Every one of these cases needs to worry about sign extension
1173    when the offset is to be used in relative addressing.  */
1174
1175 static unsigned int
1176 fetch_mips_16 (CORE_ADDR pc)
1177 {
1178   gdb_byte buf[8];
1179   pc &= 0xfffffffe;             /* clear the low order bit */
1180   target_read_memory (pc, buf, 2);
1181   return extract_unsigned_integer (buf, 2);
1182 }
1183
1184 static void
1185 unpack_mips16 (CORE_ADDR pc,
1186                unsigned int extension,
1187                unsigned int inst,
1188                enum mips16_inst_fmts insn_format, struct upk_mips16 *upk)
1189 {
1190   CORE_ADDR offset;
1191   int regx;
1192   int regy;
1193   switch (insn_format)
1194     {
1195     case itype:
1196       {
1197         CORE_ADDR value;
1198         if (extension)
1199           {
1200             value = extended_offset (extension);
1201             value = value << 11;        /* rom for the original value */
1202             value |= inst & 0x7ff;      /* eleven bits from instruction */
1203           }
1204         else
1205           {
1206             value = inst & 0x7ff;
1207             /* FIXME : Consider sign extension */
1208           }
1209         offset = value;
1210         regx = -1;
1211         regy = -1;
1212       }
1213       break;
1214     case ritype:
1215     case i8type:
1216       {                         /* A register identifier and an offset */
1217         /* Most of the fields are the same as I type but the
1218            immediate value is of a different length */
1219         CORE_ADDR value;
1220         if (extension)
1221           {
1222             value = extended_offset (extension);
1223             value = value << 8; /* from the original instruction */
1224             value |= inst & 0xff;       /* eleven bits from instruction */
1225             regx = (extension >> 8) & 0x07;     /* or i8 funct */
1226             if (value & 0x4000) /* test the sign bit , bit 26 */
1227               {
1228                 value &= ~0x3fff;       /* remove the sign bit */
1229                 value = -value;
1230               }
1231           }
1232         else
1233           {
1234             value = inst & 0xff;        /* 8 bits */
1235             regx = (inst >> 8) & 0x07;  /* or i8 funct */
1236             /* FIXME: Do sign extension , this format needs it */
1237             if (value & 0x80)   /* THIS CONFUSES ME */
1238               {
1239                 value &= 0xef;  /* remove the sign bit */
1240                 value = -value;
1241               }
1242           }
1243         offset = value;
1244         regy = -1;
1245         break;
1246       }
1247     case jalxtype:
1248       {
1249         unsigned long value;
1250         unsigned int nexthalf;
1251         value = ((inst & 0x1f) << 5) | ((inst >> 5) & 0x1f);
1252         value = value << 16;
1253         nexthalf = mips_fetch_instruction (pc + 2);     /* low bit still set */
1254         value |= nexthalf;
1255         offset = value;
1256         regx = -1;
1257         regy = -1;
1258         break;
1259       }
1260     default:
1261       internal_error (__FILE__, __LINE__, _("bad switch"));
1262     }
1263   upk->offset = offset;
1264   upk->regx = regx;
1265   upk->regy = regy;
1266 }
1267
1268
1269 static CORE_ADDR
1270 add_offset_16 (CORE_ADDR pc, int offset)
1271 {
1272   return ((offset << 2) | ((pc + 2) & (~(CORE_ADDR) 0x0fffffff)));
1273 }
1274
1275 static CORE_ADDR
1276 extended_mips16_next_pc (struct frame_info *frame, CORE_ADDR pc,
1277                          unsigned int extension, unsigned int insn)
1278 {
1279   int op = (insn >> 11);
1280   switch (op)
1281     {
1282     case 2:                     /* Branch */
1283       {
1284         CORE_ADDR offset;
1285         struct upk_mips16 upk;
1286         unpack_mips16 (pc, extension, insn, itype, &upk);
1287         offset = upk.offset;
1288         if (offset & 0x800)
1289           {
1290             offset &= 0xeff;
1291             offset = -offset;
1292           }
1293         pc += (offset << 1) + 2;
1294         break;
1295       }
1296     case 3:                     /* JAL , JALX - Watch out, these are 32 bit instruction */
1297       {
1298         struct upk_mips16 upk;
1299         unpack_mips16 (pc, extension, insn, jalxtype, &upk);
1300         pc = add_offset_16 (pc, upk.offset);
1301         if ((insn >> 10) & 0x01)        /* Exchange mode */
1302           pc = pc & ~0x01;      /* Clear low bit, indicate 32 bit mode */
1303         else
1304           pc |= 0x01;
1305         break;
1306       }
1307     case 4:                     /* beqz */
1308       {
1309         struct upk_mips16 upk;
1310         int reg;
1311         unpack_mips16 (pc, extension, insn, ritype, &upk);
1312         reg = get_frame_register_signed (frame, upk.regx);
1313         if (reg == 0)
1314           pc += (upk.offset << 1) + 2;
1315         else
1316           pc += 2;
1317         break;
1318       }
1319     case 5:                     /* bnez */
1320       {
1321         struct upk_mips16 upk;
1322         int reg;
1323         unpack_mips16 (pc, extension, insn, ritype, &upk);
1324         reg = get_frame_register_signed (frame, upk.regx);
1325         if (reg != 0)
1326           pc += (upk.offset << 1) + 2;
1327         else
1328           pc += 2;
1329         break;
1330       }
1331     case 12:                    /* I8 Formats btez btnez */
1332       {
1333         struct upk_mips16 upk;
1334         int reg;
1335         unpack_mips16 (pc, extension, insn, i8type, &upk);
1336         /* upk.regx contains the opcode */
1337         reg = get_frame_register_signed (frame, 24);  /* Test register is 24 */
1338         if (((upk.regx == 0) && (reg == 0))     /* BTEZ */
1339             || ((upk.regx == 1) && (reg != 0))) /* BTNEZ */
1340           /* pc = add_offset_16(pc,upk.offset) ; */
1341           pc += (upk.offset << 1) + 2;
1342         else
1343           pc += 2;
1344         break;
1345       }
1346     case 29:                    /* RR Formats JR, JALR, JALR-RA */
1347       {
1348         struct upk_mips16 upk;
1349         /* upk.fmt = rrtype; */
1350         op = insn & 0x1f;
1351         if (op == 0)
1352           {
1353             int reg;
1354             upk.regx = (insn >> 8) & 0x07;
1355             upk.regy = (insn >> 5) & 0x07;
1356             switch (upk.regy)
1357               {
1358               case 0:
1359                 reg = upk.regx;
1360                 break;
1361               case 1:
1362                 reg = 31;
1363                 break;          /* Function return instruction */
1364               case 2:
1365                 reg = upk.regx;
1366                 break;
1367               default:
1368                 reg = 31;
1369                 break;          /* BOGUS Guess */
1370               }
1371             pc = get_frame_register_signed (frame, reg);
1372           }
1373         else
1374           pc += 2;
1375         break;
1376       }
1377     case 30:
1378       /* This is an instruction extension.  Fetch the real instruction
1379          (which follows the extension) and decode things based on
1380          that. */
1381       {
1382         pc += 2;
1383         pc = extended_mips16_next_pc (frame, pc, insn, fetch_mips_16 (pc));
1384         break;
1385       }
1386     default:
1387       {
1388         pc += 2;
1389         break;
1390       }
1391     }
1392   return pc;
1393 }
1394
1395 static CORE_ADDR
1396 mips16_next_pc (struct frame_info *frame, CORE_ADDR pc)
1397 {
1398   unsigned int insn = fetch_mips_16 (pc);
1399   return extended_mips16_next_pc (frame, pc, 0, insn);
1400 }
1401
1402 /* The mips_next_pc function supports single_step when the remote
1403    target monitor or stub is not developed enough to do a single_step.
1404    It works by decoding the current instruction and predicting where a
1405    branch will go. This isnt hard because all the data is available.
1406    The MIPS32 and MIPS16 variants are quite different.  */
1407 static CORE_ADDR
1408 mips_next_pc (struct frame_info *frame, CORE_ADDR pc)
1409 {
1410   if (is_mips16_addr (pc))
1411     return mips16_next_pc (frame, pc);
1412   else
1413     return mips32_next_pc (frame, pc);
1414 }
1415
1416 struct mips_frame_cache
1417 {
1418   CORE_ADDR base;
1419   struct trad_frame_saved_reg *saved_regs;
1420 };
1421
1422 /* Set a register's saved stack address in temp_saved_regs.  If an
1423    address has already been set for this register, do nothing; this
1424    way we will only recognize the first save of a given register in a
1425    function prologue.
1426
1427    For simplicity, save the address in both [0 .. gdbarch_num_regs) and
1428    [gdbarch_num_regs .. 2*gdbarch_num_regs).
1429    Strictly speaking, only the second range is used as it is only second
1430    range (the ABI instead of ISA registers) that comes into play when finding
1431    saved registers in a frame.  */
1432
1433 static void
1434 set_reg_offset (struct mips_frame_cache *this_cache, int regnum,
1435                 CORE_ADDR offset)
1436 {
1437   if (this_cache != NULL
1438       && this_cache->saved_regs[regnum].addr == -1)
1439     {
1440       this_cache->saved_regs[regnum
1441                              + 0 * gdbarch_num_regs (current_gdbarch)].addr
1442       = offset;
1443       this_cache->saved_regs[regnum
1444                              + 1 * gdbarch_num_regs (current_gdbarch)].addr
1445       = offset;
1446     }
1447 }
1448
1449
1450 /* Fetch the immediate value from a MIPS16 instruction.
1451    If the previous instruction was an EXTEND, use it to extend
1452    the upper bits of the immediate value.  This is a helper function
1453    for mips16_scan_prologue.  */
1454
1455 static int
1456 mips16_get_imm (unsigned short prev_inst,       /* previous instruction */
1457                 unsigned short inst,    /* current instruction */
1458                 int nbits,      /* number of bits in imm field */
1459                 int scale,      /* scale factor to be applied to imm */
1460                 int is_signed)  /* is the imm field signed? */
1461 {
1462   int offset;
1463
1464   if ((prev_inst & 0xf800) == 0xf000)   /* prev instruction was EXTEND? */
1465     {
1466       offset = ((prev_inst & 0x1f) << 11) | (prev_inst & 0x7e0);
1467       if (offset & 0x8000)      /* check for negative extend */
1468         offset = 0 - (0x10000 - (offset & 0xffff));
1469       return offset | (inst & 0x1f);
1470     }
1471   else
1472     {
1473       int max_imm = 1 << nbits;
1474       int mask = max_imm - 1;
1475       int sign_bit = max_imm >> 1;
1476
1477       offset = inst & mask;
1478       if (is_signed && (offset & sign_bit))
1479         offset = 0 - (max_imm - offset);
1480       return offset * scale;
1481     }
1482 }
1483
1484
1485 /* Analyze the function prologue from START_PC to LIMIT_PC. Builds
1486    the associated FRAME_CACHE if not null.
1487    Return the address of the first instruction past the prologue.  */
1488
1489 static CORE_ADDR
1490 mips16_scan_prologue (CORE_ADDR start_pc, CORE_ADDR limit_pc,
1491                       struct frame_info *next_frame,
1492                       struct mips_frame_cache *this_cache)
1493 {
1494   CORE_ADDR cur_pc;
1495   CORE_ADDR frame_addr = 0;     /* Value of $r17, used as frame pointer */
1496   CORE_ADDR sp;
1497   long frame_offset = 0;        /* Size of stack frame.  */
1498   long frame_adjust = 0;        /* Offset of FP from SP.  */
1499   int frame_reg = MIPS_SP_REGNUM;
1500   unsigned short prev_inst = 0; /* saved copy of previous instruction */
1501   unsigned inst = 0;            /* current instruction */
1502   unsigned entry_inst = 0;      /* the entry instruction */
1503   int reg, offset;
1504
1505   int extend_bytes = 0;
1506   int prev_extend_bytes;
1507   CORE_ADDR end_prologue_addr = 0;
1508   struct gdbarch *gdbarch = get_frame_arch (next_frame);
1509
1510   /* Can be called when there's no process, and hence when there's no
1511      NEXT_FRAME.  */
1512   if (next_frame != NULL)
1513     sp = frame_unwind_register_signed (next_frame,
1514                                        gdbarch_num_regs (gdbarch)
1515                                        + MIPS_SP_REGNUM);
1516   else
1517     sp = 0;
1518
1519   if (limit_pc > start_pc + 200)
1520     limit_pc = start_pc + 200;
1521
1522   for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS_INSN16_SIZE)
1523     {
1524       /* Save the previous instruction.  If it's an EXTEND, we'll extract
1525          the immediate offset extension from it in mips16_get_imm.  */
1526       prev_inst = inst;
1527
1528       /* Fetch and decode the instruction.   */
1529       inst = (unsigned short) mips_fetch_instruction (cur_pc);
1530
1531       /* Normally we ignore extend instructions.  However, if it is
1532          not followed by a valid prologue instruction, then this
1533          instruction is not part of the prologue either.  We must
1534          remember in this case to adjust the end_prologue_addr back
1535          over the extend.  */
1536       if ((inst & 0xf800) == 0xf000)    /* extend */
1537         {
1538           extend_bytes = MIPS_INSN16_SIZE;
1539           continue;
1540         }
1541
1542       prev_extend_bytes = extend_bytes;
1543       extend_bytes = 0;
1544
1545       if ((inst & 0xff00) == 0x6300     /* addiu sp */
1546           || (inst & 0xff00) == 0xfb00) /* daddiu sp */
1547         {
1548           offset = mips16_get_imm (prev_inst, inst, 8, 8, 1);
1549           if (offset < 0)       /* negative stack adjustment? */
1550             frame_offset -= offset;
1551           else
1552             /* Exit loop if a positive stack adjustment is found, which
1553                usually means that the stack cleanup code in the function
1554                epilogue is reached.  */
1555             break;
1556         }
1557       else if ((inst & 0xf800) == 0xd000)       /* sw reg,n($sp) */
1558         {
1559           offset = mips16_get_imm (prev_inst, inst, 8, 4, 0);
1560           reg = mips16_to_32_reg[(inst & 0x700) >> 8];
1561           set_reg_offset (this_cache, reg, sp + offset);
1562         }
1563       else if ((inst & 0xff00) == 0xf900)       /* sd reg,n($sp) */
1564         {
1565           offset = mips16_get_imm (prev_inst, inst, 5, 8, 0);
1566           reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
1567           set_reg_offset (this_cache, reg, sp + offset);
1568         }
1569       else if ((inst & 0xff00) == 0x6200)       /* sw $ra,n($sp) */
1570         {
1571           offset = mips16_get_imm (prev_inst, inst, 8, 4, 0);
1572           set_reg_offset (this_cache, MIPS_RA_REGNUM, sp + offset);
1573         }
1574       else if ((inst & 0xff00) == 0xfa00)       /* sd $ra,n($sp) */
1575         {
1576           offset = mips16_get_imm (prev_inst, inst, 8, 8, 0);
1577           set_reg_offset (this_cache, MIPS_RA_REGNUM, sp + offset);
1578         }
1579       else if (inst == 0x673d)  /* move $s1, $sp */
1580         {
1581           frame_addr = sp;
1582           frame_reg = 17;
1583         }
1584       else if ((inst & 0xff00) == 0x0100)       /* addiu $s1,sp,n */
1585         {
1586           offset = mips16_get_imm (prev_inst, inst, 8, 4, 0);
1587           frame_addr = sp + offset;
1588           frame_reg = 17;
1589           frame_adjust = offset;
1590         }
1591       else if ((inst & 0xFF00) == 0xd900)       /* sw reg,offset($s1) */
1592         {
1593           offset = mips16_get_imm (prev_inst, inst, 5, 4, 0);
1594           reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
1595           set_reg_offset (this_cache, reg, frame_addr + offset);
1596         }
1597       else if ((inst & 0xFF00) == 0x7900)       /* sd reg,offset($s1) */
1598         {
1599           offset = mips16_get_imm (prev_inst, inst, 5, 8, 0);
1600           reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
1601           set_reg_offset (this_cache, reg, frame_addr + offset);
1602         }
1603       else if ((inst & 0xf81f) == 0xe809
1604                && (inst & 0x700) != 0x700)      /* entry */
1605         entry_inst = inst;      /* save for later processing */
1606       else if ((inst & 0xf800) == 0x1800)       /* jal(x) */
1607         cur_pc += MIPS_INSN16_SIZE;     /* 32-bit instruction */
1608       else if ((inst & 0xff1c) == 0x6704)       /* move reg,$a0-$a3 */
1609         {
1610           /* This instruction is part of the prologue, but we don't
1611              need to do anything special to handle it.  */
1612         }
1613       else
1614         {
1615           /* This instruction is not an instruction typically found
1616              in a prologue, so we must have reached the end of the
1617              prologue.  */
1618           if (end_prologue_addr == 0)
1619             end_prologue_addr = cur_pc - prev_extend_bytes;
1620         }
1621     }
1622
1623   /* The entry instruction is typically the first instruction in a function,
1624      and it stores registers at offsets relative to the value of the old SP
1625      (before the prologue).  But the value of the sp parameter to this
1626      function is the new SP (after the prologue has been executed).  So we
1627      can't calculate those offsets until we've seen the entire prologue,
1628      and can calculate what the old SP must have been. */
1629   if (entry_inst != 0)
1630     {
1631       int areg_count = (entry_inst >> 8) & 7;
1632       int sreg_count = (entry_inst >> 6) & 3;
1633
1634       /* The entry instruction always subtracts 32 from the SP.  */
1635       frame_offset += 32;
1636
1637       /* Now we can calculate what the SP must have been at the
1638          start of the function prologue.  */
1639       sp += frame_offset;
1640
1641       /* Check if a0-a3 were saved in the caller's argument save area.  */
1642       for (reg = 4, offset = 0; reg < areg_count + 4; reg++)
1643         {
1644           set_reg_offset (this_cache, reg, sp + offset);
1645           offset += mips_abi_regsize (gdbarch);
1646         }
1647
1648       /* Check if the ra register was pushed on the stack.  */
1649       offset = -4;
1650       if (entry_inst & 0x20)
1651         {
1652           set_reg_offset (this_cache, MIPS_RA_REGNUM, sp + offset);
1653           offset -= mips_abi_regsize (gdbarch);
1654         }
1655
1656       /* Check if the s0 and s1 registers were pushed on the stack.  */
1657       for (reg = 16; reg < sreg_count + 16; reg++)
1658         {
1659           set_reg_offset (this_cache, reg, sp + offset);
1660           offset -= mips_abi_regsize (gdbarch);
1661         }
1662     }
1663
1664   if (this_cache != NULL)
1665     {
1666       this_cache->base =
1667         (frame_unwind_register_signed (next_frame,
1668                                        gdbarch_num_regs (gdbarch) + frame_reg)
1669          + frame_offset - frame_adjust);
1670       /* FIXME: brobecker/2004-10-10: Just as in the mips32 case, we should
1671          be able to get rid of the assignment below, evetually. But it's
1672          still needed for now.  */
1673       this_cache->saved_regs[gdbarch_num_regs (gdbarch)
1674                              + mips_regnum (gdbarch)->pc]
1675         = this_cache->saved_regs[gdbarch_num_regs (gdbarch) + MIPS_RA_REGNUM];
1676     }
1677
1678   /* If we didn't reach the end of the prologue when scanning the function
1679      instructions, then set end_prologue_addr to the address of the
1680      instruction immediately after the last one we scanned.  */
1681   if (end_prologue_addr == 0)
1682     end_prologue_addr = cur_pc;
1683
1684   return end_prologue_addr;
1685 }
1686
1687 /* Heuristic unwinder for 16-bit MIPS instruction set (aka MIPS16).
1688    Procedures that use the 32-bit instruction set are handled by the
1689    mips_insn32 unwinder.  */
1690
1691 static struct mips_frame_cache *
1692 mips_insn16_frame_cache (struct frame_info *next_frame, void **this_cache)
1693 {
1694   struct mips_frame_cache *cache;
1695
1696   if ((*this_cache) != NULL)
1697     return (*this_cache);
1698   cache = FRAME_OBSTACK_ZALLOC (struct mips_frame_cache);
1699   (*this_cache) = cache;
1700   cache->saved_regs = trad_frame_alloc_saved_regs (next_frame);
1701
1702   /* Analyze the function prologue.  */
1703   {
1704     const CORE_ADDR pc =
1705       frame_unwind_address_in_block (next_frame, NORMAL_FRAME);
1706     CORE_ADDR start_addr;
1707
1708     find_pc_partial_function (pc, NULL, &start_addr, NULL);
1709     if (start_addr == 0)
1710       start_addr = heuristic_proc_start (pc);
1711     /* We can't analyze the prologue if we couldn't find the begining
1712        of the function.  */
1713     if (start_addr == 0)
1714       return cache;
1715
1716     mips16_scan_prologue (start_addr, pc, next_frame, *this_cache);
1717   }
1718   
1719   /* gdbarch_sp_regnum contains the value and not the address.  */
1720   trad_frame_set_value (cache->saved_regs,
1721                         gdbarch_num_regs (get_frame_arch (next_frame))
1722                           + MIPS_SP_REGNUM,
1723                         cache->base);
1724
1725   return (*this_cache);
1726 }
1727
1728 static void
1729 mips_insn16_frame_this_id (struct frame_info *next_frame, void **this_cache,
1730                            struct frame_id *this_id)
1731 {
1732   struct mips_frame_cache *info = mips_insn16_frame_cache (next_frame,
1733                                                            this_cache);
1734   (*this_id) = frame_id_build (info->base,
1735                                frame_func_unwind (next_frame, NORMAL_FRAME));
1736 }
1737
1738 static void
1739 mips_insn16_frame_prev_register (struct frame_info *next_frame,
1740                                  void **this_cache,
1741                                  int regnum, int *optimizedp,
1742                                  enum lval_type *lvalp, CORE_ADDR *addrp,
1743                                  int *realnump, gdb_byte *valuep)
1744 {
1745   struct mips_frame_cache *info = mips_insn16_frame_cache (next_frame,
1746                                                            this_cache);
1747   trad_frame_get_prev_register (next_frame, info->saved_regs, regnum,
1748                                 optimizedp, lvalp, addrp, realnump, valuep);
1749 }
1750
1751 static const struct frame_unwind mips_insn16_frame_unwind =
1752 {
1753   NORMAL_FRAME,
1754   mips_insn16_frame_this_id,
1755   mips_insn16_frame_prev_register
1756 };
1757
1758 static const struct frame_unwind *
1759 mips_insn16_frame_sniffer (struct frame_info *next_frame)
1760 {
1761   CORE_ADDR pc = frame_pc_unwind (next_frame);
1762   if (mips_pc_is_mips16 (pc))
1763     return &mips_insn16_frame_unwind;
1764   return NULL;
1765 }
1766
1767 static CORE_ADDR
1768 mips_insn16_frame_base_address (struct frame_info *next_frame,
1769                                 void **this_cache)
1770 {
1771   struct mips_frame_cache *info = mips_insn16_frame_cache (next_frame,
1772                                                            this_cache);
1773   return info->base;
1774 }
1775
1776 static const struct frame_base mips_insn16_frame_base =
1777 {
1778   &mips_insn16_frame_unwind,
1779   mips_insn16_frame_base_address,
1780   mips_insn16_frame_base_address,
1781   mips_insn16_frame_base_address
1782 };
1783
1784 static const struct frame_base *
1785 mips_insn16_frame_base_sniffer (struct frame_info *next_frame)
1786 {
1787   if (mips_insn16_frame_sniffer (next_frame) != NULL)
1788     return &mips_insn16_frame_base;
1789   else
1790     return NULL;
1791 }
1792
1793 /* Mark all the registers as unset in the saved_regs array
1794    of THIS_CACHE.  Do nothing if THIS_CACHE is null.  */
1795
1796 void
1797 reset_saved_regs (struct mips_frame_cache *this_cache)
1798 {
1799   if (this_cache == NULL || this_cache->saved_regs == NULL)
1800     return;
1801
1802   {
1803     const int num_regs = gdbarch_num_regs (current_gdbarch);
1804     int i;
1805
1806     for (i = 0; i < num_regs; i++)
1807       {
1808         this_cache->saved_regs[i].addr = -1;
1809       }
1810   }
1811 }
1812
1813 /* Analyze the function prologue from START_PC to LIMIT_PC. Builds
1814    the associated FRAME_CACHE if not null.  
1815    Return the address of the first instruction past the prologue.  */
1816
1817 static CORE_ADDR
1818 mips32_scan_prologue (CORE_ADDR start_pc, CORE_ADDR limit_pc,
1819                       struct frame_info *next_frame,
1820                       struct mips_frame_cache *this_cache)
1821 {
1822   CORE_ADDR cur_pc;
1823   CORE_ADDR frame_addr = 0; /* Value of $r30. Used by gcc for frame-pointer */
1824   CORE_ADDR sp;
1825   long frame_offset;
1826   int  frame_reg = MIPS_SP_REGNUM;
1827
1828   CORE_ADDR end_prologue_addr = 0;
1829   int seen_sp_adjust = 0;
1830   int load_immediate_bytes = 0;
1831   struct gdbarch *gdbarch = get_frame_arch (next_frame);
1832
1833   /* Can be called when there's no process, and hence when there's no
1834      NEXT_FRAME.  */
1835   if (next_frame != NULL)
1836     sp = frame_unwind_register_signed (next_frame,
1837                                        gdbarch_num_regs (gdbarch)
1838                                        + MIPS_SP_REGNUM);
1839   else
1840     sp = 0;
1841
1842   if (limit_pc > start_pc + 200)
1843     limit_pc = start_pc + 200;
1844
1845 restart:
1846
1847   frame_offset = 0;
1848   for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS_INSN32_SIZE)
1849     {
1850       unsigned long inst, high_word, low_word;
1851       int reg;
1852
1853       /* Fetch the instruction.   */
1854       inst = (unsigned long) mips_fetch_instruction (cur_pc);
1855
1856       /* Save some code by pre-extracting some useful fields.  */
1857       high_word = (inst >> 16) & 0xffff;
1858       low_word = inst & 0xffff;
1859       reg = high_word & 0x1f;
1860
1861       if (high_word == 0x27bd   /* addiu $sp,$sp,-i */
1862           || high_word == 0x23bd        /* addi $sp,$sp,-i */
1863           || high_word == 0x67bd)       /* daddiu $sp,$sp,-i */
1864         {
1865           if (low_word & 0x8000)        /* negative stack adjustment? */
1866             frame_offset += 0x10000 - low_word;
1867           else
1868             /* Exit loop if a positive stack adjustment is found, which
1869                usually means that the stack cleanup code in the function
1870                epilogue is reached.  */
1871             break;
1872           seen_sp_adjust = 1;
1873         }
1874       else if ((high_word & 0xFFE0) == 0xafa0)  /* sw reg,offset($sp) */
1875         {
1876           set_reg_offset (this_cache, reg, sp + low_word);
1877         }
1878       else if ((high_word & 0xFFE0) == 0xffa0)  /* sd reg,offset($sp) */
1879         {
1880           /* Irix 6.2 N32 ABI uses sd instructions for saving $gp and $ra.  */
1881           set_reg_offset (this_cache, reg, sp + low_word);
1882         }
1883       else if (high_word == 0x27be)     /* addiu $30,$sp,size */
1884         {
1885           /* Old gcc frame, r30 is virtual frame pointer.  */
1886           if ((long) low_word != frame_offset)
1887             frame_addr = sp + low_word;
1888           else if (next_frame && frame_reg == MIPS_SP_REGNUM)
1889             {
1890               unsigned alloca_adjust;
1891
1892               frame_reg = 30;
1893               frame_addr = frame_unwind_register_signed
1894                              (next_frame, gdbarch_num_regs (gdbarch) + 30);
1895
1896               alloca_adjust = (unsigned) (frame_addr - (sp + low_word));
1897               if (alloca_adjust > 0)
1898                 {
1899                   /* FP > SP + frame_size. This may be because of
1900                      an alloca or somethings similar.  Fix sp to
1901                      "pre-alloca" value, and try again.  */
1902                   sp += alloca_adjust;
1903                   /* Need to reset the status of all registers.  Otherwise,
1904                      we will hit a guard that prevents the new address
1905                      for each register to be recomputed during the second
1906                      pass.  */
1907                   reset_saved_regs (this_cache);
1908                   goto restart;
1909                 }
1910             }
1911         }
1912       /* move $30,$sp.  With different versions of gas this will be either
1913          `addu $30,$sp,$zero' or `or $30,$sp,$zero' or `daddu 30,sp,$0'.
1914          Accept any one of these.  */
1915       else if (inst == 0x03A0F021 || inst == 0x03a0f025 || inst == 0x03a0f02d)
1916         {
1917           /* New gcc frame, virtual frame pointer is at r30 + frame_size.  */
1918           if (next_frame && frame_reg == MIPS_SP_REGNUM)
1919             {
1920               unsigned alloca_adjust;
1921
1922               frame_reg = 30;
1923               frame_addr = frame_unwind_register_signed
1924                              (next_frame, gdbarch_num_regs (gdbarch) + 30);
1925
1926               alloca_adjust = (unsigned) (frame_addr - sp);
1927               if (alloca_adjust > 0)
1928                 {
1929                   /* FP > SP + frame_size. This may be because of
1930                      an alloca or somethings similar.  Fix sp to
1931                      "pre-alloca" value, and try again.  */
1932                   sp = frame_addr;
1933                   /* Need to reset the status of all registers.  Otherwise,
1934                      we will hit a guard that prevents the new address
1935                      for each register to be recomputed during the second
1936                      pass.  */
1937                   reset_saved_regs (this_cache);
1938                   goto restart;
1939                 }
1940             }
1941         }
1942       else if ((high_word & 0xFFE0) == 0xafc0)  /* sw reg,offset($30) */
1943         {
1944           set_reg_offset (this_cache, reg, frame_addr + low_word);
1945         }
1946       else if ((high_word & 0xFFE0) == 0xE7A0 /* swc1 freg,n($sp) */
1947                || (high_word & 0xF3E0) == 0xA3C0 /* sx reg,n($s8) */
1948                || (inst & 0xFF9F07FF) == 0x00800021 /* move reg,$a0-$a3 */
1949                || high_word == 0x3c1c /* lui $gp,n */
1950                || high_word == 0x279c /* addiu $gp,$gp,n */
1951                || inst == 0x0399e021 /* addu $gp,$gp,$t9 */
1952                || inst == 0x033ce021 /* addu $gp,$t9,$gp */
1953               )
1954        {
1955          /* These instructions are part of the prologue, but we don't
1956             need to do anything special to handle them.  */
1957        }
1958       /* The instructions below load $at or $t0 with an immediate
1959          value in preparation for a stack adjustment via
1960          subu $sp,$sp,[$at,$t0]. These instructions could also
1961          initialize a local variable, so we accept them only before
1962          a stack adjustment instruction was seen.  */
1963       else if (!seen_sp_adjust
1964                && (high_word == 0x3c01 /* lui $at,n */
1965                    || high_word == 0x3c08 /* lui $t0,n */
1966                    || high_word == 0x3421 /* ori $at,$at,n */
1967                    || high_word == 0x3508 /* ori $t0,$t0,n */
1968                    || high_word == 0x3401 /* ori $at,$zero,n */
1969                    || high_word == 0x3408 /* ori $t0,$zero,n */
1970                   ))
1971        {
1972           load_immediate_bytes += MIPS_INSN32_SIZE;             /* FIXME!  */
1973        }
1974       else
1975        {
1976          /* This instruction is not an instruction typically found
1977             in a prologue, so we must have reached the end of the
1978             prologue.  */
1979          /* FIXME: brobecker/2004-10-10: Can't we just break out of this
1980             loop now?  Why would we need to continue scanning the function
1981             instructions?  */
1982          if (end_prologue_addr == 0)
1983            end_prologue_addr = cur_pc;
1984        }
1985     }
1986
1987   if (this_cache != NULL)
1988     {
1989       this_cache->base = 
1990         (frame_unwind_register_signed (next_frame,
1991                                        gdbarch_num_regs (gdbarch) + frame_reg)
1992          + frame_offset);
1993       /* FIXME: brobecker/2004-09-15: We should be able to get rid of
1994          this assignment below, eventually.  But it's still needed
1995          for now.  */
1996       this_cache->saved_regs[gdbarch_num_regs (gdbarch)
1997                              + mips_regnum (gdbarch)->pc]
1998         = this_cache->saved_regs[gdbarch_num_regs (gdbarch)
1999                                  + MIPS_RA_REGNUM];
2000     }
2001
2002   /* If we didn't reach the end of the prologue when scanning the function
2003      instructions, then set end_prologue_addr to the address of the
2004      instruction immediately after the last one we scanned.  */
2005   /* brobecker/2004-10-10: I don't think this would ever happen, but
2006      we may as well be careful and do our best if we have a null
2007      end_prologue_addr.  */
2008   if (end_prologue_addr == 0)
2009     end_prologue_addr = cur_pc;
2010      
2011   /* In a frameless function, we might have incorrectly
2012      skipped some load immediate instructions. Undo the skipping
2013      if the load immediate was not followed by a stack adjustment.  */
2014   if (load_immediate_bytes && !seen_sp_adjust)
2015     end_prologue_addr -= load_immediate_bytes;
2016
2017   return end_prologue_addr;
2018 }
2019
2020 /* Heuristic unwinder for procedures using 32-bit instructions (covers
2021    both 32-bit and 64-bit MIPS ISAs).  Procedures using 16-bit
2022    instructions (a.k.a. MIPS16) are handled by the mips_insn16
2023    unwinder.  */
2024
2025 static struct mips_frame_cache *
2026 mips_insn32_frame_cache (struct frame_info *next_frame, void **this_cache)
2027 {
2028   struct mips_frame_cache *cache;
2029
2030   if ((*this_cache) != NULL)
2031     return (*this_cache);
2032
2033   cache = FRAME_OBSTACK_ZALLOC (struct mips_frame_cache);
2034   (*this_cache) = cache;
2035   cache->saved_regs = trad_frame_alloc_saved_regs (next_frame);
2036
2037   /* Analyze the function prologue.  */
2038   {
2039     const CORE_ADDR pc =
2040       frame_unwind_address_in_block (next_frame, NORMAL_FRAME);
2041     CORE_ADDR start_addr;
2042
2043     find_pc_partial_function (pc, NULL, &start_addr, NULL);
2044     if (start_addr == 0)
2045       start_addr = heuristic_proc_start (pc);
2046     /* We can't analyze the prologue if we couldn't find the begining
2047        of the function.  */
2048     if (start_addr == 0)
2049       return cache;
2050
2051     mips32_scan_prologue (start_addr, pc, next_frame, *this_cache);
2052   }
2053   
2054   /* gdbarch_sp_regnum contains the value and not the address.  */
2055   trad_frame_set_value (cache->saved_regs,
2056                         gdbarch_num_regs (get_frame_arch (next_frame))
2057                           + MIPS_SP_REGNUM,
2058                         cache->base);
2059
2060   return (*this_cache);
2061 }
2062
2063 static void
2064 mips_insn32_frame_this_id (struct frame_info *next_frame, void **this_cache,
2065                            struct frame_id *this_id)
2066 {
2067   struct mips_frame_cache *info = mips_insn32_frame_cache (next_frame,
2068                                                            this_cache);
2069   (*this_id) = frame_id_build (info->base,
2070                                frame_func_unwind (next_frame, NORMAL_FRAME));
2071 }
2072
2073 static void
2074 mips_insn32_frame_prev_register (struct frame_info *next_frame,
2075                                  void **this_cache,
2076                                  int regnum, int *optimizedp,
2077                                  enum lval_type *lvalp, CORE_ADDR *addrp,
2078                                  int *realnump, gdb_byte *valuep)
2079 {
2080   struct mips_frame_cache *info = mips_insn32_frame_cache (next_frame,
2081                                                            this_cache);
2082   trad_frame_get_prev_register (next_frame, info->saved_regs, regnum,
2083                                 optimizedp, lvalp, addrp, realnump, valuep);
2084 }
2085
2086 static const struct frame_unwind mips_insn32_frame_unwind =
2087 {
2088   NORMAL_FRAME,
2089   mips_insn32_frame_this_id,
2090   mips_insn32_frame_prev_register
2091 };
2092
2093 static const struct frame_unwind *
2094 mips_insn32_frame_sniffer (struct frame_info *next_frame)
2095 {
2096   CORE_ADDR pc = frame_pc_unwind (next_frame);
2097   if (! mips_pc_is_mips16 (pc))
2098     return &mips_insn32_frame_unwind;
2099   return NULL;
2100 }
2101
2102 static CORE_ADDR
2103 mips_insn32_frame_base_address (struct frame_info *next_frame,
2104                                 void **this_cache)
2105 {
2106   struct mips_frame_cache *info = mips_insn32_frame_cache (next_frame,
2107                                                            this_cache);
2108   return info->base;
2109 }
2110
2111 static const struct frame_base mips_insn32_frame_base =
2112 {
2113   &mips_insn32_frame_unwind,
2114   mips_insn32_frame_base_address,
2115   mips_insn32_frame_base_address,
2116   mips_insn32_frame_base_address
2117 };
2118
2119 static const struct frame_base *
2120 mips_insn32_frame_base_sniffer (struct frame_info *next_frame)
2121 {
2122   if (mips_insn32_frame_sniffer (next_frame) != NULL)
2123     return &mips_insn32_frame_base;
2124   else
2125     return NULL;
2126 }
2127
2128 static struct trad_frame_cache *
2129 mips_stub_frame_cache (struct frame_info *next_frame, void **this_cache)
2130 {
2131   CORE_ADDR pc;
2132   CORE_ADDR start_addr;
2133   CORE_ADDR stack_addr;
2134   struct trad_frame_cache *this_trad_cache;
2135   struct gdbarch *gdbarch = get_frame_arch (next_frame);
2136
2137   if ((*this_cache) != NULL)
2138     return (*this_cache);
2139   this_trad_cache = trad_frame_cache_zalloc (next_frame);
2140   (*this_cache) = this_trad_cache;
2141
2142   /* The return address is in the link register.  */
2143   trad_frame_set_reg_realreg (this_trad_cache,
2144                               gdbarch_pc_regnum (gdbarch),
2145                               (gdbarch_num_regs (gdbarch) + MIPS_RA_REGNUM));
2146
2147   /* Frame ID, since it's a frameless / stackless function, no stack
2148      space is allocated and SP on entry is the current SP.  */
2149   pc = frame_pc_unwind (next_frame);
2150   find_pc_partial_function (pc, NULL, &start_addr, NULL);
2151   stack_addr = frame_unwind_register_signed (next_frame, MIPS_SP_REGNUM);
2152   trad_frame_set_id (this_trad_cache, frame_id_build (stack_addr, start_addr));
2153
2154   /* Assume that the frame's base is the same as the
2155      stack-pointer.  */
2156   trad_frame_set_this_base (this_trad_cache, stack_addr);
2157
2158   return this_trad_cache;
2159 }
2160
2161 static void
2162 mips_stub_frame_this_id (struct frame_info *next_frame, void **this_cache,
2163                          struct frame_id *this_id)
2164 {
2165   struct trad_frame_cache *this_trad_cache
2166     = mips_stub_frame_cache (next_frame, this_cache);
2167   trad_frame_get_id (this_trad_cache, this_id);
2168 }
2169
2170 static void
2171 mips_stub_frame_prev_register (struct frame_info *next_frame,
2172                                  void **this_cache,
2173                                  int regnum, int *optimizedp,
2174                                  enum lval_type *lvalp, CORE_ADDR *addrp,
2175                                  int *realnump, gdb_byte *valuep)
2176 {
2177   struct trad_frame_cache *this_trad_cache
2178     = mips_stub_frame_cache (next_frame, this_cache);
2179   trad_frame_get_register (this_trad_cache, next_frame, regnum, optimizedp,
2180                            lvalp, addrp, realnump, valuep);
2181 }
2182
2183 static const struct frame_unwind mips_stub_frame_unwind =
2184 {
2185   NORMAL_FRAME,
2186   mips_stub_frame_this_id,
2187   mips_stub_frame_prev_register
2188 };
2189
2190 static const struct frame_unwind *
2191 mips_stub_frame_sniffer (struct frame_info *next_frame)
2192 {
2193   gdb_byte dummy[4];
2194   struct obj_section *s;
2195   CORE_ADDR pc = frame_unwind_address_in_block (next_frame, NORMAL_FRAME);
2196
2197   /* Use the stub unwinder for unreadable code.  */
2198   if (target_read_memory (frame_pc_unwind (next_frame), dummy, 4) != 0)
2199     return &mips_stub_frame_unwind;
2200
2201   if (in_plt_section (pc, NULL))
2202     return &mips_stub_frame_unwind;
2203
2204   /* Binutils for MIPS puts lazy resolution stubs into .MIPS.stubs.  */
2205   s = find_pc_section (pc);
2206
2207   if (s != NULL
2208       && strcmp (bfd_get_section_name (s->objfile->obfd, s->the_bfd_section),
2209                  ".MIPS.stubs") == 0)
2210     return &mips_stub_frame_unwind;
2211
2212   return NULL;
2213 }
2214
2215 static CORE_ADDR
2216 mips_stub_frame_base_address (struct frame_info *next_frame,
2217                               void **this_cache)
2218 {
2219   struct trad_frame_cache *this_trad_cache
2220     = mips_stub_frame_cache (next_frame, this_cache);
2221   return trad_frame_get_this_base (this_trad_cache);
2222 }
2223
2224 static const struct frame_base mips_stub_frame_base =
2225 {
2226   &mips_stub_frame_unwind,
2227   mips_stub_frame_base_address,
2228   mips_stub_frame_base_address,
2229   mips_stub_frame_base_address
2230 };
2231
2232 static const struct frame_base *
2233 mips_stub_frame_base_sniffer (struct frame_info *next_frame)
2234 {
2235   if (mips_stub_frame_sniffer (next_frame) != NULL)
2236     return &mips_stub_frame_base;
2237   else
2238     return NULL;
2239 }
2240
2241 /* mips_addr_bits_remove - remove useless address bits  */
2242
2243 static CORE_ADDR
2244 mips_addr_bits_remove (CORE_ADDR addr)
2245 {
2246   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2247   if (mips_mask_address_p (tdep) && (((ULONGEST) addr) >> 32 == 0xffffffffUL))
2248     /* This hack is a work-around for existing boards using PMON, the
2249        simulator, and any other 64-bit targets that doesn't have true
2250        64-bit addressing.  On these targets, the upper 32 bits of
2251        addresses are ignored by the hardware.  Thus, the PC or SP are
2252        likely to have been sign extended to all 1s by instruction
2253        sequences that load 32-bit addresses.  For example, a typical
2254        piece of code that loads an address is this:
2255
2256        lui $r2, <upper 16 bits>
2257        ori $r2, <lower 16 bits>
2258
2259        But the lui sign-extends the value such that the upper 32 bits
2260        may be all 1s.  The workaround is simply to mask off these
2261        bits.  In the future, gcc may be changed to support true 64-bit
2262        addressing, and this masking will have to be disabled.  */
2263     return addr &= 0xffffffffUL;
2264   else
2265     return addr;
2266 }
2267
2268 /* Instructions used during single-stepping of atomic sequences.  */
2269 #define LL_OPCODE 0x30
2270 #define LLD_OPCODE 0x34
2271 #define SC_OPCODE 0x38
2272 #define SCD_OPCODE 0x3c
2273
2274 /* Checks for an atomic sequence of instructions beginning with a LL/LLD
2275    instruction and ending with a SC/SCD instruction.  If such a sequence
2276    is found, attempt to step through it.  A breakpoint is placed at the end of 
2277    the sequence.  */
2278
2279 static int
2280 deal_with_atomic_sequence (CORE_ADDR pc)
2281 {
2282   CORE_ADDR breaks[2] = {-1, -1};
2283   CORE_ADDR loc = pc;
2284   CORE_ADDR branch_bp; /* Breakpoint at branch instruction's destination.  */
2285   unsigned long insn;
2286   int insn_count;
2287   int index;
2288   int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed).  */  
2289   const int atomic_sequence_length = 16; /* Instruction sequence length.  */
2290
2291   if (pc & 0x01)
2292     return 0;
2293
2294   insn = mips_fetch_instruction (loc);
2295   /* Assume all atomic sequences start with a ll/lld instruction.  */
2296   if (itype_op (insn) != LL_OPCODE && itype_op (insn) != LLD_OPCODE)
2297     return 0;
2298
2299   /* Assume that no atomic sequence is longer than "atomic_sequence_length" 
2300      instructions.  */
2301   for (insn_count = 0; insn_count < atomic_sequence_length; ++insn_count)
2302     {
2303       int is_branch = 0;
2304       loc += MIPS_INSN32_SIZE;
2305       insn = mips_fetch_instruction (loc);
2306
2307       /* Assume that there is at most one branch in the atomic
2308          sequence.  If a branch is found, put a breakpoint in its
2309          destination address.  */
2310       switch (itype_op (insn))
2311         {
2312         case 0: /* SPECIAL */
2313           if (rtype_funct (insn) >> 1 == 4) /* JR, JALR */
2314             return 0; /* fallback to the standard single-step code. */
2315           break;
2316         case 1: /* REGIMM */
2317           is_branch = ((itype_rt (insn) & 0xc0) == 0); /* B{LT,GE}Z* */
2318           break;
2319         case 2: /* J */
2320         case 3: /* JAL */
2321           return 0; /* fallback to the standard single-step code. */
2322         case 4: /* BEQ */
2323         case 5: /* BNE */
2324         case 6: /* BLEZ */
2325         case 7: /* BGTZ */
2326         case 20: /* BEQL */
2327         case 21: /* BNEL */
2328         case 22: /* BLEZL */
2329         case 23: /* BGTTL */
2330           is_branch = 1;
2331           break;
2332         case 17: /* COP1 */
2333         case 18: /* COP2 */
2334         case 19: /* COP3 */
2335           is_branch = (itype_rs (insn) == 8); /* BCzF, BCzFL, BCzT, BCzTL */
2336           break;
2337         }
2338       if (is_branch)
2339         {
2340           branch_bp = loc + mips32_relative_offset (insn) + 4;
2341           if (last_breakpoint >= 1)
2342             return 0; /* More than one branch found, fallback to the
2343                          standard single-step code.  */
2344           breaks[1] = branch_bp;
2345           last_breakpoint++;
2346         }
2347
2348       if (itype_op (insn) == SC_OPCODE || itype_op (insn) == SCD_OPCODE)
2349         break;
2350     }
2351
2352   /* Assume that the atomic sequence ends with a sc/scd instruction.  */
2353   if (itype_op (insn) != SC_OPCODE && itype_op (insn) != SCD_OPCODE)
2354     return 0;
2355
2356   loc += MIPS_INSN32_SIZE;
2357
2358   /* Insert a breakpoint right after the end of the atomic sequence.  */
2359   breaks[0] = loc;
2360
2361   /* Check for duplicated breakpoints.  Check also for a breakpoint
2362      placed (branch instruction's destination) in the atomic sequence */
2363   if (last_breakpoint && pc <= breaks[1] && breaks[1] <= breaks[0])
2364     last_breakpoint = 0;
2365
2366   /* Effectively inserts the breakpoints.  */
2367   for (index = 0; index <= last_breakpoint; index++)
2368       insert_single_step_breakpoint (breaks[index]);
2369
2370   return 1;
2371 }
2372
2373 /* mips_software_single_step() is called just before we want to resume
2374    the inferior, if we want to single-step it but there is no hardware
2375    or kernel single-step support (MIPS on GNU/Linux for example).  We find
2376    the target of the coming instruction and breakpoint it.  */
2377
2378 int
2379 mips_software_single_step (struct frame_info *frame)
2380 {
2381   CORE_ADDR pc, next_pc;
2382
2383   pc = get_frame_pc (frame);
2384   if (deal_with_atomic_sequence (pc))
2385     return 1;
2386
2387   next_pc = mips_next_pc (frame, pc);
2388
2389   insert_single_step_breakpoint (next_pc);
2390   return 1;
2391 }
2392
2393 /* Test whether the PC points to the return instruction at the
2394    end of a function. */
2395
2396 static int
2397 mips_about_to_return (CORE_ADDR pc)
2398 {
2399   if (mips_pc_is_mips16 (pc))
2400     /* This mips16 case isn't necessarily reliable.  Sometimes the compiler
2401        generates a "jr $ra"; other times it generates code to load
2402        the return address from the stack to an accessible register (such
2403        as $a3), then a "jr" using that register.  This second case
2404        is almost impossible to distinguish from an indirect jump
2405        used for switch statements, so we don't even try.  */
2406     return mips_fetch_instruction (pc) == 0xe820;       /* jr $ra */
2407   else
2408     return mips_fetch_instruction (pc) == 0x3e00008;    /* jr $ra */
2409 }
2410
2411
2412 /* This fencepost looks highly suspicious to me.  Removing it also
2413    seems suspicious as it could affect remote debugging across serial
2414    lines.  */
2415
2416 static CORE_ADDR
2417 heuristic_proc_start (CORE_ADDR pc)
2418 {
2419   CORE_ADDR start_pc;
2420   CORE_ADDR fence;
2421   int instlen;
2422   int seen_adjsp = 0;
2423
2424   pc = gdbarch_addr_bits_remove (current_gdbarch, pc);
2425   start_pc = pc;
2426   fence = start_pc - heuristic_fence_post;
2427   if (start_pc == 0)
2428     return 0;
2429
2430   if (heuristic_fence_post == UINT_MAX || fence < VM_MIN_ADDRESS)
2431     fence = VM_MIN_ADDRESS;
2432
2433   instlen = mips_pc_is_mips16 (pc) ? MIPS_INSN16_SIZE : MIPS_INSN32_SIZE;
2434
2435   /* search back for previous return */
2436   for (start_pc -= instlen;; start_pc -= instlen)
2437     if (start_pc < fence)
2438       {
2439         /* It's not clear to me why we reach this point when
2440            stop_soon, but with this test, at least we
2441            don't print out warnings for every child forked (eg, on
2442            decstation).  22apr93 rich@cygnus.com.  */
2443         if (stop_soon == NO_STOP_QUIETLY)
2444           {
2445             static int blurb_printed = 0;
2446
2447             warning (_("GDB can't find the start of the function at 0x%s."),
2448                      paddr_nz (pc));
2449
2450             if (!blurb_printed)
2451               {
2452                 /* This actually happens frequently in embedded
2453                    development, when you first connect to a board
2454                    and your stack pointer and pc are nowhere in
2455                    particular.  This message needs to give people
2456                    in that situation enough information to
2457                    determine that it's no big deal.  */
2458                 printf_filtered ("\n\
2459     GDB is unable to find the start of the function at 0x%s\n\
2460 and thus can't determine the size of that function's stack frame.\n\
2461 This means that GDB may be unable to access that stack frame, or\n\
2462 the frames below it.\n\
2463     This problem is most likely caused by an invalid program counter or\n\
2464 stack pointer.\n\
2465     However, if you think GDB should simply search farther back\n\
2466 from 0x%s for code which looks like the beginning of a\n\
2467 function, you can increase the range of the search using the `set\n\
2468 heuristic-fence-post' command.\n", paddr_nz (pc), paddr_nz (pc));
2469                 blurb_printed = 1;
2470               }
2471           }
2472
2473         return 0;
2474       }
2475     else if (mips_pc_is_mips16 (start_pc))
2476       {
2477         unsigned short inst;
2478
2479         /* On MIPS16, any one of the following is likely to be the
2480            start of a function:
2481            extend save
2482            save
2483            entry
2484            addiu sp,-n
2485            daddiu sp,-n
2486            extend -n followed by 'addiu sp,+n' or 'daddiu sp,+n'  */
2487         inst = mips_fetch_instruction (start_pc);
2488         if ((inst & 0xff80) == 0x6480)          /* save */
2489           {
2490             if (start_pc - instlen >= fence)
2491               {
2492                 inst = mips_fetch_instruction (start_pc - instlen);
2493                 if ((inst & 0xf800) == 0xf000)  /* extend */
2494                   start_pc -= instlen;
2495               }
2496             break;
2497           }
2498         else if (((inst & 0xf81f) == 0xe809
2499                   && (inst & 0x700) != 0x700)   /* entry */
2500                  || (inst & 0xff80) == 0x6380   /* addiu sp,-n */
2501                  || (inst & 0xff80) == 0xfb80   /* daddiu sp,-n */
2502                  || ((inst & 0xf810) == 0xf010 && seen_adjsp))  /* extend -n */
2503           break;
2504         else if ((inst & 0xff00) == 0x6300      /* addiu sp */
2505                  || (inst & 0xff00) == 0xfb00)  /* daddiu sp */
2506           seen_adjsp = 1;
2507         else
2508           seen_adjsp = 0;
2509       }
2510     else if (mips_about_to_return (start_pc))
2511       {
2512         /* Skip return and its delay slot.  */
2513         start_pc += 2 * MIPS_INSN32_SIZE;
2514         break;
2515       }
2516
2517   return start_pc;
2518 }
2519
2520 struct mips_objfile_private
2521 {
2522   bfd_size_type size;
2523   char *contents;
2524 };
2525
2526 /* According to the current ABI, should the type be passed in a
2527    floating-point register (assuming that there is space)?  When there
2528    is no FPU, FP are not even considered as possible candidates for
2529    FP registers and, consequently this returns false - forces FP
2530    arguments into integer registers. */
2531
2532 static int
2533 fp_register_arg_p (enum type_code typecode, struct type *arg_type)
2534 {
2535   return ((typecode == TYPE_CODE_FLT
2536            || (MIPS_EABI
2537                && (typecode == TYPE_CODE_STRUCT
2538                    || typecode == TYPE_CODE_UNION)
2539                && TYPE_NFIELDS (arg_type) == 1
2540                && TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (arg_type, 0))) 
2541                == TYPE_CODE_FLT))
2542           && MIPS_FPU_TYPE != MIPS_FPU_NONE);
2543 }
2544
2545 /* On o32, argument passing in GPRs depends on the alignment of the type being
2546    passed.  Return 1 if this type must be aligned to a doubleword boundary. */
2547
2548 static int
2549 mips_type_needs_double_align (struct type *type)
2550 {
2551   enum type_code typecode = TYPE_CODE (type);
2552
2553   if (typecode == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8)
2554     return 1;
2555   else if (typecode == TYPE_CODE_STRUCT)
2556     {
2557       if (TYPE_NFIELDS (type) < 1)
2558         return 0;
2559       return mips_type_needs_double_align (TYPE_FIELD_TYPE (type, 0));
2560     }
2561   else if (typecode == TYPE_CODE_UNION)
2562     {
2563       int i, n;
2564
2565       n = TYPE_NFIELDS (type);
2566       for (i = 0; i < n; i++)
2567         if (mips_type_needs_double_align (TYPE_FIELD_TYPE (type, i)))
2568           return 1;
2569       return 0;
2570     }
2571   return 0;
2572 }
2573
2574 /* Adjust the address downward (direction of stack growth) so that it
2575    is correctly aligned for a new stack frame.  */
2576 static CORE_ADDR
2577 mips_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
2578 {
2579   return align_down (addr, 16);
2580 }
2581
2582 static CORE_ADDR
2583 mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
2584                            struct regcache *regcache, CORE_ADDR bp_addr,
2585                            int nargs, struct value **args, CORE_ADDR sp,
2586                            int struct_return, CORE_ADDR struct_addr)
2587 {
2588   int argreg;
2589   int float_argreg;
2590   int argnum;
2591   int len = 0;
2592   int stack_offset = 0;
2593   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2594   CORE_ADDR func_addr = find_function_addr (function, NULL);
2595   int regsize = mips_abi_regsize (gdbarch);
2596
2597   /* For shared libraries, "t9" needs to point at the function
2598      address.  */
2599   regcache_cooked_write_signed (regcache, MIPS_T9_REGNUM, func_addr);
2600
2601   /* Set the return address register to point to the entry point of
2602      the program, where a breakpoint lies in wait.  */
2603   regcache_cooked_write_signed (regcache, MIPS_RA_REGNUM, bp_addr);
2604
2605   /* First ensure that the stack and structure return address (if any)
2606      are properly aligned.  The stack has to be at least 64-bit
2607      aligned even on 32-bit machines, because doubles must be 64-bit
2608      aligned.  For n32 and n64, stack frames need to be 128-bit
2609      aligned, so we round to this widest known alignment.  */
2610
2611   sp = align_down (sp, 16);
2612   struct_addr = align_down (struct_addr, 16);
2613
2614   /* Now make space on the stack for the args.  We allocate more
2615      than necessary for EABI, because the first few arguments are
2616      passed in registers, but that's OK.  */
2617   for (argnum = 0; argnum < nargs; argnum++)
2618     len += align_up (TYPE_LENGTH (value_type (args[argnum])), regsize);
2619   sp -= align_up (len, 16);
2620
2621   if (mips_debug)
2622     fprintf_unfiltered (gdb_stdlog,
2623                         "mips_eabi_push_dummy_call: sp=0x%s allocated %ld\n",
2624                         paddr_nz (sp), (long) align_up (len, 16));
2625
2626   /* Initialize the integer and float register pointers.  */
2627   argreg = MIPS_A0_REGNUM;
2628   float_argreg = mips_fpa0_regnum (gdbarch);
2629
2630   /* The struct_return pointer occupies the first parameter-passing reg.  */
2631   if (struct_return)
2632     {
2633       if (mips_debug)
2634         fprintf_unfiltered (gdb_stdlog,
2635                             "mips_eabi_push_dummy_call: struct_return reg=%d 0x%s\n",
2636                             argreg, paddr_nz (struct_addr));
2637       regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
2638     }
2639
2640   /* Now load as many as possible of the first arguments into
2641      registers, and push the rest onto the stack.  Loop thru args
2642      from first to last.  */
2643   for (argnum = 0; argnum < nargs; argnum++)
2644     {
2645       const gdb_byte *val;
2646       gdb_byte valbuf[MAX_REGISTER_SIZE];
2647       struct value *arg = args[argnum];
2648       struct type *arg_type = check_typedef (value_type (arg));
2649       int len = TYPE_LENGTH (arg_type);
2650       enum type_code typecode = TYPE_CODE (arg_type);
2651
2652       if (mips_debug)
2653         fprintf_unfiltered (gdb_stdlog,
2654                             "mips_eabi_push_dummy_call: %d len=%d type=%d",
2655                             argnum + 1, len, (int) typecode);
2656
2657       /* The EABI passes structures that do not fit in a register by
2658          reference.  */
2659       if (len > regsize
2660           && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION))
2661         {
2662           store_unsigned_integer (valbuf, regsize, VALUE_ADDRESS (arg));
2663           typecode = TYPE_CODE_PTR;
2664           len = regsize;
2665           val = valbuf;
2666           if (mips_debug)
2667             fprintf_unfiltered (gdb_stdlog, " push");
2668         }
2669       else
2670         val = value_contents (arg);
2671
2672       /* 32-bit ABIs always start floating point arguments in an
2673          even-numbered floating point register.  Round the FP register
2674          up before the check to see if there are any FP registers
2675          left.  Non MIPS_EABI targets also pass the FP in the integer
2676          registers so also round up normal registers.  */
2677       if (regsize < 8 && fp_register_arg_p (typecode, arg_type))
2678         {
2679           if ((float_argreg & 1))
2680             float_argreg++;
2681         }
2682
2683       /* Floating point arguments passed in registers have to be
2684          treated specially.  On 32-bit architectures, doubles
2685          are passed in register pairs; the even register gets
2686          the low word, and the odd register gets the high word.
2687          On non-EABI processors, the first two floating point arguments are
2688          also copied to general registers, because MIPS16 functions
2689          don't use float registers for arguments.  This duplication of
2690          arguments in general registers can't hurt non-MIPS16 functions
2691          because those registers are normally skipped.  */
2692       /* MIPS_EABI squeezes a struct that contains a single floating
2693          point value into an FP register instead of pushing it onto the
2694          stack.  */
2695       if (fp_register_arg_p (typecode, arg_type)
2696           && float_argreg <= MIPS_LAST_FP_ARG_REGNUM)
2697         {
2698           /* EABI32 will pass doubles in consecutive registers, even on
2699              64-bit cores.  At one time, we used to check the size of
2700              `float_argreg' to determine whether or not to pass doubles
2701              in consecutive registers, but this is not sufficient for
2702              making the ABI determination.  */
2703           if (len == 8 && mips_abi (gdbarch) == MIPS_ABI_EABI32)
2704             {
2705               int low_offset = gdbarch_byte_order (gdbarch)
2706                                == BFD_ENDIAN_BIG ? 4 : 0;
2707               unsigned long regval;
2708
2709               /* Write the low word of the double to the even register(s).  */
2710               regval = extract_unsigned_integer (val + low_offset, 4);
2711               if (mips_debug)
2712                 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
2713                                     float_argreg, phex (regval, 4));
2714               regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
2715
2716               /* Write the high word of the double to the odd register(s).  */
2717               regval = extract_unsigned_integer (val + 4 - low_offset, 4);
2718               if (mips_debug)
2719                 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
2720                                     float_argreg, phex (regval, 4));
2721               regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
2722             }
2723           else
2724             {
2725               /* This is a floating point value that fits entirely
2726                  in a single register.  */
2727               /* On 32 bit ABI's the float_argreg is further adjusted
2728                  above to ensure that it is even register aligned.  */
2729               LONGEST regval = extract_unsigned_integer (val, len);
2730               if (mips_debug)
2731                 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
2732                                     float_argreg, phex (regval, len));
2733               regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
2734             }
2735         }
2736       else
2737         {
2738           /* Copy the argument to general registers or the stack in
2739              register-sized pieces.  Large arguments are split between
2740              registers and stack.  */
2741           /* Note: structs whose size is not a multiple of regsize
2742              are treated specially: Irix cc passes
2743              them in registers where gcc sometimes puts them on the
2744              stack.  For maximum compatibility, we will put them in
2745              both places.  */
2746           int odd_sized_struct = (len > regsize && len % regsize != 0);
2747
2748           /* Note: Floating-point values that didn't fit into an FP
2749              register are only written to memory.  */
2750           while (len > 0)
2751             {
2752               /* Remember if the argument was written to the stack.  */
2753               int stack_used_p = 0;
2754               int partial_len = (len < regsize ? len : regsize);
2755
2756               if (mips_debug)
2757                 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
2758                                     partial_len);
2759
2760               /* Write this portion of the argument to the stack.  */
2761               if (argreg > MIPS_LAST_ARG_REGNUM
2762                   || odd_sized_struct
2763                   || fp_register_arg_p (typecode, arg_type))
2764                 {
2765                   /* Should shorter than int integer values be
2766                      promoted to int before being stored? */
2767                   int longword_offset = 0;
2768                   CORE_ADDR addr;
2769                   stack_used_p = 1;
2770                   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
2771                     {
2772                       if (regsize == 8
2773                           && (typecode == TYPE_CODE_INT
2774                               || typecode == TYPE_CODE_PTR
2775                               || typecode == TYPE_CODE_FLT) && len <= 4)
2776                         longword_offset = regsize - len;
2777                       else if ((typecode == TYPE_CODE_STRUCT
2778                                 || typecode == TYPE_CODE_UNION)
2779                                && TYPE_LENGTH (arg_type) < regsize)
2780                         longword_offset = regsize - len;
2781                     }
2782
2783                   if (mips_debug)
2784                     {
2785                       fprintf_unfiltered (gdb_stdlog, " - stack_offset=0x%s",
2786                                           paddr_nz (stack_offset));
2787                       fprintf_unfiltered (gdb_stdlog, " longword_offset=0x%s",
2788                                           paddr_nz (longword_offset));
2789                     }
2790
2791                   addr = sp + stack_offset + longword_offset;
2792
2793                   if (mips_debug)
2794                     {
2795                       int i;
2796                       fprintf_unfiltered (gdb_stdlog, " @0x%s ",
2797                                           paddr_nz (addr));
2798                       for (i = 0; i < partial_len; i++)
2799                         {
2800                           fprintf_unfiltered (gdb_stdlog, "%02x",
2801                                               val[i] & 0xff);
2802                         }
2803                     }
2804                   write_memory (addr, val, partial_len);
2805                 }
2806
2807               /* Note!!! This is NOT an else clause.  Odd sized
2808                  structs may go thru BOTH paths.  Floating point
2809                  arguments will not.  */
2810               /* Write this portion of the argument to a general
2811                  purpose register.  */
2812               if (argreg <= MIPS_LAST_ARG_REGNUM
2813                   && !fp_register_arg_p (typecode, arg_type))
2814                 {
2815                   LONGEST regval =
2816                     extract_unsigned_integer (val, partial_len);
2817
2818                   if (mips_debug)
2819                     fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
2820                                       argreg,
2821                                       phex (regval, regsize));
2822                   regcache_cooked_write_unsigned (regcache, argreg, regval);
2823                   argreg++;
2824                 }
2825
2826               len -= partial_len;
2827               val += partial_len;
2828
2829               /* Compute the the offset into the stack at which we
2830                  will copy the next parameter.
2831
2832                  In the new EABI (and the NABI32), the stack_offset
2833                  only needs to be adjusted when it has been used.  */
2834
2835               if (stack_used_p)
2836                 stack_offset += align_up (partial_len, regsize);
2837             }
2838         }
2839       if (mips_debug)
2840         fprintf_unfiltered (gdb_stdlog, "\n");
2841     }
2842
2843   regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
2844
2845   /* Return adjusted stack pointer.  */
2846   return sp;
2847 }
2848
2849 /* Determine the return value convention being used.  */
2850
2851 static enum return_value_convention
2852 mips_eabi_return_value (struct gdbarch *gdbarch,
2853                         struct type *type, struct regcache *regcache,
2854                         gdb_byte *readbuf, const gdb_byte *writebuf)
2855 {
2856   if (TYPE_LENGTH (type) > 2 * mips_abi_regsize (gdbarch))
2857     return RETURN_VALUE_STRUCT_CONVENTION;
2858   if (readbuf)
2859     memset (readbuf, 0, TYPE_LENGTH (type));
2860   return RETURN_VALUE_REGISTER_CONVENTION;
2861 }
2862
2863
2864 /* N32/N64 ABI stuff.  */
2865
2866 /* Search for a naturally aligned double at OFFSET inside a struct
2867    ARG_TYPE.  The N32 / N64 ABIs pass these in floating point
2868    registers.  */
2869
2870 static int
2871 mips_n32n64_fp_arg_chunk_p (struct type *arg_type, int offset)
2872 {
2873   int i;
2874
2875   if (TYPE_CODE (arg_type) != TYPE_CODE_STRUCT)
2876     return 0;
2877
2878   if (MIPS_FPU_TYPE != MIPS_FPU_DOUBLE)
2879     return 0;
2880
2881   if (TYPE_LENGTH (arg_type) < offset + MIPS64_REGSIZE)
2882     return 0;
2883
2884   for (i = 0; i < TYPE_NFIELDS (arg_type); i++)
2885     {
2886       int pos;
2887       struct type *field_type;
2888
2889       /* We're only looking at normal fields.  */
2890       if (TYPE_FIELD_STATIC (arg_type, i)
2891           || (TYPE_FIELD_BITPOS (arg_type, i) % 8) != 0)
2892         continue;
2893
2894       /* If we have gone past the offset, there is no double to pass.  */
2895       pos = TYPE_FIELD_BITPOS (arg_type, i) / 8;
2896       if (pos > offset)
2897         return 0;
2898
2899       field_type = check_typedef (TYPE_FIELD_TYPE (arg_type, i));
2900
2901       /* If this field is entirely before the requested offset, go
2902          on to the next one.  */
2903       if (pos + TYPE_LENGTH (field_type) <= offset)
2904         continue;
2905
2906       /* If this is our special aligned double, we can stop.  */
2907       if (TYPE_CODE (field_type) == TYPE_CODE_FLT
2908           && TYPE_LENGTH (field_type) == MIPS64_REGSIZE)
2909         return 1;
2910
2911       /* This field starts at or before the requested offset, and
2912          overlaps it.  If it is a structure, recurse inwards.  */
2913       return mips_n32n64_fp_arg_chunk_p (field_type, offset - pos);
2914     }
2915
2916   return 0;
2917 }
2918
2919 static CORE_ADDR
2920 mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
2921                              struct regcache *regcache, CORE_ADDR bp_addr,
2922                              int nargs, struct value **args, CORE_ADDR sp,
2923                              int struct_return, CORE_ADDR struct_addr)
2924 {
2925   int argreg;
2926   int float_argreg;
2927   int argnum;
2928   int len = 0;
2929   int stack_offset = 0;
2930   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2931   CORE_ADDR func_addr = find_function_addr (function, NULL);
2932
2933   /* For shared libraries, "t9" needs to point at the function
2934      address.  */
2935   regcache_cooked_write_signed (regcache, MIPS_T9_REGNUM, func_addr);
2936
2937   /* Set the return address register to point to the entry point of
2938      the program, where a breakpoint lies in wait.  */
2939   regcache_cooked_write_signed (regcache, MIPS_RA_REGNUM, bp_addr);
2940
2941   /* First ensure that the stack and structure return address (if any)
2942      are properly aligned.  The stack has to be at least 64-bit
2943      aligned even on 32-bit machines, because doubles must be 64-bit
2944      aligned.  For n32 and n64, stack frames need to be 128-bit
2945      aligned, so we round to this widest known alignment.  */
2946
2947   sp = align_down (sp, 16);
2948   struct_addr = align_down (struct_addr, 16);
2949
2950   /* Now make space on the stack for the args.  */
2951   for (argnum = 0; argnum < nargs; argnum++)
2952     len += align_up (TYPE_LENGTH (value_type (args[argnum])), MIPS64_REGSIZE);
2953   sp -= align_up (len, 16);
2954
2955   if (mips_debug)
2956     fprintf_unfiltered (gdb_stdlog,
2957                         "mips_n32n64_push_dummy_call: sp=0x%s allocated %ld\n",
2958                         paddr_nz (sp), (long) align_up (len, 16));
2959
2960   /* Initialize the integer and float register pointers.  */
2961   argreg = MIPS_A0_REGNUM;
2962   float_argreg = mips_fpa0_regnum (gdbarch);
2963
2964   /* The struct_return pointer occupies the first parameter-passing reg.  */
2965   if (struct_return)
2966     {
2967       if (mips_debug)
2968         fprintf_unfiltered (gdb_stdlog,
2969                             "mips_n32n64_push_dummy_call: struct_return reg=%d 0x%s\n",
2970                             argreg, paddr_nz (struct_addr));
2971       regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
2972     }
2973
2974   /* Now load as many as possible of the first arguments into
2975      registers, and push the rest onto the stack.  Loop thru args
2976      from first to last.  */
2977   for (argnum = 0; argnum < nargs; argnum++)
2978     {
2979       const gdb_byte *val;
2980       struct value *arg = args[argnum];
2981       struct type *arg_type = check_typedef (value_type (arg));
2982       int len = TYPE_LENGTH (arg_type);
2983       enum type_code typecode = TYPE_CODE (arg_type);
2984
2985       if (mips_debug)
2986         fprintf_unfiltered (gdb_stdlog,
2987                             "mips_n32n64_push_dummy_call: %d len=%d type=%d",
2988                             argnum + 1, len, (int) typecode);
2989
2990       val = value_contents (arg);
2991
2992       if (fp_register_arg_p (typecode, arg_type)
2993           && argreg <= MIPS_LAST_ARG_REGNUM)
2994         {
2995           /* This is a floating point value that fits entirely
2996              in a single register.  */
2997           LONGEST regval = extract_unsigned_integer (val, len);
2998           if (mips_debug)
2999             fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3000                                 float_argreg, phex (regval, len));
3001           regcache_cooked_write_unsigned (regcache, float_argreg, regval);
3002
3003           if (mips_debug)
3004             fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
3005                                 argreg, phex (regval, len));
3006           regcache_cooked_write_unsigned (regcache, argreg, regval);
3007           float_argreg++;
3008           argreg++;
3009         }
3010       else
3011         {
3012           /* Copy the argument to general registers or the stack in
3013              register-sized pieces.  Large arguments are split between
3014              registers and stack.  */
3015           /* For N32/N64, structs, unions, or other composite types are
3016              treated as a sequence of doublewords, and are passed in integer
3017              or floating point registers as though they were simple scalar
3018              parameters to the extent that they fit, with any excess on the
3019              stack packed according to the normal memory layout of the
3020              object.
3021              The caller does not reserve space for the register arguments;
3022              the callee is responsible for reserving it if required.  */
3023           /* Note: Floating-point values that didn't fit into an FP
3024              register are only written to memory.  */
3025           while (len > 0)
3026             {
3027               /* Remember if the argument was written to the stack.  */
3028               int stack_used_p = 0;
3029               int partial_len = (len < MIPS64_REGSIZE ? len : MIPS64_REGSIZE);
3030
3031               if (mips_debug)
3032                 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
3033                                     partial_len);
3034
3035               if (fp_register_arg_p (typecode, arg_type))
3036                 gdb_assert (argreg > MIPS_LAST_ARG_REGNUM);
3037
3038               /* Write this portion of the argument to the stack.  */
3039               if (argreg > MIPS_LAST_ARG_REGNUM)
3040                 {
3041                   /* Should shorter than int integer values be
3042                      promoted to int before being stored? */
3043                   int longword_offset = 0;
3044                   CORE_ADDR addr;
3045                   stack_used_p = 1;
3046                   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
3047                     {
3048                       if ((typecode == TYPE_CODE_INT
3049                            || typecode == TYPE_CODE_PTR
3050                            || typecode == TYPE_CODE_FLT)
3051                           && len <= 4)
3052                         longword_offset = MIPS64_REGSIZE - len;
3053                     }
3054
3055                   if (mips_debug)
3056                     {
3057                       fprintf_unfiltered (gdb_stdlog, " - stack_offset=0x%s",
3058                                           paddr_nz (stack_offset));
3059                       fprintf_unfiltered (gdb_stdlog, " longword_offset=0x%s",
3060                                           paddr_nz (longword_offset));
3061                     }
3062
3063                   addr = sp + stack_offset + longword_offset;
3064
3065                   if (mips_debug)
3066                     {
3067                       int i;
3068                       fprintf_unfiltered (gdb_stdlog, " @0x%s ",
3069                                           paddr_nz (addr));
3070                       for (i = 0; i < partial_len; i++)
3071                         {
3072                           fprintf_unfiltered (gdb_stdlog, "%02x",
3073                                               val[i] & 0xff);
3074                         }
3075                     }
3076                   write_memory (addr, val, partial_len);
3077                 }
3078
3079               /* Note!!! This is NOT an else clause.  Odd sized
3080                  structs may go thru BOTH paths.  */
3081               /* Write this portion of the argument to a general
3082                  purpose register.  */
3083               if (argreg <= MIPS_LAST_ARG_REGNUM)
3084                 {
3085                   LONGEST regval =
3086                     extract_unsigned_integer (val, partial_len);
3087
3088                   /* A non-floating-point argument being passed in a
3089                      general register.  If a struct or union, and if
3090                      the remaining length is smaller than the register
3091                      size, we have to adjust the register value on
3092                      big endian targets.
3093
3094                      It does not seem to be necessary to do the
3095                      same for integral types.  */
3096
3097                   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
3098                       && partial_len < MIPS64_REGSIZE
3099                       && (typecode == TYPE_CODE_STRUCT
3100                           || typecode == TYPE_CODE_UNION))
3101                     regval <<= ((MIPS64_REGSIZE - partial_len)
3102                                 * TARGET_CHAR_BIT);
3103
3104                   if (mips_debug)
3105                     fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
3106                                       argreg,
3107                                       phex (regval, MIPS64_REGSIZE));
3108                   regcache_cooked_write_unsigned (regcache, argreg, regval);
3109
3110                   if (mips_n32n64_fp_arg_chunk_p (arg_type,
3111                                                   TYPE_LENGTH (arg_type) - len))
3112                     {
3113                       if (mips_debug)
3114                         fprintf_filtered (gdb_stdlog, " - fpreg=%d val=%s",
3115                                           float_argreg,
3116                                           phex (regval, MIPS64_REGSIZE));
3117                       regcache_cooked_write_unsigned (regcache, float_argreg,
3118                                                       regval);
3119                     }
3120
3121                   float_argreg++;
3122                   argreg++;
3123                 }
3124
3125               len -= partial_len;
3126               val += partial_len;
3127
3128               /* Compute the the offset into the stack at which we
3129                  will copy the next parameter.
3130
3131                  In N32 (N64?), the stack_offset only needs to be
3132                  adjusted when it has been used.  */
3133
3134               if (stack_used_p)
3135                 stack_offset += align_up (partial_len, MIPS64_REGSIZE);
3136             }
3137         }
3138       if (mips_debug)
3139         fprintf_unfiltered (gdb_stdlog, "\n");
3140     }
3141
3142   regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
3143
3144   /* Return adjusted stack pointer.  */
3145   return sp;
3146 }
3147
3148 static enum return_value_convention
3149 mips_n32n64_return_value (struct gdbarch *gdbarch,
3150                           struct type *type, struct regcache *regcache,
3151                           gdb_byte *readbuf, const gdb_byte *writebuf)
3152 {
3153   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3154
3155   /* From MIPSpro N32 ABI Handbook, Document Number: 007-2816-004
3156
3157      Function results are returned in $2 (and $3 if needed), or $f0 (and $f2
3158      if needed), as appropriate for the type.  Composite results (struct,
3159      union, or array) are returned in $2/$f0 and $3/$f2 according to the
3160      following rules:
3161
3162      * A struct with only one or two floating point fields is returned in $f0
3163      (and $f2 if necessary).  This is a generalization of the Fortran COMPLEX
3164      case.
3165
3166      * Any other struct or union results of at most 128 bits are returned in
3167      $2 (first 64 bits) and $3 (remainder, if necessary).
3168
3169      * Larger composite results are handled by converting the function to a
3170      procedure with an implicit first parameter, which is a pointer to an area
3171      reserved by the caller to receive the result.  [The o32-bit ABI requires
3172      that all composite results be handled by conversion to implicit first
3173      parameters.  The MIPS/SGI Fortran implementation has always made a
3174      specific exception to return COMPLEX results in the floating point
3175      registers.]  */
3176
3177   if (TYPE_CODE (type) == TYPE_CODE_ARRAY
3178       || TYPE_LENGTH (type) > 2 * MIPS64_REGSIZE)
3179     return RETURN_VALUE_STRUCT_CONVENTION;
3180   else if (TYPE_CODE (type) == TYPE_CODE_FLT
3181            && TYPE_LENGTH (type) == 16
3182            && tdep->mips_fpu_type != MIPS_FPU_NONE)
3183     {
3184       /* A 128-bit floating-point value fills both $f0 and $f2.  The
3185          two registers are used in the same as memory order, so the
3186          eight bytes with the lower memory address are in $f0.  */
3187       if (mips_debug)
3188         fprintf_unfiltered (gdb_stderr, "Return float in $f0 and $f2\n");
3189       mips_xfer_register (gdbarch, regcache,
3190                           gdbarch_num_regs (gdbarch)
3191                           + mips_regnum (gdbarch)->fp0,
3192                           8, gdbarch_byte_order (gdbarch),
3193                           readbuf, writebuf, 0);
3194       mips_xfer_register (gdbarch, regcache,
3195                           gdbarch_num_regs (gdbarch)
3196                           + mips_regnum (gdbarch)->fp0 + 2,
3197                           8, gdbarch_byte_order (gdbarch),
3198                           readbuf ? readbuf + 8 : readbuf,
3199                           writebuf ? writebuf + 8 : writebuf, 0);
3200       return RETURN_VALUE_REGISTER_CONVENTION;
3201     }
3202   else if (TYPE_CODE (type) == TYPE_CODE_FLT
3203            && tdep->mips_fpu_type != MIPS_FPU_NONE)
3204     {
3205       /* A single or double floating-point value that fits in FP0.  */
3206       if (mips_debug)
3207         fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
3208       mips_xfer_register (gdbarch, regcache,
3209                           gdbarch_num_regs (gdbarch)
3210                           + mips_regnum (gdbarch)->fp0,
3211                           TYPE_LENGTH (type),
3212                           gdbarch_byte_order (gdbarch),
3213                           readbuf, writebuf, 0);
3214       return RETURN_VALUE_REGISTER_CONVENTION;
3215     }
3216   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
3217            && TYPE_NFIELDS (type) <= 2
3218            && TYPE_NFIELDS (type) >= 1
3219            && ((TYPE_NFIELDS (type) == 1
3220                 && (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 0)))
3221                     == TYPE_CODE_FLT))
3222                || (TYPE_NFIELDS (type) == 2
3223                    && (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 0)))
3224                        == TYPE_CODE_FLT)
3225                    && (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 1)))
3226                        == TYPE_CODE_FLT)))
3227            && tdep->mips_fpu_type != MIPS_FPU_NONE)
3228     {
3229       /* A struct that contains one or two floats.  Each value is part
3230          in the least significant part of their floating point
3231          register..  */
3232       int regnum;
3233       int field;
3234       for (field = 0, regnum = mips_regnum (gdbarch)->fp0;
3235            field < TYPE_NFIELDS (type); field++, regnum += 2)
3236         {
3237           int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field])
3238                         / TARGET_CHAR_BIT);
3239           if (mips_debug)
3240             fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",
3241                                 offset);
3242           mips_xfer_register (gdbarch, regcache,
3243                               gdbarch_num_regs (gdbarch) + regnum,
3244                               TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)),
3245                               gdbarch_byte_order (gdbarch),
3246                               readbuf, writebuf, offset);
3247         }
3248       return RETURN_VALUE_REGISTER_CONVENTION;
3249     }
3250   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
3251            || TYPE_CODE (type) == TYPE_CODE_UNION)
3252     {
3253       /* A structure or union.  Extract the left justified value,
3254          regardless of the byte order.  I.e. DO NOT USE
3255          mips_xfer_lower.  */
3256       int offset;
3257       int regnum;
3258       for (offset = 0, regnum = MIPS_V0_REGNUM;
3259            offset < TYPE_LENGTH (type);
3260            offset += register_size (gdbarch, regnum), regnum++)
3261         {
3262           int xfer = register_size (gdbarch, regnum);
3263           if (offset + xfer > TYPE_LENGTH (type))
3264             xfer = TYPE_LENGTH (type) - offset;
3265           if (mips_debug)
3266             fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n",
3267                                 offset, xfer, regnum);
3268           mips_xfer_register (gdbarch, regcache,
3269                               gdbarch_num_regs (gdbarch) + regnum,
3270                               xfer, BFD_ENDIAN_UNKNOWN, readbuf, writebuf,
3271                               offset);
3272         }
3273       return RETURN_VALUE_REGISTER_CONVENTION;
3274     }
3275   else
3276     {
3277       /* A scalar extract each part but least-significant-byte
3278          justified.  */
3279       int offset;
3280       int regnum;
3281       for (offset = 0, regnum = MIPS_V0_REGNUM;
3282            offset < TYPE_LENGTH (type);
3283            offset += register_size (gdbarch, regnum), regnum++)
3284         {
3285           int xfer = register_size (gdbarch, regnum);
3286           if (offset + xfer > TYPE_LENGTH (type))
3287             xfer = TYPE_LENGTH (type) - offset;
3288           if (mips_debug)
3289             fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
3290                                 offset, xfer, regnum);
3291           mips_xfer_register (gdbarch, regcache,
3292                               gdbarch_num_regs (gdbarch) + regnum,
3293                               xfer, gdbarch_byte_order (gdbarch),
3294                               readbuf, writebuf, offset);
3295         }
3296       return RETURN_VALUE_REGISTER_CONVENTION;
3297     }
3298 }
3299
3300 /* O32 ABI stuff.  */
3301
3302 static CORE_ADDR
3303 mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
3304                           struct regcache *regcache, CORE_ADDR bp_addr,
3305                           int nargs, struct value **args, CORE_ADDR sp,
3306                           int struct_return, CORE_ADDR struct_addr)
3307 {
3308   int argreg;
3309   int float_argreg;
3310   int argnum;
3311   int len = 0;
3312   int stack_offset = 0;
3313   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3314   CORE_ADDR func_addr = find_function_addr (function, NULL);
3315
3316   /* For shared libraries, "t9" needs to point at the function
3317      address.  */
3318   regcache_cooked_write_signed (regcache, MIPS_T9_REGNUM, func_addr);
3319
3320   /* Set the return address register to point to the entry point of
3321      the program, where a breakpoint lies in wait.  */
3322   regcache_cooked_write_signed (regcache, MIPS_RA_REGNUM, bp_addr);
3323
3324   /* First ensure that the stack and structure return address (if any)
3325      are properly aligned.  The stack has to be at least 64-bit
3326      aligned even on 32-bit machines, because doubles must be 64-bit
3327      aligned.  For n32 and n64, stack frames need to be 128-bit
3328      aligned, so we round to this widest known alignment.  */
3329
3330   sp = align_down (sp, 16);
3331   struct_addr = align_down (struct_addr, 16);
3332
3333   /* Now make space on the stack for the args.  */
3334   for (argnum = 0; argnum < nargs; argnum++)
3335     {
3336       struct type *arg_type = check_typedef (value_type (args[argnum]));
3337       int arglen = TYPE_LENGTH (arg_type);
3338
3339       /* Align to double-word if necessary.  */
3340       if (mips_type_needs_double_align (arg_type))
3341         len = align_up (len, MIPS32_REGSIZE * 2);
3342       /* Allocate space on the stack.  */
3343       len += align_up (arglen, MIPS32_REGSIZE);
3344     }
3345   sp -= align_up (len, 16);
3346
3347   if (mips_debug)
3348     fprintf_unfiltered (gdb_stdlog,
3349                         "mips_o32_push_dummy_call: sp=0x%s allocated %ld\n",
3350                         paddr_nz (sp), (long) align_up (len, 16));
3351
3352   /* Initialize the integer and float register pointers.  */
3353   argreg = MIPS_A0_REGNUM;
3354   float_argreg = mips_fpa0_regnum (gdbarch);
3355
3356   /* The struct_return pointer occupies the first parameter-passing reg.  */
3357   if (struct_return)
3358     {
3359       if (mips_debug)
3360         fprintf_unfiltered (gdb_stdlog,
3361                             "mips_o32_push_dummy_call: struct_return reg=%d 0x%s\n",
3362                             argreg, paddr_nz (struct_addr));
3363       regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
3364       stack_offset += MIPS32_REGSIZE;
3365     }
3366
3367   /* Now load as many as possible of the first arguments into
3368      registers, and push the rest onto the stack.  Loop thru args
3369      from first to last.  */
3370   for (argnum = 0; argnum < nargs; argnum++)
3371     {
3372       const gdb_byte *val;
3373       struct value *arg = args[argnum];
3374       struct type *arg_type = check_typedef (value_type (arg));
3375       int len = TYPE_LENGTH (arg_type);
3376       enum type_code typecode = TYPE_CODE (arg_type);
3377
3378       if (mips_debug)
3379         fprintf_unfiltered (gdb_stdlog,
3380                             "mips_o32_push_dummy_call: %d len=%d type=%d",
3381                             argnum + 1, len, (int) typecode);
3382
3383       val = value_contents (arg);
3384
3385       /* 32-bit ABIs always start floating point arguments in an
3386          even-numbered floating point register.  Round the FP register
3387          up before the check to see if there are any FP registers
3388          left.  O32/O64 targets also pass the FP in the integer
3389          registers so also round up normal registers.  */
3390       if (fp_register_arg_p (typecode, arg_type))
3391         {
3392           if ((float_argreg & 1))
3393             float_argreg++;
3394         }
3395
3396       /* Floating point arguments passed in registers have to be
3397          treated specially.  On 32-bit architectures, doubles
3398          are passed in register pairs; the even register gets
3399          the low word, and the odd register gets the high word.
3400          On O32/O64, the first two floating point arguments are
3401          also copied to general registers, because MIPS16 functions
3402          don't use float registers for arguments.  This duplication of
3403          arguments in general registers can't hurt non-MIPS16 functions
3404          because those registers are normally skipped.  */
3405
3406       if (fp_register_arg_p (typecode, arg_type)
3407           && float_argreg <= MIPS_LAST_FP_ARG_REGNUM)
3408         {
3409           if (register_size (gdbarch, float_argreg) < 8 && len == 8)
3410             {
3411               int low_offset = gdbarch_byte_order (gdbarch)
3412                                == BFD_ENDIAN_BIG ? 4 : 0;
3413               unsigned long regval;
3414
3415               /* Write the low word of the double to the even register(s).  */
3416               regval = extract_unsigned_integer (val + low_offset, 4);
3417               if (mips_debug)
3418                 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3419                                     float_argreg, phex (regval, 4));
3420               regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
3421               if (mips_debug)
3422                 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
3423                                     argreg, phex (regval, 4));
3424               regcache_cooked_write_unsigned (regcache, argreg++, regval);
3425
3426               /* Write the high word of the double to the odd register(s).  */
3427               regval = extract_unsigned_integer (val + 4 - low_offset, 4);
3428               if (mips_debug)
3429                 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3430                                     float_argreg, phex (regval, 4));
3431               regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
3432
3433               if (mips_debug)
3434                 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
3435                                     argreg, phex (regval, 4));
3436               regcache_cooked_write_unsigned (regcache, argreg++, regval);
3437             }
3438           else
3439             {
3440               /* This is a floating point value that fits entirely
3441                  in a single register.  */
3442               /* On 32 bit ABI's the float_argreg is further adjusted
3443                  above to ensure that it is even register aligned.  */
3444               LONGEST regval = extract_unsigned_integer (val, len);
3445               if (mips_debug)
3446                 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3447                                     float_argreg, phex (regval, len));
3448               regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
3449               /* CAGNEY: 32 bit MIPS ABI's always reserve two FP
3450                  registers for each argument.  The below is (my
3451                  guess) to ensure that the corresponding integer
3452                  register has reserved the same space.  */
3453               if (mips_debug)
3454                 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
3455                                     argreg, phex (regval, len));
3456               regcache_cooked_write_unsigned (regcache, argreg, regval);
3457               argreg += 2;
3458             }
3459           /* Reserve space for the FP register.  */
3460           stack_offset += align_up (len, MIPS32_REGSIZE);
3461         }
3462       else
3463         {
3464           /* Copy the argument to general registers or the stack in
3465              register-sized pieces.  Large arguments are split between
3466              registers and stack.  */
3467           /* Note: structs whose size is not a multiple of MIPS32_REGSIZE
3468              are treated specially: Irix cc passes
3469              them in registers where gcc sometimes puts them on the
3470              stack.  For maximum compatibility, we will put them in
3471              both places.  */
3472           int odd_sized_struct = (len > MIPS32_REGSIZE
3473                                   && len % MIPS32_REGSIZE != 0);
3474           /* Structures should be aligned to eight bytes (even arg registers)
3475              on MIPS_ABI_O32, if their first member has double precision.  */
3476           if (mips_type_needs_double_align (arg_type))
3477             {
3478               if ((argreg & 1))
3479                 {
3480                   argreg++;
3481                   stack_offset += MIPS32_REGSIZE;
3482                 }
3483             }
3484           while (len > 0)
3485             {
3486               /* Remember if the argument was written to the stack.  */
3487               int stack_used_p = 0;
3488               int partial_len = (len < MIPS32_REGSIZE ? len : MIPS32_REGSIZE);
3489
3490               if (mips_debug)
3491                 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
3492                                     partial_len);
3493
3494               /* Write this portion of the argument to the stack.  */
3495               if (argreg > MIPS_LAST_ARG_REGNUM
3496                   || odd_sized_struct)
3497                 {
3498                   /* Should shorter than int integer values be
3499                      promoted to int before being stored? */
3500                   int longword_offset = 0;
3501                   CORE_ADDR addr;
3502                   stack_used_p = 1;
3503
3504                   if (mips_debug)
3505                     {
3506                       fprintf_unfiltered (gdb_stdlog, " - stack_offset=0x%s",
3507                                           paddr_nz (stack_offset));
3508                       fprintf_unfiltered (gdb_stdlog, " longword_offset=0x%s",
3509                                           paddr_nz (longword_offset));
3510                     }
3511
3512                   addr = sp + stack_offset + longword_offset;
3513
3514                   if (mips_debug)
3515                     {
3516                       int i;
3517                       fprintf_unfiltered (gdb_stdlog, " @0x%s ",
3518                                           paddr_nz (addr));
3519                       for (i = 0; i < partial_len; i++)
3520                         {
3521                           fprintf_unfiltered (gdb_stdlog, "%02x",
3522                                               val[i] & 0xff);
3523                         }
3524                     }
3525                   write_memory (addr, val, partial_len);
3526                 }
3527
3528               /* Note!!! This is NOT an else clause.  Odd sized
3529                  structs may go thru BOTH paths.  */
3530               /* Write this portion of the argument to a general
3531                  purpose register.  */
3532               if (argreg <= MIPS_LAST_ARG_REGNUM)
3533                 {
3534                   LONGEST regval = extract_signed_integer (val, partial_len);
3535                   /* Value may need to be sign extended, because
3536                      mips_isa_regsize() != mips_abi_regsize().  */
3537
3538                   /* A non-floating-point argument being passed in a
3539                      general register.  If a struct or union, and if
3540                      the remaining length is smaller than the register
3541                      size, we have to adjust the register value on
3542                      big endian targets.
3543
3544                      It does not seem to be necessary to do the
3545                      same for integral types.
3546
3547                      Also don't do this adjustment on O64 binaries.
3548
3549                      cagney/2001-07-23: gdb/179: Also, GCC, when
3550                      outputting LE O32 with sizeof (struct) <
3551                      mips_abi_regsize(), generates a left shift
3552                      as part of storing the argument in a register
3553                      (the left shift isn't generated when
3554                      sizeof (struct) >= mips_abi_regsize()).  Since
3555                      it is quite possible that this is GCC
3556                      contradicting the LE/O32 ABI, GDB has not been
3557                      adjusted to accommodate this.  Either someone
3558                      needs to demonstrate that the LE/O32 ABI
3559                      specifies such a left shift OR this new ABI gets
3560                      identified as such and GDB gets tweaked
3561                      accordingly.  */
3562
3563                   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
3564                       && partial_len < MIPS32_REGSIZE
3565                       && (typecode == TYPE_CODE_STRUCT
3566                           || typecode == TYPE_CODE_UNION))
3567                     regval <<= ((MIPS32_REGSIZE - partial_len)
3568                                 * TARGET_CHAR_BIT);
3569
3570                   if (mips_debug)
3571                     fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
3572                                       argreg,
3573                                       phex (regval, MIPS32_REGSIZE));
3574                   regcache_cooked_write_unsigned (regcache, argreg, regval);
3575                   argreg++;
3576
3577                   /* Prevent subsequent floating point arguments from
3578                      being passed in floating point registers.  */
3579                   float_argreg = MIPS_LAST_FP_ARG_REGNUM + 1;
3580                 }
3581
3582               len -= partial_len;
3583               val += partial_len;
3584
3585               /* Compute the the offset into the stack at which we
3586                  will copy the next parameter.
3587
3588                  In older ABIs, the caller reserved space for
3589                  registers that contained arguments.  This was loosely
3590                  refered to as their "home".  Consequently, space is
3591                  always allocated.  */
3592
3593               stack_offset += align_up (partial_len, MIPS32_REGSIZE);
3594             }
3595         }
3596       if (mips_debug)
3597         fprintf_unfiltered (gdb_stdlog, "\n");
3598     }
3599
3600   regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
3601
3602   /* Return adjusted stack pointer.  */
3603   return sp;
3604 }
3605
3606 static enum return_value_convention
3607 mips_o32_return_value (struct gdbarch *gdbarch, struct type *type,
3608                        struct regcache *regcache,
3609                        gdb_byte *readbuf, const gdb_byte *writebuf)
3610 {
3611   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3612
3613   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
3614       || TYPE_CODE (type) == TYPE_CODE_UNION
3615       || TYPE_CODE (type) == TYPE_CODE_ARRAY)
3616     return RETURN_VALUE_STRUCT_CONVENTION;
3617   else if (TYPE_CODE (type) == TYPE_CODE_FLT
3618            && TYPE_LENGTH (type) == 4 && tdep->mips_fpu_type != MIPS_FPU_NONE)
3619     {
3620       /* A single-precision floating-point value.  It fits in the
3621          least significant part of FP0.  */
3622       if (mips_debug)
3623         fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
3624       mips_xfer_register (gdbarch, regcache,
3625                           gdbarch_num_regs (gdbarch)
3626                             + mips_regnum (gdbarch)->fp0,
3627                           TYPE_LENGTH (type),
3628                           gdbarch_byte_order (gdbarch),
3629                           readbuf, writebuf, 0);
3630       return RETURN_VALUE_REGISTER_CONVENTION;
3631     }
3632   else if (TYPE_CODE (type) == TYPE_CODE_FLT
3633            && TYPE_LENGTH (type) == 8 && tdep->mips_fpu_type != MIPS_FPU_NONE)
3634     {
3635       /* A double-precision floating-point value.  The most
3636          significant part goes in FP1, and the least significant in
3637          FP0.  */
3638       if (mips_debug)
3639         fprintf_unfiltered (gdb_stderr, "Return float in $fp1/$fp0\n");
3640       switch (gdbarch_byte_order (gdbarch))
3641         {
3642         case BFD_ENDIAN_LITTLE:
3643           mips_xfer_register (gdbarch, regcache,
3644                               gdbarch_num_regs (gdbarch)
3645                                 + mips_regnum (gdbarch)->fp0 +
3646                               0, 4, gdbarch_byte_order (gdbarch),
3647                               readbuf, writebuf, 0);
3648           mips_xfer_register (gdbarch, regcache,
3649                               gdbarch_num_regs (gdbarch)
3650                                 + mips_regnum (gdbarch)->fp0 + 1,
3651                               4, gdbarch_byte_order (gdbarch),
3652                               readbuf, writebuf, 4);
3653           break;
3654         case BFD_ENDIAN_BIG:
3655           mips_xfer_register (gdbarch, regcache,
3656                               gdbarch_num_regs (gdbarch)
3657                                 + mips_regnum (gdbarch)->fp0 + 1,
3658                               4, gdbarch_byte_order (gdbarch),
3659                               readbuf, writebuf, 0);
3660           mips_xfer_register (gdbarch, regcache,
3661                               gdbarch_num_regs (gdbarch)
3662                                 + mips_regnum (gdbarch)->fp0 + 0,
3663                               4, gdbarch_byte_order (gdbarch),
3664                               readbuf, writebuf, 4);
3665           break;
3666         default:
3667           internal_error (__FILE__, __LINE__, _("bad switch"));
3668         }
3669       return RETURN_VALUE_REGISTER_CONVENTION;
3670     }
3671 #if 0
3672   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
3673            && TYPE_NFIELDS (type) <= 2
3674            && TYPE_NFIELDS (type) >= 1
3675            && ((TYPE_NFIELDS (type) == 1
3676                 && (TYPE_CODE (TYPE_FIELD_TYPE (type, 0))
3677                     == TYPE_CODE_FLT))
3678                || (TYPE_NFIELDS (type) == 2
3679                    && (TYPE_CODE (TYPE_FIELD_TYPE (type, 0))
3680                        == TYPE_CODE_FLT)
3681                    && (TYPE_CODE (TYPE_FIELD_TYPE (type, 1))
3682                        == TYPE_CODE_FLT)))
3683            && tdep->mips_fpu_type != MIPS_FPU_NONE)
3684     {
3685       /* A struct that contains one or two floats.  Each value is part
3686          in the least significant part of their floating point
3687          register..  */
3688       gdb_byte reg[MAX_REGISTER_SIZE];
3689       int regnum;
3690       int field;
3691       for (field = 0, regnum = mips_regnum (gdbarch)->fp0;
3692            field < TYPE_NFIELDS (type); field++, regnum += 2)
3693         {
3694           int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field])
3695                         / TARGET_CHAR_BIT);
3696           if (mips_debug)
3697             fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",
3698                                 offset);
3699           mips_xfer_register (gdbarch, regcache,
3700                               gdbarch_num_regs (gdbarch) + regnum,
3701                               TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)),
3702                               gdbarch_byte_order (gdbarch),
3703                               readbuf, writebuf, offset);
3704         }
3705       return RETURN_VALUE_REGISTER_CONVENTION;
3706     }
3707 #endif
3708 #if 0
3709   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
3710            || TYPE_CODE (type) == TYPE_CODE_UNION)
3711     {
3712       /* A structure or union.  Extract the left justified value,
3713          regardless of the byte order.  I.e. DO NOT USE
3714          mips_xfer_lower.  */
3715       int offset;
3716       int regnum;
3717       for (offset = 0, regnum = MIPS_V0_REGNUM;
3718            offset < TYPE_LENGTH (type);
3719            offset += register_size (gdbarch, regnum), regnum++)
3720         {
3721           int xfer = register_size (gdbarch, regnum);
3722           if (offset + xfer > TYPE_LENGTH (type))
3723             xfer = TYPE_LENGTH (type) - offset;
3724           if (mips_debug)
3725             fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n",
3726                                 offset, xfer, regnum);
3727           mips_xfer_register (gdbarch, regcache,
3728                               gdbarch_num_regs (gdbarch) + regnum, xfer,
3729                               BFD_ENDIAN_UNKNOWN, readbuf, writebuf, offset);
3730         }
3731       return RETURN_VALUE_REGISTER_CONVENTION;
3732     }
3733 #endif
3734   else
3735     {
3736       /* A scalar extract each part but least-significant-byte
3737          justified.  o32 thinks registers are 4 byte, regardless of
3738          the ISA.  */
3739       int offset;
3740       int regnum;
3741       for (offset = 0, regnum = MIPS_V0_REGNUM;
3742            offset < TYPE_LENGTH (type);
3743            offset += MIPS32_REGSIZE, regnum++)
3744         {
3745           int xfer = MIPS32_REGSIZE;
3746           if (offset + xfer > TYPE_LENGTH (type))
3747             xfer = TYPE_LENGTH (type) - offset;
3748           if (mips_debug)
3749             fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
3750                                 offset, xfer, regnum);
3751           mips_xfer_register (gdbarch, regcache,
3752                               gdbarch_num_regs (gdbarch) + regnum, xfer,
3753                               gdbarch_byte_order (gdbarch),
3754                               readbuf, writebuf, offset);
3755         }
3756       return RETURN_VALUE_REGISTER_CONVENTION;
3757     }
3758 }
3759
3760 /* O64 ABI.  This is a hacked up kind of 64-bit version of the o32
3761    ABI.  */
3762
3763 static CORE_ADDR
3764 mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
3765                           struct regcache *regcache, CORE_ADDR bp_addr,
3766                           int nargs,
3767                           struct value **args, CORE_ADDR sp,
3768                           int struct_return, CORE_ADDR struct_addr)
3769 {
3770   int argreg;
3771   int float_argreg;
3772   int argnum;
3773   int len = 0;
3774   int stack_offset = 0;
3775   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3776   CORE_ADDR func_addr = find_function_addr (function, NULL);
3777
3778   /* For shared libraries, "t9" needs to point at the function
3779      address.  */
3780   regcache_cooked_write_signed (regcache, MIPS_T9_REGNUM, func_addr);
3781
3782   /* Set the return address register to point to the entry point of
3783      the program, where a breakpoint lies in wait.  */
3784   regcache_cooked_write_signed (regcache, MIPS_RA_REGNUM, bp_addr);
3785
3786   /* First ensure that the stack and structure return address (if any)
3787      are properly aligned.  The stack has to be at least 64-bit
3788      aligned even on 32-bit machines, because doubles must be 64-bit
3789      aligned.  For n32 and n64, stack frames need to be 128-bit
3790      aligned, so we round to this widest known alignment.  */
3791
3792   sp = align_down (sp, 16);
3793   struct_addr = align_down (struct_addr, 16);
3794
3795   /* Now make space on the stack for the args.  */
3796   for (argnum = 0; argnum < nargs; argnum++)
3797     {
3798       struct type *arg_type = check_typedef (value_type (args[argnum]));
3799       int arglen = TYPE_LENGTH (arg_type);
3800
3801       /* Allocate space on the stack.  */
3802       len += align_up (arglen, MIPS64_REGSIZE);
3803     }
3804   sp -= align_up (len, 16);
3805
3806   if (mips_debug)
3807     fprintf_unfiltered (gdb_stdlog,
3808                         "mips_o64_push_dummy_call: sp=0x%s allocated %ld\n",
3809                         paddr_nz (sp), (long) align_up (len, 16));
3810
3811   /* Initialize the integer and float register pointers.  */
3812   argreg = MIPS_A0_REGNUM;
3813   float_argreg = mips_fpa0_regnum (gdbarch);
3814
3815   /* The struct_return pointer occupies the first parameter-passing reg.  */
3816   if (struct_return)
3817     {
3818       if (mips_debug)
3819         fprintf_unfiltered (gdb_stdlog,
3820                             "mips_o64_push_dummy_call: struct_return reg=%d 0x%s\n",
3821                             argreg, paddr_nz (struct_addr));
3822       regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
3823       stack_offset += MIPS64_REGSIZE;
3824     }
3825
3826   /* Now load as many as possible of the first arguments into
3827      registers, and push the rest onto the stack.  Loop thru args
3828      from first to last.  */
3829   for (argnum = 0; argnum < nargs; argnum++)
3830     {
3831       const gdb_byte *val;
3832       struct value *arg = args[argnum];
3833       struct type *arg_type = check_typedef (value_type (arg));
3834       int len = TYPE_LENGTH (arg_type);
3835       enum type_code typecode = TYPE_CODE (arg_type);
3836
3837       if (mips_debug)
3838         fprintf_unfiltered (gdb_stdlog,
3839                             "mips_o64_push_dummy_call: %d len=%d type=%d",
3840                             argnum + 1, len, (int) typecode);
3841
3842       val = value_contents (arg);
3843
3844       /* Floating point arguments passed in registers have to be
3845          treated specially.  On 32-bit architectures, doubles
3846          are passed in register pairs; the even register gets
3847          the low word, and the odd register gets the high word.
3848          On O32/O64, the first two floating point arguments are
3849          also copied to general registers, because MIPS16 functions
3850          don't use float registers for arguments.  This duplication of
3851          arguments in general registers can't hurt non-MIPS16 functions
3852          because those registers are normally skipped.  */
3853
3854       if (fp_register_arg_p (typecode, arg_type)
3855           && float_argreg <= MIPS_LAST_FP_ARG_REGNUM)
3856         {
3857           LONGEST regval = extract_unsigned_integer (val, len);
3858           if (mips_debug)
3859             fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3860                                 float_argreg, phex (regval, len));
3861           regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
3862           if (mips_debug)
3863             fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
3864                                 argreg, phex (regval, len));
3865           regcache_cooked_write_unsigned (regcache, argreg, regval);
3866           argreg++;
3867           /* Reserve space for the FP register.  */
3868           stack_offset += align_up (len, MIPS64_REGSIZE);
3869         }
3870       else
3871         {
3872           /* Copy the argument to general registers or the stack in
3873              register-sized pieces.  Large arguments are split between
3874              registers and stack.  */
3875           /* Note: structs whose size is not a multiple of MIPS64_REGSIZE
3876              are treated specially: Irix cc passes them in registers
3877              where gcc sometimes puts them on the stack.  For maximum
3878              compatibility, we will put them in both places.  */
3879           int odd_sized_struct = (len > MIPS64_REGSIZE
3880                                   && len % MIPS64_REGSIZE != 0);
3881           while (len > 0)
3882             {
3883               /* Remember if the argument was written to the stack.  */
3884               int stack_used_p = 0;
3885               int partial_len = (len < MIPS64_REGSIZE ? len : MIPS64_REGSIZE);
3886
3887               if (mips_debug)
3888                 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
3889                                     partial_len);
3890
3891               /* Write this portion of the argument to the stack.  */
3892               if (argreg > MIPS_LAST_ARG_REGNUM
3893                   || odd_sized_struct)
3894                 {
3895                   /* Should shorter than int integer values be
3896                      promoted to int before being stored? */
3897                   int longword_offset = 0;
3898                   CORE_ADDR addr;
3899                   stack_used_p = 1;
3900                   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
3901                     {
3902                       if ((typecode == TYPE_CODE_INT
3903                            || typecode == TYPE_CODE_PTR
3904                            || typecode == TYPE_CODE_FLT)
3905                           && len <= 4)
3906                         longword_offset = MIPS64_REGSIZE - len;
3907                     }
3908
3909                   if (mips_debug)
3910                     {
3911                       fprintf_unfiltered (gdb_stdlog, " - stack_offset=0x%s",
3912                                           paddr_nz (stack_offset));
3913                       fprintf_unfiltered (gdb_stdlog, " longword_offset=0x%s",
3914                                           paddr_nz (longword_offset));
3915                     }
3916
3917                   addr = sp + stack_offset + longword_offset;
3918
3919                   if (mips_debug)
3920                     {
3921                       int i;
3922                       fprintf_unfiltered (gdb_stdlog, " @0x%s ",
3923                                           paddr_nz (addr));
3924                       for (i = 0; i < partial_len; i++)
3925                         {
3926                           fprintf_unfiltered (gdb_stdlog, "%02x",
3927                                               val[i] & 0xff);
3928                         }
3929                     }
3930                   write_memory (addr, val, partial_len);
3931                 }
3932
3933               /* Note!!! This is NOT an else clause.  Odd sized
3934                  structs may go thru BOTH paths.  */
3935               /* Write this portion of the argument to a general
3936                  purpose register.  */
3937               if (argreg <= MIPS_LAST_ARG_REGNUM)
3938                 {
3939                   LONGEST regval = extract_signed_integer (val, partial_len);
3940                   /* Value may need to be sign extended, because
3941                      mips_isa_regsize() != mips_abi_regsize().  */
3942
3943                   /* A non-floating-point argument being passed in a
3944                      general register.  If a struct or union, and if
3945                      the remaining length is smaller than the register
3946                      size, we have to adjust the register value on
3947                      big endian targets.
3948
3949                      It does not seem to be necessary to do the
3950                      same for integral types. */
3951
3952                   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
3953                       && partial_len < MIPS64_REGSIZE
3954                       && (typecode == TYPE_CODE_STRUCT
3955                           || typecode == TYPE_CODE_UNION))
3956                     regval <<= ((MIPS64_REGSIZE - partial_len)
3957                                 * TARGET_CHAR_BIT);
3958
3959                   if (mips_debug)
3960                     fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
3961                                       argreg,
3962                                       phex (regval, MIPS64_REGSIZE));
3963                   regcache_cooked_write_unsigned (regcache, argreg, regval);
3964                   argreg++;
3965
3966                   /* Prevent subsequent floating point arguments from
3967                      being passed in floating point registers.  */
3968                   float_argreg = MIPS_LAST_FP_ARG_REGNUM + 1;
3969                 }
3970
3971               len -= partial_len;
3972               val += partial_len;
3973
3974               /* Compute the the offset into the stack at which we
3975                  will copy the next parameter.
3976
3977                  In older ABIs, the caller reserved space for
3978                  registers that contained arguments.  This was loosely
3979                  refered to as their "home".  Consequently, space is
3980                  always allocated.  */
3981
3982               stack_offset += align_up (partial_len, MIPS64_REGSIZE);
3983             }
3984         }
3985       if (mips_debug)
3986         fprintf_unfiltered (gdb_stdlog, "\n");
3987     }
3988
3989   regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
3990
3991   /* Return adjusted stack pointer.  */
3992   return sp;
3993 }
3994
3995 static enum return_value_convention
3996 mips_o64_return_value (struct gdbarch *gdbarch,
3997                        struct type *type, struct regcache *regcache,
3998                        gdb_byte *readbuf, const gdb_byte *writebuf)
3999 {
4000   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4001
4002   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
4003       || TYPE_CODE (type) == TYPE_CODE_UNION
4004       || TYPE_CODE (type) == TYPE_CODE_ARRAY)
4005     return RETURN_VALUE_STRUCT_CONVENTION;
4006   else if (fp_register_arg_p (TYPE_CODE (type), type))
4007     {
4008       /* A floating-point value.  It fits in the least significant
4009          part of FP0.  */
4010       if (mips_debug)
4011         fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
4012       mips_xfer_register (gdbarch, regcache,
4013                           gdbarch_num_regs (gdbarch)
4014                             + mips_regnum (gdbarch)->fp0,
4015                           TYPE_LENGTH (type),
4016                           gdbarch_byte_order (gdbarch),
4017                           readbuf, writebuf, 0);
4018       return RETURN_VALUE_REGISTER_CONVENTION;
4019     }
4020   else
4021     {
4022       /* A scalar extract each part but least-significant-byte
4023          justified. */
4024       int offset;
4025       int regnum;
4026       for (offset = 0, regnum = MIPS_V0_REGNUM;
4027            offset < TYPE_LENGTH (type);
4028            offset += MIPS64_REGSIZE, regnum++)
4029         {
4030           int xfer = MIPS64_REGSIZE;
4031           if (offset + xfer > TYPE_LENGTH (type))
4032             xfer = TYPE_LENGTH (type) - offset;
4033           if (mips_debug)
4034             fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
4035                                 offset, xfer, regnum);
4036           mips_xfer_register (gdbarch, regcache,
4037                               gdbarch_num_regs (gdbarch) + regnum,
4038                               xfer, gdbarch_byte_order (gdbarch),
4039                               readbuf, writebuf, offset);
4040         }
4041       return RETURN_VALUE_REGISTER_CONVENTION;
4042     }
4043 }
4044
4045 /* Floating point register management.
4046
4047    Background: MIPS1 & 2 fp registers are 32 bits wide.  To support
4048    64bit operations, these early MIPS cpus treat fp register pairs
4049    (f0,f1) as a single register (d0).  Later MIPS cpu's have 64 bit fp
4050    registers and offer a compatibility mode that emulates the MIPS2 fp
4051    model.  When operating in MIPS2 fp compat mode, later cpu's split
4052    double precision floats into two 32-bit chunks and store them in
4053    consecutive fp regs.  To display 64-bit floats stored in this
4054    fashion, we have to combine 32 bits from f0 and 32 bits from f1.
4055    Throw in user-configurable endianness and you have a real mess.
4056
4057    The way this works is:
4058      - If we are in 32-bit mode or on a 32-bit processor, then a 64-bit
4059        double-precision value will be split across two logical registers.
4060        The lower-numbered logical register will hold the low-order bits,
4061        regardless of the processor's endianness.
4062      - If we are on a 64-bit processor, and we are looking for a
4063        single-precision value, it will be in the low ordered bits
4064        of a 64-bit GPR (after mfc1, for example) or a 64-bit register
4065        save slot in memory.
4066      - If we are in 64-bit mode, everything is straightforward.
4067
4068    Note that this code only deals with "live" registers at the top of the
4069    stack.  We will attempt to deal with saved registers later, when
4070    the raw/cooked register interface is in place. (We need a general
4071    interface that can deal with dynamic saved register sizes -- fp
4072    regs could be 32 bits wide in one frame and 64 on the frame above
4073    and below).  */
4074
4075 static struct type *
4076 mips_float_register_type (void)
4077 {
4078   return builtin_type_ieee_single;
4079 }
4080
4081 static struct type *
4082 mips_double_register_type (void)
4083 {
4084   return builtin_type_ieee_double;
4085 }
4086
4087 /* Copy a 32-bit single-precision value from the current frame
4088    into rare_buffer.  */
4089
4090 static void
4091 mips_read_fp_register_single (struct frame_info *frame, int regno,
4092                               gdb_byte *rare_buffer)
4093 {
4094   struct gdbarch *gdbarch = get_frame_arch (frame);
4095   int raw_size = register_size (gdbarch, regno);
4096   gdb_byte *raw_buffer = alloca (raw_size);
4097
4098   if (!frame_register_read (frame, regno, raw_buffer))
4099     error (_("can't read register %d (%s)"),
4100            regno, gdbarch_register_name (gdbarch, regno));
4101   if (raw_size == 8)
4102     {
4103       /* We have a 64-bit value for this register.  Find the low-order
4104          32 bits.  */
4105       int offset;
4106
4107       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
4108         offset = 4;
4109       else
4110         offset = 0;
4111
4112       memcpy (rare_buffer, raw_buffer + offset, 4);
4113     }
4114   else
4115     {
4116       memcpy (rare_buffer, raw_buffer, 4);
4117     }
4118 }
4119
4120 /* Copy a 64-bit double-precision value from the current frame into
4121    rare_buffer.  This may include getting half of it from the next
4122    register.  */
4123
4124 static void
4125 mips_read_fp_register_double (struct frame_info *frame, int regno,
4126                               gdb_byte *rare_buffer)
4127 {
4128   struct gdbarch *gdbarch = get_frame_arch (frame);
4129   int raw_size = register_size (gdbarch, regno);
4130
4131   if (raw_size == 8 && !mips2_fp_compat (frame))
4132     {
4133       /* We have a 64-bit value for this register, and we should use
4134          all 64 bits.  */
4135       if (!frame_register_read (frame, regno, rare_buffer))
4136         error (_("can't read register %d (%s)"),
4137                regno, gdbarch_register_name (gdbarch, regno));
4138     }
4139   else
4140     {
4141       int rawnum = regno % gdbarch_num_regs (gdbarch);
4142
4143       if ((rawnum - mips_regnum (gdbarch)->fp0) & 1)
4144         internal_error (__FILE__, __LINE__,
4145                         _("mips_read_fp_register_double: bad access to "
4146                         "odd-numbered FP register"));
4147
4148       /* mips_read_fp_register_single will find the correct 32 bits from
4149          each register.  */
4150       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
4151         {
4152           mips_read_fp_register_single (frame, regno, rare_buffer + 4);
4153           mips_read_fp_register_single (frame, regno + 1, rare_buffer);
4154         }
4155       else
4156         {
4157           mips_read_fp_register_single (frame, regno, rare_buffer);
4158           mips_read_fp_register_single (frame, regno + 1, rare_buffer + 4);
4159         }
4160     }
4161 }
4162
4163 static void
4164 mips_print_fp_register (struct ui_file *file, struct frame_info *frame,
4165                         int regnum)
4166 {                               /* do values for FP (float) regs */
4167   struct gdbarch *gdbarch = get_frame_arch (frame);
4168   gdb_byte *raw_buffer;
4169   double doub, flt1;    /* doubles extracted from raw hex data */
4170   int inv1, inv2;
4171
4172   raw_buffer = alloca (2 * register_size (gdbarch, mips_regnum (gdbarch)->fp0));
4173
4174   fprintf_filtered (file, "%s:", gdbarch_register_name (gdbarch, regnum));
4175   fprintf_filtered (file, "%*s",
4176                     4 - (int) strlen (gdbarch_register_name (gdbarch, regnum)),
4177                     "");
4178
4179   if (register_size (gdbarch, regnum) == 4 || mips2_fp_compat (frame))
4180     {
4181       /* 4-byte registers: Print hex and floating.  Also print even
4182          numbered registers as doubles.  */
4183       mips_read_fp_register_single (frame, regnum, raw_buffer);
4184       flt1 = unpack_double (mips_float_register_type (), raw_buffer, &inv1);
4185
4186       print_scalar_formatted (raw_buffer, builtin_type_uint32, 'x', 'w',
4187                               file);
4188
4189       fprintf_filtered (file, " flt: ");
4190       if (inv1)
4191         fprintf_filtered (file, " <invalid float> ");
4192       else
4193         fprintf_filtered (file, "%-17.9g", flt1);
4194
4195       if ((regnum - gdbarch_num_regs (gdbarch)) % 2 == 0)
4196         {
4197           mips_read_fp_register_double (frame, regnum, raw_buffer);
4198           doub = unpack_double (mips_double_register_type (), raw_buffer,
4199                                 &inv2);
4200
4201           fprintf_filtered (file, " dbl: ");
4202           if (inv2)
4203             fprintf_filtered (file, "<invalid double>");
4204           else
4205             fprintf_filtered (file, "%-24.17g", doub);
4206         }
4207     }
4208   else
4209     {
4210       /* Eight byte registers: print each one as hex, float and double.  */
4211       mips_read_fp_register_single (frame, regnum, raw_buffer);
4212       flt1 = unpack_double (mips_float_register_type (), raw_buffer, &inv1);
4213
4214       mips_read_fp_register_double (frame, regnum, raw_buffer);
4215       doub = unpack_double (mips_double_register_type (), raw_buffer, &inv2);
4216
4217
4218       print_scalar_formatted (raw_buffer, builtin_type_uint64, 'x', 'g',
4219                               file);
4220
4221       fprintf_filtered (file, " flt: ");
4222       if (inv1)
4223         fprintf_filtered (file, "<invalid float>");
4224       else
4225         fprintf_filtered (file, "%-17.9g", flt1);
4226
4227       fprintf_filtered (file, " dbl: ");
4228       if (inv2)
4229         fprintf_filtered (file, "<invalid double>");
4230       else
4231         fprintf_filtered (file, "%-24.17g", doub);
4232     }
4233 }
4234
4235 static void
4236 mips_print_register (struct ui_file *file, struct frame_info *frame,
4237                      int regnum)
4238 {
4239   struct gdbarch *gdbarch = get_frame_arch (frame);
4240   gdb_byte raw_buffer[MAX_REGISTER_SIZE];
4241   int offset;
4242
4243   if (TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT)
4244     {
4245       mips_print_fp_register (file, frame, regnum);
4246       return;
4247     }
4248
4249   /* Get the data in raw format.  */
4250   if (!frame_register_read (frame, regnum, raw_buffer))
4251     {
4252       fprintf_filtered (file, "%s: [Invalid]",
4253                         gdbarch_register_name (gdbarch, regnum));
4254       return;
4255     }
4256
4257   fputs_filtered (gdbarch_register_name (gdbarch, regnum), file);
4258
4259   /* The problem with printing numeric register names (r26, etc.) is that
4260      the user can't use them on input.  Probably the best solution is to
4261      fix it so that either the numeric or the funky (a2, etc.) names
4262      are accepted on input.  */
4263   if (regnum < MIPS_NUMREGS)
4264     fprintf_filtered (file, "(r%d): ", regnum);
4265   else
4266     fprintf_filtered (file, ": ");
4267
4268   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
4269     offset =
4270       register_size (gdbarch, regnum) - register_size (gdbarch, regnum);
4271   else
4272     offset = 0;
4273
4274   print_scalar_formatted (raw_buffer + offset,
4275                           register_type (gdbarch, regnum), 'x', 0,
4276                           file);
4277 }
4278
4279 /* Replacement for generic do_registers_info.
4280    Print regs in pretty columns.  */
4281
4282 static int
4283 print_fp_register_row (struct ui_file *file, struct frame_info *frame,
4284                        int regnum)
4285 {
4286   fprintf_filtered (file, " ");
4287   mips_print_fp_register (file, frame, regnum);
4288   fprintf_filtered (file, "\n");
4289   return regnum + 1;
4290 }
4291
4292
4293 /* Print a row's worth of GP (int) registers, with name labels above */
4294
4295 static int
4296 print_gp_register_row (struct ui_file *file, struct frame_info *frame,
4297                        int start_regnum)
4298 {
4299   struct gdbarch *gdbarch = get_frame_arch (frame);
4300   /* do values for GP (int) regs */
4301   gdb_byte raw_buffer[MAX_REGISTER_SIZE];
4302   int ncols = (mips_abi_regsize (gdbarch) == 8 ? 4 : 8);        /* display cols per row */
4303   int col, byte;
4304   int regnum;
4305
4306   /* For GP registers, we print a separate row of names above the vals */
4307   for (col = 0, regnum = start_regnum;
4308        col < ncols && regnum < gdbarch_num_regs (gdbarch)
4309                                + gdbarch_num_pseudo_regs (gdbarch);
4310        regnum++)
4311     {
4312       if (*gdbarch_register_name (gdbarch, regnum) == '\0')
4313         continue;               /* unused register */
4314       if (TYPE_CODE (register_type (gdbarch, regnum)) ==
4315           TYPE_CODE_FLT)
4316         break;                  /* end the row: reached FP register */
4317       /* Large registers are handled separately.  */
4318       if (register_size (gdbarch, regnum) > mips_abi_regsize (gdbarch))
4319         {
4320           if (col > 0)
4321             break;              /* End the row before this register.  */
4322
4323           /* Print this register on a row by itself.  */
4324           mips_print_register (file, frame, regnum);
4325           fprintf_filtered (file, "\n");
4326           return regnum + 1;
4327         }
4328       if (col == 0)
4329         fprintf_filtered (file, "     ");
4330       fprintf_filtered (file,
4331                         mips_abi_regsize (gdbarch) == 8 ? "%17s" : "%9s",
4332                         gdbarch_register_name (gdbarch, regnum));
4333       col++;
4334     }
4335
4336   if (col == 0)
4337     return regnum;
4338
4339   /* print the R0 to R31 names */
4340   if ((start_regnum % gdbarch_num_regs (gdbarch)) < MIPS_NUMREGS)
4341     fprintf_filtered (file, "\n R%-4d",
4342                       start_regnum % gdbarch_num_regs (gdbarch));
4343   else
4344     fprintf_filtered (file, "\n      ");
4345
4346   /* now print the values in hex, 4 or 8 to the row */
4347   for (col = 0, regnum = start_regnum;
4348        col < ncols && regnum < gdbarch_num_regs (gdbarch)
4349                                + gdbarch_num_pseudo_regs (gdbarch);
4350        regnum++)
4351     {
4352       if (*gdbarch_register_name (gdbarch, regnum) == '\0')
4353         continue;               /* unused register */
4354       if (TYPE_CODE (register_type (gdbarch, regnum)) ==
4355           TYPE_CODE_FLT)
4356         break;                  /* end row: reached FP register */
4357       if (register_size (gdbarch, regnum) > mips_abi_regsize (gdbarch))
4358         break;                  /* End row: large register.  */
4359
4360       /* OK: get the data in raw format.  */
4361       if (!frame_register_read (frame, regnum, raw_buffer))
4362         error (_("can't read register %d (%s)"),
4363                regnum, gdbarch_register_name (gdbarch, regnum));
4364       /* pad small registers */
4365       for (byte = 0;
4366            byte < (mips_abi_regsize (gdbarch)
4367                    - register_size (gdbarch, regnum)); byte++)
4368         printf_filtered ("  ");
4369       /* Now print the register value in hex, endian order. */
4370       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
4371         for (byte =
4372              register_size (gdbarch, regnum) - register_size (gdbarch, regnum);
4373              byte < register_size (gdbarch, regnum); byte++)
4374           fprintf_filtered (file, "%02x", raw_buffer[byte]);
4375       else
4376         for (byte = register_size (gdbarch, regnum) - 1;
4377              byte >= 0; byte--)
4378           fprintf_filtered (file, "%02x", raw_buffer[byte]);
4379       fprintf_filtered (file, " ");
4380       col++;
4381     }
4382   if (col > 0)                  /* ie. if we actually printed anything... */
4383     fprintf_filtered (file, "\n");
4384
4385   return regnum;
4386 }
4387
4388 /* MIPS_DO_REGISTERS_INFO(): called by "info register" command */
4389
4390 static void
4391 mips_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
4392                            struct frame_info *frame, int regnum, int all)
4393 {
4394   if (regnum != -1)             /* do one specified register */
4395     {
4396       gdb_assert (regnum >= gdbarch_num_regs (gdbarch));
4397       if (*(gdbarch_register_name (gdbarch, regnum)) == '\0')
4398         error (_("Not a valid register for the current processor type"));
4399
4400       mips_print_register (file, frame, regnum);
4401       fprintf_filtered (file, "\n");
4402     }
4403   else
4404     /* do all (or most) registers */
4405     {
4406       regnum = gdbarch_num_regs (gdbarch);
4407       while (regnum < gdbarch_num_regs (gdbarch)
4408                       + gdbarch_num_pseudo_regs (gdbarch))
4409         {
4410           if (TYPE_CODE (register_type (gdbarch, regnum)) ==
4411               TYPE_CODE_FLT)
4412             {
4413               if (all)          /* true for "INFO ALL-REGISTERS" command */
4414                 regnum = print_fp_register_row (file, frame, regnum);
4415               else
4416                 regnum += MIPS_NUMREGS; /* skip floating point regs */
4417             }
4418           else
4419             regnum = print_gp_register_row (file, frame, regnum);
4420         }
4421     }
4422 }
4423
4424 /* Is this a branch with a delay slot?  */
4425
4426 static int
4427 is_delayed (unsigned long insn)
4428 {
4429   int i;
4430   for (i = 0; i < NUMOPCODES; ++i)
4431     if (mips_opcodes[i].pinfo != INSN_MACRO
4432         && (insn & mips_opcodes[i].mask) == mips_opcodes[i].match)
4433       break;
4434   return (i < NUMOPCODES
4435           && (mips_opcodes[i].pinfo & (INSN_UNCOND_BRANCH_DELAY
4436                                        | INSN_COND_BRANCH_DELAY
4437                                        | INSN_COND_BRANCH_LIKELY)));
4438 }
4439
4440 int
4441 mips_single_step_through_delay (struct gdbarch *gdbarch,
4442                                 struct frame_info *frame)
4443 {
4444   CORE_ADDR pc = get_frame_pc (frame);
4445   gdb_byte buf[MIPS_INSN32_SIZE];
4446
4447   /* There is no branch delay slot on MIPS16.  */
4448   if (mips_pc_is_mips16 (pc))
4449     return 0;
4450
4451   if (!breakpoint_here_p (pc + 4))
4452     return 0;
4453
4454   if (!safe_frame_unwind_memory (frame, pc, buf, sizeof buf))
4455     /* If error reading memory, guess that it is not a delayed
4456        branch.  */
4457     return 0;
4458   return is_delayed (extract_unsigned_integer (buf, sizeof buf));
4459 }
4460
4461 /* To skip prologues, I use this predicate.  Returns either PC itself
4462    if the code at PC does not look like a function prologue; otherwise
4463    returns an address that (if we're lucky) follows the prologue.  If
4464    LENIENT, then we must skip everything which is involved in setting
4465    up the frame (it's OK to skip more, just so long as we don't skip
4466    anything which might clobber the registers which are being saved.
4467    We must skip more in the case where part of the prologue is in the
4468    delay slot of a non-prologue instruction).  */
4469
4470 static CORE_ADDR
4471 mips_skip_prologue (CORE_ADDR pc)
4472 {
4473   CORE_ADDR limit_pc;
4474   CORE_ADDR func_addr;
4475
4476   /* See if we can determine the end of the prologue via the symbol table.
4477      If so, then return either PC, or the PC after the prologue, whichever
4478      is greater.  */
4479   if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
4480     {
4481       CORE_ADDR post_prologue_pc = skip_prologue_using_sal (func_addr);
4482       if (post_prologue_pc != 0)
4483         return max (pc, post_prologue_pc);
4484     }
4485
4486   /* Can't determine prologue from the symbol table, need to examine
4487      instructions.  */
4488
4489   /* Find an upper limit on the function prologue using the debug
4490      information.  If the debug information could not be used to provide
4491      that bound, then use an arbitrary large number as the upper bound.  */
4492   limit_pc = skip_prologue_using_sal (pc);
4493   if (limit_pc == 0)
4494     limit_pc = pc + 100;          /* Magic.  */
4495
4496   if (mips_pc_is_mips16 (pc))
4497     return mips16_scan_prologue (pc, limit_pc, NULL, NULL);
4498   else
4499     return mips32_scan_prologue (pc, limit_pc, NULL, NULL);
4500 }
4501
4502 /* Check whether the PC is in a function epilogue (32-bit version).
4503    This is a helper function for mips_in_function_epilogue_p.  */
4504 static int
4505 mips32_in_function_epilogue_p (CORE_ADDR pc)
4506 {
4507   CORE_ADDR func_addr = 0, func_end = 0;
4508
4509   if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
4510     {
4511       /* The MIPS epilogue is max. 12 bytes long.  */
4512       CORE_ADDR addr = func_end - 12;
4513
4514       if (addr < func_addr + 4)
4515         addr = func_addr + 4;
4516       if (pc < addr)
4517         return 0;
4518
4519       for (; pc < func_end; pc += MIPS_INSN32_SIZE)
4520         {
4521           unsigned long high_word;
4522           unsigned long inst;
4523
4524           inst = mips_fetch_instruction (pc);
4525           high_word = (inst >> 16) & 0xffff;
4526
4527           if (high_word != 0x27bd       /* addiu $sp,$sp,offset */
4528               && high_word != 0x67bd    /* daddiu $sp,$sp,offset */
4529               && inst != 0x03e00008     /* jr $ra */
4530               && inst != 0x00000000)    /* nop */
4531             return 0;
4532         }
4533
4534       return 1;
4535     }
4536
4537   return 0;
4538 }
4539
4540 /* Check whether the PC is in a function epilogue (16-bit version).
4541    This is a helper function for mips_in_function_epilogue_p.  */
4542 static int
4543 mips16_in_function_epilogue_p (CORE_ADDR pc)
4544 {
4545   CORE_ADDR func_addr = 0, func_end = 0;
4546
4547   if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
4548     {
4549       /* The MIPS epilogue is max. 12 bytes long.  */
4550       CORE_ADDR addr = func_end - 12;
4551
4552       if (addr < func_addr + 4)
4553         addr = func_addr + 4;
4554       if (pc < addr)
4555         return 0;
4556
4557       for (; pc < func_end; pc += MIPS_INSN16_SIZE)
4558         {
4559           unsigned short inst;
4560
4561           inst = mips_fetch_instruction (pc);
4562
4563           if ((inst & 0xf800) == 0xf000)        /* extend */
4564             continue;
4565
4566           if (inst != 0x6300            /* addiu $sp,offset */
4567               && inst != 0xfb00         /* daddiu $sp,$sp,offset */
4568               && inst != 0xe820         /* jr $ra */
4569               && inst != 0xe8a0         /* jrc $ra */
4570               && inst != 0x6500)        /* nop */
4571             return 0;
4572         }
4573
4574       return 1;
4575     }
4576
4577   return 0;
4578 }
4579
4580 /* The epilogue is defined here as the area at the end of a function,
4581    after an instruction which destroys the function's stack frame.  */
4582 static int
4583 mips_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
4584 {
4585   if (mips_pc_is_mips16 (pc))
4586     return mips16_in_function_epilogue_p (pc);
4587   else
4588     return mips32_in_function_epilogue_p (pc);
4589 }
4590
4591 /* Root of all "set mips "/"show mips " commands. This will eventually be
4592    used for all MIPS-specific commands.  */
4593
4594 static void
4595 show_mips_command (char *args, int from_tty)
4596 {
4597   help_list (showmipscmdlist, "show mips ", all_commands, gdb_stdout);
4598 }
4599
4600 static void
4601 set_mips_command (char *args, int from_tty)
4602 {
4603   printf_unfiltered
4604     ("\"set mips\" must be followed by an appropriate subcommand.\n");
4605   help_list (setmipscmdlist, "set mips ", all_commands, gdb_stdout);
4606 }
4607
4608 /* Commands to show/set the MIPS FPU type.  */
4609
4610 static void
4611 show_mipsfpu_command (char *args, int from_tty)
4612 {
4613   char *fpu;
4614   switch (MIPS_FPU_TYPE)
4615     {
4616     case MIPS_FPU_SINGLE:
4617       fpu = "single-precision";
4618       break;
4619     case MIPS_FPU_DOUBLE:
4620       fpu = "double-precision";
4621       break;
4622     case MIPS_FPU_NONE:
4623       fpu = "absent (none)";
4624       break;
4625     default:
4626       internal_error (__FILE__, __LINE__, _("bad switch"));
4627     }
4628   if (mips_fpu_type_auto)
4629     printf_unfiltered
4630       ("The MIPS floating-point coprocessor is set automatically (currently %s)\n",
4631        fpu);
4632   else
4633     printf_unfiltered
4634       ("The MIPS floating-point coprocessor is assumed to be %s\n", fpu);
4635 }
4636
4637
4638 static void
4639 set_mipsfpu_command (char *args, int from_tty)
4640 {
4641   printf_unfiltered
4642     ("\"set mipsfpu\" must be followed by \"double\", \"single\",\"none\" or \"auto\".\n");
4643   show_mipsfpu_command (args, from_tty);
4644 }
4645
4646 static void
4647 set_mipsfpu_single_command (char *args, int from_tty)
4648 {
4649   struct gdbarch_info info;
4650   gdbarch_info_init (&info);
4651   mips_fpu_type = MIPS_FPU_SINGLE;
4652   mips_fpu_type_auto = 0;
4653   /* FIXME: cagney/2003-11-15: Should be setting a field in "info"
4654      instead of relying on globals.  Doing that would let generic code
4655      handle the search for this specific architecture.  */
4656   if (!gdbarch_update_p (info))
4657     internal_error (__FILE__, __LINE__, _("set mipsfpu failed"));
4658 }
4659
4660 static void
4661 set_mipsfpu_double_command (char *args, int from_tty)
4662 {
4663   struct gdbarch_info info;
4664   gdbarch_info_init (&info);
4665   mips_fpu_type = MIPS_FPU_DOUBLE;
4666   mips_fpu_type_auto = 0;
4667   /* FIXME: cagney/2003-11-15: Should be setting a field in "info"
4668      instead of relying on globals.  Doing that would let generic code
4669      handle the search for this specific architecture.  */
4670   if (!gdbarch_update_p (info))
4671     internal_error (__FILE__, __LINE__, _("set mipsfpu failed"));
4672 }
4673
4674 static void
4675 set_mipsfpu_none_command (char *args, int from_tty)
4676 {
4677   struct gdbarch_info info;
4678   gdbarch_info_init (&info);
4679   mips_fpu_type = MIPS_FPU_NONE;
4680   mips_fpu_type_auto = 0;
4681   /* FIXME: cagney/2003-11-15: Should be setting a field in "info"
4682      instead of relying on globals.  Doing that would let generic code
4683      handle the search for this specific architecture.  */
4684   if (!gdbarch_update_p (info))
4685     internal_error (__FILE__, __LINE__, _("set mipsfpu failed"));
4686 }
4687
4688 static void
4689 set_mipsfpu_auto_command (char *args, int from_tty)
4690 {
4691   mips_fpu_type_auto = 1;
4692 }
4693
4694 /* Attempt to identify the particular processor model by reading the
4695    processor id.  NOTE: cagney/2003-11-15: Firstly it isn't clear that
4696    the relevant processor still exists (it dates back to '94) and
4697    secondly this is not the way to do this.  The processor type should
4698    be set by forcing an architecture change.  */
4699
4700 void
4701 deprecated_mips_set_processor_regs_hack (void)
4702 {
4703   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
4704   ULONGEST prid;
4705
4706   regcache_cooked_read_unsigned (get_current_regcache (),
4707                                  MIPS_PRID_REGNUM, &prid);
4708   if ((prid & ~0xf) == 0x700)
4709     tdep->mips_processor_reg_names = mips_r3041_reg_names;
4710 }
4711
4712 /* Just like reinit_frame_cache, but with the right arguments to be
4713    callable as an sfunc.  */
4714
4715 static void
4716 reinit_frame_cache_sfunc (char *args, int from_tty,
4717                           struct cmd_list_element *c)
4718 {
4719   reinit_frame_cache ();
4720 }
4721
4722 static int
4723 gdb_print_insn_mips (bfd_vma memaddr, struct disassemble_info *info)
4724 {
4725   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
4726
4727   /* FIXME: cagney/2003-06-26: Is this even necessary?  The
4728      disassembler needs to be able to locally determine the ISA, and
4729      not rely on GDB.  Otherwize the stand-alone 'objdump -d' will not
4730      work.  */
4731   if (mips_pc_is_mips16 (memaddr))
4732     info->mach = bfd_mach_mips16;
4733
4734   /* Round down the instruction address to the appropriate boundary.  */
4735   memaddr &= (info->mach == bfd_mach_mips16 ? ~1 : ~3);
4736
4737   /* Set the disassembler options.  */
4738   if (tdep->mips_abi == MIPS_ABI_N32 || tdep->mips_abi == MIPS_ABI_N64)
4739     {
4740       /* Set up the disassembler info, so that we get the right
4741          register names from libopcodes.  */
4742       if (tdep->mips_abi == MIPS_ABI_N32)
4743         info->disassembler_options = "gpr-names=n32";
4744       else
4745         info->disassembler_options = "gpr-names=64";
4746       info->flavour = bfd_target_elf_flavour;
4747     }
4748   else
4749     /* This string is not recognized explicitly by the disassembler,
4750        but it tells the disassembler to not try to guess the ABI from
4751        the bfd elf headers, such that, if the user overrides the ABI
4752        of a program linked as NewABI, the disassembly will follow the
4753        register naming conventions specified by the user.  */
4754     info->disassembler_options = "gpr-names=32";
4755
4756   /* Call the appropriate disassembler based on the target endian-ness.  */
4757   if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG)
4758     return print_insn_big_mips (memaddr, info);
4759   else
4760     return print_insn_little_mips (memaddr, info);
4761 }
4762
4763 /* This function implements gdbarch_breakpoint_from_pc.  It uses the program
4764    counter value to determine whether a 16- or 32-bit breakpoint should be used.
4765    It returns a pointer to a string of bytes that encode a breakpoint
4766    instruction, stores the length of the string to *lenptr, and adjusts pc (if
4767    necessary) to point to the actual memory location where the breakpoint
4768    should be inserted.  */
4769
4770 static const gdb_byte *
4771 mips_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
4772 {
4773   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
4774     {
4775       if (mips_pc_is_mips16 (*pcptr))
4776         {
4777           static gdb_byte mips16_big_breakpoint[] = { 0xe8, 0xa5 };
4778           *pcptr = unmake_mips16_addr (*pcptr);
4779           *lenptr = sizeof (mips16_big_breakpoint);
4780           return mips16_big_breakpoint;
4781         }
4782       else
4783         {
4784           /* The IDT board uses an unusual breakpoint value, and
4785              sometimes gets confused when it sees the usual MIPS
4786              breakpoint instruction.  */
4787           static gdb_byte big_breakpoint[] = { 0, 0x5, 0, 0xd };
4788           static gdb_byte pmon_big_breakpoint[] = { 0, 0, 0, 0xd };
4789           static gdb_byte idt_big_breakpoint[] = { 0, 0, 0x0a, 0xd };
4790
4791           *lenptr = sizeof (big_breakpoint);
4792
4793           if (strcmp (target_shortname, "mips") == 0)
4794             return idt_big_breakpoint;
4795           else if (strcmp (target_shortname, "ddb") == 0
4796                    || strcmp (target_shortname, "pmon") == 0
4797                    || strcmp (target_shortname, "lsi") == 0)
4798             return pmon_big_breakpoint;
4799           else
4800             return big_breakpoint;
4801         }
4802     }
4803   else
4804     {
4805       if (mips_pc_is_mips16 (*pcptr))
4806         {
4807           static gdb_byte mips16_little_breakpoint[] = { 0xa5, 0xe8 };
4808           *pcptr = unmake_mips16_addr (*pcptr);
4809           *lenptr = sizeof (mips16_little_breakpoint);
4810           return mips16_little_breakpoint;
4811         }
4812       else
4813         {
4814           static gdb_byte little_breakpoint[] = { 0xd, 0, 0x5, 0 };
4815           static gdb_byte pmon_little_breakpoint[] = { 0xd, 0, 0, 0 };
4816           static gdb_byte idt_little_breakpoint[] = { 0xd, 0x0a, 0, 0 };
4817
4818           *lenptr = sizeof (little_breakpoint);
4819
4820           if (strcmp (target_shortname, "mips") == 0)
4821             return idt_little_breakpoint;
4822           else if (strcmp (target_shortname, "ddb") == 0
4823                    || strcmp (target_shortname, "pmon") == 0
4824                    || strcmp (target_shortname, "lsi") == 0)
4825             return pmon_little_breakpoint;
4826           else
4827             return little_breakpoint;
4828         }
4829     }
4830 }
4831
4832 /* If PC is in a mips16 call or return stub, return the address of the target
4833    PC, which is either the callee or the caller.  There are several
4834    cases which must be handled:
4835
4836    * If the PC is in __mips16_ret_{d,s}f, this is a return stub and the
4837    target PC is in $31 ($ra).
4838    * If the PC is in __mips16_call_stub_{1..10}, this is a call stub
4839    and the target PC is in $2.
4840    * If the PC at the start of __mips16_call_stub_{s,d}f_{0..10}, i.e.
4841    before the jal instruction, this is effectively a call stub
4842    and the the target PC is in $2.  Otherwise this is effectively
4843    a return stub and the target PC is in $18.
4844
4845    See the source code for the stubs in gcc/config/mips/mips16.S for
4846    gory details.  */
4847
4848 static CORE_ADDR
4849 mips_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
4850 {
4851   char *name;
4852   CORE_ADDR start_addr;
4853
4854   /* Find the starting address and name of the function containing the PC.  */
4855   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
4856     return 0;
4857
4858   /* If the PC is in __mips16_ret_{d,s}f, this is a return stub and the
4859      target PC is in $31 ($ra).  */
4860   if (strcmp (name, "__mips16_ret_sf") == 0
4861       || strcmp (name, "__mips16_ret_df") == 0)
4862     return get_frame_register_signed (frame, MIPS_RA_REGNUM);
4863
4864   if (strncmp (name, "__mips16_call_stub_", 19) == 0)
4865     {
4866       /* If the PC is in __mips16_call_stub_{1..10}, this is a call stub
4867          and the target PC is in $2.  */
4868       if (name[19] >= '0' && name[19] <= '9')
4869         return get_frame_register_signed (frame, 2);
4870
4871       /* If the PC at the start of __mips16_call_stub_{s,d}f_{0..10}, i.e.
4872          before the jal instruction, this is effectively a call stub
4873          and the the target PC is in $2.  Otherwise this is effectively
4874          a return stub and the target PC is in $18.  */
4875       else if (name[19] == 's' || name[19] == 'd')
4876         {
4877           if (pc == start_addr)
4878             {
4879               /* Check if the target of the stub is a compiler-generated
4880                  stub.  Such a stub for a function bar might have a name
4881                  like __fn_stub_bar, and might look like this:
4882                  mfc1    $4,$f13
4883                  mfc1    $5,$f12
4884                  mfc1    $6,$f15
4885                  mfc1    $7,$f14
4886                  la      $1,bar   (becomes a lui/addiu pair)
4887                  jr      $1
4888                  So scan down to the lui/addi and extract the target
4889                  address from those two instructions.  */
4890
4891               CORE_ADDR target_pc = get_frame_register_signed (frame, 2);
4892               ULONGEST inst;
4893               int i;
4894
4895               /* See if the name of the target function is  __fn_stub_*.  */
4896               if (find_pc_partial_function (target_pc, &name, NULL, NULL) ==
4897                   0)
4898                 return target_pc;
4899               if (strncmp (name, "__fn_stub_", 10) != 0
4900                   && strcmp (name, "etext") != 0
4901                   && strcmp (name, "_etext") != 0)
4902                 return target_pc;
4903
4904               /* Scan through this _fn_stub_ code for the lui/addiu pair.
4905                  The limit on the search is arbitrarily set to 20
4906                  instructions.  FIXME.  */
4907               for (i = 0, pc = 0; i < 20; i++, target_pc += MIPS_INSN32_SIZE)
4908                 {
4909                   inst = mips_fetch_instruction (target_pc);
4910                   if ((inst & 0xffff0000) == 0x3c010000)        /* lui $at */
4911                     pc = (inst << 16) & 0xffff0000;     /* high word */
4912                   else if ((inst & 0xffff0000) == 0x24210000)   /* addiu $at */
4913                     return pc | (inst & 0xffff);        /* low word */
4914                 }
4915
4916               /* Couldn't find the lui/addui pair, so return stub address.  */
4917               return target_pc;
4918             }
4919           else
4920             /* This is the 'return' part of a call stub.  The return
4921                address is in $r18.  */
4922             return get_frame_register_signed (frame, 18);
4923         }
4924     }
4925   return 0;                     /* not a stub */
4926 }
4927
4928 /* Convert a dbx stab register number (from `r' declaration) to a GDB
4929    [1 * gdbarch_num_regs .. 2 * gdbarch_num_regs) REGNUM.  */
4930
4931 static int
4932 mips_stab_reg_to_regnum (int num)
4933 {
4934   int regnum;
4935   if (num >= 0 && num < 32)
4936     regnum = num;
4937   else if (num >= 38 && num < 70)
4938     regnum = num + mips_regnum (current_gdbarch)->fp0 - 38;
4939   else if (num == 70)
4940     regnum = mips_regnum (current_gdbarch)->hi;
4941   else if (num == 71)
4942     regnum = mips_regnum (current_gdbarch)->lo;
4943   else
4944     /* This will hopefully (eventually) provoke a warning.  Should
4945        we be calling complaint() here?  */
4946     return gdbarch_num_regs (current_gdbarch)
4947            + gdbarch_num_pseudo_regs (current_gdbarch);
4948   return gdbarch_num_regs (current_gdbarch) + regnum;
4949 }
4950
4951
4952 /* Convert a dwarf, dwarf2, or ecoff register number to a GDB [1 *
4953    gdbarch_num_regs .. 2 * gdbarch_num_regs) REGNUM.  */
4954
4955 static int
4956 mips_dwarf_dwarf2_ecoff_reg_to_regnum (int num)
4957 {
4958   int regnum;
4959   if (num >= 0 && num < 32)
4960     regnum = num;
4961   else if (num >= 32 && num < 64)
4962     regnum = num + mips_regnum (current_gdbarch)->fp0 - 32;
4963   else if (num == 64)
4964     regnum = mips_regnum (current_gdbarch)->hi;
4965   else if (num == 65)
4966     regnum = mips_regnum (current_gdbarch)->lo;
4967   else
4968     /* This will hopefully (eventually) provoke a warning.  Should we
4969        be calling complaint() here?  */
4970     return gdbarch_num_regs (current_gdbarch)
4971            + gdbarch_num_pseudo_regs (current_gdbarch);
4972   return gdbarch_num_regs (current_gdbarch) + regnum;
4973 }
4974
4975 static int
4976 mips_register_sim_regno (int regnum)
4977 {
4978   /* Only makes sense to supply raw registers.  */
4979   gdb_assert (regnum >= 0 && regnum < gdbarch_num_regs (current_gdbarch));
4980   /* FIXME: cagney/2002-05-13: Need to look at the pseudo register to
4981      decide if it is valid.  Should instead define a standard sim/gdb
4982      register numbering scheme.  */
4983   if (gdbarch_register_name (current_gdbarch,
4984                              gdbarch_num_regs
4985                                (current_gdbarch) + regnum) != NULL
4986       && gdbarch_register_name (current_gdbarch,
4987                                 gdbarch_num_regs
4988                                   (current_gdbarch) + regnum)[0] != '\0')
4989     return regnum;
4990   else
4991     return LEGACY_SIM_REGNO_IGNORE;
4992 }
4993
4994
4995 /* Convert an integer into an address.  Extracting the value signed
4996    guarantees a correctly sign extended address.  */
4997
4998 static CORE_ADDR
4999 mips_integer_to_address (struct gdbarch *gdbarch,
5000                          struct type *type, const gdb_byte *buf)
5001 {
5002   return (CORE_ADDR) extract_signed_integer (buf, TYPE_LENGTH (type));
5003 }
5004
5005 /* Dummy virtual frame pointer method.  This is no more or less accurate
5006    than most other architectures; we just need to be explicit about it,
5007    because the pseudo-register gdbarch_sp_regnum will otherwise lead to
5008    an assertion failure.  */
5009
5010 static void
5011 mips_virtual_frame_pointer (struct gdbarch *gdbarch, 
5012                             CORE_ADDR pc, int *reg, LONGEST *offset)
5013 {
5014   *reg = MIPS_SP_REGNUM;
5015   *offset = 0;
5016 }
5017
5018 static void
5019 mips_find_abi_section (bfd *abfd, asection *sect, void *obj)
5020 {
5021   enum mips_abi *abip = (enum mips_abi *) obj;
5022   const char *name = bfd_get_section_name (abfd, sect);
5023
5024   if (*abip != MIPS_ABI_UNKNOWN)
5025     return;
5026
5027   if (strncmp (name, ".mdebug.", 8) != 0)
5028     return;
5029
5030   if (strcmp (name, ".mdebug.abi32") == 0)
5031     *abip = MIPS_ABI_O32;
5032   else if (strcmp (name, ".mdebug.abiN32") == 0)
5033     *abip = MIPS_ABI_N32;
5034   else if (strcmp (name, ".mdebug.abi64") == 0)
5035     *abip = MIPS_ABI_N64;
5036   else if (strcmp (name, ".mdebug.abiO64") == 0)
5037     *abip = MIPS_ABI_O64;
5038   else if (strcmp (name, ".mdebug.eabi32") == 0)
5039     *abip = MIPS_ABI_EABI32;
5040   else if (strcmp (name, ".mdebug.eabi64") == 0)
5041     *abip = MIPS_ABI_EABI64;
5042   else
5043     warning (_("unsupported ABI %s."), name + 8);
5044 }
5045
5046 static void
5047 mips_find_long_section (bfd *abfd, asection *sect, void *obj)
5048 {
5049   int *lbp = (int *) obj;
5050   const char *name = bfd_get_section_name (abfd, sect);
5051
5052   if (strncmp (name, ".gcc_compiled_long32", 20) == 0)
5053     *lbp = 32;
5054   else if (strncmp (name, ".gcc_compiled_long64", 20) == 0)
5055     *lbp = 64;
5056   else if (strncmp (name, ".gcc_compiled_long", 18) == 0)
5057     warning (_("unrecognized .gcc_compiled_longXX"));
5058 }
5059
5060 static enum mips_abi
5061 global_mips_abi (void)
5062 {
5063   int i;
5064
5065   for (i = 0; mips_abi_strings[i] != NULL; i++)
5066     if (mips_abi_strings[i] == mips_abi_string)
5067       return (enum mips_abi) i;
5068
5069   internal_error (__FILE__, __LINE__, _("unknown ABI string"));
5070 }
5071
5072 static void
5073 mips_register_g_packet_guesses (struct gdbarch *gdbarch)
5074 {
5075   /* If the size matches the set of 32-bit or 64-bit integer registers,
5076      assume that's what we've got.  */
5077   register_remote_g_packet_guess (gdbarch, 38 * 4, mips_tdesc_gp32);
5078   register_remote_g_packet_guess (gdbarch, 38 * 8, mips_tdesc_gp64);
5079
5080   /* If the size matches the full set of registers GDB traditionally
5081      knows about, including floating point, for either 32-bit or
5082      64-bit, assume that's what we've got.  */
5083   register_remote_g_packet_guess (gdbarch, 90 * 4, mips_tdesc_gp32);
5084   register_remote_g_packet_guess (gdbarch, 90 * 8, mips_tdesc_gp64);
5085
5086   /* Otherwise we don't have a useful guess.  */
5087 }
5088
5089 static struct value *
5090 value_of_mips_user_reg (struct frame_info *frame, const void *baton)
5091 {
5092   const int *reg_p = baton;
5093   return value_of_register (*reg_p, frame);
5094 }
5095
5096 static struct gdbarch *
5097 mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
5098 {
5099   struct gdbarch *gdbarch;
5100   struct gdbarch_tdep *tdep;
5101   int elf_flags;
5102   enum mips_abi mips_abi, found_abi, wanted_abi;
5103   int i, num_regs;
5104   enum mips_fpu_type fpu_type;
5105   struct tdesc_arch_data *tdesc_data = NULL;
5106   int elf_fpu_type = 0;
5107
5108   /* Check any target description for validity.  */
5109   if (tdesc_has_registers (info.target_desc))
5110     {
5111       static const char *const mips_gprs[] = {
5112         "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
5113         "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
5114         "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
5115         "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31"
5116       };
5117       static const char *const mips_fprs[] = {
5118         "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
5119         "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
5120         "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
5121         "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
5122       };
5123
5124       const struct tdesc_feature *feature;
5125       int valid_p;
5126
5127       feature = tdesc_find_feature (info.target_desc,
5128                                     "org.gnu.gdb.mips.cpu");
5129       if (feature == NULL)
5130         return NULL;
5131
5132       tdesc_data = tdesc_data_alloc ();
5133
5134       valid_p = 1;
5135       for (i = MIPS_ZERO_REGNUM; i <= MIPS_RA_REGNUM; i++)
5136         valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
5137                                             mips_gprs[i]);
5138
5139
5140       valid_p &= tdesc_numbered_register (feature, tdesc_data,
5141                                           MIPS_EMBED_LO_REGNUM, "lo");
5142       valid_p &= tdesc_numbered_register (feature, tdesc_data,
5143                                           MIPS_EMBED_HI_REGNUM, "hi");
5144       valid_p &= tdesc_numbered_register (feature, tdesc_data,
5145                                           MIPS_EMBED_PC_REGNUM, "pc");
5146
5147       if (!valid_p)
5148         {
5149           tdesc_data_cleanup (tdesc_data);
5150           return NULL;
5151         }
5152
5153       feature = tdesc_find_feature (info.target_desc,
5154                                     "org.gnu.gdb.mips.cp0");
5155       if (feature == NULL)
5156         {
5157           tdesc_data_cleanup (tdesc_data);
5158           return NULL;
5159         }
5160
5161       valid_p = 1;
5162       valid_p &= tdesc_numbered_register (feature, tdesc_data,
5163                                           MIPS_EMBED_BADVADDR_REGNUM,
5164                                           "badvaddr");
5165       valid_p &= tdesc_numbered_register (feature, tdesc_data,
5166                                           MIPS_PS_REGNUM, "status");
5167       valid_p &= tdesc_numbered_register (feature, tdesc_data,
5168                                           MIPS_EMBED_CAUSE_REGNUM, "cause");
5169
5170       if (!valid_p)
5171         {
5172           tdesc_data_cleanup (tdesc_data);
5173           return NULL;
5174         }
5175
5176       /* FIXME drow/2007-05-17: The FPU should be optional.  The MIPS
5177          backend is not prepared for that, though.  */
5178       feature = tdesc_find_feature (info.target_desc,
5179                                     "org.gnu.gdb.mips.fpu");
5180       if (feature == NULL)
5181         {
5182           tdesc_data_cleanup (tdesc_data);
5183           return NULL;
5184         }
5185
5186       valid_p = 1;
5187       for (i = 0; i < 32; i++)
5188         valid_p &= tdesc_numbered_register (feature, tdesc_data,
5189                                             i + MIPS_EMBED_FP0_REGNUM,
5190                                             mips_fprs[i]);
5191
5192       valid_p &= tdesc_numbered_register (feature, tdesc_data,
5193                                           MIPS_EMBED_FP0_REGNUM + 32, "fcsr");
5194       valid_p &= tdesc_numbered_register (feature, tdesc_data,
5195                                           MIPS_EMBED_FP0_REGNUM + 33, "fir");
5196
5197       if (!valid_p)
5198         {
5199           tdesc_data_cleanup (tdesc_data);
5200           return NULL;
5201         }
5202
5203       /* It would be nice to detect an attempt to use a 64-bit ABI
5204          when only 32-bit registers are provided.  */
5205     }
5206
5207   /* First of all, extract the elf_flags, if available.  */
5208   if (info.abfd && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
5209     elf_flags = elf_elfheader (info.abfd)->e_flags;
5210   else if (arches != NULL)
5211     elf_flags = gdbarch_tdep (arches->gdbarch)->elf_flags;
5212   else
5213     elf_flags = 0;
5214   if (gdbarch_debug)
5215     fprintf_unfiltered (gdb_stdlog,
5216                         "mips_gdbarch_init: elf_flags = 0x%08x\n", elf_flags);
5217
5218   /* Check ELF_FLAGS to see if it specifies the ABI being used.  */
5219   switch ((elf_flags & EF_MIPS_ABI))
5220     {
5221     case E_MIPS_ABI_O32:
5222       found_abi = MIPS_ABI_O32;
5223       break;
5224     case E_MIPS_ABI_O64:
5225       found_abi = MIPS_ABI_O64;
5226       break;
5227     case E_MIPS_ABI_EABI32:
5228       found_abi = MIPS_ABI_EABI32;
5229       break;
5230     case E_MIPS_ABI_EABI64:
5231       found_abi = MIPS_ABI_EABI64;
5232       break;
5233     default:
5234       if ((elf_flags & EF_MIPS_ABI2))
5235         found_abi = MIPS_ABI_N32;
5236       else
5237         found_abi = MIPS_ABI_UNKNOWN;
5238       break;
5239     }
5240
5241   /* GCC creates a pseudo-section whose name describes the ABI.  */
5242   if (found_abi == MIPS_ABI_UNKNOWN && info.abfd != NULL)
5243     bfd_map_over_sections (info.abfd, mips_find_abi_section, &found_abi);
5244
5245   /* If we have no useful BFD information, use the ABI from the last
5246      MIPS architecture (if there is one).  */
5247   if (found_abi == MIPS_ABI_UNKNOWN && info.abfd == NULL && arches != NULL)
5248     found_abi = gdbarch_tdep (arches->gdbarch)->found_abi;
5249
5250   /* Try the architecture for any hint of the correct ABI.  */
5251   if (found_abi == MIPS_ABI_UNKNOWN
5252       && info.bfd_arch_info != NULL
5253       && info.bfd_arch_info->arch == bfd_arch_mips)
5254     {
5255       switch (info.bfd_arch_info->mach)
5256         {
5257         case bfd_mach_mips3900:
5258           found_abi = MIPS_ABI_EABI32;
5259           break;
5260         case bfd_mach_mips4100:
5261         case bfd_mach_mips5000:
5262           found_abi = MIPS_ABI_EABI64;
5263           break;
5264         case bfd_mach_mips8000:
5265         case bfd_mach_mips10000:
5266           /* On Irix, ELF64 executables use the N64 ABI.  The
5267              pseudo-sections which describe the ABI aren't present
5268              on IRIX.  (Even for executables created by gcc.)  */
5269           if (bfd_get_flavour (info.abfd) == bfd_target_elf_flavour
5270               && elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
5271             found_abi = MIPS_ABI_N64;
5272           else
5273             found_abi = MIPS_ABI_N32;
5274           break;
5275         }
5276     }
5277
5278   /* Default 64-bit objects to N64 instead of O32.  */
5279   if (found_abi == MIPS_ABI_UNKNOWN
5280       && info.abfd != NULL
5281       && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour
5282       && elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
5283     found_abi = MIPS_ABI_N64;
5284
5285   if (gdbarch_debug)
5286     fprintf_unfiltered (gdb_stdlog, "mips_gdbarch_init: found_abi = %d\n",
5287                         found_abi);
5288
5289   /* What has the user specified from the command line?  */
5290   wanted_abi = global_mips_abi ();
5291   if (gdbarch_debug)
5292     fprintf_unfiltered (gdb_stdlog, "mips_gdbarch_init: wanted_abi = %d\n",
5293                         wanted_abi);
5294
5295   /* Now that we have found what the ABI for this binary would be,
5296      check whether the user is overriding it.  */
5297   if (wanted_abi != MIPS_ABI_UNKNOWN)
5298     mips_abi = wanted_abi;
5299   else if (found_abi != MIPS_ABI_UNKNOWN)
5300     mips_abi = found_abi;
5301   else
5302     mips_abi = MIPS_ABI_O32;
5303   if (gdbarch_debug)
5304     fprintf_unfiltered (gdb_stdlog, "mips_gdbarch_init: mips_abi = %d\n",
5305                         mips_abi);
5306
5307   /* Also used when doing an architecture lookup.  */
5308   if (gdbarch_debug)
5309     fprintf_unfiltered (gdb_stdlog,
5310                         "mips_gdbarch_init: mips64_transfers_32bit_regs_p = %d\n",
5311                         mips64_transfers_32bit_regs_p);
5312
5313   /* Determine the MIPS FPU type.  */
5314 #ifdef HAVE_ELF
5315   if (info.abfd
5316       && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
5317     elf_fpu_type = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
5318                                              Tag_GNU_MIPS_ABI_FP);
5319 #endif /* HAVE_ELF */
5320
5321   if (!mips_fpu_type_auto)
5322     fpu_type = mips_fpu_type;
5323   else if (elf_fpu_type != 0)
5324     {
5325       switch (elf_fpu_type)
5326         {
5327         case 1:
5328           fpu_type = MIPS_FPU_DOUBLE;
5329           break;
5330         case 2:
5331           fpu_type = MIPS_FPU_SINGLE;
5332           break;
5333         case 3:
5334         default:
5335           /* Soft float or unknown.  */
5336           fpu_type = MIPS_FPU_NONE;
5337           break;
5338         }
5339     }
5340   else if (info.bfd_arch_info != NULL
5341            && info.bfd_arch_info->arch == bfd_arch_mips)
5342     switch (info.bfd_arch_info->mach)
5343       {
5344       case bfd_mach_mips3900:
5345       case bfd_mach_mips4100:
5346       case bfd_mach_mips4111:
5347       case bfd_mach_mips4120:
5348         fpu_type = MIPS_FPU_NONE;
5349         break;
5350       case bfd_mach_mips4650:
5351         fpu_type = MIPS_FPU_SINGLE;
5352         break;
5353       default:
5354         fpu_type = MIPS_FPU_DOUBLE;
5355         break;
5356       }
5357   else if (arches != NULL)
5358     fpu_type = gdbarch_tdep (arches->gdbarch)->mips_fpu_type;
5359   else
5360     fpu_type = MIPS_FPU_DOUBLE;
5361   if (gdbarch_debug)
5362     fprintf_unfiltered (gdb_stdlog,
5363                         "mips_gdbarch_init: fpu_type = %d\n", fpu_type);
5364
5365   /* Check for blatant incompatibilities.  */
5366
5367   /* If we have only 32-bit registers, then we can't debug a 64-bit
5368      ABI.  */
5369   if (info.target_desc
5370       && tdesc_property (info.target_desc, PROPERTY_GP32) != NULL
5371       && mips_abi != MIPS_ABI_EABI32
5372       && mips_abi != MIPS_ABI_O32)
5373     {
5374       if (tdesc_data != NULL)
5375         tdesc_data_cleanup (tdesc_data);
5376       return NULL;
5377     }
5378
5379   /* try to find a pre-existing architecture */
5380   for (arches = gdbarch_list_lookup_by_info (arches, &info);
5381        arches != NULL;
5382        arches = gdbarch_list_lookup_by_info (arches->next, &info))
5383     {
5384       /* MIPS needs to be pedantic about which ABI the object is
5385          using.  */
5386       if (gdbarch_tdep (arches->gdbarch)->elf_flags != elf_flags)
5387         continue;
5388       if (gdbarch_tdep (arches->gdbarch)->mips_abi != mips_abi)
5389         continue;
5390       /* Need to be pedantic about which register virtual size is
5391          used.  */
5392       if (gdbarch_tdep (arches->gdbarch)->mips64_transfers_32bit_regs_p
5393           != mips64_transfers_32bit_regs_p)
5394         continue;
5395       /* Be pedantic about which FPU is selected.  */
5396       if (gdbarch_tdep (arches->gdbarch)->mips_fpu_type != fpu_type)
5397         continue;
5398
5399       if (tdesc_data != NULL)
5400         tdesc_data_cleanup (tdesc_data);
5401       return arches->gdbarch;
5402     }
5403
5404   /* Need a new architecture.  Fill in a target specific vector.  */
5405   tdep = (struct gdbarch_tdep *) xmalloc (sizeof (struct gdbarch_tdep));
5406   gdbarch = gdbarch_alloc (&info, tdep);
5407   tdep->elf_flags = elf_flags;
5408   tdep->mips64_transfers_32bit_regs_p = mips64_transfers_32bit_regs_p;
5409   tdep->found_abi = found_abi;
5410   tdep->mips_abi = mips_abi;
5411   tdep->mips_fpu_type = fpu_type;
5412   tdep->register_size_valid_p = 0;
5413   tdep->register_size = 0;
5414
5415   if (info.target_desc)
5416     {
5417       /* Some useful properties can be inferred from the target.  */
5418       if (tdesc_property (info.target_desc, PROPERTY_GP32) != NULL)
5419         {
5420           tdep->register_size_valid_p = 1;
5421           tdep->register_size = 4;
5422         }
5423       else if (tdesc_property (info.target_desc, PROPERTY_GP64) != NULL)
5424         {
5425           tdep->register_size_valid_p = 1;
5426           tdep->register_size = 8;
5427         }
5428     }
5429
5430   /* Initially set everything according to the default ABI/ISA.  */
5431   set_gdbarch_short_bit (gdbarch, 16);
5432   set_gdbarch_int_bit (gdbarch, 32);
5433   set_gdbarch_float_bit (gdbarch, 32);
5434   set_gdbarch_double_bit (gdbarch, 64);
5435   set_gdbarch_long_double_bit (gdbarch, 64);
5436   set_gdbarch_register_reggroup_p (gdbarch, mips_register_reggroup_p);
5437   set_gdbarch_pseudo_register_read (gdbarch, mips_pseudo_register_read);
5438   set_gdbarch_pseudo_register_write (gdbarch, mips_pseudo_register_write);
5439
5440   set_gdbarch_elf_make_msymbol_special (gdbarch,
5441                                         mips_elf_make_msymbol_special);
5442
5443   /* Fill in the OS dependant register numbers and names.  */
5444   {
5445     const char **reg_names;
5446     struct mips_regnum *regnum = GDBARCH_OBSTACK_ZALLOC (gdbarch,
5447                                                          struct mips_regnum);
5448     if (tdesc_has_registers (info.target_desc))
5449       {
5450         regnum->lo = MIPS_EMBED_LO_REGNUM;
5451         regnum->hi = MIPS_EMBED_HI_REGNUM;
5452         regnum->badvaddr = MIPS_EMBED_BADVADDR_REGNUM;
5453         regnum->cause = MIPS_EMBED_CAUSE_REGNUM;
5454         regnum->pc = MIPS_EMBED_PC_REGNUM;
5455         regnum->fp0 = MIPS_EMBED_FP0_REGNUM;
5456         regnum->fp_control_status = 70;
5457         regnum->fp_implementation_revision = 71;
5458         num_regs = MIPS_LAST_EMBED_REGNUM + 1;
5459         reg_names = NULL;
5460       }
5461     else if (info.osabi == GDB_OSABI_IRIX)
5462       {
5463         regnum->fp0 = 32;
5464         regnum->pc = 64;
5465         regnum->cause = 65;
5466         regnum->badvaddr = 66;
5467         regnum->hi = 67;
5468         regnum->lo = 68;
5469         regnum->fp_control_status = 69;
5470         regnum->fp_implementation_revision = 70;
5471         num_regs = 71;
5472         reg_names = mips_irix_reg_names;
5473       }
5474     else
5475       {
5476         regnum->lo = MIPS_EMBED_LO_REGNUM;
5477         regnum->hi = MIPS_EMBED_HI_REGNUM;
5478         regnum->badvaddr = MIPS_EMBED_BADVADDR_REGNUM;
5479         regnum->cause = MIPS_EMBED_CAUSE_REGNUM;
5480         regnum->pc = MIPS_EMBED_PC_REGNUM;
5481         regnum->fp0 = MIPS_EMBED_FP0_REGNUM;
5482         regnum->fp_control_status = 70;
5483         regnum->fp_implementation_revision = 71;
5484         num_regs = 90;
5485         if (info.bfd_arch_info != NULL
5486             && info.bfd_arch_info->mach == bfd_mach_mips3900)
5487           reg_names = mips_tx39_reg_names;
5488         else
5489           reg_names = mips_generic_reg_names;
5490       }
5491     /* FIXME: cagney/2003-11-15: For MIPS, hasn't gdbarch_pc_regnum been
5492        replaced by read_pc?  */
5493     set_gdbarch_pc_regnum (gdbarch, regnum->pc + num_regs);
5494     set_gdbarch_sp_regnum (gdbarch, MIPS_SP_REGNUM + num_regs);
5495     set_gdbarch_fp0_regnum (gdbarch, regnum->fp0);
5496     set_gdbarch_num_regs (gdbarch, num_regs);
5497     set_gdbarch_num_pseudo_regs (gdbarch, num_regs);
5498     set_gdbarch_register_name (gdbarch, mips_register_name);
5499     set_gdbarch_virtual_frame_pointer (gdbarch, mips_virtual_frame_pointer);
5500     tdep->mips_processor_reg_names = reg_names;
5501     tdep->regnum = regnum;
5502   }
5503
5504   switch (mips_abi)
5505     {
5506     case MIPS_ABI_O32:
5507       set_gdbarch_push_dummy_call (gdbarch, mips_o32_push_dummy_call);
5508       set_gdbarch_return_value (gdbarch, mips_o32_return_value);
5509       tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 4 - 1;
5510       tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 4 - 1;
5511       tdep->default_mask_address_p = 0;
5512       set_gdbarch_long_bit (gdbarch, 32);
5513       set_gdbarch_ptr_bit (gdbarch, 32);
5514       set_gdbarch_long_long_bit (gdbarch, 64);
5515       break;
5516     case MIPS_ABI_O64:
5517       set_gdbarch_push_dummy_call (gdbarch, mips_o64_push_dummy_call);
5518       set_gdbarch_return_value (gdbarch, mips_o64_return_value);
5519       tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 4 - 1;
5520       tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 4 - 1;
5521       tdep->default_mask_address_p = 0;
5522       set_gdbarch_long_bit (gdbarch, 32);
5523       set_gdbarch_ptr_bit (gdbarch, 32);
5524       set_gdbarch_long_long_bit (gdbarch, 64);
5525       break;
5526     case MIPS_ABI_EABI32:
5527       set_gdbarch_push_dummy_call (gdbarch, mips_eabi_push_dummy_call);
5528       set_gdbarch_return_value (gdbarch, mips_eabi_return_value);
5529       tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 8 - 1;
5530       tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 8 - 1;
5531       tdep->default_mask_address_p = 0;
5532       set_gdbarch_long_bit (gdbarch, 32);
5533       set_gdbarch_ptr_bit (gdbarch, 32);
5534       set_gdbarch_long_long_bit (gdbarch, 64);
5535       break;
5536     case MIPS_ABI_EABI64:
5537       set_gdbarch_push_dummy_call (gdbarch, mips_eabi_push_dummy_call);
5538       set_gdbarch_return_value (gdbarch, mips_eabi_return_value);
5539       tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 8 - 1;
5540       tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 8 - 1;
5541       tdep->default_mask_address_p = 0;
5542       set_gdbarch_long_bit (gdbarch, 64);
5543       set_gdbarch_ptr_bit (gdbarch, 64);
5544       set_gdbarch_long_long_bit (gdbarch, 64);
5545       break;
5546     case MIPS_ABI_N32:
5547       set_gdbarch_push_dummy_call (gdbarch, mips_n32n64_push_dummy_call);
5548       set_gdbarch_return_value (gdbarch, mips_n32n64_return_value);
5549       tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 8 - 1;
5550       tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 8 - 1;
5551       tdep->default_mask_address_p = 0;
5552       set_gdbarch_long_bit (gdbarch, 32);
5553       set_gdbarch_ptr_bit (gdbarch, 32);
5554       set_gdbarch_long_long_bit (gdbarch, 64);
5555       set_gdbarch_long_double_bit (gdbarch, 128);
5556       set_gdbarch_long_double_format (gdbarch, floatformats_ibm_long_double);
5557       break;
5558     case MIPS_ABI_N64:
5559       set_gdbarch_push_dummy_call (gdbarch, mips_n32n64_push_dummy_call);
5560       set_gdbarch_return_value (gdbarch, mips_n32n64_return_value);
5561       tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 8 - 1;
5562       tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 8 - 1;
5563       tdep->default_mask_address_p = 0;
5564       set_gdbarch_long_bit (gdbarch, 64);
5565       set_gdbarch_ptr_bit (gdbarch, 64);
5566       set_gdbarch_long_long_bit (gdbarch, 64);
5567       set_gdbarch_long_double_bit (gdbarch, 128);
5568       set_gdbarch_long_double_format (gdbarch, floatformats_ibm_long_double);
5569       break;
5570     default:
5571       internal_error (__FILE__, __LINE__, _("unknown ABI in switch"));
5572     }
5573
5574   /* GCC creates a pseudo-section whose name specifies the size of
5575      longs, since -mlong32 or -mlong64 may be used independent of
5576      other options.  How those options affect pointer sizes is ABI and
5577      architecture dependent, so use them to override the default sizes
5578      set by the ABI.  This table shows the relationship between ABI,
5579      -mlongXX, and size of pointers:
5580
5581      ABI                -mlongXX        ptr bits
5582      ---                --------        --------
5583      o32                32              32
5584      o32                64              32
5585      n32                32              32
5586      n32                64              64
5587      o64                32              32
5588      o64                64              64
5589      n64                32              32
5590      n64                64              64
5591      eabi32             32              32
5592      eabi32             64              32
5593      eabi64             32              32
5594      eabi64             64              64
5595
5596     Note that for o32 and eabi32, pointers are always 32 bits
5597     regardless of any -mlongXX option.  For all others, pointers and
5598     longs are the same, as set by -mlongXX or set by defaults.
5599  */
5600
5601   if (info.abfd != NULL)
5602     {
5603       int long_bit = 0;
5604
5605       bfd_map_over_sections (info.abfd, mips_find_long_section, &long_bit);
5606       if (long_bit)
5607         {
5608           set_gdbarch_long_bit (gdbarch, long_bit);
5609           switch (mips_abi)
5610             {
5611             case MIPS_ABI_O32:
5612             case MIPS_ABI_EABI32:
5613               break;
5614             case MIPS_ABI_N32:
5615             case MIPS_ABI_O64:
5616             case MIPS_ABI_N64:
5617             case MIPS_ABI_EABI64:
5618               set_gdbarch_ptr_bit (gdbarch, long_bit);
5619               break;
5620             default:
5621               internal_error (__FILE__, __LINE__, _("unknown ABI in switch"));
5622             }
5623         }
5624     }
5625
5626   /* FIXME: jlarmour/2000-04-07: There *is* a flag EF_MIPS_32BIT_MODE
5627      that could indicate -gp32 BUT gas/config/tc-mips.c contains the
5628      comment:
5629
5630      ``We deliberately don't allow "-gp32" to set the MIPS_32BITMODE
5631      flag in object files because to do so would make it impossible to
5632      link with libraries compiled without "-gp32".  This is
5633      unnecessarily restrictive.
5634
5635      We could solve this problem by adding "-gp32" multilibs to gcc,
5636      but to set this flag before gcc is built with such multilibs will
5637      break too many systems.''
5638
5639      But even more unhelpfully, the default linker output target for
5640      mips64-elf is elf32-bigmips, and has EF_MIPS_32BIT_MODE set, even
5641      for 64-bit programs - you need to change the ABI to change this,
5642      and not all gcc targets support that currently.  Therefore using
5643      this flag to detect 32-bit mode would do the wrong thing given
5644      the current gcc - it would make GDB treat these 64-bit programs
5645      as 32-bit programs by default.  */
5646
5647   set_gdbarch_read_pc (gdbarch, mips_read_pc);
5648   set_gdbarch_write_pc (gdbarch, mips_write_pc);
5649
5650   /* Add/remove bits from an address.  The MIPS needs be careful to
5651      ensure that all 32 bit addresses are sign extended to 64 bits.  */
5652   set_gdbarch_addr_bits_remove (gdbarch, mips_addr_bits_remove);
5653
5654   /* Unwind the frame.  */
5655   set_gdbarch_unwind_pc (gdbarch, mips_unwind_pc);
5656   set_gdbarch_unwind_sp (gdbarch, mips_unwind_sp);
5657   set_gdbarch_unwind_dummy_id (gdbarch, mips_unwind_dummy_id);
5658
5659   /* Map debug register numbers onto internal register numbers.  */
5660   set_gdbarch_stab_reg_to_regnum (gdbarch, mips_stab_reg_to_regnum);
5661   set_gdbarch_ecoff_reg_to_regnum (gdbarch,
5662                                    mips_dwarf_dwarf2_ecoff_reg_to_regnum);
5663   set_gdbarch_dwarf_reg_to_regnum (gdbarch,
5664                                    mips_dwarf_dwarf2_ecoff_reg_to_regnum);
5665   set_gdbarch_dwarf2_reg_to_regnum (gdbarch,
5666                                     mips_dwarf_dwarf2_ecoff_reg_to_regnum);
5667   set_gdbarch_register_sim_regno (gdbarch, mips_register_sim_regno);
5668
5669   /* MIPS version of CALL_DUMMY */
5670
5671   /* NOTE: cagney/2003-08-05: Eventually call dummy location will be
5672      replaced by a command, and all targets will default to on stack
5673      (regardless of the stack's execute status).  */
5674   set_gdbarch_call_dummy_location (gdbarch, AT_SYMBOL);
5675   set_gdbarch_frame_align (gdbarch, mips_frame_align);
5676
5677   set_gdbarch_convert_register_p (gdbarch, mips_convert_register_p);
5678   set_gdbarch_register_to_value (gdbarch, mips_register_to_value);
5679   set_gdbarch_value_to_register (gdbarch, mips_value_to_register);
5680
5681   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
5682   set_gdbarch_breakpoint_from_pc (gdbarch, mips_breakpoint_from_pc);
5683
5684   set_gdbarch_skip_prologue (gdbarch, mips_skip_prologue);
5685
5686   set_gdbarch_in_function_epilogue_p (gdbarch, mips_in_function_epilogue_p);
5687
5688   set_gdbarch_pointer_to_address (gdbarch, signed_pointer_to_address);
5689   set_gdbarch_address_to_pointer (gdbarch, address_to_signed_pointer);
5690   set_gdbarch_integer_to_address (gdbarch, mips_integer_to_address);
5691
5692   set_gdbarch_register_type (gdbarch, mips_register_type);
5693
5694   set_gdbarch_print_registers_info (gdbarch, mips_print_registers_info);
5695
5696   set_gdbarch_print_insn (gdbarch, gdb_print_insn_mips);
5697
5698   /* FIXME: cagney/2003-08-29: The macros HAVE_STEPPABLE_WATCHPOINT,
5699      HAVE_NONSTEPPABLE_WATCHPOINT, and HAVE_CONTINUABLE_WATCHPOINT
5700      need to all be folded into the target vector.  Since they are
5701      being used as guards for STOPPED_BY_WATCHPOINT, why not have
5702      STOPPED_BY_WATCHPOINT return the type of watchpoint that the code
5703      is sitting on?  */
5704   set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
5705
5706   set_gdbarch_skip_trampoline_code (gdbarch, mips_skip_trampoline_code);
5707
5708   set_gdbarch_single_step_through_delay (gdbarch, mips_single_step_through_delay);
5709
5710   /* Virtual tables.  */
5711   set_gdbarch_vbit_in_delta (gdbarch, 1);
5712
5713   mips_register_g_packet_guesses (gdbarch);
5714
5715   /* Hook in OS ABI-specific overrides, if they have been registered.  */
5716   info.tdep_info = (void *) tdesc_data;
5717   gdbarch_init_osabi (info, gdbarch);
5718
5719   /* Unwind the frame.  */
5720   frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer);
5721   frame_unwind_append_sniffer (gdbarch, mips_stub_frame_sniffer);
5722   frame_unwind_append_sniffer (gdbarch, mips_insn16_frame_sniffer);
5723   frame_unwind_append_sniffer (gdbarch, mips_insn32_frame_sniffer);
5724   frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
5725   frame_base_append_sniffer (gdbarch, mips_stub_frame_base_sniffer);
5726   frame_base_append_sniffer (gdbarch, mips_insn16_frame_base_sniffer);
5727   frame_base_append_sniffer (gdbarch, mips_insn32_frame_base_sniffer);
5728
5729   if (tdesc_data)
5730     {
5731       set_tdesc_pseudo_register_type (gdbarch, mips_pseudo_register_type);
5732       tdesc_use_registers (gdbarch, info.target_desc, tdesc_data);
5733
5734       /* Override the normal target description methods to handle our
5735          dual real and pseudo registers.  */
5736       set_gdbarch_register_name (gdbarch, mips_register_name);
5737       set_gdbarch_register_reggroup_p (gdbarch, mips_tdesc_register_reggroup_p);
5738
5739       num_regs = gdbarch_num_regs (gdbarch);
5740       set_gdbarch_num_pseudo_regs (gdbarch, num_regs);
5741       set_gdbarch_pc_regnum (gdbarch, tdep->regnum->pc + num_regs);
5742       set_gdbarch_sp_regnum (gdbarch, MIPS_SP_REGNUM + num_regs);
5743     }
5744
5745   /* Add ABI-specific aliases for the registers.  */
5746   if (mips_abi == MIPS_ABI_N32 || mips_abi == MIPS_ABI_N64)
5747     for (i = 0; i < ARRAY_SIZE (mips_n32_n64_aliases); i++)
5748       user_reg_add (gdbarch, mips_n32_n64_aliases[i].name,
5749                     value_of_mips_user_reg, &mips_n32_n64_aliases[i].regnum);
5750   else
5751     for (i = 0; i < ARRAY_SIZE (mips_o32_aliases); i++)
5752       user_reg_add (gdbarch, mips_o32_aliases[i].name,
5753                     value_of_mips_user_reg, &mips_o32_aliases[i].regnum);
5754
5755   /* Add some other standard aliases.  */
5756   for (i = 0; i < ARRAY_SIZE (mips_register_aliases); i++)
5757     user_reg_add (gdbarch, mips_register_aliases[i].name,
5758                   value_of_mips_user_reg, &mips_register_aliases[i].regnum);
5759
5760   return gdbarch;
5761 }
5762
5763 static void
5764 mips_abi_update (char *ignore_args, int from_tty, struct cmd_list_element *c)
5765 {
5766   struct gdbarch_info info;
5767
5768   /* Force the architecture to update, and (if it's a MIPS architecture)
5769      mips_gdbarch_init will take care of the rest.  */
5770   gdbarch_info_init (&info);
5771   gdbarch_update_p (info);
5772 }
5773
5774 /* Print out which MIPS ABI is in use.  */
5775
5776 static void
5777 show_mips_abi (struct ui_file *file,
5778                int from_tty,
5779                struct cmd_list_element *ignored_cmd,
5780                const char *ignored_value)
5781 {
5782   if (gdbarch_bfd_arch_info (current_gdbarch)->arch != bfd_arch_mips)
5783     fprintf_filtered
5784       (file, 
5785        "The MIPS ABI is unknown because the current architecture "
5786        "is not MIPS.\n");
5787   else
5788     {
5789       enum mips_abi global_abi = global_mips_abi ();
5790       enum mips_abi actual_abi = mips_abi (current_gdbarch);
5791       const char *actual_abi_str = mips_abi_strings[actual_abi];
5792
5793       if (global_abi == MIPS_ABI_UNKNOWN)
5794         fprintf_filtered
5795           (file, 
5796            "The MIPS ABI is set automatically (currently \"%s\").\n",
5797            actual_abi_str);
5798       else if (global_abi == actual_abi)
5799         fprintf_filtered
5800           (file,
5801            "The MIPS ABI is assumed to be \"%s\" (due to user setting).\n",
5802            actual_abi_str);
5803       else
5804         {
5805           /* Probably shouldn't happen...  */
5806           fprintf_filtered
5807             (file,
5808              "The (auto detected) MIPS ABI \"%s\" is in use even though the user setting was \"%s\".\n",
5809              actual_abi_str, mips_abi_strings[global_abi]);
5810         }
5811     }
5812 }
5813
5814 static void
5815 mips_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
5816 {
5817   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5818   if (tdep != NULL)
5819     {
5820       int ef_mips_arch;
5821       int ef_mips_32bitmode;
5822       /* Determine the ISA.  */
5823       switch (tdep->elf_flags & EF_MIPS_ARCH)
5824         {
5825         case E_MIPS_ARCH_1:
5826           ef_mips_arch = 1;
5827           break;
5828         case E_MIPS_ARCH_2:
5829           ef_mips_arch = 2;
5830           break;
5831         case E_MIPS_ARCH_3:
5832           ef_mips_arch = 3;
5833           break;
5834         case E_MIPS_ARCH_4:
5835           ef_mips_arch = 4;
5836           break;
5837         default:
5838           ef_mips_arch = 0;
5839           break;
5840         }
5841       /* Determine the size of a pointer.  */
5842       ef_mips_32bitmode = (tdep->elf_flags & EF_MIPS_32BITMODE);
5843       fprintf_unfiltered (file,
5844                           "mips_dump_tdep: tdep->elf_flags = 0x%x\n",
5845                           tdep->elf_flags);
5846       fprintf_unfiltered (file,
5847                           "mips_dump_tdep: ef_mips_32bitmode = %d\n",
5848                           ef_mips_32bitmode);
5849       fprintf_unfiltered (file,
5850                           "mips_dump_tdep: ef_mips_arch = %d\n",
5851                           ef_mips_arch);
5852       fprintf_unfiltered (file,
5853                           "mips_dump_tdep: tdep->mips_abi = %d (%s)\n",
5854                           tdep->mips_abi, mips_abi_strings[tdep->mips_abi]);
5855       fprintf_unfiltered (file,
5856                           "mips_dump_tdep: mips_mask_address_p() %d (default %d)\n",
5857                           mips_mask_address_p (tdep),
5858                           tdep->default_mask_address_p);
5859     }
5860   fprintf_unfiltered (file,
5861                       "mips_dump_tdep: MIPS_DEFAULT_FPU_TYPE = %d (%s)\n",
5862                       MIPS_DEFAULT_FPU_TYPE,
5863                       (MIPS_DEFAULT_FPU_TYPE == MIPS_FPU_NONE ? "none"
5864                        : MIPS_DEFAULT_FPU_TYPE == MIPS_FPU_SINGLE ? "single"
5865                        : MIPS_DEFAULT_FPU_TYPE == MIPS_FPU_DOUBLE ? "double"
5866                        : "???"));
5867   fprintf_unfiltered (file, "mips_dump_tdep: MIPS_EABI = %d\n", MIPS_EABI);
5868   fprintf_unfiltered (file,
5869                       "mips_dump_tdep: MIPS_FPU_TYPE = %d (%s)\n",
5870                       MIPS_FPU_TYPE,
5871                       (MIPS_FPU_TYPE == MIPS_FPU_NONE ? "none"
5872                        : MIPS_FPU_TYPE == MIPS_FPU_SINGLE ? "single"
5873                        : MIPS_FPU_TYPE == MIPS_FPU_DOUBLE ? "double"
5874                        : "???"));
5875 }
5876
5877 extern initialize_file_ftype _initialize_mips_tdep;     /* -Wmissing-prototypes */
5878
5879 void
5880 _initialize_mips_tdep (void)
5881 {
5882   static struct cmd_list_element *mipsfpulist = NULL;
5883   struct cmd_list_element *c;
5884
5885   mips_abi_string = mips_abi_strings[MIPS_ABI_UNKNOWN];
5886   if (MIPS_ABI_LAST + 1
5887       != sizeof (mips_abi_strings) / sizeof (mips_abi_strings[0]))
5888     internal_error (__FILE__, __LINE__, _("mips_abi_strings out of sync"));
5889
5890   gdbarch_register (bfd_arch_mips, mips_gdbarch_init, mips_dump_tdep);
5891
5892   mips_pdr_data = register_objfile_data ();
5893
5894   /* Create feature sets with the appropriate properties.  The values
5895      are not important.  */
5896   mips_tdesc_gp32 = allocate_target_description ();
5897   set_tdesc_property (mips_tdesc_gp32, PROPERTY_GP32, "");
5898
5899   mips_tdesc_gp64 = allocate_target_description ();
5900   set_tdesc_property (mips_tdesc_gp64, PROPERTY_GP64, "");
5901
5902   /* Add root prefix command for all "set mips"/"show mips" commands */
5903   add_prefix_cmd ("mips", no_class, set_mips_command,
5904                   _("Various MIPS specific commands."),
5905                   &setmipscmdlist, "set mips ", 0, &setlist);
5906
5907   add_prefix_cmd ("mips", no_class, show_mips_command,
5908                   _("Various MIPS specific commands."),
5909                   &showmipscmdlist, "show mips ", 0, &showlist);
5910
5911   /* Allow the user to override the ABI. */
5912   add_setshow_enum_cmd ("abi", class_obscure, mips_abi_strings,
5913                         &mips_abi_string, _("\
5914 Set the MIPS ABI used by this program."), _("\
5915 Show the MIPS ABI used by this program."), _("\
5916 This option can be set to one of:\n\
5917   auto  - the default ABI associated with the current binary\n\
5918   o32\n\
5919   o64\n\
5920   n32\n\
5921   n64\n\
5922   eabi32\n\
5923   eabi64"),
5924                         mips_abi_update,
5925                         show_mips_abi,
5926                         &setmipscmdlist, &showmipscmdlist);
5927
5928   /* Let the user turn off floating point and set the fence post for
5929      heuristic_proc_start.  */
5930
5931   add_prefix_cmd ("mipsfpu", class_support, set_mipsfpu_command,
5932                   _("Set use of MIPS floating-point coprocessor."),
5933                   &mipsfpulist, "set mipsfpu ", 0, &setlist);
5934   add_cmd ("single", class_support, set_mipsfpu_single_command,
5935            _("Select single-precision MIPS floating-point coprocessor."),
5936            &mipsfpulist);
5937   add_cmd ("double", class_support, set_mipsfpu_double_command,
5938            _("Select double-precision MIPS floating-point coprocessor."),
5939            &mipsfpulist);
5940   add_alias_cmd ("on", "double", class_support, 1, &mipsfpulist);
5941   add_alias_cmd ("yes", "double", class_support, 1, &mipsfpulist);
5942   add_alias_cmd ("1", "double", class_support, 1, &mipsfpulist);
5943   add_cmd ("none", class_support, set_mipsfpu_none_command,
5944            _("Select no MIPS floating-point coprocessor."), &mipsfpulist);
5945   add_alias_cmd ("off", "none", class_support, 1, &mipsfpulist);
5946   add_alias_cmd ("no", "none", class_support, 1, &mipsfpulist);
5947   add_alias_cmd ("0", "none", class_support, 1, &mipsfpulist);
5948   add_cmd ("auto", class_support, set_mipsfpu_auto_command,
5949            _("Select MIPS floating-point coprocessor automatically."),
5950            &mipsfpulist);
5951   add_cmd ("mipsfpu", class_support, show_mipsfpu_command,
5952            _("Show current use of MIPS floating-point coprocessor target."),
5953            &showlist);
5954
5955   /* We really would like to have both "0" and "unlimited" work, but
5956      command.c doesn't deal with that.  So make it a var_zinteger
5957      because the user can always use "999999" or some such for unlimited.  */
5958   add_setshow_zinteger_cmd ("heuristic-fence-post", class_support,
5959                             &heuristic_fence_post, _("\
5960 Set the distance searched for the start of a function."), _("\
5961 Show the distance searched for the start of a function."), _("\
5962 If you are debugging a stripped executable, GDB needs to search through the\n\
5963 program for the start of a function.  This command sets the distance of the\n\
5964 search.  The only need to set it is when debugging a stripped executable."),
5965                             reinit_frame_cache_sfunc,
5966                             NULL, /* FIXME: i18n: The distance searched for the start of a function is %s.  */
5967                             &setlist, &showlist);
5968
5969   /* Allow the user to control whether the upper bits of 64-bit
5970      addresses should be zeroed.  */
5971   add_setshow_auto_boolean_cmd ("mask-address", no_class,
5972                                 &mask_address_var, _("\
5973 Set zeroing of upper 32 bits of 64-bit addresses."), _("\
5974 Show zeroing of upper 32 bits of 64-bit addresses."), _("\
5975 Use \"on\" to enable the masking, \"off\" to disable it and \"auto\" to \n\
5976 allow GDB to determine the correct value."),
5977                                 NULL, show_mask_address,
5978                                 &setmipscmdlist, &showmipscmdlist);
5979
5980   /* Allow the user to control the size of 32 bit registers within the
5981      raw remote packet.  */
5982   add_setshow_boolean_cmd ("remote-mips64-transfers-32bit-regs", class_obscure,
5983                            &mips64_transfers_32bit_regs_p, _("\
5984 Set compatibility with 64-bit MIPS target that transfers 32-bit quantities."),
5985                            _("\
5986 Show compatibility with 64-bit MIPS target that transfers 32-bit quantities."),
5987                            _("\
5988 Use \"on\" to enable backward compatibility with older MIPS 64 GDB+target\n\
5989 that would transfer 32 bits for some registers (e.g. SR, FSR) and\n\
5990 64 bits for others.  Use \"off\" to disable compatibility mode"),
5991                            set_mips64_transfers_32bit_regs,
5992                            NULL, /* FIXME: i18n: Compatibility with 64-bit MIPS target that transfers 32-bit quantities is %s.  */
5993                            &setlist, &showlist);
5994
5995   /* Debug this files internals. */
5996   add_setshow_zinteger_cmd ("mips", class_maintenance,
5997                             &mips_debug, _("\
5998 Set mips debugging."), _("\
5999 Show mips debugging."), _("\
6000 When non-zero, mips specific debugging is enabled."),
6001                             NULL,
6002                             NULL, /* FIXME: i18n: Mips debugging is currently %s.  */
6003                             &setdebuglist, &showdebuglist);
6004 }