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