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