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