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