Simplify tui_show_disassem
[external/binutils.git] / gdb / mips-tdep.c
1 /* Target-dependent code for the MIPS architecture, for GDB, the GNU Debugger.
2
3    Copyright (C) 1988-2019 Free Software Foundation, Inc.
4
5    Contributed by Alessandro Forin(af@cs.cmu.edu) at CMU
6    and by Per Bothner(bothner@cs.wisc.edu) at U.Wisconsin.
7
8    This file is part of GDB.
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 3 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
22
23 #include "defs.h"
24 #include "frame.h"
25 #include "inferior.h"
26 #include "symtab.h"
27 #include "value.h"
28 #include "gdbcmd.h"
29 #include "language.h"
30 #include "gdbcore.h"
31 #include "symfile.h"
32 #include "objfiles.h"
33 #include "gdbtypes.h"
34 #include "target.h"
35 #include "arch-utils.h"
36 #include "regcache.h"
37 #include "osabi.h"
38 #include "mips-tdep.h"
39 #include "block.h"
40 #include "reggroups.h"
41 #include "opcode/mips.h"
42 #include "elf/mips.h"
43 #include "elf-bfd.h"
44 #include "symcat.h"
45 #include "sim-regno.h"
46 #include "dis-asm.h"
47 #include "disasm.h"
48 #include "frame-unwind.h"
49 #include "frame-base.h"
50 #include "trad-frame.h"
51 #include "infcall.h"
52 #include "remote.h"
53 #include "target-descriptions.h"
54 #include "dwarf2-frame.h"
55 #include "user-regs.h"
56 #include "valprint.h"
57 #include "ax.h"
58 #include "target-float.h"
59 #include <algorithm>
60
61 static struct type *mips_register_type (struct gdbarch *gdbarch, int regnum);
62
63 static int mips32_instruction_has_delay_slot (struct gdbarch *gdbarch,
64                                               ULONGEST inst);
65 static int micromips_instruction_has_delay_slot (ULONGEST insn, int mustbe32);
66 static int mips16_instruction_has_delay_slot (unsigned short inst,
67                                               int mustbe32);
68
69 static int mips32_insn_at_pc_has_delay_slot (struct gdbarch *gdbarch,
70                                              CORE_ADDR addr);
71 static int micromips_insn_at_pc_has_delay_slot (struct gdbarch *gdbarch,
72                                                 CORE_ADDR addr, int mustbe32);
73 static int mips16_insn_at_pc_has_delay_slot (struct gdbarch *gdbarch,
74                                              CORE_ADDR addr, int mustbe32);
75
76 static void mips_print_float_info (struct gdbarch *, struct ui_file *,
77                                    struct frame_info *, const char *);
78
79 /* A useful bit in the CP0 status register (MIPS_PS_REGNUM).  */
80 /* This bit is set if we are emulating 32-bit FPRs on a 64-bit chip.  */
81 #define ST0_FR (1 << 26)
82
83 /* The sizes of floating point registers.  */
84
85 enum
86 {
87   MIPS_FPU_SINGLE_REGSIZE = 4,
88   MIPS_FPU_DOUBLE_REGSIZE = 8
89 };
90
91 enum
92 {
93   MIPS32_REGSIZE = 4,
94   MIPS64_REGSIZE = 8
95 };
96
97 static const char *mips_abi_string;
98
99 static const char *const mips_abi_strings[] = {
100   "auto",
101   "n32",
102   "o32",
103   "n64",
104   "o64",
105   "eabi32",
106   "eabi64",
107   NULL
108 };
109
110 /* Enum describing the different kinds of breakpoints.  */
111
112 enum mips_breakpoint_kind
113 {
114   /* 16-bit MIPS16 mode breakpoint.  */
115   MIPS_BP_KIND_MIPS16 = 2,
116
117   /* 16-bit microMIPS mode breakpoint.  */
118   MIPS_BP_KIND_MICROMIPS16 = 3,
119
120   /* 32-bit standard MIPS mode breakpoint.  */
121   MIPS_BP_KIND_MIPS32 = 4,
122
123   /* 32-bit microMIPS mode breakpoint.  */
124   MIPS_BP_KIND_MICROMIPS32 = 5,
125 };
126
127 /* For backwards compatibility we default to MIPS16.  This flag is
128    overridden as soon as unambiguous ELF file flags tell us the
129    compressed ISA encoding used.  */
130 static const char mips_compression_mips16[] = "mips16";
131 static const char mips_compression_micromips[] = "micromips";
132 static const char *const mips_compression_strings[] =
133 {
134   mips_compression_mips16,
135   mips_compression_micromips,
136   NULL
137 };
138
139 static const char *mips_compression_string = mips_compression_mips16;
140
141 /* The standard register names, and all the valid aliases for them.  */
142 struct register_alias
143 {
144   const char *name;
145   int regnum;
146 };
147
148 /* Aliases for o32 and most other ABIs.  */
149 const struct register_alias mips_o32_aliases[] = {
150   { "ta0", 12 },
151   { "ta1", 13 },
152   { "ta2", 14 },
153   { "ta3", 15 }
154 };
155
156 /* Aliases for n32 and n64.  */
157 const struct register_alias mips_n32_n64_aliases[] = {
158   { "ta0", 8 },
159   { "ta1", 9 },
160   { "ta2", 10 },
161   { "ta3", 11 }
162 };
163
164 /* Aliases for ABI-independent registers.  */
165 const struct register_alias mips_register_aliases[] = {
166   /* The architecture manuals specify these ABI-independent names for
167      the GPRs.  */
168 #define R(n) { "r" #n, n }
169   R(0), R(1), R(2), R(3), R(4), R(5), R(6), R(7),
170   R(8), R(9), R(10), R(11), R(12), R(13), R(14), R(15),
171   R(16), R(17), R(18), R(19), R(20), R(21), R(22), R(23),
172   R(24), R(25), R(26), R(27), R(28), R(29), R(30), R(31),
173 #undef R
174
175   /* k0 and k1 are sometimes called these instead (for "kernel
176      temp").  */
177   { "kt0", 26 },
178   { "kt1", 27 },
179
180   /* This is the traditional GDB name for the CP0 status register.  */
181   { "sr", MIPS_PS_REGNUM },
182
183   /* This is the traditional GDB name for the CP0 BadVAddr register.  */
184   { "bad", MIPS_EMBED_BADVADDR_REGNUM },
185
186   /* This is the traditional GDB name for the FCSR.  */
187   { "fsr", MIPS_EMBED_FP0_REGNUM + 32 }
188 };
189
190 const struct register_alias mips_numeric_register_aliases[] = {
191 #define R(n) { #n, n }
192   R(0), R(1), R(2), R(3), R(4), R(5), R(6), R(7),
193   R(8), R(9), R(10), R(11), R(12), R(13), R(14), R(15),
194   R(16), R(17), R(18), R(19), R(20), R(21), R(22), R(23),
195   R(24), R(25), R(26), R(27), R(28), R(29), R(30), R(31),
196 #undef R
197 };
198
199 #ifndef MIPS_DEFAULT_FPU_TYPE
200 #define MIPS_DEFAULT_FPU_TYPE MIPS_FPU_DOUBLE
201 #endif
202 static int mips_fpu_type_auto = 1;
203 static enum mips_fpu_type mips_fpu_type = MIPS_DEFAULT_FPU_TYPE;
204
205 static unsigned int mips_debug = 0;
206
207 /* Properties (for struct target_desc) describing the g/G packet
208    layout.  */
209 #define PROPERTY_GP32 "internal: transfers-32bit-registers"
210 #define PROPERTY_GP64 "internal: transfers-64bit-registers"
211
212 struct target_desc *mips_tdesc_gp32;
213 struct target_desc *mips_tdesc_gp64;
214
215 /* The current set of options to be passed to the disassembler.  */
216 static char *mips_disassembler_options;
217
218 /* Implicit disassembler options for individual ABIs.  These tell
219    libopcodes to use general-purpose register names corresponding
220    to the ABI we have selected, perhaps via a `set mips abi ...'
221    override, rather than ones inferred from the ABI set in the ELF
222    headers of the binary file selected for debugging.  */
223 static const char mips_disassembler_options_o32[] = "gpr-names=32";
224 static const char mips_disassembler_options_n32[] = "gpr-names=n32";
225 static const char mips_disassembler_options_n64[] = "gpr-names=64";
226
227 const struct mips_regnum *
228 mips_regnum (struct gdbarch *gdbarch)
229 {
230   return gdbarch_tdep (gdbarch)->regnum;
231 }
232
233 static int
234 mips_fpa0_regnum (struct gdbarch *gdbarch)
235 {
236   return mips_regnum (gdbarch)->fp0 + 12;
237 }
238
239 /* Return 1 if REGNUM refers to a floating-point general register, raw
240    or cooked.  Otherwise return 0.  */
241
242 static int
243 mips_float_register_p (struct gdbarch *gdbarch, int regnum)
244 {
245   int rawnum = regnum % gdbarch_num_regs (gdbarch);
246
247   return (rawnum >= mips_regnum (gdbarch)->fp0
248           && rawnum < mips_regnum (gdbarch)->fp0 + 32);
249 }
250
251 #define MIPS_EABI(gdbarch) (gdbarch_tdep (gdbarch)->mips_abi \
252                      == MIPS_ABI_EABI32 \
253                    || gdbarch_tdep (gdbarch)->mips_abi == MIPS_ABI_EABI64)
254
255 #define MIPS_LAST_FP_ARG_REGNUM(gdbarch) \
256   (gdbarch_tdep (gdbarch)->mips_last_fp_arg_regnum)
257
258 #define MIPS_LAST_ARG_REGNUM(gdbarch) \
259   (gdbarch_tdep (gdbarch)->mips_last_arg_regnum)
260
261 #define MIPS_FPU_TYPE(gdbarch) (gdbarch_tdep (gdbarch)->mips_fpu_type)
262
263 /* Return the MIPS ABI associated with GDBARCH.  */
264 enum mips_abi
265 mips_abi (struct gdbarch *gdbarch)
266 {
267   return gdbarch_tdep (gdbarch)->mips_abi;
268 }
269
270 int
271 mips_isa_regsize (struct gdbarch *gdbarch)
272 {
273   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
274
275   /* If we know how big the registers are, use that size.  */
276   if (tdep->register_size_valid_p)
277     return tdep->register_size;
278
279   /* Fall back to the previous behavior.  */
280   return (gdbarch_bfd_arch_info (gdbarch)->bits_per_word
281           / gdbarch_bfd_arch_info (gdbarch)->bits_per_byte);
282 }
283
284 /* Max saved register size.  */
285 #define MAX_MIPS_ABI_REGSIZE 8
286
287 /* Return the currently configured (or set) saved register size.  */
288
289 unsigned int
290 mips_abi_regsize (struct gdbarch *gdbarch)
291 {
292   switch (mips_abi (gdbarch))
293     {
294     case MIPS_ABI_EABI32:
295     case MIPS_ABI_O32:
296       return 4;
297     case MIPS_ABI_N32:
298     case MIPS_ABI_N64:
299     case MIPS_ABI_O64:
300     case MIPS_ABI_EABI64:
301       return 8;
302     case MIPS_ABI_UNKNOWN:
303     case MIPS_ABI_LAST:
304     default:
305       internal_error (__FILE__, __LINE__, _("bad switch"));
306     }
307 }
308
309 /* MIPS16/microMIPS function addresses are odd (bit 0 is set).  Here
310    are some functions to handle addresses associated with compressed
311    code including but not limited to testing, setting, or clearing
312    bit 0 of such addresses.  */
313
314 /* Return one iff compressed code is the MIPS16 instruction set.  */
315
316 static int
317 is_mips16_isa (struct gdbarch *gdbarch)
318 {
319   return gdbarch_tdep (gdbarch)->mips_isa == ISA_MIPS16;
320 }
321
322 /* Return one iff compressed code is the microMIPS instruction set.  */
323
324 static int
325 is_micromips_isa (struct gdbarch *gdbarch)
326 {
327   return gdbarch_tdep (gdbarch)->mips_isa == ISA_MICROMIPS;
328 }
329
330 /* Return one iff ADDR denotes compressed code.  */
331
332 static int
333 is_compact_addr (CORE_ADDR addr)
334 {
335   return ((addr) & 1);
336 }
337
338 /* Return one iff ADDR denotes standard ISA code.  */
339
340 static int
341 is_mips_addr (CORE_ADDR addr)
342 {
343   return !is_compact_addr (addr);
344 }
345
346 /* Return one iff ADDR denotes MIPS16 code.  */
347
348 static int
349 is_mips16_addr (struct gdbarch *gdbarch, CORE_ADDR addr)
350 {
351   return is_compact_addr (addr) && is_mips16_isa (gdbarch);
352 }
353
354 /* Return one iff ADDR denotes microMIPS code.  */
355
356 static int
357 is_micromips_addr (struct gdbarch *gdbarch, CORE_ADDR addr)
358 {
359   return is_compact_addr (addr) && is_micromips_isa (gdbarch);
360 }
361
362 /* Strip the ISA (compression) bit off from ADDR.  */
363
364 static CORE_ADDR
365 unmake_compact_addr (CORE_ADDR addr)
366 {
367   return ((addr) & ~(CORE_ADDR) 1);
368 }
369
370 /* Add the ISA (compression) bit to ADDR.  */
371
372 static CORE_ADDR
373 make_compact_addr (CORE_ADDR addr)
374 {
375   return ((addr) | (CORE_ADDR) 1);
376 }
377
378 /* Extern version of unmake_compact_addr; we use a separate function
379    so that unmake_compact_addr can be inlined throughout this file.  */
380
381 CORE_ADDR
382 mips_unmake_compact_addr (CORE_ADDR addr)
383 {
384   return unmake_compact_addr (addr);
385 }
386
387 /* Functions for setting and testing a bit in a minimal symbol that
388    marks it as MIPS16 or microMIPS function.  The MSB of the minimal
389    symbol's "info" field is used for this purpose.
390
391    gdbarch_elf_make_msymbol_special tests whether an ELF symbol is
392    "special", i.e. refers to a MIPS16 or microMIPS function, and sets
393    one of the "special" bits in a minimal symbol to mark it accordingly.
394    The test checks an ELF-private flag that is valid for true function
395    symbols only; for synthetic symbols such as for PLT stubs that have
396    no ELF-private part at all the MIPS BFD backend arranges for this
397    information to be carried in the asymbol's udata field instead.
398
399    msymbol_is_mips16 and msymbol_is_micromips test the "special" bit
400    in a minimal symbol.  */
401
402 static void
403 mips_elf_make_msymbol_special (asymbol * sym, struct minimal_symbol *msym)
404 {
405   elf_symbol_type *elfsym = (elf_symbol_type *) sym;
406   unsigned char st_other;
407
408   if ((sym->flags & BSF_SYNTHETIC) == 0)
409     st_other = elfsym->internal_elf_sym.st_other;
410   else if ((sym->flags & BSF_FUNCTION) != 0)
411     st_other = sym->udata.i;
412   else
413     return;
414
415   if (ELF_ST_IS_MICROMIPS (st_other))
416     {
417       MSYMBOL_TARGET_FLAG_MICROMIPS (msym) = 1;
418       SET_MSYMBOL_VALUE_ADDRESS (msym, MSYMBOL_VALUE_RAW_ADDRESS (msym) | 1);
419     }
420   else if (ELF_ST_IS_MIPS16 (st_other))
421     {
422       MSYMBOL_TARGET_FLAG_MIPS16 (msym) = 1;
423       SET_MSYMBOL_VALUE_ADDRESS (msym, MSYMBOL_VALUE_RAW_ADDRESS (msym) | 1);
424     }
425 }
426
427 /* Return one iff MSYM refers to standard ISA code.  */
428
429 static int
430 msymbol_is_mips (struct minimal_symbol *msym)
431 {
432   return !(MSYMBOL_TARGET_FLAG_MIPS16 (msym)
433            | MSYMBOL_TARGET_FLAG_MICROMIPS (msym));
434 }
435
436 /* Return one iff MSYM refers to MIPS16 code.  */
437
438 static int
439 msymbol_is_mips16 (struct minimal_symbol *msym)
440 {
441   return MSYMBOL_TARGET_FLAG_MIPS16 (msym);
442 }
443
444 /* Return one iff MSYM refers to microMIPS code.  */
445
446 static int
447 msymbol_is_micromips (struct minimal_symbol *msym)
448 {
449   return MSYMBOL_TARGET_FLAG_MICROMIPS (msym);
450 }
451
452 /* Set the ISA bit in the main symbol too, complementing the corresponding
453    minimal symbol setting and reflecting the run-time value of the symbol.
454    The need for comes from the ISA bit having been cleared as code in
455    `_bfd_mips_elf_symbol_processing' separated it into the ELF symbol's
456    `st_other' STO_MIPS16 or STO_MICROMIPS annotation, making the values
457    of symbols referring to compressed code different in GDB to the values
458    used by actual code.  That in turn makes them evaluate incorrectly in
459    expressions, producing results different to what the same expressions
460    yield when compiled into the program being debugged.  */
461
462 static void
463 mips_make_symbol_special (struct symbol *sym, struct objfile *objfile)
464 {
465   if (SYMBOL_CLASS (sym) == LOC_BLOCK)
466     {
467       /* We are in symbol reading so it is OK to cast away constness.  */
468       struct block *block = (struct block *) SYMBOL_BLOCK_VALUE (sym);
469       CORE_ADDR compact_block_start;
470       struct bound_minimal_symbol msym;
471
472       compact_block_start = BLOCK_START (block) | 1;
473       msym = lookup_minimal_symbol_by_pc (compact_block_start);
474       if (msym.minsym && !msymbol_is_mips (msym.minsym))
475         {
476           BLOCK_START (block) = compact_block_start;
477         }
478     }
479 }
480
481 /* XFER a value from the big/little/left end of the register.
482    Depending on the size of the value it might occupy the entire
483    register or just part of it.  Make an allowance for this, aligning
484    things accordingly.  */
485
486 static void
487 mips_xfer_register (struct gdbarch *gdbarch, struct regcache *regcache,
488                     int reg_num, int length,
489                     enum bfd_endian endian, gdb_byte *in,
490                     const gdb_byte *out, int buf_offset)
491 {
492   int reg_offset = 0;
493
494   gdb_assert (reg_num >= gdbarch_num_regs (gdbarch));
495   /* Need to transfer the left or right part of the register, based on
496      the targets byte order.  */
497   switch (endian)
498     {
499     case BFD_ENDIAN_BIG:
500       reg_offset = register_size (gdbarch, reg_num) - length;
501       break;
502     case BFD_ENDIAN_LITTLE:
503       reg_offset = 0;
504       break;
505     case BFD_ENDIAN_UNKNOWN:    /* Indicates no alignment.  */
506       reg_offset = 0;
507       break;
508     default:
509       internal_error (__FILE__, __LINE__, _("bad switch"));
510     }
511   if (mips_debug)
512     fprintf_unfiltered (gdb_stderr,
513                         "xfer $%d, reg offset %d, buf offset %d, length %d, ",
514                         reg_num, reg_offset, buf_offset, length);
515   if (mips_debug && out != NULL)
516     {
517       int i;
518       fprintf_unfiltered (gdb_stdlog, "out ");
519       for (i = 0; i < length; i++)
520         fprintf_unfiltered (gdb_stdlog, "%02x", out[buf_offset + i]);
521     }
522   if (in != NULL)
523     regcache->cooked_read_part (reg_num, reg_offset, length, in + buf_offset);
524   if (out != NULL)
525     regcache->cooked_write_part (reg_num, reg_offset, length, out + buf_offset);
526   if (mips_debug && in != NULL)
527     {
528       int i;
529       fprintf_unfiltered (gdb_stdlog, "in ");
530       for (i = 0; i < length; i++)
531         fprintf_unfiltered (gdb_stdlog, "%02x", in[buf_offset + i]);
532     }
533   if (mips_debug)
534     fprintf_unfiltered (gdb_stdlog, "\n");
535 }
536
537 /* Determine if a MIPS3 or later cpu is operating in MIPS{1,2} FPU
538    compatiblity mode.  A return value of 1 means that we have
539    physical 64-bit registers, but should treat them as 32-bit registers.  */
540
541 static int
542 mips2_fp_compat (struct frame_info *frame)
543 {
544   struct gdbarch *gdbarch = get_frame_arch (frame);
545   /* MIPS1 and MIPS2 have only 32 bit FPRs, and the FR bit is not
546      meaningful.  */
547   if (register_size (gdbarch, mips_regnum (gdbarch)->fp0) == 4)
548     return 0;
549
550 #if 0
551   /* FIXME drow 2002-03-10: This is disabled until we can do it consistently,
552      in all the places we deal with FP registers.  PR gdb/413.  */
553   /* Otherwise check the FR bit in the status register - it controls
554      the FP compatiblity mode.  If it is clear we are in compatibility
555      mode.  */
556   if ((get_frame_register_unsigned (frame, MIPS_PS_REGNUM) & ST0_FR) == 0)
557     return 1;
558 #endif
559
560   return 0;
561 }
562
563 #define VM_MIN_ADDRESS (CORE_ADDR)0x400000
564
565 static CORE_ADDR heuristic_proc_start (struct gdbarch *, CORE_ADDR);
566
567 /* The list of available "set mips " and "show mips " commands.  */
568
569 static struct cmd_list_element *setmipscmdlist = NULL;
570 static struct cmd_list_element *showmipscmdlist = NULL;
571
572 /* Integer registers 0 thru 31 are handled explicitly by
573    mips_register_name().  Processor specific registers 32 and above
574    are listed in the following tables.  */
575
576 enum
577 { NUM_MIPS_PROCESSOR_REGS = (90 - 32) };
578
579 /* Generic MIPS.  */
580
581 static const char *mips_generic_reg_names[NUM_MIPS_PROCESSOR_REGS] = {
582   "sr", "lo", "hi", "bad", "cause", "pc",
583   "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
584   "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
585   "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
586   "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
587   "fsr", "fir",
588 };
589
590 /* Names of tx39 registers.  */
591
592 static const char *mips_tx39_reg_names[NUM_MIPS_PROCESSOR_REGS] = {
593   "sr", "lo", "hi", "bad", "cause", "pc",
594   "", "", "", "", "", "", "", "",
595   "", "", "", "", "", "", "", "",
596   "", "", "", "", "", "", "", "",
597   "", "", "", "", "", "", "", "",
598   "", "", "", "",
599   "", "", "", "", "", "", "", "",
600   "", "", "config", "cache", "debug", "depc", "epc",
601 };
602
603 /* Names of registers with Linux kernels.  */
604 static const char *mips_linux_reg_names[NUM_MIPS_PROCESSOR_REGS] = {
605   "sr", "lo", "hi", "bad", "cause", "pc",
606   "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
607   "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
608   "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
609   "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
610   "fsr", "fir"
611 };
612
613
614 /* Return the name of the register corresponding to REGNO.  */
615 static const char *
616 mips_register_name (struct gdbarch *gdbarch, int regno)
617 {
618   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
619   /* GPR names for all ABIs other than n32/n64.  */
620   static const char *mips_gpr_names[] = {
621     "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
622     "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7",
623     "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
624     "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra",
625   };
626
627   /* GPR names for n32 and n64 ABIs.  */
628   static const char *mips_n32_n64_gpr_names[] = {
629     "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
630     "a4", "a5", "a6", "a7", "t0", "t1", "t2", "t3",
631     "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
632     "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra"
633   };
634
635   enum mips_abi abi = mips_abi (gdbarch);
636
637   /* Map [gdbarch_num_regs .. 2*gdbarch_num_regs) onto the raw registers, 
638      but then don't make the raw register names visible.  This (upper)
639      range of user visible register numbers are the pseudo-registers.
640
641      This approach was adopted accommodate the following scenario:
642      It is possible to debug a 64-bit device using a 32-bit
643      programming model.  In such instances, the raw registers are
644      configured to be 64-bits wide, while the pseudo registers are
645      configured to be 32-bits wide.  The registers that the user
646      sees - the pseudo registers - match the users expectations
647      given the programming model being used.  */
648   int rawnum = regno % gdbarch_num_regs (gdbarch);
649   if (regno < gdbarch_num_regs (gdbarch))
650     return "";
651
652   /* The MIPS integer registers are always mapped from 0 to 31.  The
653      names of the registers (which reflects the conventions regarding
654      register use) vary depending on the ABI.  */
655   if (0 <= rawnum && rawnum < 32)
656     {
657       if (abi == MIPS_ABI_N32 || abi == MIPS_ABI_N64)
658         return mips_n32_n64_gpr_names[rawnum];
659       else
660         return mips_gpr_names[rawnum];
661     }
662   else if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
663     return tdesc_register_name (gdbarch, rawnum);
664   else if (32 <= rawnum && rawnum < gdbarch_num_regs (gdbarch))
665     {
666       gdb_assert (rawnum - 32 < NUM_MIPS_PROCESSOR_REGS);
667       if (tdep->mips_processor_reg_names[rawnum - 32])
668         return tdep->mips_processor_reg_names[rawnum - 32];
669       return "";
670     }
671   else
672     internal_error (__FILE__, __LINE__,
673                     _("mips_register_name: bad register number %d"), rawnum);
674 }
675
676 /* Return the groups that a MIPS register can be categorised into.  */
677
678 static int
679 mips_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
680                           struct reggroup *reggroup)
681 {
682   int vector_p;
683   int float_p;
684   int raw_p;
685   int rawnum = regnum % gdbarch_num_regs (gdbarch);
686   int pseudo = regnum / gdbarch_num_regs (gdbarch);
687   if (reggroup == all_reggroup)
688     return pseudo;
689   vector_p = TYPE_VECTOR (register_type (gdbarch, regnum));
690   float_p = TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT;
691   /* FIXME: cagney/2003-04-13: Can't yet use gdbarch_num_regs
692      (gdbarch), as not all architectures are multi-arch.  */
693   raw_p = rawnum < gdbarch_num_regs (gdbarch);
694   if (gdbarch_register_name (gdbarch, regnum) == NULL
695       || gdbarch_register_name (gdbarch, regnum)[0] == '\0')
696     return 0;
697   if (reggroup == float_reggroup)
698     return float_p && pseudo;
699   if (reggroup == vector_reggroup)
700     return vector_p && pseudo;
701   if (reggroup == general_reggroup)
702     return (!vector_p && !float_p) && pseudo;
703   /* Save the pseudo registers.  Need to make certain that any code
704      extracting register values from a saved register cache also uses
705      pseudo registers.  */
706   if (reggroup == save_reggroup)
707     return raw_p && pseudo;
708   /* Restore the same pseudo register.  */
709   if (reggroup == restore_reggroup)
710     return raw_p && pseudo;
711   return 0;
712 }
713
714 /* Return the groups that a MIPS register can be categorised into.
715    This version is only used if we have a target description which
716    describes real registers (and their groups).  */
717
718 static int
719 mips_tdesc_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
720                                 struct reggroup *reggroup)
721 {
722   int rawnum = regnum % gdbarch_num_regs (gdbarch);
723   int pseudo = regnum / gdbarch_num_regs (gdbarch);
724   int ret;
725
726   /* Only save, restore, and display the pseudo registers.  Need to
727      make certain that any code extracting register values from a
728      saved register cache also uses pseudo registers.
729
730      Note: saving and restoring the pseudo registers is slightly
731      strange; if we have 64 bits, we should save and restore all
732      64 bits.  But this is hard and has little benefit.  */
733   if (!pseudo)
734     return 0;
735
736   ret = tdesc_register_in_reggroup_p (gdbarch, rawnum, reggroup);
737   if (ret != -1)
738     return ret;
739
740   return mips_register_reggroup_p (gdbarch, regnum, reggroup);
741 }
742
743 /* Map the symbol table registers which live in the range [1 *
744    gdbarch_num_regs .. 2 * gdbarch_num_regs) back onto the corresponding raw
745    registers.  Take care of alignment and size problems.  */
746
747 static enum register_status
748 mips_pseudo_register_read (struct gdbarch *gdbarch, readable_regcache *regcache,
749                            int cookednum, gdb_byte *buf)
750 {
751   int rawnum = cookednum % gdbarch_num_regs (gdbarch);
752   gdb_assert (cookednum >= gdbarch_num_regs (gdbarch)
753               && cookednum < 2 * gdbarch_num_regs (gdbarch));
754   if (register_size (gdbarch, rawnum) == register_size (gdbarch, cookednum))
755     return regcache->raw_read (rawnum, buf);
756   else if (register_size (gdbarch, rawnum) >
757            register_size (gdbarch, cookednum))
758     {
759       if (gdbarch_tdep (gdbarch)->mips64_transfers_32bit_regs_p)
760         return regcache->raw_read_part (rawnum, 0, 4, buf);
761       else
762         {
763           enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
764           LONGEST regval;
765           enum register_status status;
766
767           status = regcache->raw_read (rawnum, &regval);
768           if (status == REG_VALID)
769             store_signed_integer (buf, 4, byte_order, regval);
770           return status;
771         }
772     }
773   else
774     internal_error (__FILE__, __LINE__, _("bad register size"));
775 }
776
777 static void
778 mips_pseudo_register_write (struct gdbarch *gdbarch,
779                             struct regcache *regcache, int cookednum,
780                             const gdb_byte *buf)
781 {
782   int rawnum = cookednum % gdbarch_num_regs (gdbarch);
783   gdb_assert (cookednum >= gdbarch_num_regs (gdbarch)
784               && cookednum < 2 * gdbarch_num_regs (gdbarch));
785   if (register_size (gdbarch, rawnum) == register_size (gdbarch, cookednum))
786     regcache->raw_write (rawnum, buf);
787   else if (register_size (gdbarch, rawnum) >
788            register_size (gdbarch, cookednum))
789     {
790       if (gdbarch_tdep (gdbarch)->mips64_transfers_32bit_regs_p)
791         regcache->raw_write_part (rawnum, 0, 4, buf);
792       else
793         {
794           /* Sign extend the shortened version of the register prior
795              to placing it in the raw register.  This is required for
796              some mips64 parts in order to avoid unpredictable behavior.  */
797           enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
798           LONGEST regval = extract_signed_integer (buf, 4, byte_order);
799           regcache_raw_write_signed (regcache, rawnum, regval);
800         }
801     }
802   else
803     internal_error (__FILE__, __LINE__, _("bad register size"));
804 }
805
806 static int
807 mips_ax_pseudo_register_collect (struct gdbarch *gdbarch,
808                                  struct agent_expr *ax, int reg)
809 {
810   int rawnum = reg % gdbarch_num_regs (gdbarch);
811   gdb_assert (reg >= gdbarch_num_regs (gdbarch)
812               && reg < 2 * gdbarch_num_regs (gdbarch));
813
814   ax_reg_mask (ax, rawnum);
815
816   return 0;
817 }
818
819 static int
820 mips_ax_pseudo_register_push_stack (struct gdbarch *gdbarch,
821                                     struct agent_expr *ax, int reg)
822 {
823   int rawnum = reg % gdbarch_num_regs (gdbarch);
824   gdb_assert (reg >= gdbarch_num_regs (gdbarch)
825               && reg < 2 * gdbarch_num_regs (gdbarch));
826   if (register_size (gdbarch, rawnum) >= register_size (gdbarch, reg))
827     {
828       ax_reg (ax, rawnum);
829
830       if (register_size (gdbarch, rawnum) > register_size (gdbarch, reg))
831         {
832           if (!gdbarch_tdep (gdbarch)->mips64_transfers_32bit_regs_p
833               || gdbarch_byte_order (gdbarch) != BFD_ENDIAN_BIG)
834             {
835               ax_const_l (ax, 32);
836               ax_simple (ax, aop_lsh);
837             }
838           ax_const_l (ax, 32);
839           ax_simple (ax, aop_rsh_signed);
840         }
841     }
842   else
843     internal_error (__FILE__, __LINE__, _("bad register size"));
844
845   return 0;
846 }
847
848 /* Table to translate 3-bit register field to actual register number.  */
849 static const signed char mips_reg3_to_reg[8] = { 16, 17, 2, 3, 4, 5, 6, 7 };
850
851 /* Heuristic_proc_start may hunt through the text section for a long
852    time across a 2400 baud serial line.  Allows the user to limit this
853    search.  */
854
855 static int heuristic_fence_post = 0;
856
857 /* Number of bytes of storage in the actual machine representation for
858    register N.  NOTE: This defines the pseudo register type so need to
859    rebuild the architecture vector.  */
860
861 static int mips64_transfers_32bit_regs_p = 0;
862
863 static void
864 set_mips64_transfers_32bit_regs (const char *args, int from_tty,
865                                  struct cmd_list_element *c)
866 {
867   struct gdbarch_info info;
868   gdbarch_info_init (&info);
869   /* FIXME: cagney/2003-11-15: Should be setting a field in "info"
870      instead of relying on globals.  Doing that would let generic code
871      handle the search for this specific architecture.  */
872   if (!gdbarch_update_p (info))
873     {
874       mips64_transfers_32bit_regs_p = 0;
875       error (_("32-bit compatibility mode not supported"));
876     }
877 }
878
879 /* Convert to/from a register and the corresponding memory value.  */
880
881 /* This predicate tests for the case of an 8 byte floating point
882    value that is being transferred to or from a pair of floating point
883    registers each of which are (or are considered to be) only 4 bytes
884    wide.  */
885 static int
886 mips_convert_register_float_case_p (struct gdbarch *gdbarch, int regnum,
887                                     struct type *type)
888 {
889   return (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
890           && register_size (gdbarch, regnum) == 4
891           && mips_float_register_p (gdbarch, regnum)
892           && TYPE_CODE (type) == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8);
893 }
894
895 /* This predicate tests for the case of a value of less than 8
896    bytes in width that is being transfered to or from an 8 byte
897    general purpose register.  */
898 static int
899 mips_convert_register_gpreg_case_p (struct gdbarch *gdbarch, int regnum,
900                                     struct type *type)
901 {
902   int num_regs = gdbarch_num_regs (gdbarch);
903
904   return (register_size (gdbarch, regnum) == 8
905           && regnum % num_regs > 0 && regnum % num_regs < 32
906           && TYPE_LENGTH (type) < 8);
907 }
908
909 static int
910 mips_convert_register_p (struct gdbarch *gdbarch,
911                          int regnum, struct type *type)
912 {
913   return (mips_convert_register_float_case_p (gdbarch, regnum, type)
914           || mips_convert_register_gpreg_case_p (gdbarch, regnum, type));
915 }
916
917 static int
918 mips_register_to_value (struct frame_info *frame, int regnum,
919                         struct type *type, gdb_byte *to,
920                         int *optimizedp, int *unavailablep)
921 {
922   struct gdbarch *gdbarch = get_frame_arch (frame);
923
924   if (mips_convert_register_float_case_p (gdbarch, regnum, type))
925     {
926       get_frame_register (frame, regnum + 0, to + 4);
927       get_frame_register (frame, regnum + 1, to + 0);
928
929       if (!get_frame_register_bytes (frame, regnum + 0, 0, 4, to + 4,
930                                      optimizedp, unavailablep))
931         return 0;
932
933       if (!get_frame_register_bytes (frame, regnum + 1, 0, 4, to + 0,
934                                      optimizedp, unavailablep))
935         return 0;
936       *optimizedp = *unavailablep = 0;
937       return 1;
938     }
939   else if (mips_convert_register_gpreg_case_p (gdbarch, regnum, type))
940     {
941       int len = TYPE_LENGTH (type);
942       CORE_ADDR offset;
943
944       offset = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 8 - len : 0;
945       if (!get_frame_register_bytes (frame, regnum, offset, len, to,
946                                      optimizedp, unavailablep))
947         return 0;
948
949       *optimizedp = *unavailablep = 0;
950       return 1;
951     }
952   else
953     {
954       internal_error (__FILE__, __LINE__,
955                       _("mips_register_to_value: unrecognized case"));
956     }
957 }
958
959 static void
960 mips_value_to_register (struct frame_info *frame, int regnum,
961                         struct type *type, const gdb_byte *from)
962 {
963   struct gdbarch *gdbarch = get_frame_arch (frame);
964
965   if (mips_convert_register_float_case_p (gdbarch, regnum, type))
966     {
967       put_frame_register (frame, regnum + 0, from + 4);
968       put_frame_register (frame, regnum + 1, from + 0);
969     }
970   else if (mips_convert_register_gpreg_case_p (gdbarch, regnum, type))
971     {
972       gdb_byte fill[8];
973       int len = TYPE_LENGTH (type);
974       
975       /* Sign extend values, irrespective of type, that are stored to 
976          a 64-bit general purpose register.  (32-bit unsigned values
977          are stored as signed quantities within a 64-bit register.
978          When performing an operation, in compiled code, that combines
979          a 32-bit unsigned value with a signed 64-bit value, a type
980          conversion is first performed that zeroes out the high 32 bits.)  */
981       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
982         {
983           if (from[0] & 0x80)
984             store_signed_integer (fill, 8, BFD_ENDIAN_BIG, -1);
985           else
986             store_signed_integer (fill, 8, BFD_ENDIAN_BIG, 0);
987           put_frame_register_bytes (frame, regnum, 0, 8 - len, fill);
988           put_frame_register_bytes (frame, regnum, 8 - len, len, from);
989         }
990       else
991         {
992           if (from[len-1] & 0x80)
993             store_signed_integer (fill, 8, BFD_ENDIAN_LITTLE, -1);
994           else
995             store_signed_integer (fill, 8, BFD_ENDIAN_LITTLE, 0);
996           put_frame_register_bytes (frame, regnum, 0, len, from);
997           put_frame_register_bytes (frame, regnum, len, 8 - len, fill);
998         }
999     }
1000   else
1001     {
1002       internal_error (__FILE__, __LINE__,
1003                       _("mips_value_to_register: unrecognized case"));
1004     }
1005 }
1006
1007 /* Return the GDB type object for the "standard" data type of data in
1008    register REG.  */
1009
1010 static struct type *
1011 mips_register_type (struct gdbarch *gdbarch, int regnum)
1012 {
1013   gdb_assert (regnum >= 0 && regnum < 2 * gdbarch_num_regs (gdbarch));
1014   if (mips_float_register_p (gdbarch, regnum))
1015     {
1016       /* The floating-point registers raw, or cooked, always match
1017          mips_isa_regsize(), and also map 1:1, byte for byte.  */
1018       if (mips_isa_regsize (gdbarch) == 4)
1019         return builtin_type (gdbarch)->builtin_float;
1020       else
1021         return builtin_type (gdbarch)->builtin_double;
1022     }
1023   else if (regnum < gdbarch_num_regs (gdbarch))
1024     {
1025       /* The raw or ISA registers.  These are all sized according to
1026          the ISA regsize.  */
1027       if (mips_isa_regsize (gdbarch) == 4)
1028         return builtin_type (gdbarch)->builtin_int32;
1029       else
1030         return builtin_type (gdbarch)->builtin_int64;
1031     }
1032   else
1033     {
1034       int rawnum = regnum - gdbarch_num_regs (gdbarch);
1035
1036       /* The cooked or ABI registers.  These are sized according to
1037          the ABI (with a few complications).  */
1038       if (rawnum == mips_regnum (gdbarch)->fp_control_status
1039           || rawnum == mips_regnum (gdbarch)->fp_implementation_revision)
1040         return builtin_type (gdbarch)->builtin_int32;
1041       else if (gdbarch_osabi (gdbarch) != GDB_OSABI_LINUX
1042                && rawnum >= MIPS_FIRST_EMBED_REGNUM
1043                && rawnum <= MIPS_LAST_EMBED_REGNUM)
1044         /* The pseudo/cooked view of the embedded registers is always
1045            32-bit.  The raw view is handled below.  */
1046         return builtin_type (gdbarch)->builtin_int32;
1047       else if (gdbarch_tdep (gdbarch)->mips64_transfers_32bit_regs_p)
1048         /* The target, while possibly using a 64-bit register buffer,
1049            is only transfering 32-bits of each integer register.
1050            Reflect this in the cooked/pseudo (ABI) register value.  */
1051         return builtin_type (gdbarch)->builtin_int32;
1052       else if (mips_abi_regsize (gdbarch) == 4)
1053         /* The ABI is restricted to 32-bit registers (the ISA could be
1054            32- or 64-bit).  */
1055         return builtin_type (gdbarch)->builtin_int32;
1056       else
1057         /* 64-bit ABI.  */
1058         return builtin_type (gdbarch)->builtin_int64;
1059     }
1060 }
1061
1062 /* Return the GDB type for the pseudo register REGNUM, which is the
1063    ABI-level view.  This function is only called if there is a target
1064    description which includes registers, so we know precisely the
1065    types of hardware registers.  */
1066
1067 static struct type *
1068 mips_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
1069 {
1070   const int num_regs = gdbarch_num_regs (gdbarch);
1071   int rawnum = regnum % num_regs;
1072   struct type *rawtype;
1073
1074   gdb_assert (regnum >= num_regs && regnum < 2 * num_regs);
1075
1076   /* Absent registers are still absent.  */
1077   rawtype = gdbarch_register_type (gdbarch, rawnum);
1078   if (TYPE_LENGTH (rawtype) == 0)
1079     return rawtype;
1080
1081   /* Present the floating point registers however the hardware did;
1082      do not try to convert between FPU layouts.  */
1083   if (mips_float_register_p (gdbarch, rawnum))
1084     return rawtype;
1085
1086   /* Floating-point control registers are always 32-bit even though for
1087      backwards compatibility reasons 64-bit targets will transfer them
1088      as 64-bit quantities even if using XML descriptions.  */
1089   if (rawnum == mips_regnum (gdbarch)->fp_control_status
1090       || rawnum == mips_regnum (gdbarch)->fp_implementation_revision)
1091     return builtin_type (gdbarch)->builtin_int32;
1092
1093   /* Use pointer types for registers if we can.  For n32 we can not,
1094      since we do not have a 64-bit pointer type.  */
1095   if (mips_abi_regsize (gdbarch)
1096       == TYPE_LENGTH (builtin_type (gdbarch)->builtin_data_ptr))
1097     {
1098       if (rawnum == MIPS_SP_REGNUM
1099           || rawnum == mips_regnum (gdbarch)->badvaddr)
1100         return builtin_type (gdbarch)->builtin_data_ptr;
1101       else if (rawnum == mips_regnum (gdbarch)->pc)
1102         return builtin_type (gdbarch)->builtin_func_ptr;
1103     }
1104
1105   if (mips_abi_regsize (gdbarch) == 4 && TYPE_LENGTH (rawtype) == 8
1106       && ((rawnum >= MIPS_ZERO_REGNUM && rawnum <= MIPS_PS_REGNUM)
1107           || rawnum == mips_regnum (gdbarch)->lo
1108           || rawnum == mips_regnum (gdbarch)->hi
1109           || rawnum == mips_regnum (gdbarch)->badvaddr
1110           || rawnum == mips_regnum (gdbarch)->cause
1111           || rawnum == mips_regnum (gdbarch)->pc
1112           || (mips_regnum (gdbarch)->dspacc != -1
1113               && rawnum >= mips_regnum (gdbarch)->dspacc
1114               && rawnum < mips_regnum (gdbarch)->dspacc + 6)))
1115     return builtin_type (gdbarch)->builtin_int32;
1116
1117   /* The pseudo/cooked view of embedded registers is always
1118      32-bit, even if the target transfers 64-bit values for them.
1119      New targets relying on XML descriptions should only transfer
1120      the necessary 32 bits, but older versions of GDB expected 64,
1121      so allow the target to provide 64 bits without interfering
1122      with the displayed type.  */
1123   if (gdbarch_osabi (gdbarch) != GDB_OSABI_LINUX
1124       && rawnum >= MIPS_FIRST_EMBED_REGNUM
1125       && rawnum <= MIPS_LAST_EMBED_REGNUM)
1126     return builtin_type (gdbarch)->builtin_int32;
1127
1128   /* For all other registers, pass through the hardware type.  */
1129   return rawtype;
1130 }
1131
1132 /* Should the upper word of 64-bit addresses be zeroed?  */
1133 static enum auto_boolean mask_address_var = AUTO_BOOLEAN_AUTO;
1134
1135 static int
1136 mips_mask_address_p (struct gdbarch_tdep *tdep)
1137 {
1138   switch (mask_address_var)
1139     {
1140     case AUTO_BOOLEAN_TRUE:
1141       return 1;
1142     case AUTO_BOOLEAN_FALSE:
1143       return 0;
1144       break;
1145     case AUTO_BOOLEAN_AUTO:
1146       return tdep->default_mask_address_p;
1147     default:
1148       internal_error (__FILE__, __LINE__,
1149                       _("mips_mask_address_p: bad switch"));
1150       return -1;
1151     }
1152 }
1153
1154 static void
1155 show_mask_address (struct ui_file *file, int from_tty,
1156                    struct cmd_list_element *c, const char *value)
1157 {
1158   struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch ());
1159
1160   deprecated_show_value_hack (file, from_tty, c, value);
1161   switch (mask_address_var)
1162     {
1163     case AUTO_BOOLEAN_TRUE:
1164       printf_filtered ("The 32 bit mips address mask is enabled\n");
1165       break;
1166     case AUTO_BOOLEAN_FALSE:
1167       printf_filtered ("The 32 bit mips address mask is disabled\n");
1168       break;
1169     case AUTO_BOOLEAN_AUTO:
1170       printf_filtered
1171         ("The 32 bit address mask is set automatically.  Currently %s\n",
1172          mips_mask_address_p (tdep) ? "enabled" : "disabled");
1173       break;
1174     default:
1175       internal_error (__FILE__, __LINE__, _("show_mask_address: bad switch"));
1176       break;
1177     }
1178 }
1179
1180 /* Tell if the program counter value in MEMADDR is in a standard ISA
1181    function.  */
1182
1183 int
1184 mips_pc_is_mips (CORE_ADDR memaddr)
1185 {
1186   struct bound_minimal_symbol sym;
1187
1188   /* Flags indicating that this is a MIPS16 or microMIPS function is
1189      stored by elfread.c in the high bit of the info field.  Use this
1190      to decide if the function is standard MIPS.  Otherwise if bit 0
1191      of the address is clear, then this is a standard MIPS function.  */
1192   sym = lookup_minimal_symbol_by_pc (make_compact_addr (memaddr));
1193   if (sym.minsym)
1194     return msymbol_is_mips (sym.minsym);
1195   else
1196     return is_mips_addr (memaddr);
1197 }
1198
1199 /* Tell if the program counter value in MEMADDR is in a MIPS16 function.  */
1200
1201 int
1202 mips_pc_is_mips16 (struct gdbarch *gdbarch, CORE_ADDR memaddr)
1203 {
1204   struct bound_minimal_symbol sym;
1205
1206   /* A flag indicating that this is a MIPS16 function is stored by
1207      elfread.c in the high bit of the info field.  Use this to decide
1208      if the function is MIPS16.  Otherwise if bit 0 of the address is
1209      set, then ELF file flags will tell if this is a MIPS16 function.  */
1210   sym = lookup_minimal_symbol_by_pc (make_compact_addr (memaddr));
1211   if (sym.minsym)
1212     return msymbol_is_mips16 (sym.minsym);
1213   else
1214     return is_mips16_addr (gdbarch, memaddr);
1215 }
1216
1217 /* Tell if the program counter value in MEMADDR is in a microMIPS function.  */
1218
1219 int
1220 mips_pc_is_micromips (struct gdbarch *gdbarch, CORE_ADDR memaddr)
1221 {
1222   struct bound_minimal_symbol sym;
1223
1224   /* A flag indicating that this is a microMIPS function is stored by
1225      elfread.c in the high bit of the info field.  Use this to decide
1226      if the function is microMIPS.  Otherwise if bit 0 of the address
1227      is set, then ELF file flags will tell if this is a microMIPS
1228      function.  */
1229   sym = lookup_minimal_symbol_by_pc (make_compact_addr (memaddr));
1230   if (sym.minsym)
1231     return msymbol_is_micromips (sym.minsym);
1232   else
1233     return is_micromips_addr (gdbarch, memaddr);
1234 }
1235
1236 /* Tell the ISA type of the function the program counter value in MEMADDR
1237    is in.  */
1238
1239 static enum mips_isa
1240 mips_pc_isa (struct gdbarch *gdbarch, CORE_ADDR memaddr)
1241 {
1242   struct bound_minimal_symbol sym;
1243
1244   /* A flag indicating that this is a MIPS16 or a microMIPS function
1245      is stored by elfread.c in the high bit of the info field.  Use
1246      this to decide if the function is MIPS16 or microMIPS or normal
1247      MIPS.  Otherwise if bit 0 of the address is set, then ELF file
1248      flags will tell if this is a MIPS16 or a microMIPS function.  */
1249   sym = lookup_minimal_symbol_by_pc (make_compact_addr (memaddr));
1250   if (sym.minsym)
1251     {
1252       if (msymbol_is_micromips (sym.minsym))
1253         return ISA_MICROMIPS;
1254       else if (msymbol_is_mips16 (sym.minsym))
1255         return ISA_MIPS16;
1256       else
1257         return ISA_MIPS;
1258     }
1259   else
1260     {
1261       if (is_mips_addr (memaddr))
1262         return ISA_MIPS;
1263       else if (is_micromips_addr (gdbarch, memaddr))
1264         return ISA_MICROMIPS;
1265       else
1266         return ISA_MIPS16;
1267     }
1268 }
1269
1270 /* Set the ISA bit correctly in the PC, used by DWARF-2 machinery.
1271    The need for comes from the ISA bit having been cleared, making
1272    addresses in FDE, range records, etc. referring to compressed code
1273    different to those in line information, the symbol table and finally
1274    the PC register.  That in turn confuses many operations.  */
1275
1276 static CORE_ADDR
1277 mips_adjust_dwarf2_addr (CORE_ADDR pc)
1278 {
1279   pc = unmake_compact_addr (pc);
1280   return mips_pc_is_mips (pc) ? pc : make_compact_addr (pc);
1281 }
1282
1283 /* Recalculate the line record requested so that the resulting PC has
1284    the ISA bit set correctly, used by DWARF-2 machinery.  The need for
1285    this adjustment comes from some records associated with compressed
1286    code having the ISA bit cleared, most notably at function prologue
1287    ends.  The ISA bit is in this context retrieved from the minimal
1288    symbol covering the address requested, which in turn has been
1289    constructed from the binary's symbol table rather than DWARF-2
1290    information.  The correct setting of the ISA bit is required for
1291    breakpoint addresses to correctly match against the stop PC.
1292
1293    As line entries can specify relative address adjustments we need to
1294    keep track of the absolute value of the last line address recorded
1295    in line information, so that we can calculate the actual address to
1296    apply the ISA bit adjustment to.  We use PC for this tracking and
1297    keep the original address there.
1298
1299    As such relative address adjustments can be odd within compressed
1300    code we need to keep track of the last line address with the ISA
1301    bit adjustment applied too, as the original address may or may not
1302    have had the ISA bit set.  We use ADJ_PC for this tracking and keep
1303    the adjusted address there.
1304
1305    For relative address adjustments we then use these variables to
1306    calculate the address intended by line information, which will be
1307    PC-relative, and return an updated adjustment carrying ISA bit
1308    information, which will be ADJ_PC-relative.  For absolute address
1309    adjustments we just return the same address that we store in ADJ_PC
1310    too.
1311
1312    As the first line entry can be relative to an implied address value
1313    of 0 we need to have the initial address set up that we store in PC
1314    and ADJ_PC.  This is arranged with a call from `dwarf_decode_lines_1'
1315    that sets PC to 0 and ADJ_PC accordingly, usually 0 as well.  */
1316
1317 static CORE_ADDR
1318 mips_adjust_dwarf2_line (CORE_ADDR addr, int rel)
1319 {
1320   static CORE_ADDR adj_pc;
1321   static CORE_ADDR pc;
1322   CORE_ADDR isa_pc;
1323
1324   pc = rel ? pc + addr : addr;
1325   isa_pc = mips_adjust_dwarf2_addr (pc);
1326   addr = rel ? isa_pc - adj_pc : isa_pc;
1327   adj_pc = isa_pc;
1328   return addr;
1329 }
1330
1331 /* Various MIPS16 thunk (aka stub or trampoline) names.  */
1332
1333 static const char mips_str_mips16_call_stub[] = "__mips16_call_stub_";
1334 static const char mips_str_mips16_ret_stub[] = "__mips16_ret_";
1335 static const char mips_str_call_fp_stub[] = "__call_stub_fp_";
1336 static const char mips_str_call_stub[] = "__call_stub_";
1337 static const char mips_str_fn_stub[] = "__fn_stub_";
1338
1339 /* This is used as a PIC thunk prefix.  */
1340
1341 static const char mips_str_pic[] = ".pic.";
1342
1343 /* Return non-zero if the PC is inside a call thunk (aka stub or
1344    trampoline) that should be treated as a temporary frame.  */
1345
1346 static int
1347 mips_in_frame_stub (CORE_ADDR pc)
1348 {
1349   CORE_ADDR start_addr;
1350   const char *name;
1351
1352   /* Find the starting address of the function containing the PC.  */
1353   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
1354     return 0;
1355
1356   /* If the PC is in __mips16_call_stub_*, this is a call/return stub.  */
1357   if (startswith (name, mips_str_mips16_call_stub))
1358     return 1;
1359   /* If the PC is in __call_stub_*, this is a call/return or a call stub.  */
1360   if (startswith (name, mips_str_call_stub))
1361     return 1;
1362   /* If the PC is in __fn_stub_*, this is a call stub.  */
1363   if (startswith (name, mips_str_fn_stub))
1364     return 1;
1365
1366   return 0;                     /* Not a stub.  */
1367 }
1368
1369 /* MIPS believes that the PC has a sign extended value.  Perhaps the
1370    all registers should be sign extended for simplicity?  */
1371
1372 static CORE_ADDR
1373 mips_read_pc (readable_regcache *regcache)
1374 {
1375   int regnum = gdbarch_pc_regnum (regcache->arch ());
1376   LONGEST pc;
1377
1378   regcache->cooked_read (regnum, &pc);
1379   return pc;
1380 }
1381
1382 static CORE_ADDR
1383 mips_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
1384 {
1385   CORE_ADDR pc;
1386
1387   pc = frame_unwind_register_signed (next_frame, gdbarch_pc_regnum (gdbarch));
1388   /* macro/2012-04-20: This hack skips over MIPS16 call thunks as
1389      intermediate frames.  In this case we can get the caller's address
1390      from $ra, or if $ra contains an address within a thunk as well, then
1391      it must be in the return path of __mips16_call_stub_{s,d}{f,c}_{0..10}
1392      and thus the caller's address is in $s2.  */
1393   if (frame_relative_level (next_frame) >= 0 && mips_in_frame_stub (pc))
1394     {
1395       pc = frame_unwind_register_signed
1396              (next_frame, gdbarch_num_regs (gdbarch) + MIPS_RA_REGNUM);
1397       if (mips_in_frame_stub (pc))
1398         pc = frame_unwind_register_signed
1399                (next_frame, gdbarch_num_regs (gdbarch) + MIPS_S2_REGNUM);
1400     }
1401   return pc;
1402 }
1403
1404 static CORE_ADDR
1405 mips_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
1406 {
1407   return frame_unwind_register_signed
1408            (next_frame, gdbarch_num_regs (gdbarch) + MIPS_SP_REGNUM);
1409 }
1410
1411 /* Assuming THIS_FRAME is a dummy, return the frame ID of that
1412    dummy frame.  The frame ID's base needs to match the TOS value
1413    saved by save_dummy_frame_tos(), and the PC match the dummy frame's
1414    breakpoint.  */
1415
1416 static struct frame_id
1417 mips_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1418 {
1419   return frame_id_build
1420            (get_frame_register_signed (this_frame,
1421                                        gdbarch_num_regs (gdbarch)
1422                                        + MIPS_SP_REGNUM),
1423             get_frame_pc (this_frame));
1424 }
1425
1426 /* Implement the "write_pc" gdbarch method.  */
1427
1428 void
1429 mips_write_pc (struct regcache *regcache, CORE_ADDR pc)
1430 {
1431   int regnum = gdbarch_pc_regnum (regcache->arch ());
1432
1433   regcache_cooked_write_unsigned (regcache, regnum, pc);
1434 }
1435
1436 /* Fetch and return instruction from the specified location.  Handle
1437    MIPS16/microMIPS as appropriate.  */
1438
1439 static ULONGEST
1440 mips_fetch_instruction (struct gdbarch *gdbarch,
1441                         enum mips_isa isa, CORE_ADDR addr, int *errp)
1442 {
1443   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1444   gdb_byte buf[MIPS_INSN32_SIZE];
1445   int instlen;
1446   int err;
1447
1448   switch (isa)
1449     {
1450     case ISA_MICROMIPS:
1451     case ISA_MIPS16:
1452       instlen = MIPS_INSN16_SIZE;
1453       addr = unmake_compact_addr (addr);
1454       break;
1455     case ISA_MIPS:
1456       instlen = MIPS_INSN32_SIZE;
1457       break;
1458     default:
1459       internal_error (__FILE__, __LINE__, _("invalid ISA"));
1460       break;
1461     }
1462   err = target_read_memory (addr, buf, instlen);
1463   if (errp != NULL)
1464     *errp = err;
1465   if (err != 0)
1466     {
1467       if (errp == NULL)
1468         memory_error (TARGET_XFER_E_IO, addr);
1469       return 0;
1470     }
1471   return extract_unsigned_integer (buf, instlen, byte_order);
1472 }
1473
1474 /* These are the fields of 32 bit mips instructions.  */
1475 #define mips32_op(x) (x >> 26)
1476 #define itype_op(x) (x >> 26)
1477 #define itype_rs(x) ((x >> 21) & 0x1f)
1478 #define itype_rt(x) ((x >> 16) & 0x1f)
1479 #define itype_immediate(x) (x & 0xffff)
1480
1481 #define jtype_op(x) (x >> 26)
1482 #define jtype_target(x) (x & 0x03ffffff)
1483
1484 #define rtype_op(x) (x >> 26)
1485 #define rtype_rs(x) ((x >> 21) & 0x1f)
1486 #define rtype_rt(x) ((x >> 16) & 0x1f)
1487 #define rtype_rd(x) ((x >> 11) & 0x1f)
1488 #define rtype_shamt(x) ((x >> 6) & 0x1f)
1489 #define rtype_funct(x) (x & 0x3f)
1490
1491 /* MicroMIPS instruction fields.  */
1492 #define micromips_op(x) ((x) >> 10)
1493
1494 /* 16-bit/32-bit-high-part instruction formats, B and S refer to the lowest
1495    bit and the size respectively of the field extracted.  */
1496 #define b0s4_imm(x) ((x) & 0xf)
1497 #define b0s5_imm(x) ((x) & 0x1f)
1498 #define b0s5_reg(x) ((x) & 0x1f)
1499 #define b0s7_imm(x) ((x) & 0x7f)
1500 #define b0s10_imm(x) ((x) & 0x3ff)
1501 #define b1s4_imm(x) (((x) >> 1) & 0xf)
1502 #define b1s9_imm(x) (((x) >> 1) & 0x1ff)
1503 #define b2s3_cc(x) (((x) >> 2) & 0x7)
1504 #define b4s2_regl(x) (((x) >> 4) & 0x3)
1505 #define b5s5_op(x) (((x) >> 5) & 0x1f)
1506 #define b5s5_reg(x) (((x) >> 5) & 0x1f)
1507 #define b6s4_op(x) (((x) >> 6) & 0xf)
1508 #define b7s3_reg(x) (((x) >> 7) & 0x7)
1509
1510 /* 32-bit instruction formats, B and S refer to the lowest bit and the size
1511    respectively of the field extracted.  */
1512 #define b0s6_op(x) ((x) & 0x3f)
1513 #define b0s11_op(x) ((x) & 0x7ff)
1514 #define b0s12_imm(x) ((x) & 0xfff)
1515 #define b0s16_imm(x) ((x) & 0xffff)
1516 #define b0s26_imm(x) ((x) & 0x3ffffff)
1517 #define b6s10_ext(x) (((x) >> 6) & 0x3ff)
1518 #define b11s5_reg(x) (((x) >> 11) & 0x1f)
1519 #define b12s4_op(x) (((x) >> 12) & 0xf)
1520
1521 /* Return the size in bytes of the instruction INSN encoded in the ISA
1522    instruction set.  */
1523
1524 static int
1525 mips_insn_size (enum mips_isa isa, ULONGEST insn)
1526 {
1527   switch (isa)
1528     {
1529     case ISA_MICROMIPS:
1530       if ((micromips_op (insn) & 0x4) == 0x4
1531           || (micromips_op (insn) & 0x7) == 0x0)
1532         return 2 * MIPS_INSN16_SIZE;
1533       else
1534         return MIPS_INSN16_SIZE;
1535     case ISA_MIPS16:
1536       if ((insn & 0xf800) == 0xf000)
1537         return 2 * MIPS_INSN16_SIZE;
1538       else
1539         return MIPS_INSN16_SIZE;
1540     case ISA_MIPS:
1541         return MIPS_INSN32_SIZE;
1542     }
1543   internal_error (__FILE__, __LINE__, _("invalid ISA"));
1544 }
1545
1546 static LONGEST
1547 mips32_relative_offset (ULONGEST inst)
1548 {
1549   return ((itype_immediate (inst) ^ 0x8000) - 0x8000) << 2;
1550 }
1551
1552 /* Determine the address of the next instruction executed after the INST
1553    floating condition branch instruction at PC.  COUNT specifies the
1554    number of the floating condition bits tested by the branch.  */
1555
1556 static CORE_ADDR
1557 mips32_bc1_pc (struct gdbarch *gdbarch, struct regcache *regcache,
1558                ULONGEST inst, CORE_ADDR pc, int count)
1559 {
1560   int fcsr = mips_regnum (gdbarch)->fp_control_status;
1561   int cnum = (itype_rt (inst) >> 2) & (count - 1);
1562   int tf = itype_rt (inst) & 1;
1563   int mask = (1 << count) - 1;
1564   ULONGEST fcs;
1565   int cond;
1566
1567   if (fcsr == -1)
1568     /* No way to handle; it'll most likely trap anyway.  */
1569     return pc;
1570
1571   fcs = regcache_raw_get_unsigned (regcache, fcsr);
1572   cond = ((fcs >> 24) & 0xfe) | ((fcs >> 23) & 0x01);
1573
1574   if (((cond >> cnum) & mask) != mask * !tf)
1575     pc += mips32_relative_offset (inst);
1576   else
1577     pc += 4;
1578
1579   return pc;
1580 }
1581
1582 /* Return nonzero if the gdbarch is an Octeon series.  */
1583
1584 static int
1585 is_octeon (struct gdbarch *gdbarch)
1586 {
1587   const struct bfd_arch_info *info = gdbarch_bfd_arch_info (gdbarch);
1588
1589   return (info->mach == bfd_mach_mips_octeon
1590          || info->mach == bfd_mach_mips_octeonp
1591          || info->mach == bfd_mach_mips_octeon2);
1592 }
1593
1594 /* Return true if the OP represents the Octeon's BBIT instruction.  */
1595
1596 static int
1597 is_octeon_bbit_op (int op, struct gdbarch *gdbarch)
1598 {
1599   if (!is_octeon (gdbarch))
1600     return 0;
1601   /* BBIT0 is encoded as LWC2: 110 010.  */
1602   /* BBIT032 is encoded as LDC2: 110 110.  */
1603   /* BBIT1 is encoded as SWC2: 111 010.  */
1604   /* BBIT132 is encoded as SDC2: 111 110.  */
1605   if (op == 50 || op == 54 || op == 58 || op == 62)
1606     return 1;
1607   return 0;
1608 }
1609
1610
1611 /* Determine where to set a single step breakpoint while considering
1612    branch prediction.  */
1613
1614 static CORE_ADDR
1615 mips32_next_pc (struct regcache *regcache, CORE_ADDR pc)
1616 {
1617   struct gdbarch *gdbarch = regcache->arch ();
1618   unsigned long inst;
1619   int op;
1620   inst = mips_fetch_instruction (gdbarch, ISA_MIPS, pc, NULL);
1621   op = itype_op (inst);
1622   if ((inst & 0xe0000000) != 0)         /* Not a special, jump or branch
1623                                            instruction.  */
1624     {
1625       if (op >> 2 == 5)
1626         /* BEQL, BNEL, BLEZL, BGTZL: bits 0101xx */
1627         {
1628           switch (op & 0x03)
1629             {
1630             case 0:             /* BEQL */
1631               goto equal_branch;
1632             case 1:             /* BNEL */
1633               goto neq_branch;
1634             case 2:             /* BLEZL */
1635               goto less_branch;
1636             case 3:             /* BGTZL */
1637               goto greater_branch;
1638             default:
1639               pc += 4;
1640             }
1641         }
1642       else if (op == 17 && itype_rs (inst) == 8)
1643         /* BC1F, BC1FL, BC1T, BC1TL: 010001 01000 */
1644         pc = mips32_bc1_pc (gdbarch, regcache, inst, pc + 4, 1);
1645       else if (op == 17 && itype_rs (inst) == 9
1646                && (itype_rt (inst) & 2) == 0)
1647         /* BC1ANY2F, BC1ANY2T: 010001 01001 xxx0x */
1648         pc = mips32_bc1_pc (gdbarch, regcache, inst, pc + 4, 2);
1649       else if (op == 17 && itype_rs (inst) == 10
1650                && (itype_rt (inst) & 2) == 0)
1651         /* BC1ANY4F, BC1ANY4T: 010001 01010 xxx0x */
1652         pc = mips32_bc1_pc (gdbarch, regcache, inst, pc + 4, 4);
1653       else if (op == 29)
1654         /* JALX: 011101 */
1655         /* The new PC will be alternate mode.  */
1656         {
1657           unsigned long reg;
1658
1659           reg = jtype_target (inst) << 2;
1660           /* Add 1 to indicate 16-bit mode -- invert ISA mode.  */
1661           pc = ((pc + 4) & ~(CORE_ADDR) 0x0fffffff) + reg + 1;
1662         }
1663       else if (is_octeon_bbit_op (op, gdbarch))
1664         {
1665           int bit, branch_if;
1666
1667           branch_if = op == 58 || op == 62;
1668           bit = itype_rt (inst);
1669
1670           /* Take into account the *32 instructions.  */
1671           if (op == 54 || op == 62)
1672             bit += 32;
1673
1674           if (((regcache_raw_get_signed (regcache,
1675                                          itype_rs (inst)) >> bit) & 1)
1676               == branch_if)
1677             pc += mips32_relative_offset (inst) + 4;
1678           else
1679             pc += 8;        /* After the delay slot.  */
1680         }
1681
1682       else
1683         pc += 4;                /* Not a branch, next instruction is easy.  */
1684     }
1685   else
1686     {                           /* This gets way messy.  */
1687
1688       /* Further subdivide into SPECIAL, REGIMM and other.  */
1689       switch (op & 0x07)        /* Extract bits 28,27,26.  */
1690         {
1691         case 0:         /* SPECIAL */
1692           op = rtype_funct (inst);
1693           switch (op)
1694             {
1695             case 8:             /* JR */
1696             case 9:             /* JALR */
1697               /* Set PC to that address.  */
1698               pc = regcache_raw_get_signed (regcache, rtype_rs (inst));
1699               break;
1700             case 12:            /* SYSCALL */
1701               {
1702                 struct gdbarch_tdep *tdep;
1703
1704                 tdep = gdbarch_tdep (gdbarch);
1705                 if (tdep->syscall_next_pc != NULL)
1706                   pc = tdep->syscall_next_pc (get_current_frame ());
1707                 else
1708                   pc += 4;
1709               }
1710               break;
1711             default:
1712               pc += 4;
1713             }
1714
1715           break;                /* end SPECIAL */
1716         case 1:                 /* REGIMM */
1717           {
1718             op = itype_rt (inst);       /* branch condition */
1719             switch (op)
1720               {
1721               case 0:           /* BLTZ */
1722               case 2:           /* BLTZL */
1723               case 16:          /* BLTZAL */
1724               case 18:          /* BLTZALL */
1725               less_branch:
1726                 if (regcache_raw_get_signed (regcache, itype_rs (inst)) < 0)
1727                   pc += mips32_relative_offset (inst) + 4;
1728                 else
1729                   pc += 8;      /* after the delay slot */
1730                 break;
1731               case 1:           /* BGEZ */
1732               case 3:           /* BGEZL */
1733               case 17:          /* BGEZAL */
1734               case 19:          /* BGEZALL */
1735                 if (regcache_raw_get_signed (regcache, itype_rs (inst)) >= 0)
1736                   pc += mips32_relative_offset (inst) + 4;
1737                 else
1738                   pc += 8;      /* after the delay slot */
1739                 break;
1740               case 0x1c:        /* BPOSGE32 */
1741               case 0x1e:        /* BPOSGE64 */
1742                 pc += 4;
1743                 if (itype_rs (inst) == 0)
1744                   {
1745                     unsigned int pos = (op & 2) ? 64 : 32;
1746                     int dspctl = mips_regnum (gdbarch)->dspctl;
1747
1748                     if (dspctl == -1)
1749                       /* No way to handle; it'll most likely trap anyway.  */
1750                       break;
1751
1752                     if ((regcache_raw_get_unsigned (regcache,
1753                                                     dspctl) & 0x7f) >= pos)
1754                       pc += mips32_relative_offset (inst);
1755                     else
1756                       pc += 4;
1757                   }
1758                 break;
1759                 /* All of the other instructions in the REGIMM category */
1760               default:
1761                 pc += 4;
1762               }
1763           }
1764           break;                /* end REGIMM */
1765         case 2:         /* J */
1766         case 3:         /* JAL */
1767           {
1768             unsigned long reg;
1769             reg = jtype_target (inst) << 2;
1770             /* Upper four bits get never changed...  */
1771             pc = reg + ((pc + 4) & ~(CORE_ADDR) 0x0fffffff);
1772           }
1773           break;
1774         case 4:         /* BEQ, BEQL */
1775         equal_branch:
1776           if (regcache_raw_get_signed (regcache, itype_rs (inst)) ==
1777               regcache_raw_get_signed (regcache, itype_rt (inst)))
1778             pc += mips32_relative_offset (inst) + 4;
1779           else
1780             pc += 8;
1781           break;
1782         case 5:         /* BNE, BNEL */
1783         neq_branch:
1784           if (regcache_raw_get_signed (regcache, itype_rs (inst)) !=
1785               regcache_raw_get_signed (regcache, itype_rt (inst)))
1786             pc += mips32_relative_offset (inst) + 4;
1787           else
1788             pc += 8;
1789           break;
1790         case 6:         /* BLEZ, BLEZL */
1791           if (regcache_raw_get_signed (regcache, itype_rs (inst)) <= 0)
1792             pc += mips32_relative_offset (inst) + 4;
1793           else
1794             pc += 8;
1795           break;
1796         case 7:
1797         default:
1798         greater_branch: /* BGTZ, BGTZL */
1799           if (regcache_raw_get_signed (regcache, itype_rs (inst)) > 0)
1800             pc += mips32_relative_offset (inst) + 4;
1801           else
1802             pc += 8;
1803           break;
1804         }                       /* switch */
1805     }                           /* else */
1806   return pc;
1807 }                               /* mips32_next_pc */
1808
1809 /* Extract the 7-bit signed immediate offset from the microMIPS instruction
1810    INSN.  */
1811
1812 static LONGEST
1813 micromips_relative_offset7 (ULONGEST insn)
1814 {
1815   return ((b0s7_imm (insn) ^ 0x40) - 0x40) << 1;
1816 }
1817
1818 /* Extract the 10-bit signed immediate offset from the microMIPS instruction
1819    INSN.  */
1820
1821 static LONGEST
1822 micromips_relative_offset10 (ULONGEST insn)
1823 {
1824   return ((b0s10_imm (insn) ^ 0x200) - 0x200) << 1;
1825 }
1826
1827 /* Extract the 16-bit signed immediate offset from the microMIPS instruction
1828    INSN.  */
1829
1830 static LONGEST
1831 micromips_relative_offset16 (ULONGEST insn)
1832 {
1833   return ((b0s16_imm (insn) ^ 0x8000) - 0x8000) << 1;
1834 }
1835
1836 /* Return the size in bytes of the microMIPS instruction at the address PC.  */
1837
1838 static int
1839 micromips_pc_insn_size (struct gdbarch *gdbarch, CORE_ADDR pc)
1840 {
1841   ULONGEST insn;
1842
1843   insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, pc, NULL);
1844   return mips_insn_size (ISA_MICROMIPS, insn);
1845 }
1846
1847 /* Calculate the address of the next microMIPS instruction to execute
1848    after the INSN coprocessor 1 conditional branch instruction at the
1849    address PC.  COUNT denotes the number of coprocessor condition bits
1850    examined by the branch.  */
1851
1852 static CORE_ADDR
1853 micromips_bc1_pc (struct gdbarch *gdbarch, struct regcache *regcache,
1854                   ULONGEST insn, CORE_ADDR pc, int count)
1855 {
1856   int fcsr = mips_regnum (gdbarch)->fp_control_status;
1857   int cnum = b2s3_cc (insn >> 16) & (count - 1);
1858   int tf = b5s5_op (insn >> 16) & 1;
1859   int mask = (1 << count) - 1;
1860   ULONGEST fcs;
1861   int cond;
1862
1863   if (fcsr == -1)
1864     /* No way to handle; it'll most likely trap anyway.  */
1865     return pc;
1866
1867   fcs = regcache_raw_get_unsigned (regcache, fcsr);
1868   cond = ((fcs >> 24) & 0xfe) | ((fcs >> 23) & 0x01);
1869
1870   if (((cond >> cnum) & mask) != mask * !tf)
1871     pc += micromips_relative_offset16 (insn);
1872   else
1873     pc += micromips_pc_insn_size (gdbarch, pc);
1874
1875   return pc;
1876 }
1877
1878 /* Calculate the address of the next microMIPS instruction to execute
1879    after the instruction at the address PC.  */
1880
1881 static CORE_ADDR
1882 micromips_next_pc (struct regcache *regcache, CORE_ADDR pc)
1883 {
1884   struct gdbarch *gdbarch = regcache->arch ();
1885   ULONGEST insn;
1886
1887   insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, pc, NULL);
1888   pc += MIPS_INSN16_SIZE;
1889   switch (mips_insn_size (ISA_MICROMIPS, insn))
1890     {
1891     /* 32-bit instructions.  */
1892     case 2 * MIPS_INSN16_SIZE:
1893       insn <<= 16;
1894       insn |= mips_fetch_instruction (gdbarch, ISA_MICROMIPS, pc, NULL);
1895       pc += MIPS_INSN16_SIZE;
1896       switch (micromips_op (insn >> 16))
1897         {
1898         case 0x00: /* POOL32A: bits 000000 */
1899           switch (b0s6_op (insn))
1900             {
1901             case 0x3c: /* POOL32Axf: bits 000000 ... 111100 */
1902               switch (b6s10_ext (insn))
1903                 {
1904                 case 0x3c:  /* JALR:     000000 0000111100 111100 */
1905                 case 0x7c:  /* JALR.HB:  000000 0001111100 111100 */
1906                 case 0x13c: /* JALRS:    000000 0100111100 111100 */
1907                 case 0x17c: /* JALRS.HB: 000000 0101111100 111100 */
1908                   pc = regcache_raw_get_signed (regcache,
1909                                                 b0s5_reg (insn >> 16));
1910                   break;
1911                 case 0x22d: /* SYSCALL:  000000 1000101101 111100 */
1912                   {
1913                     struct gdbarch_tdep *tdep;
1914
1915                     tdep = gdbarch_tdep (gdbarch);
1916                     if (tdep->syscall_next_pc != NULL)
1917                       pc = tdep->syscall_next_pc (get_current_frame ());
1918                   }
1919                   break;
1920                 }
1921               break;
1922             }
1923           break;
1924
1925         case 0x10: /* POOL32I: bits 010000 */
1926           switch (b5s5_op (insn >> 16))
1927             {
1928             case 0x00: /* BLTZ: bits 010000 00000 */
1929             case 0x01: /* BLTZAL: bits 010000 00001 */
1930             case 0x11: /* BLTZALS: bits 010000 10001 */
1931               if (regcache_raw_get_signed (regcache,
1932                                            b0s5_reg (insn >> 16)) < 0)
1933                 pc += micromips_relative_offset16 (insn);
1934               else
1935                 pc += micromips_pc_insn_size (gdbarch, pc);
1936               break;
1937
1938             case 0x02: /* BGEZ: bits 010000 00010 */
1939             case 0x03: /* BGEZAL: bits 010000 00011 */
1940             case 0x13: /* BGEZALS: bits 010000 10011 */
1941               if (regcache_raw_get_signed (regcache,
1942                                            b0s5_reg (insn >> 16)) >= 0)
1943                 pc += micromips_relative_offset16 (insn);
1944               else
1945                 pc += micromips_pc_insn_size (gdbarch, pc);
1946               break;
1947
1948             case 0x04: /* BLEZ: bits 010000 00100 */
1949               if (regcache_raw_get_signed (regcache,
1950                                            b0s5_reg (insn >> 16)) <= 0)
1951                 pc += micromips_relative_offset16 (insn);
1952               else
1953                 pc += micromips_pc_insn_size (gdbarch, pc);
1954               break;
1955
1956             case 0x05: /* BNEZC: bits 010000 00101 */
1957               if (regcache_raw_get_signed (regcache,
1958                                            b0s5_reg (insn >> 16)) != 0)
1959                 pc += micromips_relative_offset16 (insn);
1960               break;
1961
1962             case 0x06: /* BGTZ: bits 010000 00110 */
1963               if (regcache_raw_get_signed (regcache,
1964                                            b0s5_reg (insn >> 16)) > 0)
1965                 pc += micromips_relative_offset16 (insn);
1966               else
1967                 pc += micromips_pc_insn_size (gdbarch, pc);
1968               break;
1969
1970             case 0x07: /* BEQZC: bits 010000 00111 */
1971               if (regcache_raw_get_signed (regcache,
1972                                            b0s5_reg (insn >> 16)) == 0)
1973                 pc += micromips_relative_offset16 (insn);
1974               break;
1975
1976             case 0x14: /* BC2F: bits 010000 10100 xxx00 */
1977             case 0x15: /* BC2T: bits 010000 10101 xxx00 */
1978               if (((insn >> 16) & 0x3) == 0x0)
1979                 /* BC2F, BC2T: don't know how to handle these.  */
1980                 break;
1981               break;
1982
1983             case 0x1a: /* BPOSGE64: bits 010000 11010 */
1984             case 0x1b: /* BPOSGE32: bits 010000 11011 */
1985               {
1986                 unsigned int pos = (b5s5_op (insn >> 16) & 1) ? 32 : 64;
1987                 int dspctl = mips_regnum (gdbarch)->dspctl;
1988
1989                 if (dspctl == -1)
1990                   /* No way to handle; it'll most likely trap anyway.  */
1991                   break;
1992
1993                 if ((regcache_raw_get_unsigned (regcache,
1994                                                 dspctl) & 0x7f) >= pos)
1995                   pc += micromips_relative_offset16 (insn);
1996                 else
1997                   pc += micromips_pc_insn_size (gdbarch, pc);
1998               }
1999               break;
2000
2001             case 0x1c: /* BC1F: bits 010000 11100 xxx00 */
2002                        /* BC1ANY2F: bits 010000 11100 xxx01 */
2003             case 0x1d: /* BC1T: bits 010000 11101 xxx00 */
2004                        /* BC1ANY2T: bits 010000 11101 xxx01 */
2005               if (((insn >> 16) & 0x2) == 0x0)
2006                 pc = micromips_bc1_pc (gdbarch, regcache, insn, pc,
2007                                        ((insn >> 16) & 0x1) + 1);
2008               break;
2009
2010             case 0x1e: /* BC1ANY4F: bits 010000 11110 xxx01 */
2011             case 0x1f: /* BC1ANY4T: bits 010000 11111 xxx01 */
2012               if (((insn >> 16) & 0x3) == 0x1)
2013                 pc = micromips_bc1_pc (gdbarch, regcache, insn, pc, 4);
2014               break;
2015             }
2016           break;
2017
2018         case 0x1d: /* JALS: bits 011101 */
2019         case 0x35: /* J: bits 110101 */
2020         case 0x3d: /* JAL: bits 111101 */
2021             pc = ((pc | 0x7fffffe) ^ 0x7fffffe) | (b0s26_imm (insn) << 1);
2022           break;
2023
2024         case 0x25: /* BEQ: bits 100101 */
2025             if (regcache_raw_get_signed (regcache, b0s5_reg (insn >> 16))
2026                 == regcache_raw_get_signed (regcache, b5s5_reg (insn >> 16)))
2027               pc += micromips_relative_offset16 (insn);
2028             else
2029               pc += micromips_pc_insn_size (gdbarch, pc);
2030           break;
2031
2032         case 0x2d: /* BNE: bits 101101 */
2033           if (regcache_raw_get_signed (regcache, b0s5_reg (insn >> 16))
2034                 != regcache_raw_get_signed (regcache, b5s5_reg (insn >> 16)))
2035               pc += micromips_relative_offset16 (insn);
2036             else
2037               pc += micromips_pc_insn_size (gdbarch, pc);
2038           break;
2039
2040         case 0x3c: /* JALX: bits 111100 */
2041             pc = ((pc | 0xfffffff) ^ 0xfffffff) | (b0s26_imm (insn) << 2);
2042           break;
2043         }
2044       break;
2045
2046     /* 16-bit instructions.  */
2047     case MIPS_INSN16_SIZE:
2048       switch (micromips_op (insn))
2049         {
2050         case 0x11: /* POOL16C: bits 010001 */
2051           if ((b5s5_op (insn) & 0x1c) == 0xc)
2052             /* JR16, JRC, JALR16, JALRS16: 010001 011xx */
2053             pc = regcache_raw_get_signed (regcache, b0s5_reg (insn));
2054           else if (b5s5_op (insn) == 0x18)
2055             /* JRADDIUSP: bits 010001 11000 */
2056             pc = regcache_raw_get_signed (regcache, MIPS_RA_REGNUM);
2057           break;
2058
2059         case 0x23: /* BEQZ16: bits 100011 */
2060           {
2061             int rs = mips_reg3_to_reg[b7s3_reg (insn)];
2062
2063             if (regcache_raw_get_signed (regcache, rs) == 0)
2064               pc += micromips_relative_offset7 (insn);
2065             else
2066               pc += micromips_pc_insn_size (gdbarch, pc);
2067           }
2068           break;
2069
2070         case 0x2b: /* BNEZ16: bits 101011 */
2071           {
2072             int rs = mips_reg3_to_reg[b7s3_reg (insn)];
2073
2074             if (regcache_raw_get_signed (regcache, rs) != 0)
2075               pc += micromips_relative_offset7 (insn);
2076             else
2077               pc += micromips_pc_insn_size (gdbarch, pc);
2078           }
2079           break;
2080
2081         case 0x33: /* B16: bits 110011 */
2082           pc += micromips_relative_offset10 (insn);
2083           break;
2084         }
2085       break;
2086     }
2087
2088   return pc;
2089 }
2090
2091 /* Decoding the next place to set a breakpoint is irregular for the
2092    mips 16 variant, but fortunately, there fewer instructions.  We have
2093    to cope ith extensions for 16 bit instructions and a pair of actual
2094    32 bit instructions.  We dont want to set a single step instruction
2095    on the extend instruction either.  */
2096
2097 /* Lots of mips16 instruction formats */
2098 /* Predicting jumps requires itype,ritype,i8type
2099    and their extensions      extItype,extritype,extI8type.  */
2100 enum mips16_inst_fmts
2101 {
2102   itype,                        /* 0  immediate 5,10 */
2103   ritype,                       /* 1   5,3,8 */
2104   rrtype,                       /* 2   5,3,3,5 */
2105   rritype,                      /* 3   5,3,3,5 */
2106   rrrtype,                      /* 4   5,3,3,3,2 */
2107   rriatype,                     /* 5   5,3,3,1,4 */
2108   shifttype,                    /* 6   5,3,3,3,2 */
2109   i8type,                       /* 7   5,3,8 */
2110   i8movtype,                    /* 8   5,3,3,5 */
2111   i8mov32rtype,                 /* 9   5,3,5,3 */
2112   i64type,                      /* 10  5,3,8 */
2113   ri64type,                     /* 11  5,3,3,5 */
2114   jalxtype,                     /* 12  5,1,5,5,16 - a 32 bit instruction */
2115   exiItype,                     /* 13  5,6,5,5,1,1,1,1,1,1,5 */
2116   extRitype,                    /* 14  5,6,5,5,3,1,1,1,5 */
2117   extRRItype,                   /* 15  5,5,5,5,3,3,5 */
2118   extRRIAtype,                  /* 16  5,7,4,5,3,3,1,4 */
2119   EXTshifttype,                 /* 17  5,5,1,1,1,1,1,1,5,3,3,1,1,1,2 */
2120   extI8type,                    /* 18  5,6,5,5,3,1,1,1,5 */
2121   extI64type,                   /* 19  5,6,5,5,3,1,1,1,5 */
2122   extRi64type,                  /* 20  5,6,5,5,3,3,5 */
2123   extshift64type                /* 21  5,5,1,1,1,1,1,1,5,1,1,1,3,5 */
2124 };
2125 /* I am heaping all the fields of the formats into one structure and
2126    then, only the fields which are involved in instruction extension.  */
2127 struct upk_mips16
2128 {
2129   CORE_ADDR offset;
2130   unsigned int regx;            /* Function in i8 type.  */
2131   unsigned int regy;
2132 };
2133
2134
2135 /* The EXT-I, EXT-ri nad EXT-I8 instructions all have the same format
2136    for the bits which make up the immediate extension.  */
2137
2138 static CORE_ADDR
2139 extended_offset (unsigned int extension)
2140 {
2141   CORE_ADDR value;
2142
2143   value = (extension >> 16) & 0x1f;     /* Extract 15:11.  */
2144   value = value << 6;
2145   value |= (extension >> 21) & 0x3f;    /* Extract 10:5.  */
2146   value = value << 5;
2147   value |= extension & 0x1f;            /* Extract 4:0.  */
2148
2149   return value;
2150 }
2151
2152 /* Only call this function if you know that this is an extendable
2153    instruction.  It won't malfunction, but why make excess remote memory
2154    references?  If the immediate operands get sign extended or something,
2155    do it after the extension is performed.  */
2156 /* FIXME: Every one of these cases needs to worry about sign extension
2157    when the offset is to be used in relative addressing.  */
2158
2159 static unsigned int
2160 fetch_mips_16 (struct gdbarch *gdbarch, CORE_ADDR pc)
2161 {
2162   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2163   gdb_byte buf[8];
2164
2165   pc = unmake_compact_addr (pc);        /* Clear the low order bit.  */
2166   target_read_memory (pc, buf, 2);
2167   return extract_unsigned_integer (buf, 2, byte_order);
2168 }
2169
2170 static void
2171 unpack_mips16 (struct gdbarch *gdbarch, CORE_ADDR pc,
2172                unsigned int extension,
2173                unsigned int inst,
2174                enum mips16_inst_fmts insn_format, struct upk_mips16 *upk)
2175 {
2176   CORE_ADDR offset;
2177   int regx;
2178   int regy;
2179   switch (insn_format)
2180     {
2181     case itype:
2182       {
2183         CORE_ADDR value;
2184         if (extension)
2185           {
2186             value = extended_offset ((extension << 16) | inst);
2187             value = (value ^ 0x8000) - 0x8000;          /* Sign-extend.  */
2188           }
2189         else
2190           {
2191             value = inst & 0x7ff;
2192             value = (value ^ 0x400) - 0x400;            /* Sign-extend.  */
2193           }
2194         offset = value;
2195         regx = -1;
2196         regy = -1;
2197       }
2198       break;
2199     case ritype:
2200     case i8type:
2201       {                         /* A register identifier and an offset.  */
2202         /* Most of the fields are the same as I type but the
2203            immediate value is of a different length.  */
2204         CORE_ADDR value;
2205         if (extension)
2206           {
2207             value = extended_offset ((extension << 16) | inst);
2208             value = (value ^ 0x8000) - 0x8000;          /* Sign-extend.  */
2209           }
2210         else
2211           {
2212             value = inst & 0xff;                        /* 8 bits */
2213             value = (value ^ 0x80) - 0x80;              /* Sign-extend.  */
2214           }
2215         offset = value;
2216         regx = (inst >> 8) & 0x07;                      /* i8 funct */
2217         regy = -1;
2218         break;
2219       }
2220     case jalxtype:
2221       {
2222         unsigned long value;
2223         unsigned int nexthalf;
2224         value = ((inst & 0x1f) << 5) | ((inst >> 5) & 0x1f);
2225         value = value << 16;
2226         nexthalf = mips_fetch_instruction (gdbarch, ISA_MIPS16, pc + 2, NULL);
2227                                                 /* Low bit still set.  */
2228         value |= nexthalf;
2229         offset = value;
2230         regx = -1;
2231         regy = -1;
2232         break;
2233       }
2234     default:
2235       internal_error (__FILE__, __LINE__, _("bad switch"));
2236     }
2237   upk->offset = offset;
2238   upk->regx = regx;
2239   upk->regy = regy;
2240 }
2241
2242
2243 /* Calculate the destination of a branch whose 16-bit opcode word is at PC,
2244    and having a signed 16-bit OFFSET.  */
2245
2246 static CORE_ADDR
2247 add_offset_16 (CORE_ADDR pc, int offset)
2248 {
2249   return pc + (offset << 1) + 2;
2250 }
2251
2252 static CORE_ADDR
2253 extended_mips16_next_pc (regcache *regcache, CORE_ADDR pc,
2254                          unsigned int extension, unsigned int insn)
2255 {
2256   struct gdbarch *gdbarch = regcache->arch ();
2257   int op = (insn >> 11);
2258   switch (op)
2259     {
2260     case 2:                     /* Branch */
2261       {
2262         struct upk_mips16 upk;
2263         unpack_mips16 (gdbarch, pc, extension, insn, itype, &upk);
2264         pc = add_offset_16 (pc, upk.offset);
2265         break;
2266       }
2267     case 3:                     /* JAL , JALX - Watch out, these are 32 bit
2268                                    instructions.  */
2269       {
2270         struct upk_mips16 upk;
2271         unpack_mips16 (gdbarch, pc, extension, insn, jalxtype, &upk);
2272         pc = ((pc + 2) & (~(CORE_ADDR) 0x0fffffff)) | (upk.offset << 2);
2273         if ((insn >> 10) & 0x01)        /* Exchange mode */
2274           pc = pc & ~0x01;      /* Clear low bit, indicate 32 bit mode.  */
2275         else
2276           pc |= 0x01;
2277         break;
2278       }
2279     case 4:                     /* beqz */
2280       {
2281         struct upk_mips16 upk;
2282         int reg;
2283         unpack_mips16 (gdbarch, pc, extension, insn, ritype, &upk);
2284         reg = regcache_raw_get_signed (regcache, mips_reg3_to_reg[upk.regx]);
2285         if (reg == 0)
2286           pc = add_offset_16 (pc, upk.offset);
2287         else
2288           pc += 2;
2289         break;
2290       }
2291     case 5:                     /* bnez */
2292       {
2293         struct upk_mips16 upk;
2294         int reg;
2295         unpack_mips16 (gdbarch, pc, extension, insn, ritype, &upk);
2296         reg = regcache_raw_get_signed (regcache, mips_reg3_to_reg[upk.regx]);
2297         if (reg != 0)
2298           pc = add_offset_16 (pc, upk.offset);
2299         else
2300           pc += 2;
2301         break;
2302       }
2303     case 12:                    /* I8 Formats btez btnez */
2304       {
2305         struct upk_mips16 upk;
2306         int reg;
2307         unpack_mips16 (gdbarch, pc, extension, insn, i8type, &upk);
2308         /* upk.regx contains the opcode */
2309         /* Test register is 24 */
2310         reg = regcache_raw_get_signed (regcache, 24);
2311         if (((upk.regx == 0) && (reg == 0))     /* BTEZ */
2312             || ((upk.regx == 1) && (reg != 0))) /* BTNEZ */
2313           pc = add_offset_16 (pc, upk.offset);
2314         else
2315           pc += 2;
2316         break;
2317       }
2318     case 29:                    /* RR Formats JR, JALR, JALR-RA */
2319       {
2320         struct upk_mips16 upk;
2321         /* upk.fmt = rrtype; */
2322         op = insn & 0x1f;
2323         if (op == 0)
2324           {
2325             int reg;
2326             upk.regx = (insn >> 8) & 0x07;
2327             upk.regy = (insn >> 5) & 0x07;
2328             if ((upk.regy & 1) == 0)
2329               reg = mips_reg3_to_reg[upk.regx];
2330             else
2331               reg = 31;         /* Function return instruction.  */
2332             pc = regcache_raw_get_signed (regcache, reg);
2333           }
2334         else
2335           pc += 2;
2336         break;
2337       }
2338     case 30:
2339       /* This is an instruction extension.  Fetch the real instruction
2340          (which follows the extension) and decode things based on
2341          that.  */
2342       {
2343         pc += 2;
2344         pc = extended_mips16_next_pc (regcache, pc, insn,
2345                                       fetch_mips_16 (gdbarch, pc));
2346         break;
2347       }
2348     default:
2349       {
2350         pc += 2;
2351         break;
2352       }
2353     }
2354   return pc;
2355 }
2356
2357 static CORE_ADDR
2358 mips16_next_pc (struct regcache *regcache, CORE_ADDR pc)
2359 {
2360   struct gdbarch *gdbarch = regcache->arch ();
2361   unsigned int insn = fetch_mips_16 (gdbarch, pc);
2362   return extended_mips16_next_pc (regcache, pc, 0, insn);
2363 }
2364
2365 /* The mips_next_pc function supports single_step when the remote
2366    target monitor or stub is not developed enough to do a single_step.
2367    It works by decoding the current instruction and predicting where a
2368    branch will go.  This isn't hard because all the data is available.
2369    The MIPS32, MIPS16 and microMIPS variants are quite different.  */
2370 static CORE_ADDR
2371 mips_next_pc (struct regcache *regcache, CORE_ADDR pc)
2372 {
2373   struct gdbarch *gdbarch = regcache->arch ();
2374
2375   if (mips_pc_is_mips16 (gdbarch, pc))
2376     return mips16_next_pc (regcache, pc);
2377   else if (mips_pc_is_micromips (gdbarch, pc))
2378     return micromips_next_pc (regcache, pc);
2379   else
2380     return mips32_next_pc (regcache, pc);
2381 }
2382
2383 /* Return non-zero if the MIPS16 instruction INSN is a compact branch
2384    or jump.  */
2385
2386 static int
2387 mips16_instruction_is_compact_branch (unsigned short insn)
2388 {
2389   switch (insn & 0xf800)
2390     {
2391     case 0xe800:
2392       return (insn & 0x009f) == 0x80;   /* JALRC/JRC */
2393     case 0x6000:
2394       return (insn & 0x0600) == 0;      /* BTNEZ/BTEQZ */
2395     case 0x2800:                        /* BNEZ */
2396     case 0x2000:                        /* BEQZ */
2397     case 0x1000:                        /* B */
2398       return 1;
2399     default:
2400       return 0;
2401     }
2402 }
2403
2404 /* Return non-zero if the microMIPS instruction INSN is a compact branch
2405    or jump.  */
2406
2407 static int
2408 micromips_instruction_is_compact_branch (unsigned short insn)
2409 {
2410   switch (micromips_op (insn))
2411     {
2412     case 0x11:                  /* POOL16C: bits 010001 */
2413       return (b5s5_op (insn) == 0x18
2414                                 /* JRADDIUSP: bits 010001 11000 */
2415               || b5s5_op (insn) == 0xd);
2416                                 /* JRC: bits 010011 01101 */
2417     case 0x10:                  /* POOL32I: bits 010000 */
2418       return (b5s5_op (insn) & 0x1d) == 0x5;
2419                                 /* BEQZC/BNEZC: bits 010000 001x1 */
2420     default:
2421       return 0;
2422     }
2423 }
2424
2425 struct mips_frame_cache
2426 {
2427   CORE_ADDR base;
2428   struct trad_frame_saved_reg *saved_regs;
2429 };
2430
2431 /* Set a register's saved stack address in temp_saved_regs.  If an
2432    address has already been set for this register, do nothing; this
2433    way we will only recognize the first save of a given register in a
2434    function prologue.
2435
2436    For simplicity, save the address in both [0 .. gdbarch_num_regs) and
2437    [gdbarch_num_regs .. 2*gdbarch_num_regs).
2438    Strictly speaking, only the second range is used as it is only second
2439    range (the ABI instead of ISA registers) that comes into play when finding
2440    saved registers in a frame.  */
2441
2442 static void
2443 set_reg_offset (struct gdbarch *gdbarch, struct mips_frame_cache *this_cache,
2444                 int regnum, CORE_ADDR offset)
2445 {
2446   if (this_cache != NULL
2447       && this_cache->saved_regs[regnum].addr == -1)
2448     {
2449       this_cache->saved_regs[regnum + 0 * gdbarch_num_regs (gdbarch)].addr
2450         = offset;
2451       this_cache->saved_regs[regnum + 1 * gdbarch_num_regs (gdbarch)].addr
2452         = offset;
2453     }
2454 }
2455
2456
2457 /* Fetch the immediate value from a MIPS16 instruction.
2458    If the previous instruction was an EXTEND, use it to extend
2459    the upper bits of the immediate value.  This is a helper function
2460    for mips16_scan_prologue.  */
2461
2462 static int
2463 mips16_get_imm (unsigned short prev_inst,       /* previous instruction */
2464                 unsigned short inst,    /* current instruction */
2465                 int nbits,      /* number of bits in imm field */
2466                 int scale,      /* scale factor to be applied to imm */
2467                 int is_signed)  /* is the imm field signed?  */
2468 {
2469   int offset;
2470
2471   if ((prev_inst & 0xf800) == 0xf000)   /* prev instruction was EXTEND? */
2472     {
2473       offset = ((prev_inst & 0x1f) << 11) | (prev_inst & 0x7e0);
2474       if (offset & 0x8000)      /* check for negative extend */
2475         offset = 0 - (0x10000 - (offset & 0xffff));
2476       return offset | (inst & 0x1f);
2477     }
2478   else
2479     {
2480       int max_imm = 1 << nbits;
2481       int mask = max_imm - 1;
2482       int sign_bit = max_imm >> 1;
2483
2484       offset = inst & mask;
2485       if (is_signed && (offset & sign_bit))
2486         offset = 0 - (max_imm - offset);
2487       return offset * scale;
2488     }
2489 }
2490
2491
2492 /* Analyze the function prologue from START_PC to LIMIT_PC. Builds
2493    the associated FRAME_CACHE if not null.
2494    Return the address of the first instruction past the prologue.  */
2495
2496 static CORE_ADDR
2497 mips16_scan_prologue (struct gdbarch *gdbarch,
2498                       CORE_ADDR start_pc, CORE_ADDR limit_pc,
2499                       struct frame_info *this_frame,
2500                       struct mips_frame_cache *this_cache)
2501 {
2502   int prev_non_prologue_insn = 0;
2503   int this_non_prologue_insn;
2504   int non_prologue_insns = 0;
2505   CORE_ADDR prev_pc;
2506   CORE_ADDR cur_pc;
2507   CORE_ADDR frame_addr = 0;     /* Value of $r17, used as frame pointer.  */
2508   CORE_ADDR sp;
2509   long frame_offset = 0;        /* Size of stack frame.  */
2510   long frame_adjust = 0;        /* Offset of FP from SP.  */
2511   int frame_reg = MIPS_SP_REGNUM;
2512   unsigned short prev_inst = 0; /* saved copy of previous instruction.  */
2513   unsigned inst = 0;            /* current instruction */
2514   unsigned entry_inst = 0;      /* the entry instruction */
2515   unsigned save_inst = 0;       /* the save instruction */
2516   int prev_delay_slot = 0;
2517   int in_delay_slot;
2518   int reg, offset;
2519
2520   int extend_bytes = 0;
2521   int prev_extend_bytes = 0;
2522   CORE_ADDR end_prologue_addr;
2523
2524   /* Can be called when there's no process, and hence when there's no
2525      THIS_FRAME.  */
2526   if (this_frame != NULL)
2527     sp = get_frame_register_signed (this_frame,
2528                                     gdbarch_num_regs (gdbarch)
2529                                     + MIPS_SP_REGNUM);
2530   else
2531     sp = 0;
2532
2533   if (limit_pc > start_pc + 200)
2534     limit_pc = start_pc + 200;
2535   prev_pc = start_pc;
2536
2537   /* Permit at most one non-prologue non-control-transfer instruction
2538      in the middle which may have been reordered by the compiler for
2539      optimisation.  */
2540   for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS_INSN16_SIZE)
2541     {
2542       this_non_prologue_insn = 0;
2543       in_delay_slot = 0;
2544
2545       /* Save the previous instruction.  If it's an EXTEND, we'll extract
2546          the immediate offset extension from it in mips16_get_imm.  */
2547       prev_inst = inst;
2548
2549       /* Fetch and decode the instruction.  */
2550       inst = (unsigned short) mips_fetch_instruction (gdbarch, ISA_MIPS16,
2551                                                       cur_pc, NULL);
2552
2553       /* Normally we ignore extend instructions.  However, if it is
2554          not followed by a valid prologue instruction, then this
2555          instruction is not part of the prologue either.  We must
2556          remember in this case to adjust the end_prologue_addr back
2557          over the extend.  */
2558       if ((inst & 0xf800) == 0xf000)    /* extend */
2559         {
2560           extend_bytes = MIPS_INSN16_SIZE;
2561           continue;
2562         }
2563
2564       prev_extend_bytes = extend_bytes;
2565       extend_bytes = 0;
2566
2567       if ((inst & 0xff00) == 0x6300     /* addiu sp */
2568           || (inst & 0xff00) == 0xfb00) /* daddiu sp */
2569         {
2570           offset = mips16_get_imm (prev_inst, inst, 8, 8, 1);
2571           if (offset < 0)       /* Negative stack adjustment?  */
2572             frame_offset -= offset;
2573           else
2574             /* Exit loop if a positive stack adjustment is found, which
2575                usually means that the stack cleanup code in the function
2576                epilogue is reached.  */
2577             break;
2578         }
2579       else if ((inst & 0xf800) == 0xd000)       /* sw reg,n($sp) */
2580         {
2581           offset = mips16_get_imm (prev_inst, inst, 8, 4, 0);
2582           reg = mips_reg3_to_reg[(inst & 0x700) >> 8];
2583           set_reg_offset (gdbarch, this_cache, reg, sp + offset);
2584         }
2585       else if ((inst & 0xff00) == 0xf900)       /* sd reg,n($sp) */
2586         {
2587           offset = mips16_get_imm (prev_inst, inst, 5, 8, 0);
2588           reg = mips_reg3_to_reg[(inst & 0xe0) >> 5];
2589           set_reg_offset (gdbarch, this_cache, reg, sp + offset);
2590         }
2591       else if ((inst & 0xff00) == 0x6200)       /* sw $ra,n($sp) */
2592         {
2593           offset = mips16_get_imm (prev_inst, inst, 8, 4, 0);
2594           set_reg_offset (gdbarch, this_cache, MIPS_RA_REGNUM, sp + offset);
2595         }
2596       else if ((inst & 0xff00) == 0xfa00)       /* sd $ra,n($sp) */
2597         {
2598           offset = mips16_get_imm (prev_inst, inst, 8, 8, 0);
2599           set_reg_offset (gdbarch, this_cache, MIPS_RA_REGNUM, sp + offset);
2600         }
2601       else if (inst == 0x673d)  /* move $s1, $sp */
2602         {
2603           frame_addr = sp;
2604           frame_reg = 17;
2605         }
2606       else if ((inst & 0xff00) == 0x0100)       /* addiu $s1,sp,n */
2607         {
2608           offset = mips16_get_imm (prev_inst, inst, 8, 4, 0);
2609           frame_addr = sp + offset;
2610           frame_reg = 17;
2611           frame_adjust = offset;
2612         }
2613       else if ((inst & 0xFF00) == 0xd900)       /* sw reg,offset($s1) */
2614         {
2615           offset = mips16_get_imm (prev_inst, inst, 5, 4, 0);
2616           reg = mips_reg3_to_reg[(inst & 0xe0) >> 5];
2617           set_reg_offset (gdbarch, this_cache, reg, frame_addr + offset);
2618         }
2619       else if ((inst & 0xFF00) == 0x7900)       /* sd reg,offset($s1) */
2620         {
2621           offset = mips16_get_imm (prev_inst, inst, 5, 8, 0);
2622           reg = mips_reg3_to_reg[(inst & 0xe0) >> 5];
2623           set_reg_offset (gdbarch, this_cache, reg, frame_addr + offset);
2624         }
2625       else if ((inst & 0xf81f) == 0xe809
2626                && (inst & 0x700) != 0x700)      /* entry */
2627         entry_inst = inst;      /* Save for later processing.  */
2628       else if ((inst & 0xff80) == 0x6480)       /* save */
2629         {
2630           save_inst = inst;     /* Save for later processing.  */
2631           if (prev_extend_bytes)                /* extend */
2632             save_inst |= prev_inst << 16;
2633         }
2634       else if ((inst & 0xff1c) == 0x6704)       /* move reg,$a0-$a3 */
2635         {
2636           /* This instruction is part of the prologue, but we don't
2637              need to do anything special to handle it.  */
2638         }
2639       else if (mips16_instruction_has_delay_slot (inst, 0))
2640                                                 /* JAL/JALR/JALX/JR */
2641         {
2642           /* The instruction in the delay slot can be a part
2643              of the prologue, so move forward once more.  */
2644           in_delay_slot = 1;
2645           if (mips16_instruction_has_delay_slot (inst, 1))
2646                                                 /* JAL/JALX */
2647             {
2648               prev_extend_bytes = MIPS_INSN16_SIZE;
2649               cur_pc += MIPS_INSN16_SIZE;       /* 32-bit instruction */
2650             }
2651         }
2652       else
2653         {
2654           this_non_prologue_insn = 1;
2655         }
2656
2657       non_prologue_insns += this_non_prologue_insn;
2658
2659       /* A jump or branch, or enough non-prologue insns seen?  If so,
2660          then we must have reached the end of the prologue by now.  */
2661       if (prev_delay_slot || non_prologue_insns > 1
2662           || mips16_instruction_is_compact_branch (inst))
2663         break;
2664
2665       prev_non_prologue_insn = this_non_prologue_insn;
2666       prev_delay_slot = in_delay_slot;
2667       prev_pc = cur_pc - prev_extend_bytes;
2668     }
2669
2670   /* The entry instruction is typically the first instruction in a function,
2671      and it stores registers at offsets relative to the value of the old SP
2672      (before the prologue).  But the value of the sp parameter to this
2673      function is the new SP (after the prologue has been executed).  So we
2674      can't calculate those offsets until we've seen the entire prologue,
2675      and can calculate what the old SP must have been.  */
2676   if (entry_inst != 0)
2677     {
2678       int areg_count = (entry_inst >> 8) & 7;
2679       int sreg_count = (entry_inst >> 6) & 3;
2680
2681       /* The entry instruction always subtracts 32 from the SP.  */
2682       frame_offset += 32;
2683
2684       /* Now we can calculate what the SP must have been at the
2685          start of the function prologue.  */
2686       sp += frame_offset;
2687
2688       /* Check if a0-a3 were saved in the caller's argument save area.  */
2689       for (reg = 4, offset = 0; reg < areg_count + 4; reg++)
2690         {
2691           set_reg_offset (gdbarch, this_cache, reg, sp + offset);
2692           offset += mips_abi_regsize (gdbarch);
2693         }
2694
2695       /* Check if the ra register was pushed on the stack.  */
2696       offset = -4;
2697       if (entry_inst & 0x20)
2698         {
2699           set_reg_offset (gdbarch, this_cache, MIPS_RA_REGNUM, sp + offset);
2700           offset -= mips_abi_regsize (gdbarch);
2701         }
2702
2703       /* Check if the s0 and s1 registers were pushed on the stack.  */
2704       for (reg = 16; reg < sreg_count + 16; reg++)
2705         {
2706           set_reg_offset (gdbarch, this_cache, reg, sp + offset);
2707           offset -= mips_abi_regsize (gdbarch);
2708         }
2709     }
2710
2711   /* The SAVE instruction is similar to ENTRY, except that defined by the
2712      MIPS16e ASE of the MIPS Architecture.  Unlike with ENTRY though, the
2713      size of the frame is specified as an immediate field of instruction
2714      and an extended variation exists which lets additional registers and
2715      frame space to be specified.  The instruction always treats registers
2716      as 32-bit so its usefulness for 64-bit ABIs is questionable.  */
2717   if (save_inst != 0 && mips_abi_regsize (gdbarch) == 4)
2718     {
2719       static int args_table[16] = {
2720         0, 0, 0, 0, 1, 1, 1, 1,
2721         2, 2, 2, 0, 3, 3, 4, -1,
2722       };
2723       static int astatic_table[16] = {
2724         0, 1, 2, 3, 0, 1, 2, 3,
2725         0, 1, 2, 4, 0, 1, 0, -1,
2726       };
2727       int aregs = (save_inst >> 16) & 0xf;
2728       int xsregs = (save_inst >> 24) & 0x7;
2729       int args = args_table[aregs];
2730       int astatic = astatic_table[aregs];
2731       long frame_size;
2732
2733       if (args < 0)
2734         {
2735           warning (_("Invalid number of argument registers encoded in SAVE."));
2736           args = 0;
2737         }
2738       if (astatic < 0)
2739         {
2740           warning (_("Invalid number of static registers encoded in SAVE."));
2741           astatic = 0;
2742         }
2743
2744       /* For standard SAVE the frame size of 0 means 128.  */
2745       frame_size = ((save_inst >> 16) & 0xf0) | (save_inst & 0xf);
2746       if (frame_size == 0 && (save_inst >> 16) == 0)
2747         frame_size = 16;
2748       frame_size *= 8;
2749       frame_offset += frame_size;
2750
2751       /* Now we can calculate what the SP must have been at the
2752          start of the function prologue.  */
2753       sp += frame_offset;
2754
2755       /* Check if A0-A3 were saved in the caller's argument save area.  */
2756       for (reg = MIPS_A0_REGNUM, offset = 0; reg < args + 4; reg++)
2757         {
2758           set_reg_offset (gdbarch, this_cache, reg, sp + offset);
2759           offset += mips_abi_regsize (gdbarch);
2760         }
2761
2762       offset = -4;
2763
2764       /* Check if the RA register was pushed on the stack.  */
2765       if (save_inst & 0x40)
2766         {
2767           set_reg_offset (gdbarch, this_cache, MIPS_RA_REGNUM, sp + offset);
2768           offset -= mips_abi_regsize (gdbarch);
2769         }
2770
2771       /* Check if the S8 register was pushed on the stack.  */
2772       if (xsregs > 6)
2773         {
2774           set_reg_offset (gdbarch, this_cache, 30, sp + offset);
2775           offset -= mips_abi_regsize (gdbarch);
2776           xsregs--;
2777         }
2778       /* Check if S2-S7 were pushed on the stack.  */
2779       for (reg = 18 + xsregs - 1; reg > 18 - 1; reg--)
2780         {
2781           set_reg_offset (gdbarch, this_cache, reg, sp + offset);
2782           offset -= mips_abi_regsize (gdbarch);
2783         }
2784
2785       /* Check if the S1 register was pushed on the stack.  */
2786       if (save_inst & 0x10)
2787         {
2788           set_reg_offset (gdbarch, this_cache, 17, sp + offset);
2789           offset -= mips_abi_regsize (gdbarch);
2790         }
2791       /* Check if the S0 register was pushed on the stack.  */
2792       if (save_inst & 0x20)
2793         {
2794           set_reg_offset (gdbarch, this_cache, 16, sp + offset);
2795           offset -= mips_abi_regsize (gdbarch);
2796         }
2797
2798       /* Check if A0-A3 were pushed on the stack.  */
2799       for (reg = MIPS_A0_REGNUM + 3; reg > MIPS_A0_REGNUM + 3 - astatic; reg--)
2800         {
2801           set_reg_offset (gdbarch, this_cache, reg, sp + offset);
2802           offset -= mips_abi_regsize (gdbarch);
2803         }
2804     }
2805
2806   if (this_cache != NULL)
2807     {
2808       this_cache->base =
2809         (get_frame_register_signed (this_frame,
2810                                     gdbarch_num_regs (gdbarch) + frame_reg)
2811          + frame_offset - frame_adjust);
2812       /* FIXME: brobecker/2004-10-10: Just as in the mips32 case, we should
2813          be able to get rid of the assignment below, evetually.  But it's
2814          still needed for now.  */
2815       this_cache->saved_regs[gdbarch_num_regs (gdbarch)
2816                              + mips_regnum (gdbarch)->pc]
2817         = this_cache->saved_regs[gdbarch_num_regs (gdbarch) + MIPS_RA_REGNUM];
2818     }
2819
2820   /* Set end_prologue_addr to the address of the instruction immediately
2821      after the last one we scanned.  Unless the last one looked like a
2822      non-prologue instruction (and we looked ahead), in which case use
2823      its address instead.  */
2824   end_prologue_addr = (prev_non_prologue_insn || prev_delay_slot
2825                        ? prev_pc : cur_pc - prev_extend_bytes);
2826
2827   return end_prologue_addr;
2828 }
2829
2830 /* Heuristic unwinder for 16-bit MIPS instruction set (aka MIPS16).
2831    Procedures that use the 32-bit instruction set are handled by the
2832    mips_insn32 unwinder.  */
2833
2834 static struct mips_frame_cache *
2835 mips_insn16_frame_cache (struct frame_info *this_frame, void **this_cache)
2836 {
2837   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2838   struct mips_frame_cache *cache;
2839
2840   if ((*this_cache) != NULL)
2841     return (struct mips_frame_cache *) (*this_cache);
2842   cache = FRAME_OBSTACK_ZALLOC (struct mips_frame_cache);
2843   (*this_cache) = cache;
2844   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2845
2846   /* Analyze the function prologue.  */
2847   {
2848     const CORE_ADDR pc = get_frame_address_in_block (this_frame);
2849     CORE_ADDR start_addr;
2850
2851     find_pc_partial_function (pc, NULL, &start_addr, NULL);
2852     if (start_addr == 0)
2853       start_addr = heuristic_proc_start (gdbarch, pc);
2854     /* We can't analyze the prologue if we couldn't find the begining
2855        of the function.  */
2856     if (start_addr == 0)
2857       return cache;
2858
2859     mips16_scan_prologue (gdbarch, start_addr, pc, this_frame,
2860                           (struct mips_frame_cache *) *this_cache);
2861   }
2862   
2863   /* gdbarch_sp_regnum contains the value and not the address.  */
2864   trad_frame_set_value (cache->saved_regs,
2865                         gdbarch_num_regs (gdbarch) + MIPS_SP_REGNUM,
2866                         cache->base);
2867
2868   return (struct mips_frame_cache *) (*this_cache);
2869 }
2870
2871 static void
2872 mips_insn16_frame_this_id (struct frame_info *this_frame, void **this_cache,
2873                            struct frame_id *this_id)
2874 {
2875   struct mips_frame_cache *info = mips_insn16_frame_cache (this_frame,
2876                                                            this_cache);
2877   /* This marks the outermost frame.  */
2878   if (info->base == 0)
2879     return;
2880   (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
2881 }
2882
2883 static struct value *
2884 mips_insn16_frame_prev_register (struct frame_info *this_frame,
2885                                  void **this_cache, int regnum)
2886 {
2887   struct mips_frame_cache *info = mips_insn16_frame_cache (this_frame,
2888                                                            this_cache);
2889   return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
2890 }
2891
2892 static int
2893 mips_insn16_frame_sniffer (const struct frame_unwind *self,
2894                            struct frame_info *this_frame, void **this_cache)
2895 {
2896   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2897   CORE_ADDR pc = get_frame_pc (this_frame);
2898   if (mips_pc_is_mips16 (gdbarch, pc))
2899     return 1;
2900   return 0;
2901 }
2902
2903 static const struct frame_unwind mips_insn16_frame_unwind =
2904 {
2905   NORMAL_FRAME,
2906   default_frame_unwind_stop_reason,
2907   mips_insn16_frame_this_id,
2908   mips_insn16_frame_prev_register,
2909   NULL,
2910   mips_insn16_frame_sniffer
2911 };
2912
2913 static CORE_ADDR
2914 mips_insn16_frame_base_address (struct frame_info *this_frame,
2915                                 void **this_cache)
2916 {
2917   struct mips_frame_cache *info = mips_insn16_frame_cache (this_frame,
2918                                                            this_cache);
2919   return info->base;
2920 }
2921
2922 static const struct frame_base mips_insn16_frame_base =
2923 {
2924   &mips_insn16_frame_unwind,
2925   mips_insn16_frame_base_address,
2926   mips_insn16_frame_base_address,
2927   mips_insn16_frame_base_address
2928 };
2929
2930 static const struct frame_base *
2931 mips_insn16_frame_base_sniffer (struct frame_info *this_frame)
2932 {
2933   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2934   CORE_ADDR pc = get_frame_pc (this_frame);
2935   if (mips_pc_is_mips16 (gdbarch, pc))
2936     return &mips_insn16_frame_base;
2937   else
2938     return NULL;
2939 }
2940
2941 /* Decode a 9-bit signed immediate argument of ADDIUSP -- -2 is mapped
2942    to -258, -1 -- to -257, 0 -- to 256, 1 -- to 257 and other values are
2943    interpreted directly, and then multiplied by 4.  */
2944
2945 static int
2946 micromips_decode_imm9 (int imm)
2947 {
2948   imm = (imm ^ 0x100) - 0x100;
2949   if (imm > -3 && imm < 2)
2950     imm ^= 0x100;
2951   return imm << 2;
2952 }
2953
2954 /* Analyze the function prologue from START_PC to LIMIT_PC.  Return
2955    the address of the first instruction past the prologue.  */
2956
2957 static CORE_ADDR
2958 micromips_scan_prologue (struct gdbarch *gdbarch,
2959                          CORE_ADDR start_pc, CORE_ADDR limit_pc,
2960                          struct frame_info *this_frame,
2961                          struct mips_frame_cache *this_cache)
2962 {
2963   CORE_ADDR end_prologue_addr;
2964   int prev_non_prologue_insn = 0;
2965   int frame_reg = MIPS_SP_REGNUM;
2966   int this_non_prologue_insn;
2967   int non_prologue_insns = 0;
2968   long frame_offset = 0;        /* Size of stack frame.  */
2969   long frame_adjust = 0;        /* Offset of FP from SP.  */
2970   int prev_delay_slot = 0;
2971   int in_delay_slot;
2972   CORE_ADDR prev_pc;
2973   CORE_ADDR cur_pc;
2974   ULONGEST insn;                /* current instruction */
2975   CORE_ADDR sp;
2976   long offset;
2977   long sp_adj;
2978   long v1_off = 0;              /* The assumption is LUI will replace it.  */
2979   int reglist;
2980   int breg;
2981   int dreg;
2982   int sreg;
2983   int treg;
2984   int loc;
2985   int op;
2986   int s;
2987   int i;
2988
2989   /* Can be called when there's no process, and hence when there's no
2990      THIS_FRAME.  */
2991   if (this_frame != NULL)
2992     sp = get_frame_register_signed (this_frame,
2993                                     gdbarch_num_regs (gdbarch)
2994                                     + MIPS_SP_REGNUM);
2995   else
2996     sp = 0;
2997
2998   if (limit_pc > start_pc + 200)
2999     limit_pc = start_pc + 200;
3000   prev_pc = start_pc;
3001
3002   /* Permit at most one non-prologue non-control-transfer instruction
3003      in the middle which may have been reordered by the compiler for
3004      optimisation.  */
3005   for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += loc)
3006     {
3007       this_non_prologue_insn = 0;
3008       in_delay_slot = 0;
3009       sp_adj = 0;
3010       loc = 0;
3011       insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, cur_pc, NULL);
3012       loc += MIPS_INSN16_SIZE;
3013       switch (mips_insn_size (ISA_MICROMIPS, insn))
3014         {
3015         /* 32-bit instructions.  */
3016         case 2 * MIPS_INSN16_SIZE:
3017           insn <<= 16;
3018           insn |= mips_fetch_instruction (gdbarch,
3019                                           ISA_MICROMIPS, cur_pc + loc, NULL);
3020           loc += MIPS_INSN16_SIZE;
3021           switch (micromips_op (insn >> 16))
3022             {
3023             /* Record $sp/$fp adjustment.  */
3024             /* Discard (D)ADDU $gp,$jp used for PIC code.  */
3025             case 0x0: /* POOL32A: bits 000000 */
3026             case 0x16: /* POOL32S: bits 010110 */
3027               op = b0s11_op (insn);
3028               sreg = b0s5_reg (insn >> 16);
3029               treg = b5s5_reg (insn >> 16);
3030               dreg = b11s5_reg (insn);
3031               if (op == 0x1d0
3032                                 /* SUBU: bits 000000 00111010000 */
3033                                 /* DSUBU: bits 010110 00111010000 */
3034                   && dreg == MIPS_SP_REGNUM && sreg == MIPS_SP_REGNUM
3035                   && treg == 3)
3036                                 /* (D)SUBU $sp, $v1 */
3037                     sp_adj = v1_off;
3038               else if (op != 0x150
3039                                 /* ADDU: bits 000000 00101010000 */
3040                                 /* DADDU: bits 010110 00101010000 */
3041                        || dreg != 28 || sreg != 28 || treg != MIPS_T9_REGNUM)
3042                 this_non_prologue_insn = 1;
3043               break;
3044
3045             case 0x8: /* POOL32B: bits 001000 */
3046               op = b12s4_op (insn);
3047               breg = b0s5_reg (insn >> 16);
3048               reglist = sreg = b5s5_reg (insn >> 16);
3049               offset = (b0s12_imm (insn) ^ 0x800) - 0x800;
3050               if ((op == 0x9 || op == 0xc)
3051                                 /* SWP: bits 001000 1001 */
3052                                 /* SDP: bits 001000 1100 */
3053                   && breg == MIPS_SP_REGNUM && sreg < MIPS_RA_REGNUM)
3054                                 /* S[DW]P reg,offset($sp) */
3055                 {
3056                   s = 4 << ((b12s4_op (insn) & 0x4) == 0x4);
3057                   set_reg_offset (gdbarch, this_cache,
3058                                   sreg, sp + offset);
3059                   set_reg_offset (gdbarch, this_cache,
3060                                   sreg + 1, sp + offset + s);
3061                 }
3062               else if ((op == 0xd || op == 0xf)
3063                                 /* SWM: bits 001000 1101 */
3064                                 /* SDM: bits 001000 1111 */
3065                        && breg == MIPS_SP_REGNUM
3066                                 /* SWM reglist,offset($sp) */
3067                        && ((reglist >= 1 && reglist <= 9)
3068                            || (reglist >= 16 && reglist <= 25)))
3069                 {
3070                   int sreglist = std::min(reglist & 0xf, 8);
3071
3072                   s = 4 << ((b12s4_op (insn) & 0x2) == 0x2);
3073                   for (i = 0; i < sreglist; i++)
3074                     set_reg_offset (gdbarch, this_cache, 16 + i, sp + s * i);
3075                   if ((reglist & 0xf) > 8)
3076                     set_reg_offset (gdbarch, this_cache, 30, sp + s * i++);
3077                   if ((reglist & 0x10) == 0x10)
3078                     set_reg_offset (gdbarch, this_cache,
3079                                     MIPS_RA_REGNUM, sp + s * i++);
3080                 }
3081               else
3082                 this_non_prologue_insn = 1;
3083               break;
3084
3085             /* Record $sp/$fp adjustment.  */
3086             /* Discard (D)ADDIU $gp used for PIC code.  */
3087             case 0xc: /* ADDIU: bits 001100 */
3088             case 0x17: /* DADDIU: bits 010111 */
3089               sreg = b0s5_reg (insn >> 16);
3090               dreg = b5s5_reg (insn >> 16);
3091               offset = (b0s16_imm (insn) ^ 0x8000) - 0x8000;
3092               if (sreg == MIPS_SP_REGNUM && dreg == MIPS_SP_REGNUM)
3093                                 /* (D)ADDIU $sp, imm */
3094                 sp_adj = offset;
3095               else if (sreg == MIPS_SP_REGNUM && dreg == 30)
3096                                 /* (D)ADDIU $fp, $sp, imm */
3097                 {
3098                   frame_adjust = offset;
3099                   frame_reg = 30;
3100                 }
3101               else if (sreg != 28 || dreg != 28)
3102                                 /* (D)ADDIU $gp, imm */
3103                 this_non_prologue_insn = 1;
3104               break;
3105
3106             /* LUI $v1 is used for larger $sp adjustments.  */
3107             /* Discard LUI $gp used for PIC code.  */
3108             case 0x10: /* POOL32I: bits 010000 */
3109               if (b5s5_op (insn >> 16) == 0xd
3110                                 /* LUI: bits 010000 001101 */
3111                   && b0s5_reg (insn >> 16) == 3)
3112                                 /* LUI $v1, imm */
3113                 v1_off = ((b0s16_imm (insn) << 16) ^ 0x80000000) - 0x80000000;
3114               else if (b5s5_op (insn >> 16) != 0xd
3115                                 /* LUI: bits 010000 001101 */
3116                        || b0s5_reg (insn >> 16) != 28)
3117                                 /* LUI $gp, imm */
3118                 this_non_prologue_insn = 1;
3119               break;
3120
3121             /* ORI $v1 is used for larger $sp adjustments.  */
3122             case 0x14: /* ORI: bits 010100 */
3123               sreg = b0s5_reg (insn >> 16);
3124               dreg = b5s5_reg (insn >> 16);
3125               if (sreg == 3 && dreg == 3)
3126                                 /* ORI $v1, imm */
3127                 v1_off |= b0s16_imm (insn);
3128               else
3129                 this_non_prologue_insn = 1;
3130               break;
3131
3132             case 0x26: /* SWC1: bits 100110 */
3133             case 0x2e: /* SDC1: bits 101110 */
3134               breg = b0s5_reg (insn >> 16);
3135               if (breg != MIPS_SP_REGNUM)
3136                                 /* S[DW]C1 reg,offset($sp) */
3137                 this_non_prologue_insn = 1;
3138               break;
3139
3140             case 0x36: /* SD: bits 110110 */
3141             case 0x3e: /* SW: bits 111110 */
3142               breg = b0s5_reg (insn >> 16);
3143               sreg = b5s5_reg (insn >> 16);
3144               offset = (b0s16_imm (insn) ^ 0x8000) - 0x8000;
3145               if (breg == MIPS_SP_REGNUM)
3146                                 /* S[DW] reg,offset($sp) */
3147                 set_reg_offset (gdbarch, this_cache, sreg, sp + offset);
3148               else
3149                 this_non_prologue_insn = 1;
3150               break;
3151
3152             default:
3153               /* The instruction in the delay slot can be a part
3154                  of the prologue, so move forward once more.  */
3155               if (micromips_instruction_has_delay_slot (insn, 0))
3156                 in_delay_slot = 1;
3157               else
3158                 this_non_prologue_insn = 1;
3159               break;
3160             }
3161           insn >>= 16;
3162           break;
3163
3164         /* 16-bit instructions.  */
3165         case MIPS_INSN16_SIZE:
3166           switch (micromips_op (insn))
3167             {
3168             case 0x3: /* MOVE: bits 000011 */
3169               sreg = b0s5_reg (insn);
3170               dreg = b5s5_reg (insn);
3171               if (sreg == MIPS_SP_REGNUM && dreg == 30)
3172                                 /* MOVE  $fp, $sp */
3173                 frame_reg = 30;
3174               else if ((sreg & 0x1c) != 0x4)
3175                                 /* MOVE  reg, $a0-$a3 */
3176                 this_non_prologue_insn = 1;
3177               break;
3178
3179             case 0x11: /* POOL16C: bits 010001 */
3180               if (b6s4_op (insn) == 0x5)
3181                                 /* SWM: bits 010001 0101 */
3182                 {
3183                   offset = ((b0s4_imm (insn) << 2) ^ 0x20) - 0x20;
3184                   reglist = b4s2_regl (insn);
3185                   for (i = 0; i <= reglist; i++)
3186                     set_reg_offset (gdbarch, this_cache, 16 + i, sp + 4 * i);
3187                   set_reg_offset (gdbarch, this_cache,
3188                                   MIPS_RA_REGNUM, sp + 4 * i++);
3189                 }
3190               else
3191                 this_non_prologue_insn = 1;
3192               break;
3193
3194             case 0x13: /* POOL16D: bits 010011 */
3195               if ((insn & 0x1) == 0x1)
3196                                 /* ADDIUSP: bits 010011 1 */
3197                 sp_adj = micromips_decode_imm9 (b1s9_imm (insn));
3198               else if (b5s5_reg (insn) == MIPS_SP_REGNUM)
3199                                 /* ADDIUS5: bits 010011 0 */
3200                                 /* ADDIUS5 $sp, imm */
3201                 sp_adj = (b1s4_imm (insn) ^ 8) - 8;
3202               else
3203                 this_non_prologue_insn = 1;
3204               break;
3205
3206             case 0x32: /* SWSP: bits 110010 */
3207               offset = b0s5_imm (insn) << 2;
3208               sreg = b5s5_reg (insn);
3209               set_reg_offset (gdbarch, this_cache, sreg, sp + offset);
3210               break;
3211
3212             default:
3213               /* The instruction in the delay slot can be a part
3214                  of the prologue, so move forward once more.  */
3215               if (micromips_instruction_has_delay_slot (insn << 16, 0))
3216                 in_delay_slot = 1;
3217               else
3218                 this_non_prologue_insn = 1;
3219               break;
3220             }
3221           break;
3222         }
3223       if (sp_adj < 0)
3224         frame_offset -= sp_adj;
3225
3226       non_prologue_insns += this_non_prologue_insn;
3227
3228       /* A jump or branch, enough non-prologue insns seen or positive
3229          stack adjustment?  If so, then we must have reached the end
3230          of the prologue by now.  */
3231       if (prev_delay_slot || non_prologue_insns > 1 || sp_adj > 0
3232           || micromips_instruction_is_compact_branch (insn))
3233         break;
3234
3235       prev_non_prologue_insn = this_non_prologue_insn;
3236       prev_delay_slot = in_delay_slot;
3237       prev_pc = cur_pc;
3238     }
3239
3240   if (this_cache != NULL)
3241     {
3242       this_cache->base =
3243         (get_frame_register_signed (this_frame,
3244                                     gdbarch_num_regs (gdbarch) + frame_reg)
3245          + frame_offset - frame_adjust);
3246       /* FIXME: brobecker/2004-10-10: Just as in the mips32 case, we should
3247          be able to get rid of the assignment below, evetually. But it's
3248          still needed for now.  */
3249       this_cache->saved_regs[gdbarch_num_regs (gdbarch)
3250                              + mips_regnum (gdbarch)->pc]
3251         = this_cache->saved_regs[gdbarch_num_regs (gdbarch) + MIPS_RA_REGNUM];
3252     }
3253
3254   /* Set end_prologue_addr to the address of the instruction immediately
3255      after the last one we scanned.  Unless the last one looked like a
3256      non-prologue instruction (and we looked ahead), in which case use
3257      its address instead.  */
3258   end_prologue_addr
3259     = prev_non_prologue_insn || prev_delay_slot ? prev_pc : cur_pc;
3260
3261   return end_prologue_addr;
3262 }
3263
3264 /* Heuristic unwinder for procedures using microMIPS instructions.
3265    Procedures that use the 32-bit instruction set are handled by the
3266    mips_insn32 unwinder.  Likewise MIPS16 and the mips_insn16 unwinder. */
3267
3268 static struct mips_frame_cache *
3269 mips_micro_frame_cache (struct frame_info *this_frame, void **this_cache)
3270 {
3271   struct gdbarch *gdbarch = get_frame_arch (this_frame);
3272   struct mips_frame_cache *cache;
3273
3274   if ((*this_cache) != NULL)
3275     return (struct mips_frame_cache *) (*this_cache);
3276
3277   cache = FRAME_OBSTACK_ZALLOC (struct mips_frame_cache);
3278   (*this_cache) = cache;
3279   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
3280
3281   /* Analyze the function prologue.  */
3282   {
3283     const CORE_ADDR pc = get_frame_address_in_block (this_frame);
3284     CORE_ADDR start_addr;
3285
3286     find_pc_partial_function (pc, NULL, &start_addr, NULL);
3287     if (start_addr == 0)
3288       start_addr = heuristic_proc_start (get_frame_arch (this_frame), pc);
3289     /* We can't analyze the prologue if we couldn't find the begining
3290        of the function.  */
3291     if (start_addr == 0)
3292       return cache;
3293
3294     micromips_scan_prologue (gdbarch, start_addr, pc, this_frame,
3295                              (struct mips_frame_cache *) *this_cache);
3296   }
3297
3298   /* gdbarch_sp_regnum contains the value and not the address.  */
3299   trad_frame_set_value (cache->saved_regs,
3300                         gdbarch_num_regs (gdbarch) + MIPS_SP_REGNUM,
3301                         cache->base);
3302
3303   return (struct mips_frame_cache *) (*this_cache);
3304 }
3305
3306 static void
3307 mips_micro_frame_this_id (struct frame_info *this_frame, void **this_cache,
3308                           struct frame_id *this_id)
3309 {
3310   struct mips_frame_cache *info = mips_micro_frame_cache (this_frame,
3311                                                           this_cache);
3312   /* This marks the outermost frame.  */
3313   if (info->base == 0)
3314     return;
3315   (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
3316 }
3317
3318 static struct value *
3319 mips_micro_frame_prev_register (struct frame_info *this_frame,
3320                                 void **this_cache, int regnum)
3321 {
3322   struct mips_frame_cache *info = mips_micro_frame_cache (this_frame,
3323                                                           this_cache);
3324   return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
3325 }
3326
3327 static int
3328 mips_micro_frame_sniffer (const struct frame_unwind *self,
3329                           struct frame_info *this_frame, void **this_cache)
3330 {
3331   struct gdbarch *gdbarch = get_frame_arch (this_frame);
3332   CORE_ADDR pc = get_frame_pc (this_frame);
3333
3334   if (mips_pc_is_micromips (gdbarch, pc))
3335     return 1;
3336   return 0;
3337 }
3338
3339 static const struct frame_unwind mips_micro_frame_unwind =
3340 {
3341   NORMAL_FRAME,
3342   default_frame_unwind_stop_reason,
3343   mips_micro_frame_this_id,
3344   mips_micro_frame_prev_register,
3345   NULL,
3346   mips_micro_frame_sniffer
3347 };
3348
3349 static CORE_ADDR
3350 mips_micro_frame_base_address (struct frame_info *this_frame,
3351                                void **this_cache)
3352 {
3353   struct mips_frame_cache *info = mips_micro_frame_cache (this_frame,
3354                                                           this_cache);
3355   return info->base;
3356 }
3357
3358 static const struct frame_base mips_micro_frame_base =
3359 {
3360   &mips_micro_frame_unwind,
3361   mips_micro_frame_base_address,
3362   mips_micro_frame_base_address,
3363   mips_micro_frame_base_address
3364 };
3365
3366 static const struct frame_base *
3367 mips_micro_frame_base_sniffer (struct frame_info *this_frame)
3368 {
3369   struct gdbarch *gdbarch = get_frame_arch (this_frame);
3370   CORE_ADDR pc = get_frame_pc (this_frame);
3371
3372   if (mips_pc_is_micromips (gdbarch, pc))
3373     return &mips_micro_frame_base;
3374   else
3375     return NULL;
3376 }
3377
3378 /* Mark all the registers as unset in the saved_regs array
3379    of THIS_CACHE.  Do nothing if THIS_CACHE is null.  */
3380
3381 static void
3382 reset_saved_regs (struct gdbarch *gdbarch, struct mips_frame_cache *this_cache)
3383 {
3384   if (this_cache == NULL || this_cache->saved_regs == NULL)
3385     return;
3386
3387   {
3388     const int num_regs = gdbarch_num_regs (gdbarch);
3389     int i;
3390
3391     for (i = 0; i < num_regs; i++)
3392       {
3393         this_cache->saved_regs[i].addr = -1;
3394       }
3395   }
3396 }
3397
3398 /* Analyze the function prologue from START_PC to LIMIT_PC.  Builds
3399    the associated FRAME_CACHE if not null.  
3400    Return the address of the first instruction past the prologue.  */
3401
3402 static CORE_ADDR
3403 mips32_scan_prologue (struct gdbarch *gdbarch,
3404                       CORE_ADDR start_pc, CORE_ADDR limit_pc,
3405                       struct frame_info *this_frame,
3406                       struct mips_frame_cache *this_cache)
3407 {
3408   int prev_non_prologue_insn;
3409   int this_non_prologue_insn;
3410   int non_prologue_insns;
3411   CORE_ADDR frame_addr = 0; /* Value of $r30. Used by gcc for
3412                                frame-pointer.  */
3413   int prev_delay_slot;
3414   CORE_ADDR prev_pc;
3415   CORE_ADDR cur_pc;
3416   CORE_ADDR sp;
3417   long frame_offset;
3418   int  frame_reg = MIPS_SP_REGNUM;
3419
3420   CORE_ADDR end_prologue_addr;
3421   int seen_sp_adjust = 0;
3422   int load_immediate_bytes = 0;
3423   int in_delay_slot;
3424   int regsize_is_64_bits = (mips_abi_regsize (gdbarch) == 8);
3425
3426   /* Can be called when there's no process, and hence when there's no
3427      THIS_FRAME.  */
3428   if (this_frame != NULL)
3429     sp = get_frame_register_signed (this_frame,
3430                                     gdbarch_num_regs (gdbarch)
3431                                     + MIPS_SP_REGNUM);
3432   else
3433     sp = 0;
3434
3435   if (limit_pc > start_pc + 200)
3436     limit_pc = start_pc + 200;
3437
3438 restart:
3439   prev_non_prologue_insn = 0;
3440   non_prologue_insns = 0;
3441   prev_delay_slot = 0;
3442   prev_pc = start_pc;
3443
3444   /* Permit at most one non-prologue non-control-transfer instruction
3445      in the middle which may have been reordered by the compiler for
3446      optimisation.  */
3447   frame_offset = 0;
3448   for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS_INSN32_SIZE)
3449     {
3450       unsigned long inst, high_word;
3451       long offset;
3452       int reg;
3453
3454       this_non_prologue_insn = 0;
3455       in_delay_slot = 0;
3456
3457       /* Fetch the instruction.  */
3458       inst = (unsigned long) mips_fetch_instruction (gdbarch, ISA_MIPS,
3459                                                      cur_pc, NULL);
3460
3461       /* Save some code by pre-extracting some useful fields.  */
3462       high_word = (inst >> 16) & 0xffff;
3463       offset = ((inst & 0xffff) ^ 0x8000) - 0x8000;
3464       reg = high_word & 0x1f;
3465
3466       if (high_word == 0x27bd           /* addiu $sp,$sp,-i */
3467           || high_word == 0x23bd        /* addi $sp,$sp,-i */
3468           || high_word == 0x67bd)       /* daddiu $sp,$sp,-i */
3469         {
3470           if (offset < 0)               /* Negative stack adjustment?  */
3471             frame_offset -= offset;
3472           else
3473             /* Exit loop if a positive stack adjustment is found, which
3474                usually means that the stack cleanup code in the function
3475                epilogue is reached.  */
3476             break;
3477           seen_sp_adjust = 1;
3478         }
3479       else if (((high_word & 0xFFE0) == 0xafa0) /* sw reg,offset($sp) */
3480                && !regsize_is_64_bits)
3481         {
3482           set_reg_offset (gdbarch, this_cache, reg, sp + offset);
3483         }
3484       else if (((high_word & 0xFFE0) == 0xffa0) /* sd reg,offset($sp) */
3485                && regsize_is_64_bits)
3486         {
3487           /* Irix 6.2 N32 ABI uses sd instructions for saving $gp and $ra.  */
3488           set_reg_offset (gdbarch, this_cache, reg, sp + offset);
3489         }
3490       else if (high_word == 0x27be)     /* addiu $30,$sp,size */
3491         {
3492           /* Old gcc frame, r30 is virtual frame pointer.  */
3493           if (offset != frame_offset)
3494             frame_addr = sp + offset;
3495           else if (this_frame && frame_reg == MIPS_SP_REGNUM)
3496             {
3497               unsigned alloca_adjust;
3498
3499               frame_reg = 30;
3500               frame_addr = get_frame_register_signed
3501                 (this_frame, gdbarch_num_regs (gdbarch) + 30);
3502               frame_offset = 0;
3503
3504               alloca_adjust = (unsigned) (frame_addr - (sp + offset));
3505               if (alloca_adjust > 0)
3506                 {
3507                   /* FP > SP + frame_size.  This may be because of
3508                      an alloca or somethings similar.  Fix sp to
3509                      "pre-alloca" value, and try again.  */
3510                   sp += alloca_adjust;
3511                   /* Need to reset the status of all registers.  Otherwise,
3512                      we will hit a guard that prevents the new address
3513                      for each register to be recomputed during the second
3514                      pass.  */
3515                   reset_saved_regs (gdbarch, this_cache);
3516                   goto restart;
3517                 }
3518             }
3519         }
3520       /* move $30,$sp.  With different versions of gas this will be either
3521          `addu $30,$sp,$zero' or `or $30,$sp,$zero' or `daddu 30,sp,$0'.
3522          Accept any one of these.  */
3523       else if (inst == 0x03A0F021 || inst == 0x03a0f025 || inst == 0x03a0f02d)
3524         {
3525           /* New gcc frame, virtual frame pointer is at r30 + frame_size.  */
3526           if (this_frame && frame_reg == MIPS_SP_REGNUM)
3527             {
3528               unsigned alloca_adjust;
3529
3530               frame_reg = 30;
3531               frame_addr = get_frame_register_signed
3532                 (this_frame, gdbarch_num_regs (gdbarch) + 30);
3533
3534               alloca_adjust = (unsigned) (frame_addr - sp);
3535               if (alloca_adjust > 0)
3536                 {
3537                   /* FP > SP + frame_size.  This may be because of
3538                      an alloca or somethings similar.  Fix sp to
3539                      "pre-alloca" value, and try again.  */
3540                   sp = frame_addr;
3541                   /* Need to reset the status of all registers.  Otherwise,
3542                      we will hit a guard that prevents the new address
3543                      for each register to be recomputed during the second
3544                      pass.  */
3545                   reset_saved_regs (gdbarch, this_cache);
3546                   goto restart;
3547                 }
3548             }
3549         }
3550       else if ((high_word & 0xFFE0) == 0xafc0   /* sw reg,offset($30) */
3551                && !regsize_is_64_bits)
3552         {
3553           set_reg_offset (gdbarch, this_cache, reg, frame_addr + offset);
3554         }
3555       else if ((high_word & 0xFFE0) == 0xE7A0 /* swc1 freg,n($sp) */
3556                || (high_word & 0xF3E0) == 0xA3C0 /* sx reg,n($s8) */
3557                || (inst & 0xFF9F07FF) == 0x00800021 /* move reg,$a0-$a3 */
3558                || high_word == 0x3c1c /* lui $gp,n */
3559                || high_word == 0x279c /* addiu $gp,$gp,n */
3560                || inst == 0x0399e021 /* addu $gp,$gp,$t9 */
3561                || inst == 0x033ce021 /* addu $gp,$t9,$gp */
3562               )
3563         {
3564           /* These instructions are part of the prologue, but we don't
3565              need to do anything special to handle them.  */
3566         }
3567       /* The instructions below load $at or $t0 with an immediate
3568          value in preparation for a stack adjustment via
3569          subu $sp,$sp,[$at,$t0].  These instructions could also
3570          initialize a local variable, so we accept them only before
3571          a stack adjustment instruction was seen.  */
3572       else if (!seen_sp_adjust
3573                && !prev_delay_slot
3574                && (high_word == 0x3c01 /* lui $at,n */
3575                    || high_word == 0x3c08 /* lui $t0,n */
3576                    || high_word == 0x3421 /* ori $at,$at,n */
3577                    || high_word == 0x3508 /* ori $t0,$t0,n */
3578                    || high_word == 0x3401 /* ori $at,$zero,n */
3579                    || high_word == 0x3408 /* ori $t0,$zero,n */
3580                   ))
3581         {
3582           load_immediate_bytes += MIPS_INSN32_SIZE;             /* FIXME!  */
3583         }
3584       /* Check for branches and jumps.  The instruction in the delay
3585          slot can be a part of the prologue, so move forward once more.  */
3586       else if (mips32_instruction_has_delay_slot (gdbarch, inst))
3587         {
3588           in_delay_slot = 1;
3589         }
3590       /* This instruction is not an instruction typically found
3591          in a prologue, so we must have reached the end of the
3592          prologue.  */
3593       else
3594         {
3595           this_non_prologue_insn = 1;
3596         }
3597
3598       non_prologue_insns += this_non_prologue_insn;
3599
3600       /* A jump or branch, or enough non-prologue insns seen?  If so,
3601          then we must have reached the end of the prologue by now.  */
3602       if (prev_delay_slot || non_prologue_insns > 1)
3603         break;
3604
3605       prev_non_prologue_insn = this_non_prologue_insn;
3606       prev_delay_slot = in_delay_slot;
3607       prev_pc = cur_pc;
3608     }
3609
3610   if (this_cache != NULL)
3611     {
3612       this_cache->base = 
3613         (get_frame_register_signed (this_frame,
3614                                     gdbarch_num_regs (gdbarch) + frame_reg)
3615          + frame_offset);
3616       /* FIXME: brobecker/2004-09-15: We should be able to get rid of
3617          this assignment below, eventually.  But it's still needed
3618          for now.  */
3619       this_cache->saved_regs[gdbarch_num_regs (gdbarch)
3620                              + mips_regnum (gdbarch)->pc]
3621         = this_cache->saved_regs[gdbarch_num_regs (gdbarch)
3622                                  + MIPS_RA_REGNUM];
3623     }
3624
3625   /* Set end_prologue_addr to the address of the instruction immediately
3626      after the last one we scanned.  Unless the last one looked like a
3627      non-prologue instruction (and we looked ahead), in which case use
3628      its address instead.  */
3629   end_prologue_addr
3630     = prev_non_prologue_insn || prev_delay_slot ? prev_pc : cur_pc;
3631      
3632   /* In a frameless function, we might have incorrectly
3633      skipped some load immediate instructions.  Undo the skipping
3634      if the load immediate was not followed by a stack adjustment.  */
3635   if (load_immediate_bytes && !seen_sp_adjust)
3636     end_prologue_addr -= load_immediate_bytes;
3637
3638   return end_prologue_addr;
3639 }
3640
3641 /* Heuristic unwinder for procedures using 32-bit instructions (covers
3642    both 32-bit and 64-bit MIPS ISAs).  Procedures using 16-bit
3643    instructions (a.k.a. MIPS16) are handled by the mips_insn16
3644    unwinder.  Likewise microMIPS and the mips_micro unwinder. */
3645
3646 static struct mips_frame_cache *
3647 mips_insn32_frame_cache (struct frame_info *this_frame, void **this_cache)
3648 {
3649   struct gdbarch *gdbarch = get_frame_arch (this_frame);
3650   struct mips_frame_cache *cache;
3651
3652   if ((*this_cache) != NULL)
3653     return (struct mips_frame_cache *) (*this_cache);
3654
3655   cache = FRAME_OBSTACK_ZALLOC (struct mips_frame_cache);
3656   (*this_cache) = cache;
3657   cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
3658
3659   /* Analyze the function prologue.  */
3660   {
3661     const CORE_ADDR pc = get_frame_address_in_block (this_frame);
3662     CORE_ADDR start_addr;
3663
3664     find_pc_partial_function (pc, NULL, &start_addr, NULL);
3665     if (start_addr == 0)
3666       start_addr = heuristic_proc_start (gdbarch, pc);
3667     /* We can't analyze the prologue if we couldn't find the begining
3668        of the function.  */
3669     if (start_addr == 0)
3670       return cache;
3671
3672     mips32_scan_prologue (gdbarch, start_addr, pc, this_frame,
3673                           (struct mips_frame_cache *) *this_cache);
3674   }
3675   
3676   /* gdbarch_sp_regnum contains the value and not the address.  */
3677   trad_frame_set_value (cache->saved_regs,
3678                         gdbarch_num_regs (gdbarch) + MIPS_SP_REGNUM,
3679                         cache->base);
3680
3681   return (struct mips_frame_cache *) (*this_cache);
3682 }
3683
3684 static void
3685 mips_insn32_frame_this_id (struct frame_info *this_frame, void **this_cache,
3686                            struct frame_id *this_id)
3687 {
3688   struct mips_frame_cache *info = mips_insn32_frame_cache (this_frame,
3689                                                            this_cache);
3690   /* This marks the outermost frame.  */
3691   if (info->base == 0)
3692     return;
3693   (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
3694 }
3695
3696 static struct value *
3697 mips_insn32_frame_prev_register (struct frame_info *this_frame,
3698                                  void **this_cache, int regnum)
3699 {
3700   struct mips_frame_cache *info = mips_insn32_frame_cache (this_frame,
3701                                                            this_cache);
3702   return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
3703 }
3704
3705 static int
3706 mips_insn32_frame_sniffer (const struct frame_unwind *self,
3707                            struct frame_info *this_frame, void **this_cache)
3708 {
3709   CORE_ADDR pc = get_frame_pc (this_frame);
3710   if (mips_pc_is_mips (pc))
3711     return 1;
3712   return 0;
3713 }
3714
3715 static const struct frame_unwind mips_insn32_frame_unwind =
3716 {
3717   NORMAL_FRAME,
3718   default_frame_unwind_stop_reason,
3719   mips_insn32_frame_this_id,
3720   mips_insn32_frame_prev_register,
3721   NULL,
3722   mips_insn32_frame_sniffer
3723 };
3724
3725 static CORE_ADDR
3726 mips_insn32_frame_base_address (struct frame_info *this_frame,
3727                                 void **this_cache)
3728 {
3729   struct mips_frame_cache *info = mips_insn32_frame_cache (this_frame,
3730                                                            this_cache);
3731   return info->base;
3732 }
3733
3734 static const struct frame_base mips_insn32_frame_base =
3735 {
3736   &mips_insn32_frame_unwind,
3737   mips_insn32_frame_base_address,
3738   mips_insn32_frame_base_address,
3739   mips_insn32_frame_base_address
3740 };
3741
3742 static const struct frame_base *
3743 mips_insn32_frame_base_sniffer (struct frame_info *this_frame)
3744 {
3745   CORE_ADDR pc = get_frame_pc (this_frame);
3746   if (mips_pc_is_mips (pc))
3747     return &mips_insn32_frame_base;
3748   else
3749     return NULL;
3750 }
3751
3752 static struct trad_frame_cache *
3753 mips_stub_frame_cache (struct frame_info *this_frame, void **this_cache)
3754 {
3755   CORE_ADDR pc;
3756   CORE_ADDR start_addr;
3757   CORE_ADDR stack_addr;
3758   struct trad_frame_cache *this_trad_cache;
3759   struct gdbarch *gdbarch = get_frame_arch (this_frame);
3760   int num_regs = gdbarch_num_regs (gdbarch);
3761
3762   if ((*this_cache) != NULL)
3763     return (struct trad_frame_cache *) (*this_cache);
3764   this_trad_cache = trad_frame_cache_zalloc (this_frame);
3765   (*this_cache) = this_trad_cache;
3766
3767   /* The return address is in the link register.  */
3768   trad_frame_set_reg_realreg (this_trad_cache,
3769                               gdbarch_pc_regnum (gdbarch),
3770                               num_regs + MIPS_RA_REGNUM);
3771
3772   /* Frame ID, since it's a frameless / stackless function, no stack
3773      space is allocated and SP on entry is the current SP.  */
3774   pc = get_frame_pc (this_frame);
3775   find_pc_partial_function (pc, NULL, &start_addr, NULL);
3776   stack_addr = get_frame_register_signed (this_frame,
3777                                           num_regs + MIPS_SP_REGNUM);
3778   trad_frame_set_id (this_trad_cache, frame_id_build (stack_addr, start_addr));
3779
3780   /* Assume that the frame's base is the same as the
3781      stack-pointer.  */
3782   trad_frame_set_this_base (this_trad_cache, stack_addr);
3783
3784   return this_trad_cache;
3785 }
3786
3787 static void
3788 mips_stub_frame_this_id (struct frame_info *this_frame, void **this_cache,
3789                          struct frame_id *this_id)
3790 {
3791   struct trad_frame_cache *this_trad_cache
3792     = mips_stub_frame_cache (this_frame, this_cache);
3793   trad_frame_get_id (this_trad_cache, this_id);
3794 }
3795
3796 static struct value *
3797 mips_stub_frame_prev_register (struct frame_info *this_frame,
3798                                void **this_cache, int regnum)
3799 {
3800   struct trad_frame_cache *this_trad_cache
3801     = mips_stub_frame_cache (this_frame, this_cache);
3802   return trad_frame_get_register (this_trad_cache, this_frame, regnum);
3803 }
3804
3805 static int
3806 mips_stub_frame_sniffer (const struct frame_unwind *self,
3807                          struct frame_info *this_frame, void **this_cache)
3808 {
3809   gdb_byte dummy[4];
3810   CORE_ADDR pc = get_frame_address_in_block (this_frame);
3811   struct bound_minimal_symbol msym;
3812
3813   /* Use the stub unwinder for unreadable code.  */
3814   if (target_read_memory (get_frame_pc (this_frame), dummy, 4) != 0)
3815     return 1;
3816
3817   if (in_plt_section (pc) || in_mips_stubs_section (pc))
3818     return 1;
3819
3820   /* Calling a PIC function from a non-PIC function passes through a
3821      stub.  The stub for foo is named ".pic.foo".  */
3822   msym = lookup_minimal_symbol_by_pc (pc);
3823   if (msym.minsym != NULL
3824       && MSYMBOL_LINKAGE_NAME (msym.minsym) != NULL
3825       && startswith (MSYMBOL_LINKAGE_NAME (msym.minsym), ".pic."))
3826     return 1;
3827
3828   return 0;
3829 }
3830
3831 static const struct frame_unwind mips_stub_frame_unwind =
3832 {
3833   NORMAL_FRAME,
3834   default_frame_unwind_stop_reason,
3835   mips_stub_frame_this_id,
3836   mips_stub_frame_prev_register,
3837   NULL,
3838   mips_stub_frame_sniffer
3839 };
3840
3841 static CORE_ADDR
3842 mips_stub_frame_base_address (struct frame_info *this_frame,
3843                               void **this_cache)
3844 {
3845   struct trad_frame_cache *this_trad_cache
3846     = mips_stub_frame_cache (this_frame, this_cache);
3847   return trad_frame_get_this_base (this_trad_cache);
3848 }
3849
3850 static const struct frame_base mips_stub_frame_base =
3851 {
3852   &mips_stub_frame_unwind,
3853   mips_stub_frame_base_address,
3854   mips_stub_frame_base_address,
3855   mips_stub_frame_base_address
3856 };
3857
3858 static const struct frame_base *
3859 mips_stub_frame_base_sniffer (struct frame_info *this_frame)
3860 {
3861   if (mips_stub_frame_sniffer (&mips_stub_frame_unwind, this_frame, NULL))
3862     return &mips_stub_frame_base;
3863   else
3864     return NULL;
3865 }
3866
3867 /* mips_addr_bits_remove - remove useless address bits  */
3868
3869 static CORE_ADDR
3870 mips_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr)
3871 {
3872   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3873
3874   if (mips_mask_address_p (tdep) && (((ULONGEST) addr) >> 32 == 0xffffffffUL))
3875     /* This hack is a work-around for existing boards using PMON, the
3876        simulator, and any other 64-bit targets that doesn't have true
3877        64-bit addressing.  On these targets, the upper 32 bits of
3878        addresses are ignored by the hardware.  Thus, the PC or SP are
3879        likely to have been sign extended to all 1s by instruction
3880        sequences that load 32-bit addresses.  For example, a typical
3881        piece of code that loads an address is this:
3882
3883        lui $r2, <upper 16 bits>
3884        ori $r2, <lower 16 bits>
3885
3886        But the lui sign-extends the value such that the upper 32 bits
3887        may be all 1s.  The workaround is simply to mask off these
3888        bits.  In the future, gcc may be changed to support true 64-bit
3889        addressing, and this masking will have to be disabled.  */
3890     return addr &= 0xffffffffUL;
3891   else
3892     return addr;
3893 }
3894
3895
3896 /* Checks for an atomic sequence of instructions beginning with a LL/LLD
3897    instruction and ending with a SC/SCD instruction.  If such a sequence
3898    is found, attempt to step through it.  A breakpoint is placed at the end of 
3899    the sequence.  */
3900
3901 /* Instructions used during single-stepping of atomic sequences, standard
3902    ISA version.  */
3903 #define LL_OPCODE 0x30
3904 #define LLD_OPCODE 0x34
3905 #define SC_OPCODE 0x38
3906 #define SCD_OPCODE 0x3c
3907
3908 static std::vector<CORE_ADDR>
3909 mips_deal_with_atomic_sequence (struct gdbarch *gdbarch, CORE_ADDR pc)
3910 {
3911   CORE_ADDR breaks[2] = {CORE_ADDR_MAX, CORE_ADDR_MAX};
3912   CORE_ADDR loc = pc;
3913   CORE_ADDR branch_bp; /* Breakpoint at branch instruction's destination.  */
3914   ULONGEST insn;
3915   int insn_count;
3916   int index;
3917   int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed).  */  
3918   const int atomic_sequence_length = 16; /* Instruction sequence length.  */
3919
3920   insn = mips_fetch_instruction (gdbarch, ISA_MIPS, loc, NULL);
3921   /* Assume all atomic sequences start with a ll/lld instruction.  */
3922   if (itype_op (insn) != LL_OPCODE && itype_op (insn) != LLD_OPCODE)
3923     return {};
3924
3925   /* Assume that no atomic sequence is longer than "atomic_sequence_length" 
3926      instructions.  */
3927   for (insn_count = 0; insn_count < atomic_sequence_length; ++insn_count)
3928     {
3929       int is_branch = 0;
3930       loc += MIPS_INSN32_SIZE;
3931       insn = mips_fetch_instruction (gdbarch, ISA_MIPS, loc, NULL);
3932
3933       /* Assume that there is at most one branch in the atomic
3934          sequence.  If a branch is found, put a breakpoint in its
3935          destination address.  */
3936       switch (itype_op (insn))
3937         {
3938         case 0: /* SPECIAL */
3939           if (rtype_funct (insn) >> 1 == 4) /* JR, JALR */
3940             return {}; /* fallback to the standard single-step code.  */
3941           break;
3942         case 1: /* REGIMM */
3943           is_branch = ((itype_rt (insn) & 0xc) == 0 /* B{LT,GE}Z* */
3944                        || ((itype_rt (insn) & 0x1e) == 0
3945                            && itype_rs (insn) == 0)); /* BPOSGE* */
3946           break;
3947         case 2: /* J */
3948         case 3: /* JAL */
3949           return {}; /* fallback to the standard single-step code.  */
3950         case 4: /* BEQ */
3951         case 5: /* BNE */
3952         case 6: /* BLEZ */
3953         case 7: /* BGTZ */
3954         case 20: /* BEQL */
3955         case 21: /* BNEL */
3956         case 22: /* BLEZL */
3957         case 23: /* BGTTL */
3958           is_branch = 1;
3959           break;
3960         case 17: /* COP1 */
3961           is_branch = ((itype_rs (insn) == 9 || itype_rs (insn) == 10)
3962                        && (itype_rt (insn) & 0x2) == 0);
3963           if (is_branch) /* BC1ANY2F, BC1ANY2T, BC1ANY4F, BC1ANY4T */
3964             break;
3965         /* Fall through.  */
3966         case 18: /* COP2 */
3967         case 19: /* COP3 */
3968           is_branch = (itype_rs (insn) == 8); /* BCzF, BCzFL, BCzT, BCzTL */
3969           break;
3970         }
3971       if (is_branch)
3972         {
3973           branch_bp = loc + mips32_relative_offset (insn) + 4;
3974           if (last_breakpoint >= 1)
3975             return {}; /* More than one branch found, fallback to the
3976                           standard single-step code.  */
3977           breaks[1] = branch_bp;
3978           last_breakpoint++;
3979         }
3980
3981       if (itype_op (insn) == SC_OPCODE || itype_op (insn) == SCD_OPCODE)
3982         break;
3983     }
3984
3985   /* Assume that the atomic sequence ends with a sc/scd instruction.  */
3986   if (itype_op (insn) != SC_OPCODE && itype_op (insn) != SCD_OPCODE)
3987     return {};
3988
3989   loc += MIPS_INSN32_SIZE;
3990
3991   /* Insert a breakpoint right after the end of the atomic sequence.  */
3992   breaks[0] = loc;
3993
3994   /* Check for duplicated breakpoints.  Check also for a breakpoint
3995      placed (branch instruction's destination) in the atomic sequence.  */
3996   if (last_breakpoint && pc <= breaks[1] && breaks[1] <= breaks[0])
3997     last_breakpoint = 0;
3998
3999   std::vector<CORE_ADDR> next_pcs;
4000
4001   /* Effectively inserts the breakpoints.  */
4002   for (index = 0; index <= last_breakpoint; index++)
4003     next_pcs.push_back (breaks[index]);
4004
4005   return next_pcs;
4006 }
4007
4008 static std::vector<CORE_ADDR>
4009 micromips_deal_with_atomic_sequence (struct gdbarch *gdbarch,
4010                                      CORE_ADDR pc)
4011 {
4012   const int atomic_sequence_length = 16; /* Instruction sequence length.  */
4013   int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed).  */
4014   CORE_ADDR breaks[2] = {CORE_ADDR_MAX, CORE_ADDR_MAX};
4015   CORE_ADDR branch_bp = 0; /* Breakpoint at branch instruction's
4016                               destination.  */
4017   CORE_ADDR loc = pc;
4018   int sc_found = 0;
4019   ULONGEST insn;
4020   int insn_count;
4021   int index;
4022
4023   /* Assume all atomic sequences start with a ll/lld instruction.  */
4024   insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, loc, NULL);
4025   if (micromips_op (insn) != 0x18)      /* POOL32C: bits 011000 */
4026     return {};
4027   loc += MIPS_INSN16_SIZE;
4028   insn <<= 16;
4029   insn |= mips_fetch_instruction (gdbarch, ISA_MICROMIPS, loc, NULL);
4030   if ((b12s4_op (insn) & 0xb) != 0x3)   /* LL, LLD: bits 011000 0x11 */
4031     return {};
4032   loc += MIPS_INSN16_SIZE;
4033
4034   /* Assume all atomic sequences end with an sc/scd instruction.  Assume
4035      that no atomic sequence is longer than "atomic_sequence_length"
4036      instructions.  */
4037   for (insn_count = 0;
4038        !sc_found && insn_count < atomic_sequence_length;
4039        ++insn_count)
4040     {
4041       int is_branch = 0;
4042
4043       insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, loc, NULL);
4044       loc += MIPS_INSN16_SIZE;
4045
4046       /* Assume that there is at most one conditional branch in the
4047          atomic sequence.  If a branch is found, put a breakpoint in
4048          its destination address.  */
4049       switch (mips_insn_size (ISA_MICROMIPS, insn))
4050         {
4051         /* 32-bit instructions.  */
4052         case 2 * MIPS_INSN16_SIZE:
4053           switch (micromips_op (insn))
4054             {
4055             case 0x10: /* POOL32I: bits 010000 */
4056               if ((b5s5_op (insn) & 0x18) != 0x0
4057                                 /* BLTZ, BLTZAL, BGEZ, BGEZAL: 010000 000xx */
4058                                 /* BLEZ, BNEZC, BGTZ, BEQZC: 010000 001xx */
4059                   && (b5s5_op (insn) & 0x1d) != 0x11
4060                                 /* BLTZALS, BGEZALS: bits 010000 100x1 */
4061                   && ((b5s5_op (insn) & 0x1e) != 0x14
4062                       || (insn & 0x3) != 0x0)
4063                                 /* BC2F, BC2T: bits 010000 1010x xxx00 */
4064                   && (b5s5_op (insn) & 0x1e) != 0x1a
4065                                 /* BPOSGE64, BPOSGE32: bits 010000 1101x */
4066                   && ((b5s5_op (insn) & 0x1e) != 0x1c
4067                       || (insn & 0x3) != 0x0)
4068                                 /* BC1F, BC1T: bits 010000 1110x xxx00 */
4069                   && ((b5s5_op (insn) & 0x1c) != 0x1c
4070                       || (insn & 0x3) != 0x1))
4071                                 /* BC1ANY*: bits 010000 111xx xxx01 */
4072                 break;
4073               /* Fall through.  */
4074
4075             case 0x25: /* BEQ: bits 100101 */
4076             case 0x2d: /* BNE: bits 101101 */
4077               insn <<= 16;
4078               insn |= mips_fetch_instruction (gdbarch,
4079                                               ISA_MICROMIPS, loc, NULL);
4080               branch_bp = (loc + MIPS_INSN16_SIZE
4081                            + micromips_relative_offset16 (insn));
4082               is_branch = 1;
4083               break;
4084
4085             case 0x00: /* POOL32A: bits 000000 */
4086               insn <<= 16;
4087               insn |= mips_fetch_instruction (gdbarch,
4088                                               ISA_MICROMIPS, loc, NULL);
4089               if (b0s6_op (insn) != 0x3c
4090                                 /* POOL32Axf: bits 000000 ... 111100 */
4091                   || (b6s10_ext (insn) & 0x2bf) != 0x3c)
4092                                 /* JALR, JALR.HB: 000000 000x111100 111100 */
4093                                 /* JALRS, JALRS.HB: 000000 010x111100 111100 */
4094                 break;
4095               /* Fall through.  */
4096
4097             case 0x1d: /* JALS: bits 011101 */
4098             case 0x35: /* J: bits 110101 */
4099             case 0x3d: /* JAL: bits 111101 */
4100             case 0x3c: /* JALX: bits 111100 */
4101               return {}; /* Fall back to the standard single-step code. */
4102
4103             case 0x18: /* POOL32C: bits 011000 */
4104               if ((b12s4_op (insn) & 0xb) == 0xb)
4105                                 /* SC, SCD: bits 011000 1x11 */
4106                 sc_found = 1;
4107               break;
4108             }
4109           loc += MIPS_INSN16_SIZE;
4110           break;
4111
4112         /* 16-bit instructions.  */
4113         case MIPS_INSN16_SIZE:
4114           switch (micromips_op (insn))
4115             {
4116             case 0x23: /* BEQZ16: bits 100011 */
4117             case 0x2b: /* BNEZ16: bits 101011 */
4118               branch_bp = loc + micromips_relative_offset7 (insn);
4119               is_branch = 1;
4120               break;
4121
4122             case 0x11: /* POOL16C: bits 010001 */
4123               if ((b5s5_op (insn) & 0x1c) != 0xc
4124                                 /* JR16, JRC, JALR16, JALRS16: 010001 011xx */
4125                   && b5s5_op (insn) != 0x18)
4126                                 /* JRADDIUSP: bits 010001 11000 */
4127                 break;
4128               return {}; /* Fall back to the standard single-step code. */
4129
4130             case 0x33: /* B16: bits 110011 */
4131               return {}; /* Fall back to the standard single-step code. */
4132             }
4133           break;
4134         }
4135       if (is_branch)
4136         {
4137           if (last_breakpoint >= 1)
4138             return {}; /* More than one branch found, fallback to the
4139                           standard single-step code.  */
4140           breaks[1] = branch_bp;
4141           last_breakpoint++;
4142         }
4143     }
4144   if (!sc_found)
4145     return {};
4146
4147   /* Insert a breakpoint right after the end of the atomic sequence.  */
4148   breaks[0] = loc;
4149
4150   /* Check for duplicated breakpoints.  Check also for a breakpoint
4151      placed (branch instruction's destination) in the atomic sequence */
4152   if (last_breakpoint && pc <= breaks[1] && breaks[1] <= breaks[0])
4153     last_breakpoint = 0;
4154
4155   std::vector<CORE_ADDR> next_pcs;
4156
4157   /* Effectively inserts the breakpoints.  */
4158   for (index = 0; index <= last_breakpoint; index++)
4159     next_pcs.push_back (breaks[index]);
4160
4161   return next_pcs;
4162 }
4163
4164 static std::vector<CORE_ADDR>
4165 deal_with_atomic_sequence (struct gdbarch *gdbarch, CORE_ADDR pc)
4166 {
4167   if (mips_pc_is_mips (pc))
4168     return mips_deal_with_atomic_sequence (gdbarch, pc);
4169   else if (mips_pc_is_micromips (gdbarch, pc))
4170     return micromips_deal_with_atomic_sequence (gdbarch, pc);
4171   else
4172     return {};
4173 }
4174
4175 /* mips_software_single_step() is called just before we want to resume
4176    the inferior, if we want to single-step it but there is no hardware
4177    or kernel single-step support (MIPS on GNU/Linux for example).  We find
4178    the target of the coming instruction and breakpoint it.  */
4179
4180 std::vector<CORE_ADDR>
4181 mips_software_single_step (struct regcache *regcache)
4182 {
4183   struct gdbarch *gdbarch = regcache->arch ();
4184   CORE_ADDR pc, next_pc;
4185
4186   pc = regcache_read_pc (regcache);
4187   std::vector<CORE_ADDR> next_pcs = deal_with_atomic_sequence (gdbarch, pc);
4188
4189   if (!next_pcs.empty ())
4190     return next_pcs;
4191
4192   next_pc = mips_next_pc (regcache, pc);
4193
4194   return {next_pc};
4195 }
4196
4197 /* Test whether the PC points to the return instruction at the
4198    end of a function.  */
4199
4200 static int
4201 mips_about_to_return (struct gdbarch *gdbarch, CORE_ADDR pc)
4202 {
4203   ULONGEST insn;
4204   ULONGEST hint;
4205
4206   /* This used to check for MIPS16, but this piece of code is never
4207      called for MIPS16 functions.  And likewise microMIPS ones.  */
4208   gdb_assert (mips_pc_is_mips (pc));
4209
4210   insn = mips_fetch_instruction (gdbarch, ISA_MIPS, pc, NULL);
4211   hint = 0x7c0;
4212   return (insn & ~hint) == 0x3e00008;                   /* jr(.hb) $ra */
4213 }
4214
4215
4216 /* This fencepost looks highly suspicious to me.  Removing it also
4217    seems suspicious as it could affect remote debugging across serial
4218    lines.  */
4219
4220 static CORE_ADDR
4221 heuristic_proc_start (struct gdbarch *gdbarch, CORE_ADDR pc)
4222 {
4223   CORE_ADDR start_pc;
4224   CORE_ADDR fence;
4225   int instlen;
4226   int seen_adjsp = 0;
4227   struct inferior *inf;
4228
4229   pc = gdbarch_addr_bits_remove (gdbarch, pc);
4230   start_pc = pc;
4231   fence = start_pc - heuristic_fence_post;
4232   if (start_pc == 0)
4233     return 0;
4234
4235   if (heuristic_fence_post == -1 || fence < VM_MIN_ADDRESS)
4236     fence = VM_MIN_ADDRESS;
4237
4238   instlen = mips_pc_is_mips (pc) ? MIPS_INSN32_SIZE : MIPS_INSN16_SIZE;
4239
4240   inf = current_inferior ();
4241
4242   /* Search back for previous return.  */
4243   for (start_pc -= instlen;; start_pc -= instlen)
4244     if (start_pc < fence)
4245       {
4246         /* It's not clear to me why we reach this point when
4247            stop_soon, but with this test, at least we
4248            don't print out warnings for every child forked (eg, on
4249            decstation).  22apr93 rich@cygnus.com.  */
4250         if (inf->control.stop_soon == NO_STOP_QUIETLY)
4251           {
4252             static int blurb_printed = 0;
4253
4254             warning (_("GDB can't find the start of the function at %s."),
4255                      paddress (gdbarch, pc));
4256
4257             if (!blurb_printed)
4258               {
4259                 /* This actually happens frequently in embedded
4260                    development, when you first connect to a board
4261                    and your stack pointer and pc are nowhere in
4262                    particular.  This message needs to give people
4263                    in that situation enough information to
4264                    determine that it's no big deal.  */
4265                 printf_filtered ("\n\
4266     GDB is unable to find the start of the function at %s\n\
4267 and thus can't determine the size of that function's stack frame.\n\
4268 This means that GDB may be unable to access that stack frame, or\n\
4269 the frames below it.\n\
4270     This problem is most likely caused by an invalid program counter or\n\
4271 stack pointer.\n\
4272     However, if you think GDB should simply search farther back\n\
4273 from %s for code which looks like the beginning of a\n\
4274 function, you can increase the range of the search using the `set\n\
4275 heuristic-fence-post' command.\n",
4276                         paddress (gdbarch, pc), paddress (gdbarch, pc));
4277                 blurb_printed = 1;
4278               }
4279           }
4280
4281         return 0;
4282       }
4283     else if (mips_pc_is_mips16 (gdbarch, start_pc))
4284       {
4285         unsigned short inst;
4286
4287         /* On MIPS16, any one of the following is likely to be the
4288            start of a function:
4289            extend save
4290            save
4291            entry
4292            addiu sp,-n
4293            daddiu sp,-n
4294            extend -n followed by 'addiu sp,+n' or 'daddiu sp,+n'.  */
4295         inst = mips_fetch_instruction (gdbarch, ISA_MIPS16, start_pc, NULL);
4296         if ((inst & 0xff80) == 0x6480)          /* save */
4297           {
4298             if (start_pc - instlen >= fence)
4299               {
4300                 inst = mips_fetch_instruction (gdbarch, ISA_MIPS16,
4301                                                start_pc - instlen, NULL);
4302                 if ((inst & 0xf800) == 0xf000)  /* extend */
4303                   start_pc -= instlen;
4304               }
4305             break;
4306           }
4307         else if (((inst & 0xf81f) == 0xe809
4308                   && (inst & 0x700) != 0x700)   /* entry */
4309                  || (inst & 0xff80) == 0x6380   /* addiu sp,-n */
4310                  || (inst & 0xff80) == 0xfb80   /* daddiu sp,-n */
4311                  || ((inst & 0xf810) == 0xf010 && seen_adjsp))  /* extend -n */
4312           break;
4313         else if ((inst & 0xff00) == 0x6300      /* addiu sp */
4314                  || (inst & 0xff00) == 0xfb00)  /* daddiu sp */
4315           seen_adjsp = 1;
4316         else
4317           seen_adjsp = 0;
4318       }
4319     else if (mips_pc_is_micromips (gdbarch, start_pc))
4320       {
4321         ULONGEST insn;
4322         int stop = 0;
4323         long offset;
4324         int dreg;
4325         int sreg;
4326
4327         /* On microMIPS, any one of the following is likely to be the
4328            start of a function:
4329            ADDIUSP -imm
4330            (D)ADDIU $sp, -imm
4331            LUI $gp, imm  */
4332         insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, pc, NULL);
4333         switch (micromips_op (insn))
4334           {
4335           case 0xc: /* ADDIU: bits 001100 */
4336           case 0x17: /* DADDIU: bits 010111 */
4337             sreg = b0s5_reg (insn);
4338             dreg = b5s5_reg (insn);
4339             insn <<= 16;
4340             insn |= mips_fetch_instruction (gdbarch, ISA_MICROMIPS,
4341                                             pc + MIPS_INSN16_SIZE, NULL);
4342             offset = (b0s16_imm (insn) ^ 0x8000) - 0x8000;
4343             if (sreg == MIPS_SP_REGNUM && dreg == MIPS_SP_REGNUM
4344                                 /* (D)ADDIU $sp, imm */
4345                 && offset < 0)
4346               stop = 1;
4347             break;
4348
4349           case 0x10: /* POOL32I: bits 010000 */
4350             if (b5s5_op (insn) == 0xd
4351                                 /* LUI: bits 010000 001101 */
4352                 && b0s5_reg (insn >> 16) == 28)
4353                                 /* LUI $gp, imm */
4354               stop = 1;
4355             break;
4356
4357           case 0x13: /* POOL16D: bits 010011 */
4358             if ((insn & 0x1) == 0x1)
4359                                 /* ADDIUSP: bits 010011 1 */
4360               {
4361                 offset = micromips_decode_imm9 (b1s9_imm (insn));
4362                 if (offset < 0)
4363                                 /* ADDIUSP -imm */
4364                   stop = 1;
4365               }
4366             else
4367                                 /* ADDIUS5: bits 010011 0 */
4368               {
4369                 dreg = b5s5_reg (insn);
4370                 offset = (b1s4_imm (insn) ^ 8) - 8;
4371                 if (dreg == MIPS_SP_REGNUM && offset < 0)
4372                                 /* ADDIUS5  $sp, -imm */
4373                   stop = 1;
4374               }
4375             break;
4376           }
4377         if (stop)
4378           break;
4379       }
4380     else if (mips_about_to_return (gdbarch, start_pc))
4381       {
4382         /* Skip return and its delay slot.  */
4383         start_pc += 2 * MIPS_INSN32_SIZE;
4384         break;
4385       }
4386
4387   return start_pc;
4388 }
4389
4390 struct mips_objfile_private
4391 {
4392   bfd_size_type size;
4393   char *contents;
4394 };
4395
4396 /* According to the current ABI, should the type be passed in a
4397    floating-point register (assuming that there is space)?  When there
4398    is no FPU, FP are not even considered as possible candidates for
4399    FP registers and, consequently this returns false - forces FP
4400    arguments into integer registers.  */
4401
4402 static int
4403 fp_register_arg_p (struct gdbarch *gdbarch, enum type_code typecode,
4404                    struct type *arg_type)
4405 {
4406   return ((typecode == TYPE_CODE_FLT
4407            || (MIPS_EABI (gdbarch)
4408                && (typecode == TYPE_CODE_STRUCT
4409                    || typecode == TYPE_CODE_UNION)
4410                && TYPE_NFIELDS (arg_type) == 1
4411                && TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (arg_type, 0))) 
4412                == TYPE_CODE_FLT))
4413           && MIPS_FPU_TYPE(gdbarch) != MIPS_FPU_NONE);
4414 }
4415
4416 /* On o32, argument passing in GPRs depends on the alignment of the type being
4417    passed.  Return 1 if this type must be aligned to a doubleword boundary.  */
4418
4419 static int
4420 mips_type_needs_double_align (struct type *type)
4421 {
4422   enum type_code typecode = TYPE_CODE (type);
4423
4424   if (typecode == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8)
4425     return 1;
4426   else if (typecode == TYPE_CODE_STRUCT)
4427     {
4428       if (TYPE_NFIELDS (type) < 1)
4429         return 0;
4430       return mips_type_needs_double_align (TYPE_FIELD_TYPE (type, 0));
4431     }
4432   else if (typecode == TYPE_CODE_UNION)
4433     {
4434       int i, n;
4435
4436       n = TYPE_NFIELDS (type);
4437       for (i = 0; i < n; i++)
4438         if (mips_type_needs_double_align (TYPE_FIELD_TYPE (type, i)))
4439           return 1;
4440       return 0;
4441     }
4442   return 0;
4443 }
4444
4445 /* Adjust the address downward (direction of stack growth) so that it
4446    is correctly aligned for a new stack frame.  */
4447 static CORE_ADDR
4448 mips_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
4449 {
4450   return align_down (addr, 16);
4451 }
4452
4453 /* Implement the "push_dummy_code" gdbarch method.  */
4454
4455 static CORE_ADDR
4456 mips_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
4457                       CORE_ADDR funaddr, struct value **args,
4458                       int nargs, struct type *value_type,
4459                       CORE_ADDR *real_pc, CORE_ADDR *bp_addr,
4460                       struct regcache *regcache)
4461 {
4462   static gdb_byte nop_insn[] = { 0, 0, 0, 0 };
4463   CORE_ADDR nop_addr;
4464   CORE_ADDR bp_slot;
4465
4466   /* Reserve enough room on the stack for our breakpoint instruction.  */
4467   bp_slot = sp - sizeof (nop_insn);
4468
4469   /* Return to microMIPS mode if calling microMIPS code to avoid
4470      triggering an address error exception on processors that only
4471      support microMIPS execution.  */
4472   *bp_addr = (mips_pc_is_micromips (gdbarch, funaddr)
4473               ? make_compact_addr (bp_slot) : bp_slot);
4474
4475   /* The breakpoint layer automatically adjusts the address of
4476      breakpoints inserted in a branch delay slot.  With enough
4477      bad luck, the 4 bytes located just before our breakpoint
4478      instruction could look like a branch instruction, and thus
4479      trigger the adjustement, and break the function call entirely.
4480      So, we reserve those 4 bytes and write a nop instruction
4481      to prevent that from happening.  */
4482   nop_addr = bp_slot - sizeof (nop_insn);
4483   write_memory (nop_addr, nop_insn, sizeof (nop_insn));
4484   sp = mips_frame_align (gdbarch, nop_addr);
4485
4486   /* Inferior resumes at the function entry point.  */
4487   *real_pc = funaddr;
4488
4489   return sp;
4490 }
4491
4492 static CORE_ADDR
4493 mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
4494                            struct regcache *regcache, CORE_ADDR bp_addr,
4495                            int nargs, struct value **args, CORE_ADDR sp,
4496                            function_call_return_method return_method,
4497                            CORE_ADDR struct_addr)
4498 {
4499   int argreg;
4500   int float_argreg;
4501   int argnum;
4502   int arg_space = 0;
4503   int stack_offset = 0;
4504   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4505   CORE_ADDR func_addr = find_function_addr (function, NULL);
4506   int abi_regsize = mips_abi_regsize (gdbarch);
4507
4508   /* For shared libraries, "t9" needs to point at the function
4509      address.  */
4510   regcache_cooked_write_signed (regcache, MIPS_T9_REGNUM, func_addr);
4511
4512   /* Set the return address register to point to the entry point of
4513      the program, where a breakpoint lies in wait.  */
4514   regcache_cooked_write_signed (regcache, MIPS_RA_REGNUM, bp_addr);
4515
4516   /* First ensure that the stack and structure return address (if any)
4517      are properly aligned.  The stack has to be at least 64-bit
4518      aligned even on 32-bit machines, because doubles must be 64-bit
4519      aligned.  For n32 and n64, stack frames need to be 128-bit
4520      aligned, so we round to this widest known alignment.  */
4521
4522   sp = align_down (sp, 16);
4523   struct_addr = align_down (struct_addr, 16);
4524
4525   /* Now make space on the stack for the args.  We allocate more
4526      than necessary for EABI, because the first few arguments are
4527      passed in registers, but that's OK.  */
4528   for (argnum = 0; argnum < nargs; argnum++)
4529     arg_space += align_up (TYPE_LENGTH (value_type (args[argnum])), abi_regsize);
4530   sp -= align_up (arg_space, 16);
4531
4532   if (mips_debug)
4533     fprintf_unfiltered (gdb_stdlog,
4534                         "mips_eabi_push_dummy_call: sp=%s allocated %ld\n",
4535                         paddress (gdbarch, sp),
4536                         (long) align_up (arg_space, 16));
4537
4538   /* Initialize the integer and float register pointers.  */
4539   argreg = MIPS_A0_REGNUM;
4540   float_argreg = mips_fpa0_regnum (gdbarch);
4541
4542   /* The struct_return pointer occupies the first parameter-passing reg.  */
4543   if (return_method == return_method_struct)
4544     {
4545       if (mips_debug)
4546         fprintf_unfiltered (gdb_stdlog,
4547                             "mips_eabi_push_dummy_call: "
4548                             "struct_return reg=%d %s\n",
4549                             argreg, paddress (gdbarch, struct_addr));
4550       regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
4551     }
4552
4553   /* Now load as many as possible of the first arguments into
4554      registers, and push the rest onto the stack.  Loop thru args
4555      from first to last.  */
4556   for (argnum = 0; argnum < nargs; argnum++)
4557     {
4558       const gdb_byte *val;
4559       /* This holds the address of structures that are passed by
4560          reference.  */
4561       gdb_byte ref_valbuf[MAX_MIPS_ABI_REGSIZE];
4562       struct value *arg = args[argnum];
4563       struct type *arg_type = check_typedef (value_type (arg));
4564       int len = TYPE_LENGTH (arg_type);
4565       enum type_code typecode = TYPE_CODE (arg_type);
4566
4567       if (mips_debug)
4568         fprintf_unfiltered (gdb_stdlog,
4569                             "mips_eabi_push_dummy_call: %d len=%d type=%d",
4570                             argnum + 1, len, (int) typecode);
4571
4572       /* The EABI passes structures that do not fit in a register by
4573          reference.  */
4574       if (len > abi_regsize
4575           && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION))
4576         {
4577           gdb_assert (abi_regsize <= ARRAY_SIZE (ref_valbuf));
4578           store_unsigned_integer (ref_valbuf, abi_regsize, byte_order,
4579                                   value_address (arg));
4580           typecode = TYPE_CODE_PTR;
4581           len = abi_regsize;
4582           val = ref_valbuf;
4583           if (mips_debug)
4584             fprintf_unfiltered (gdb_stdlog, " push");
4585         }
4586       else
4587         val = value_contents (arg);
4588
4589       /* 32-bit ABIs always start floating point arguments in an
4590          even-numbered floating point register.  Round the FP register
4591          up before the check to see if there are any FP registers
4592          left.  Non MIPS_EABI targets also pass the FP in the integer
4593          registers so also round up normal registers.  */
4594       if (abi_regsize < 8 && fp_register_arg_p (gdbarch, typecode, arg_type))
4595         {
4596           if ((float_argreg & 1))
4597             float_argreg++;
4598         }
4599
4600       /* Floating point arguments passed in registers have to be
4601          treated specially.  On 32-bit architectures, doubles
4602          are passed in register pairs; the even register gets
4603          the low word, and the odd register gets the high word.
4604          On non-EABI processors, the first two floating point arguments are
4605          also copied to general registers, because MIPS16 functions
4606          don't use float registers for arguments.  This duplication of
4607          arguments in general registers can't hurt non-MIPS16 functions
4608          because those registers are normally skipped.  */
4609       /* MIPS_EABI squeezes a struct that contains a single floating
4610          point value into an FP register instead of pushing it onto the
4611          stack.  */
4612       if (fp_register_arg_p (gdbarch, typecode, arg_type)
4613           && float_argreg <= MIPS_LAST_FP_ARG_REGNUM (gdbarch))
4614         {
4615           /* EABI32 will pass doubles in consecutive registers, even on
4616              64-bit cores.  At one time, we used to check the size of
4617              `float_argreg' to determine whether or not to pass doubles
4618              in consecutive registers, but this is not sufficient for
4619              making the ABI determination.  */
4620           if (len == 8 && mips_abi (gdbarch) == MIPS_ABI_EABI32)
4621             {
4622               int low_offset = gdbarch_byte_order (gdbarch)
4623                                == BFD_ENDIAN_BIG ? 4 : 0;
4624               long regval;
4625
4626               /* Write the low word of the double to the even register(s).  */
4627               regval = extract_signed_integer (val + low_offset,
4628                                                4, byte_order);
4629               if (mips_debug)
4630                 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
4631                                     float_argreg, phex (regval, 4));
4632               regcache_cooked_write_signed (regcache, float_argreg++, regval);
4633
4634               /* Write the high word of the double to the odd register(s).  */
4635               regval = extract_signed_integer (val + 4 - low_offset,
4636                                                4, byte_order);
4637               if (mips_debug)
4638                 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
4639                                     float_argreg, phex (regval, 4));
4640               regcache_cooked_write_signed (regcache, float_argreg++, regval);
4641             }
4642           else
4643             {
4644               /* This is a floating point value that fits entirely
4645                  in a single register.  */
4646               /* On 32 bit ABI's the float_argreg is further adjusted
4647                  above to ensure that it is even register aligned.  */
4648               LONGEST regval = extract_signed_integer (val, len, byte_order);
4649               if (mips_debug)
4650                 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
4651                                     float_argreg, phex (regval, len));
4652               regcache_cooked_write_signed (regcache, float_argreg++, regval);
4653             }
4654         }
4655       else
4656         {
4657           /* Copy the argument to general registers or the stack in
4658              register-sized pieces.  Large arguments are split between
4659              registers and stack.  */
4660           /* Note: structs whose size is not a multiple of abi_regsize
4661              are treated specially: Irix cc passes
4662              them in registers where gcc sometimes puts them on the
4663              stack.  For maximum compatibility, we will put them in
4664              both places.  */
4665           int odd_sized_struct = (len > abi_regsize && len % abi_regsize != 0);
4666
4667           /* Note: Floating-point values that didn't fit into an FP
4668              register are only written to memory.  */
4669           while (len > 0)
4670             {
4671               /* Remember if the argument was written to the stack.  */
4672               int stack_used_p = 0;
4673               int partial_len = (len < abi_regsize ? len : abi_regsize);
4674
4675               if (mips_debug)
4676                 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
4677                                     partial_len);
4678
4679               /* Write this portion of the argument to the stack.  */
4680               if (argreg > MIPS_LAST_ARG_REGNUM (gdbarch)
4681                   || odd_sized_struct
4682                   || fp_register_arg_p (gdbarch, typecode, arg_type))
4683                 {
4684                   /* Should shorter than int integer values be
4685                      promoted to int before being stored?  */
4686                   int longword_offset = 0;
4687                   CORE_ADDR addr;
4688                   stack_used_p = 1;
4689                   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
4690                     {
4691                       if (abi_regsize == 8
4692                           && (typecode == TYPE_CODE_INT
4693                               || typecode == TYPE_CODE_PTR
4694                               || typecode == TYPE_CODE_FLT) && len <= 4)
4695                         longword_offset = abi_regsize - len;
4696                       else if ((typecode == TYPE_CODE_STRUCT
4697                                 || typecode == TYPE_CODE_UNION)
4698                                && TYPE_LENGTH (arg_type) < abi_regsize)
4699                         longword_offset = abi_regsize - len;
4700                     }
4701
4702                   if (mips_debug)
4703                     {
4704                       fprintf_unfiltered (gdb_stdlog, " - stack_offset=%s",
4705                                           paddress (gdbarch, stack_offset));
4706                       fprintf_unfiltered (gdb_stdlog, " longword_offset=%s",
4707                                           paddress (gdbarch, longword_offset));
4708                     }
4709
4710                   addr = sp + stack_offset + longword_offset;
4711
4712                   if (mips_debug)
4713                     {
4714                       int i;
4715                       fprintf_unfiltered (gdb_stdlog, " @%s ",
4716                                           paddress (gdbarch, addr));
4717                       for (i = 0; i < partial_len; i++)
4718                         {
4719                           fprintf_unfiltered (gdb_stdlog, "%02x",
4720                                               val[i] & 0xff);
4721                         }
4722                     }
4723                   write_memory (addr, val, partial_len);
4724                 }
4725
4726               /* Note!!! This is NOT an else clause.  Odd sized
4727                  structs may go thru BOTH paths.  Floating point
4728                  arguments will not.  */
4729               /* Write this portion of the argument to a general
4730                  purpose register.  */
4731               if (argreg <= MIPS_LAST_ARG_REGNUM (gdbarch)
4732                   && !fp_register_arg_p (gdbarch, typecode, arg_type))
4733                 {
4734                   LONGEST regval =
4735                     extract_signed_integer (val, partial_len, byte_order);
4736
4737                   if (mips_debug)
4738                     fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
4739                                       argreg,
4740                                       phex (regval, abi_regsize));
4741                   regcache_cooked_write_signed (regcache, argreg, regval);
4742                   argreg++;
4743                 }
4744
4745               len -= partial_len;
4746               val += partial_len;
4747
4748               /* Compute the offset into the stack at which we will
4749                  copy the next parameter.
4750
4751                  In the new EABI (and the NABI32), the stack_offset
4752                  only needs to be adjusted when it has been used.  */
4753
4754               if (stack_used_p)
4755                 stack_offset += align_up (partial_len, abi_regsize);
4756             }
4757         }
4758       if (mips_debug)
4759         fprintf_unfiltered (gdb_stdlog, "\n");
4760     }
4761
4762   regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
4763
4764   /* Return adjusted stack pointer.  */
4765   return sp;
4766 }
4767
4768 /* Determine the return value convention being used.  */
4769
4770 static enum return_value_convention
4771 mips_eabi_return_value (struct gdbarch *gdbarch, struct value *function,
4772                         struct type *type, struct regcache *regcache,
4773                         gdb_byte *readbuf, const gdb_byte *writebuf)
4774 {
4775   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4776   int fp_return_type = 0;
4777   int offset, regnum, xfer;
4778
4779   if (TYPE_LENGTH (type) > 2 * mips_abi_regsize (gdbarch))
4780     return RETURN_VALUE_STRUCT_CONVENTION;
4781
4782   /* Floating point type?  */
4783   if (tdep->mips_fpu_type != MIPS_FPU_NONE)
4784     {
4785       if (TYPE_CODE (type) == TYPE_CODE_FLT)
4786         fp_return_type = 1;
4787       /* Structs with a single field of float type 
4788          are returned in a floating point register.  */
4789       if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
4790            || TYPE_CODE (type) == TYPE_CODE_UNION)
4791           && TYPE_NFIELDS (type) == 1)
4792         {
4793           struct type *fieldtype = TYPE_FIELD_TYPE (type, 0);
4794
4795           if (TYPE_CODE (check_typedef (fieldtype)) == TYPE_CODE_FLT)
4796             fp_return_type = 1;
4797         }
4798     }
4799
4800   if (fp_return_type)      
4801     {
4802       /* A floating-point value belongs in the least significant part
4803          of FP0/FP1.  */
4804       if (mips_debug)
4805         fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
4806       regnum = mips_regnum (gdbarch)->fp0;
4807     }
4808   else 
4809     {
4810       /* An integer value goes in V0/V1.  */
4811       if (mips_debug)
4812         fprintf_unfiltered (gdb_stderr, "Return scalar in $v0\n");
4813       regnum = MIPS_V0_REGNUM;
4814     }
4815   for (offset = 0;
4816        offset < TYPE_LENGTH (type);
4817        offset += mips_abi_regsize (gdbarch), regnum++)
4818     {
4819       xfer = mips_abi_regsize (gdbarch);
4820       if (offset + xfer > TYPE_LENGTH (type))
4821         xfer = TYPE_LENGTH (type) - offset;
4822       mips_xfer_register (gdbarch, regcache,
4823                           gdbarch_num_regs (gdbarch) + regnum, xfer,
4824                           gdbarch_byte_order (gdbarch), readbuf, writebuf,
4825                           offset);
4826     }
4827
4828   return RETURN_VALUE_REGISTER_CONVENTION;
4829 }
4830
4831
4832 /* N32/N64 ABI stuff.  */
4833
4834 /* Search for a naturally aligned double at OFFSET inside a struct
4835    ARG_TYPE.  The N32 / N64 ABIs pass these in floating point
4836    registers.  */
4837
4838 static int
4839 mips_n32n64_fp_arg_chunk_p (struct gdbarch *gdbarch, struct type *arg_type,
4840                             int offset)
4841 {
4842   int i;
4843
4844   if (TYPE_CODE (arg_type) != TYPE_CODE_STRUCT)
4845     return 0;
4846
4847   if (MIPS_FPU_TYPE (gdbarch) != MIPS_FPU_DOUBLE)
4848     return 0;
4849
4850   if (TYPE_LENGTH (arg_type) < offset + MIPS64_REGSIZE)
4851     return 0;
4852
4853   for (i = 0; i < TYPE_NFIELDS (arg_type); i++)
4854     {
4855       int pos;
4856       struct type *field_type;
4857
4858       /* We're only looking at normal fields.  */
4859       if (field_is_static (&TYPE_FIELD (arg_type, i))
4860           || (TYPE_FIELD_BITPOS (arg_type, i) % 8) != 0)
4861         continue;
4862
4863       /* If we have gone past the offset, there is no double to pass.  */
4864       pos = TYPE_FIELD_BITPOS (arg_type, i) / 8;
4865       if (pos > offset)
4866         return 0;
4867
4868       field_type = check_typedef (TYPE_FIELD_TYPE (arg_type, i));
4869
4870       /* If this field is entirely before the requested offset, go
4871          on to the next one.  */
4872       if (pos + TYPE_LENGTH (field_type) <= offset)
4873         continue;
4874
4875       /* If this is our special aligned double, we can stop.  */
4876       if (TYPE_CODE (field_type) == TYPE_CODE_FLT
4877           && TYPE_LENGTH (field_type) == MIPS64_REGSIZE)
4878         return 1;
4879
4880       /* This field starts at or before the requested offset, and
4881          overlaps it.  If it is a structure, recurse inwards.  */
4882       return mips_n32n64_fp_arg_chunk_p (gdbarch, field_type, offset - pos);
4883     }
4884
4885   return 0;
4886 }
4887
4888 static CORE_ADDR
4889 mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
4890                              struct regcache *regcache, CORE_ADDR bp_addr,
4891                              int nargs, struct value **args, CORE_ADDR sp,
4892                              function_call_return_method return_method,
4893                              CORE_ADDR struct_addr)
4894 {
4895   int argreg;
4896   int float_argreg;
4897   int argnum;
4898   int arg_space = 0;
4899   int stack_offset = 0;
4900   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4901   CORE_ADDR func_addr = find_function_addr (function, NULL);
4902
4903   /* For shared libraries, "t9" needs to point at the function
4904      address.  */
4905   regcache_cooked_write_signed (regcache, MIPS_T9_REGNUM, func_addr);
4906
4907   /* Set the return address register to point to the entry point of
4908      the program, where a breakpoint lies in wait.  */
4909   regcache_cooked_write_signed (regcache, MIPS_RA_REGNUM, bp_addr);
4910
4911   /* First ensure that the stack and structure return address (if any)
4912      are properly aligned.  The stack has to be at least 64-bit
4913      aligned even on 32-bit machines, because doubles must be 64-bit
4914      aligned.  For n32 and n64, stack frames need to be 128-bit
4915      aligned, so we round to this widest known alignment.  */
4916
4917   sp = align_down (sp, 16);
4918   struct_addr = align_down (struct_addr, 16);
4919
4920   /* Now make space on the stack for the args.  */
4921   for (argnum = 0; argnum < nargs; argnum++)
4922     arg_space += align_up (TYPE_LENGTH (value_type (args[argnum])), MIPS64_REGSIZE);
4923   sp -= align_up (arg_space, 16);
4924
4925   if (mips_debug)
4926     fprintf_unfiltered (gdb_stdlog,
4927                         "mips_n32n64_push_dummy_call: sp=%s allocated %ld\n",
4928                         paddress (gdbarch, sp),
4929                         (long) align_up (arg_space, 16));
4930
4931   /* Initialize the integer and float register pointers.  */
4932   argreg = MIPS_A0_REGNUM;
4933   float_argreg = mips_fpa0_regnum (gdbarch);
4934
4935   /* The struct_return pointer occupies the first parameter-passing reg.  */
4936   if (return_method == return_method_struct)
4937     {
4938       if (mips_debug)
4939         fprintf_unfiltered (gdb_stdlog,
4940                             "mips_n32n64_push_dummy_call: "
4941                             "struct_return reg=%d %s\n",
4942                             argreg, paddress (gdbarch, struct_addr));
4943       regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
4944     }
4945
4946   /* Now load as many as possible of the first arguments into
4947      registers, and push the rest onto the stack.  Loop thru args
4948      from first to last.  */
4949   for (argnum = 0; argnum < nargs; argnum++)
4950     {
4951       const gdb_byte *val;
4952       struct value *arg = args[argnum];
4953       struct type *arg_type = check_typedef (value_type (arg));
4954       int len = TYPE_LENGTH (arg_type);
4955       enum type_code typecode = TYPE_CODE (arg_type);
4956
4957       if (mips_debug)
4958         fprintf_unfiltered (gdb_stdlog,
4959                             "mips_n32n64_push_dummy_call: %d len=%d type=%d",
4960                             argnum + 1, len, (int) typecode);
4961
4962       val = value_contents (arg);
4963
4964       /* A 128-bit long double value requires an even-odd pair of
4965          floating-point registers.  */
4966       if (len == 16
4967           && fp_register_arg_p (gdbarch, typecode, arg_type)
4968           && (float_argreg & 1))
4969         {
4970           float_argreg++;
4971           argreg++;
4972         }
4973
4974       if (fp_register_arg_p (gdbarch, typecode, arg_type)
4975           && argreg <= MIPS_LAST_ARG_REGNUM (gdbarch))
4976         {
4977           /* This is a floating point value that fits entirely
4978              in a single register or a pair of registers.  */
4979           int reglen = (len <= MIPS64_REGSIZE ? len : MIPS64_REGSIZE);
4980           LONGEST regval = extract_unsigned_integer (val, reglen, byte_order);
4981           if (mips_debug)
4982             fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
4983                                 float_argreg, phex (regval, reglen));
4984           regcache_cooked_write_unsigned (regcache, float_argreg, regval);
4985
4986           if (mips_debug)
4987             fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
4988                                 argreg, phex (regval, reglen));
4989           regcache_cooked_write_unsigned (regcache, argreg, regval);
4990           float_argreg++;
4991           argreg++;
4992           if (len == 16)
4993             {
4994               regval = extract_unsigned_integer (val + reglen,
4995                                                  reglen, byte_order);
4996               if (mips_debug)
4997                 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
4998                                     float_argreg, phex (regval, reglen));
4999               regcache_cooked_write_unsigned (regcache, float_argreg, regval);
5000
5001               if (mips_debug)
5002                 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
5003                                     argreg, phex (regval, reglen));
5004               regcache_cooked_write_unsigned (regcache, argreg, regval);
5005               float_argreg++;
5006               argreg++;
5007             }
5008         }
5009       else
5010         {
5011           /* Copy the argument to general registers or the stack in
5012              register-sized pieces.  Large arguments are split between
5013              registers and stack.  */
5014           /* For N32/N64, structs, unions, or other composite types are
5015              treated as a sequence of doublewords, and are passed in integer
5016              or floating point registers as though they were simple scalar
5017              parameters to the extent that they fit, with any excess on the
5018              stack packed according to the normal memory layout of the
5019              object.
5020              The caller does not reserve space for the register arguments;
5021              the callee is responsible for reserving it if required.  */
5022           /* Note: Floating-point values that didn't fit into an FP
5023              register are only written to memory.  */
5024           while (len > 0)
5025             {
5026               /* Remember if the argument was written to the stack.  */
5027               int stack_used_p = 0;
5028               int partial_len = (len < MIPS64_REGSIZE ? len : MIPS64_REGSIZE);
5029
5030               if (mips_debug)
5031                 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
5032                                     partial_len);
5033
5034               if (fp_register_arg_p (gdbarch, typecode, arg_type))
5035                 gdb_assert (argreg > MIPS_LAST_ARG_REGNUM (gdbarch));
5036
5037               /* Write this portion of the argument to the stack.  */
5038               if (argreg > MIPS_LAST_ARG_REGNUM (gdbarch))
5039                 {
5040                   /* Should shorter than int integer values be
5041                      promoted to int before being stored?  */
5042                   int longword_offset = 0;
5043                   CORE_ADDR addr;
5044                   stack_used_p = 1;
5045                   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
5046                     {
5047                       if ((typecode == TYPE_CODE_INT
5048                            || typecode == TYPE_CODE_PTR)
5049                           && len <= 4)
5050                         longword_offset = MIPS64_REGSIZE - len;
5051                     }
5052
5053                   if (mips_debug)
5054                     {
5055                       fprintf_unfiltered (gdb_stdlog, " - stack_offset=%s",
5056                                           paddress (gdbarch, stack_offset));
5057                       fprintf_unfiltered (gdb_stdlog, " longword_offset=%s",
5058                                           paddress (gdbarch, longword_offset));
5059                     }
5060
5061                   addr = sp + stack_offset + longword_offset;
5062
5063                   if (mips_debug)
5064                     {
5065                       int i;
5066                       fprintf_unfiltered (gdb_stdlog, " @%s ",
5067                                           paddress (gdbarch, addr));
5068                       for (i = 0; i < partial_len; i++)
5069                         {
5070                           fprintf_unfiltered (gdb_stdlog, "%02x",
5071                                               val[i] & 0xff);
5072                         }
5073                     }
5074                   write_memory (addr, val, partial_len);
5075                 }
5076
5077               /* Note!!! This is NOT an else clause.  Odd sized
5078                  structs may go thru BOTH paths.  */
5079               /* Write this portion of the argument to a general
5080                  purpose register.  */
5081               if (argreg <= MIPS_LAST_ARG_REGNUM (gdbarch))
5082                 {
5083                   LONGEST regval;
5084
5085                   /* Sign extend pointers, 32-bit integers and signed
5086                      16-bit and 8-bit integers; everything else is taken
5087                      as is.  */
5088
5089                   if ((partial_len == 4
5090                        && (typecode == TYPE_CODE_PTR
5091                            || typecode == TYPE_CODE_INT))
5092                       || (partial_len < 4
5093                           && typecode == TYPE_CODE_INT
5094                           && !TYPE_UNSIGNED (arg_type)))
5095                     regval = extract_signed_integer (val, partial_len,
5096                                                      byte_order);
5097                   else
5098                     regval = extract_unsigned_integer (val, partial_len,
5099                                                        byte_order);
5100
5101                   /* A non-floating-point argument being passed in a
5102                      general register.  If a struct or union, and if
5103                      the remaining length is smaller than the register
5104                      size, we have to adjust the register value on
5105                      big endian targets.
5106
5107                      It does not seem to be necessary to do the
5108                      same for integral types.  */
5109
5110                   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
5111                       && partial_len < MIPS64_REGSIZE
5112                       && (typecode == TYPE_CODE_STRUCT
5113                           || typecode == TYPE_CODE_UNION))
5114                     regval <<= ((MIPS64_REGSIZE - partial_len)
5115                                 * TARGET_CHAR_BIT);
5116
5117                   if (mips_debug)
5118                     fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
5119                                       argreg,
5120                                       phex (regval, MIPS64_REGSIZE));
5121                   regcache_cooked_write_unsigned (regcache, argreg, regval);
5122
5123                   if (mips_n32n64_fp_arg_chunk_p (gdbarch, arg_type,
5124                                                   TYPE_LENGTH (arg_type) - len))
5125                     {
5126                       if (mips_debug)
5127                         fprintf_filtered (gdb_stdlog, " - fpreg=%d val=%s",
5128                                           float_argreg,
5129                                           phex (regval, MIPS64_REGSIZE));
5130                       regcache_cooked_write_unsigned (regcache, float_argreg,
5131                                                       regval);
5132                     }
5133
5134                   float_argreg++;
5135                   argreg++;
5136                 }
5137
5138               len -= partial_len;
5139               val += partial_len;
5140
5141               /* Compute the offset into the stack at which we will
5142                  copy the next parameter.
5143
5144                  In N32 (N64?), the stack_offset only needs to be
5145                  adjusted when it has been used.  */
5146
5147               if (stack_used_p)
5148                 stack_offset += align_up (partial_len, MIPS64_REGSIZE);
5149             }
5150         }
5151       if (mips_debug)
5152         fprintf_unfiltered (gdb_stdlog, "\n");
5153     }
5154
5155   regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
5156
5157   /* Return adjusted stack pointer.  */
5158   return sp;
5159 }
5160
5161 static enum return_value_convention
5162 mips_n32n64_return_value (struct gdbarch *gdbarch, struct value *function,
5163                           struct type *type, struct regcache *regcache,
5164                           gdb_byte *readbuf, const gdb_byte *writebuf)
5165 {
5166   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5167
5168   /* From MIPSpro N32 ABI Handbook, Document Number: 007-2816-004
5169
5170      Function results are returned in $2 (and $3 if needed), or $f0 (and $f2
5171      if needed), as appropriate for the type.  Composite results (struct,
5172      union, or array) are returned in $2/$f0 and $3/$f2 according to the
5173      following rules:
5174
5175      * A struct with only one or two floating point fields is returned in $f0
5176      (and $f2 if necessary).  This is a generalization of the Fortran COMPLEX
5177      case.
5178
5179      * Any other composite results of at most 128 bits are returned in
5180      $2 (first 64 bits) and $3 (remainder, if necessary).
5181
5182      * Larger composite results are handled by converting the function to a
5183      procedure with an implicit first parameter, which is a pointer to an area
5184      reserved by the caller to receive the result.  [The o32-bit ABI requires
5185      that all composite results be handled by conversion to implicit first
5186      parameters.  The MIPS/SGI Fortran implementation has always made a
5187      specific exception to return COMPLEX results in the floating point
5188      registers.]  */
5189
5190   if (TYPE_LENGTH (type) > 2 * MIPS64_REGSIZE)
5191     return RETURN_VALUE_STRUCT_CONVENTION;
5192   else if (TYPE_CODE (type) == TYPE_CODE_FLT
5193            && TYPE_LENGTH (type) == 16
5194            && tdep->mips_fpu_type != MIPS_FPU_NONE)
5195     {
5196       /* A 128-bit floating-point value fills both $f0 and $f2.  The
5197          two registers are used in the same as memory order, so the
5198          eight bytes with the lower memory address are in $f0.  */
5199       if (mips_debug)
5200         fprintf_unfiltered (gdb_stderr, "Return float in $f0 and $f2\n");
5201       mips_xfer_register (gdbarch, regcache,
5202                           (gdbarch_num_regs (gdbarch)
5203                            + mips_regnum (gdbarch)->fp0),
5204                           8, gdbarch_byte_order (gdbarch),
5205                           readbuf, writebuf, 0);
5206       mips_xfer_register (gdbarch, regcache,
5207                           (gdbarch_num_regs (gdbarch)
5208                            + mips_regnum (gdbarch)->fp0 + 2),
5209                           8, gdbarch_byte_order (gdbarch),
5210                           readbuf ? readbuf + 8 : readbuf,
5211                           writebuf ? writebuf + 8 : writebuf, 0);
5212       return RETURN_VALUE_REGISTER_CONVENTION;
5213     }
5214   else if (TYPE_CODE (type) == TYPE_CODE_FLT
5215            && tdep->mips_fpu_type != MIPS_FPU_NONE)
5216     {
5217       /* A single or double floating-point value that fits in FP0.  */
5218       if (mips_debug)
5219         fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
5220       mips_xfer_register (gdbarch, regcache,
5221                           (gdbarch_num_regs (gdbarch)
5222                            + mips_regnum (gdbarch)->fp0),
5223                           TYPE_LENGTH (type),
5224                           gdbarch_byte_order (gdbarch),
5225                           readbuf, writebuf, 0);
5226       return RETURN_VALUE_REGISTER_CONVENTION;
5227     }
5228   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
5229            && TYPE_NFIELDS (type) <= 2
5230            && TYPE_NFIELDS (type) >= 1
5231            && ((TYPE_NFIELDS (type) == 1
5232                 && (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 0)))
5233                     == TYPE_CODE_FLT))
5234                || (TYPE_NFIELDS (type) == 2
5235                    && (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 0)))
5236                        == TYPE_CODE_FLT)
5237                    && (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 1)))
5238                        == TYPE_CODE_FLT))))
5239     {
5240       /* A struct that contains one or two floats.  Each value is part
5241          in the least significant part of their floating point
5242          register (or GPR, for soft float).  */
5243       int regnum;
5244       int field;
5245       for (field = 0, regnum = (tdep->mips_fpu_type != MIPS_FPU_NONE
5246                                 ? mips_regnum (gdbarch)->fp0
5247                                 : MIPS_V0_REGNUM);
5248            field < TYPE_NFIELDS (type); field++, regnum += 2)
5249         {
5250           int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field])
5251                         / TARGET_CHAR_BIT);
5252           if (mips_debug)
5253             fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",
5254                                 offset);
5255           if (TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)) == 16)
5256             {
5257               /* A 16-byte long double field goes in two consecutive
5258                  registers.  */
5259               mips_xfer_register (gdbarch, regcache,
5260                                   gdbarch_num_regs (gdbarch) + regnum,
5261                                   8,
5262                                   gdbarch_byte_order (gdbarch),
5263                                   readbuf, writebuf, offset);
5264               mips_xfer_register (gdbarch, regcache,
5265                                   gdbarch_num_regs (gdbarch) + regnum + 1,
5266                                   8,
5267                                   gdbarch_byte_order (gdbarch),
5268                                   readbuf, writebuf, offset + 8);
5269             }
5270           else
5271             mips_xfer_register (gdbarch, regcache,
5272                                 gdbarch_num_regs (gdbarch) + regnum,
5273                                 TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)),
5274                                 gdbarch_byte_order (gdbarch),
5275                                 readbuf, writebuf, offset);
5276         }
5277       return RETURN_VALUE_REGISTER_CONVENTION;
5278     }
5279   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
5280            || TYPE_CODE (type) == TYPE_CODE_UNION
5281            || TYPE_CODE (type) == TYPE_CODE_ARRAY)
5282     {
5283       /* A composite type.  Extract the left justified value,
5284          regardless of the byte order.  I.e. DO NOT USE
5285          mips_xfer_lower.  */
5286       int offset;
5287       int regnum;
5288       for (offset = 0, regnum = MIPS_V0_REGNUM;
5289            offset < TYPE_LENGTH (type);
5290            offset += register_size (gdbarch, regnum), regnum++)
5291         {
5292           int xfer = register_size (gdbarch, regnum);
5293           if (offset + xfer > TYPE_LENGTH (type))
5294             xfer = TYPE_LENGTH (type) - offset;
5295           if (mips_debug)
5296             fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n",
5297                                 offset, xfer, regnum);
5298           mips_xfer_register (gdbarch, regcache,
5299                               gdbarch_num_regs (gdbarch) + regnum,
5300                               xfer, BFD_ENDIAN_UNKNOWN, readbuf, writebuf,
5301                               offset);
5302         }
5303       return RETURN_VALUE_REGISTER_CONVENTION;
5304     }
5305   else
5306     {
5307       /* A scalar extract each part but least-significant-byte
5308          justified.  */
5309       int offset;
5310       int regnum;
5311       for (offset = 0, regnum = MIPS_V0_REGNUM;
5312            offset < TYPE_LENGTH (type);
5313            offset += register_size (gdbarch, regnum), regnum++)
5314         {
5315           int xfer = register_size (gdbarch, regnum);
5316           if (offset + xfer > TYPE_LENGTH (type))
5317             xfer = TYPE_LENGTH (type) - offset;
5318           if (mips_debug)
5319             fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
5320                                 offset, xfer, regnum);
5321           mips_xfer_register (gdbarch, regcache,
5322                               gdbarch_num_regs (gdbarch) + regnum,
5323                               xfer, gdbarch_byte_order (gdbarch),
5324                               readbuf, writebuf, offset);
5325         }
5326       return RETURN_VALUE_REGISTER_CONVENTION;
5327     }
5328 }
5329
5330 /* Which registers to use for passing floating-point values between
5331    function calls, one of floating-point, general and both kinds of
5332    registers.  O32 and O64 use different register kinds for standard
5333    MIPS and MIPS16 code; to make the handling of cases where we may
5334    not know what kind of code is being used (e.g. no debug information)
5335    easier we sometimes use both kinds.  */
5336
5337 enum mips_fval_reg
5338 {
5339   mips_fval_fpr,
5340   mips_fval_gpr,
5341   mips_fval_both
5342 };
5343
5344 /* O32 ABI stuff.  */
5345
5346 static CORE_ADDR
5347 mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
5348                           struct regcache *regcache, CORE_ADDR bp_addr,
5349                           int nargs, struct value **args, CORE_ADDR sp,
5350                           function_call_return_method return_method,
5351                           CORE_ADDR struct_addr)
5352 {
5353   int argreg;
5354   int float_argreg;
5355   int argnum;
5356   int arg_space = 0;
5357   int stack_offset = 0;
5358   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5359   CORE_ADDR func_addr = find_function_addr (function, NULL);
5360
5361   /* For shared libraries, "t9" needs to point at the function
5362      address.  */
5363   regcache_cooked_write_signed (regcache, MIPS_T9_REGNUM, func_addr);
5364
5365   /* Set the return address register to point to the entry point of
5366      the program, where a breakpoint lies in wait.  */
5367   regcache_cooked_write_signed (regcache, MIPS_RA_REGNUM, bp_addr);
5368
5369   /* First ensure that the stack and structure return address (if any)
5370      are properly aligned.  The stack has to be at least 64-bit
5371      aligned even on 32-bit machines, because doubles must be 64-bit
5372      aligned.  For n32 and n64, stack frames need to be 128-bit
5373      aligned, so we round to this widest known alignment.  */
5374
5375   sp = align_down (sp, 16);
5376   struct_addr = align_down (struct_addr, 16);
5377
5378   /* Now make space on the stack for the args.  */
5379   for (argnum = 0; argnum < nargs; argnum++)
5380     {
5381       struct type *arg_type = check_typedef (value_type (args[argnum]));
5382
5383       /* Align to double-word if necessary.  */
5384       if (mips_type_needs_double_align (arg_type))
5385         arg_space = align_up (arg_space, MIPS32_REGSIZE * 2);
5386       /* Allocate space on the stack.  */
5387       arg_space += align_up (TYPE_LENGTH (arg_type), MIPS32_REGSIZE);
5388     }
5389   sp -= align_up (arg_space, 16);
5390
5391   if (mips_debug)
5392     fprintf_unfiltered (gdb_stdlog,
5393                         "mips_o32_push_dummy_call: sp=%s allocated %ld\n",
5394                         paddress (gdbarch, sp),
5395                         (long) align_up (arg_space, 16));
5396
5397   /* Initialize the integer and float register pointers.  */
5398   argreg = MIPS_A0_REGNUM;
5399   float_argreg = mips_fpa0_regnum (gdbarch);
5400
5401   /* The struct_return pointer occupies the first parameter-passing reg.  */
5402   if (return_method == return_method_struct)
5403     {
5404       if (mips_debug)
5405         fprintf_unfiltered (gdb_stdlog,
5406                             "mips_o32_push_dummy_call: "
5407                             "struct_return reg=%d %s\n",
5408                             argreg, paddress (gdbarch, struct_addr));
5409       regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
5410       stack_offset += MIPS32_REGSIZE;
5411     }
5412
5413   /* Now load as many as possible of the first arguments into
5414      registers, and push the rest onto the stack.  Loop thru args
5415      from first to last.  */
5416   for (argnum = 0; argnum < nargs; argnum++)
5417     {
5418       const gdb_byte *val;
5419       struct value *arg = args[argnum];
5420       struct type *arg_type = check_typedef (value_type (arg));
5421       int len = TYPE_LENGTH (arg_type);
5422       enum type_code typecode = TYPE_CODE (arg_type);
5423
5424       if (mips_debug)
5425         fprintf_unfiltered (gdb_stdlog,
5426                             "mips_o32_push_dummy_call: %d len=%d type=%d",
5427                             argnum + 1, len, (int) typecode);
5428
5429       val = value_contents (arg);
5430
5431       /* 32-bit ABIs always start floating point arguments in an
5432          even-numbered floating point register.  Round the FP register
5433          up before the check to see if there are any FP registers
5434          left.  O32 targets also pass the FP in the integer registers
5435          so also round up normal registers.  */
5436       if (fp_register_arg_p (gdbarch, typecode, arg_type))
5437         {
5438           if ((float_argreg & 1))
5439             float_argreg++;
5440         }
5441
5442       /* Floating point arguments passed in registers have to be
5443          treated specially.  On 32-bit architectures, doubles are
5444          passed in register pairs; the even FP register gets the
5445          low word, and the odd FP register gets the high word.
5446          On O32, the first two floating point arguments are also
5447          copied to general registers, following their memory order,
5448          because MIPS16 functions don't use float registers for
5449          arguments.  This duplication of arguments in general
5450          registers can't hurt non-MIPS16 functions, because those
5451          registers are normally skipped.  */
5452
5453       if (fp_register_arg_p (gdbarch, typecode, arg_type)
5454           && float_argreg <= MIPS_LAST_FP_ARG_REGNUM (gdbarch))
5455         {
5456           if (register_size (gdbarch, float_argreg) < 8 && len == 8)
5457             {
5458               int freg_offset = gdbarch_byte_order (gdbarch)
5459                                 == BFD_ENDIAN_BIG ? 1 : 0;
5460               unsigned long regval;
5461
5462               /* First word.  */
5463               regval = extract_unsigned_integer (val, 4, byte_order);
5464               if (mips_debug)
5465                 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
5466                                     float_argreg + freg_offset,
5467                                     phex (regval, 4));
5468               regcache_cooked_write_unsigned (regcache,
5469                                               float_argreg++ + freg_offset,
5470                                               regval);
5471               if (mips_debug)
5472                 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
5473                                     argreg, phex (regval, 4));
5474               regcache_cooked_write_unsigned (regcache, argreg++, regval);
5475
5476               /* Second word.  */
5477               regval = extract_unsigned_integer (val + 4, 4, byte_order);
5478               if (mips_debug)
5479                 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
5480                                     float_argreg - freg_offset,
5481                                     phex (regval, 4));
5482               regcache_cooked_write_unsigned (regcache,
5483                                               float_argreg++ - freg_offset,
5484                                               regval);
5485               if (mips_debug)
5486                 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
5487                                     argreg, phex (regval, 4));
5488               regcache_cooked_write_unsigned (regcache, argreg++, regval);
5489             }
5490           else
5491             {
5492               /* This is a floating point value that fits entirely
5493                  in a single register.  */
5494               /* On 32 bit ABI's the float_argreg is further adjusted
5495                  above to ensure that it is even register aligned.  */
5496               LONGEST regval = extract_unsigned_integer (val, len, byte_order);
5497               if (mips_debug)
5498                 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
5499                                     float_argreg, phex (regval, len));
5500               regcache_cooked_write_unsigned (regcache,
5501                                               float_argreg++, regval);
5502               /* Although two FP registers are reserved for each
5503                  argument, only one corresponding integer register is
5504                  reserved.  */
5505               if (mips_debug)
5506                 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
5507                                     argreg, phex (regval, len));
5508               regcache_cooked_write_unsigned (regcache, argreg++, regval);
5509             }
5510           /* Reserve space for the FP register.  */
5511           stack_offset += align_up (len, MIPS32_REGSIZE);
5512         }
5513       else
5514         {
5515           /* Copy the argument to general registers or the stack in
5516              register-sized pieces.  Large arguments are split between
5517              registers and stack.  */
5518           /* Note: structs whose size is not a multiple of MIPS32_REGSIZE
5519              are treated specially: Irix cc passes
5520              them in registers where gcc sometimes puts them on the
5521              stack.  For maximum compatibility, we will put them in
5522              both places.  */
5523           int odd_sized_struct = (len > MIPS32_REGSIZE
5524                                   && len % MIPS32_REGSIZE != 0);
5525           /* Structures should be aligned to eight bytes (even arg registers)
5526              on MIPS_ABI_O32, if their first member has double precision.  */
5527           if (mips_type_needs_double_align (arg_type))
5528             {
5529               if ((argreg & 1))
5530                 {
5531                   argreg++;
5532                   stack_offset += MIPS32_REGSIZE;
5533                 }
5534             }
5535           while (len > 0)
5536             {
5537               int partial_len = (len < MIPS32_REGSIZE ? len : MIPS32_REGSIZE);
5538
5539               if (mips_debug)
5540                 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
5541                                     partial_len);
5542
5543               /* Write this portion of the argument to the stack.  */
5544               if (argreg > MIPS_LAST_ARG_REGNUM (gdbarch)
5545                   || odd_sized_struct)
5546                 {
5547                   /* Should shorter than int integer values be
5548                      promoted to int before being stored?  */
5549                   int longword_offset = 0;
5550                   CORE_ADDR addr;
5551
5552                   if (mips_debug)
5553                     {
5554                       fprintf_unfiltered (gdb_stdlog, " - stack_offset=%s",
5555                                           paddress (gdbarch, stack_offset));
5556                       fprintf_unfiltered (gdb_stdlog, " longword_offset=%s",
5557                                           paddress (gdbarch, longword_offset));
5558                     }
5559
5560                   addr = sp + stack_offset + longword_offset;
5561
5562                   if (mips_debug)
5563                     {
5564                       int i;
5565                       fprintf_unfiltered (gdb_stdlog, " @%s ",
5566                                           paddress (gdbarch, addr));
5567                       for (i = 0; i < partial_len; i++)
5568                         {
5569                           fprintf_unfiltered (gdb_stdlog, "%02x",
5570                                               val[i] & 0xff);
5571                         }
5572                     }
5573                   write_memory (addr, val, partial_len);
5574                 }
5575
5576               /* Note!!! This is NOT an else clause.  Odd sized
5577                  structs may go thru BOTH paths.  */
5578               /* Write this portion of the argument to a general
5579                  purpose register.  */
5580               if (argreg <= MIPS_LAST_ARG_REGNUM (gdbarch))
5581                 {
5582                   LONGEST regval = extract_signed_integer (val, partial_len,
5583                                                            byte_order);
5584                   /* Value may need to be sign extended, because
5585                      mips_isa_regsize() != mips_abi_regsize().  */
5586
5587                   /* A non-floating-point argument being passed in a
5588                      general register.  If a struct or union, and if
5589                      the remaining length is smaller than the register
5590                      size, we have to adjust the register value on
5591                      big endian targets.
5592
5593                      It does not seem to be necessary to do the
5594                      same for integral types.
5595
5596                      Also don't do this adjustment on O64 binaries.
5597
5598                      cagney/2001-07-23: gdb/179: Also, GCC, when
5599                      outputting LE O32 with sizeof (struct) <
5600                      mips_abi_regsize(), generates a left shift
5601                      as part of storing the argument in a register
5602                      (the left shift isn't generated when
5603                      sizeof (struct) >= mips_abi_regsize()).  Since
5604                      it is quite possible that this is GCC
5605                      contradicting the LE/O32 ABI, GDB has not been
5606                      adjusted to accommodate this.  Either someone
5607                      needs to demonstrate that the LE/O32 ABI
5608                      specifies such a left shift OR this new ABI gets
5609                      identified as such and GDB gets tweaked
5610                      accordingly.  */
5611
5612                   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
5613                       && partial_len < MIPS32_REGSIZE
5614                       && (typecode == TYPE_CODE_STRUCT
5615                           || typecode == TYPE_CODE_UNION))
5616                     regval <<= ((MIPS32_REGSIZE - partial_len)
5617                                 * TARGET_CHAR_BIT);
5618
5619                   if (mips_debug)
5620                     fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
5621                                       argreg,
5622                                       phex (regval, MIPS32_REGSIZE));
5623                   regcache_cooked_write_unsigned (regcache, argreg, regval);
5624                   argreg++;
5625
5626                   /* Prevent subsequent floating point arguments from
5627                      being passed in floating point registers.  */
5628                   float_argreg = MIPS_LAST_FP_ARG_REGNUM (gdbarch) + 1;
5629                 }
5630
5631               len -= partial_len;
5632               val += partial_len;
5633
5634               /* Compute the offset into the stack at which we will
5635                  copy the next parameter.
5636
5637                  In older ABIs, the caller reserved space for
5638                  registers that contained arguments.  This was loosely
5639                  refered to as their "home".  Consequently, space is
5640                  always allocated.  */
5641
5642               stack_offset += align_up (partial_len, MIPS32_REGSIZE);
5643             }
5644         }
5645       if (mips_debug)
5646         fprintf_unfiltered (gdb_stdlog, "\n");
5647     }
5648
5649   regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
5650
5651   /* Return adjusted stack pointer.  */
5652   return sp;
5653 }
5654
5655 static enum return_value_convention
5656 mips_o32_return_value (struct gdbarch *gdbarch, struct value *function,
5657                        struct type *type, struct regcache *regcache,
5658                        gdb_byte *readbuf, const gdb_byte *writebuf)
5659 {
5660   CORE_ADDR func_addr = function ? find_function_addr (function, NULL) : 0;
5661   int mips16 = mips_pc_is_mips16 (gdbarch, func_addr);
5662   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5663   enum mips_fval_reg fval_reg;
5664
5665   fval_reg = readbuf ? mips16 ? mips_fval_gpr : mips_fval_fpr : mips_fval_both;
5666   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
5667       || TYPE_CODE (type) == TYPE_CODE_UNION
5668       || TYPE_CODE (type) == TYPE_CODE_ARRAY)
5669     return RETURN_VALUE_STRUCT_CONVENTION;
5670   else if (TYPE_CODE (type) == TYPE_CODE_FLT
5671            && TYPE_LENGTH (type) == 4 && tdep->mips_fpu_type != MIPS_FPU_NONE)
5672     {
5673       /* A single-precision floating-point value.  If reading in or copying,
5674          then we get it from/put it to FP0 for standard MIPS code or GPR2
5675          for MIPS16 code.  If writing out only, then we put it to both FP0
5676          and GPR2.  We do not support reading in with no function known, if
5677          this safety check ever triggers, then we'll have to try harder.  */
5678       gdb_assert (function || !readbuf);
5679       if (mips_debug)
5680         switch (fval_reg)
5681           {
5682           case mips_fval_fpr:
5683             fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
5684             break;
5685           case mips_fval_gpr:
5686             fprintf_unfiltered (gdb_stderr, "Return float in $2\n");
5687             break;
5688           case mips_fval_both:
5689             fprintf_unfiltered (gdb_stderr, "Return float in $fp0 and $2\n");
5690             break;
5691           }
5692       if (fval_reg != mips_fval_gpr)
5693         mips_xfer_register (gdbarch, regcache,
5694                             (gdbarch_num_regs (gdbarch)
5695                              + mips_regnum (gdbarch)->fp0),
5696                             TYPE_LENGTH (type),
5697                             gdbarch_byte_order (gdbarch),
5698                             readbuf, writebuf, 0);
5699       if (fval_reg != mips_fval_fpr)
5700         mips_xfer_register (gdbarch, regcache,
5701                             gdbarch_num_regs (gdbarch) + 2,
5702                             TYPE_LENGTH (type),
5703                             gdbarch_byte_order (gdbarch),
5704                             readbuf, writebuf, 0);
5705       return RETURN_VALUE_REGISTER_CONVENTION;
5706     }
5707   else if (TYPE_CODE (type) == TYPE_CODE_FLT
5708            && TYPE_LENGTH (type) == 8 && tdep->mips_fpu_type != MIPS_FPU_NONE)
5709     {
5710       /* A double-precision floating-point value.  If reading in or copying,
5711          then we get it from/put it to FP1 and FP0 for standard MIPS code or
5712          GPR2 and GPR3 for MIPS16 code.  If writing out only, then we put it
5713          to both FP1/FP0 and GPR2/GPR3.  We do not support reading in with
5714          no function known, if this safety check ever triggers, then we'll
5715          have to try harder.  */
5716       gdb_assert (function || !readbuf);
5717       if (mips_debug)
5718         switch (fval_reg)
5719           {
5720           case mips_fval_fpr:
5721             fprintf_unfiltered (gdb_stderr, "Return float in $fp1/$fp0\n");
5722             break;
5723           case mips_fval_gpr:
5724             fprintf_unfiltered (gdb_stderr, "Return float in $2/$3\n");
5725             break;
5726           case mips_fval_both:
5727             fprintf_unfiltered (gdb_stderr,
5728                                 "Return float in $fp1/$fp0 and $2/$3\n");
5729             break;
5730           }
5731       if (fval_reg != mips_fval_gpr)
5732         {
5733           /* The most significant part goes in FP1, and the least significant
5734              in FP0.  */
5735           switch (gdbarch_byte_order (gdbarch))
5736             {
5737             case BFD_ENDIAN_LITTLE:
5738               mips_xfer_register (gdbarch, regcache,
5739                                   (gdbarch_num_regs (gdbarch)
5740                                    + mips_regnum (gdbarch)->fp0 + 0),
5741                                   4, gdbarch_byte_order (gdbarch),
5742                                   readbuf, writebuf, 0);
5743               mips_xfer_register (gdbarch, regcache,
5744                                   (gdbarch_num_regs (gdbarch)
5745                                    + mips_regnum (gdbarch)->fp0 + 1),
5746                                   4, gdbarch_byte_order (gdbarch),
5747                                   readbuf, writebuf, 4);
5748               break;
5749             case BFD_ENDIAN_BIG:
5750               mips_xfer_register (gdbarch, regcache,
5751                                   (gdbarch_num_regs (gdbarch)
5752                                    + mips_regnum (gdbarch)->fp0 + 1),
5753                                   4, gdbarch_byte_order (gdbarch),
5754                                   readbuf, writebuf, 0);
5755               mips_xfer_register (gdbarch, regcache,
5756                                   (gdbarch_num_regs (gdbarch)
5757                                    + mips_regnum (gdbarch)->fp0 + 0),
5758                                   4, gdbarch_byte_order (gdbarch),
5759                                   readbuf, writebuf, 4);
5760               break;
5761             default:
5762               internal_error (__FILE__, __LINE__, _("bad switch"));
5763             }
5764         }
5765       if (fval_reg != mips_fval_fpr)
5766         {
5767           /* The two 32-bit parts are always placed in GPR2 and GPR3
5768              following these registers' memory order.  */
5769           mips_xfer_register (gdbarch, regcache,
5770                               gdbarch_num_regs (gdbarch) + 2,
5771                               4, gdbarch_byte_order (gdbarch),
5772                               readbuf, writebuf, 0);
5773           mips_xfer_register (gdbarch, regcache,
5774                               gdbarch_num_regs (gdbarch) + 3,
5775                               4, gdbarch_byte_order (gdbarch),
5776                               readbuf, writebuf, 4);
5777         }
5778       return RETURN_VALUE_REGISTER_CONVENTION;
5779     }
5780 #if 0
5781   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
5782            && TYPE_NFIELDS (type) <= 2
5783            && TYPE_NFIELDS (type) >= 1
5784            && ((TYPE_NFIELDS (type) == 1
5785                 && (TYPE_CODE (TYPE_FIELD_TYPE (type, 0))
5786                     == TYPE_CODE_FLT))
5787                || (TYPE_NFIELDS (type) == 2
5788                    && (TYPE_CODE (TYPE_FIELD_TYPE (type, 0))
5789                        == TYPE_CODE_FLT)
5790                    && (TYPE_CODE (TYPE_FIELD_TYPE (type, 1))
5791                        == TYPE_CODE_FLT)))
5792            && tdep->mips_fpu_type != MIPS_FPU_NONE)
5793     {
5794       /* A struct that contains one or two floats.  Each value is part
5795          in the least significant part of their floating point
5796          register..  */
5797       int regnum;
5798       int field;
5799       for (field = 0, regnum = mips_regnum (gdbarch)->fp0;
5800            field < TYPE_NFIELDS (type); field++, regnum += 2)
5801         {
5802           int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field])
5803                         / TARGET_CHAR_BIT);
5804           if (mips_debug)
5805             fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",
5806                                 offset);
5807           mips_xfer_register (gdbarch, regcache,
5808                               gdbarch_num_regs (gdbarch) + regnum,
5809                               TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)),
5810                               gdbarch_byte_order (gdbarch),
5811                               readbuf, writebuf, offset);
5812         }
5813       return RETURN_VALUE_REGISTER_CONVENTION;
5814     }
5815 #endif
5816 #if 0
5817   else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
5818            || TYPE_CODE (type) == TYPE_CODE_UNION)
5819     {
5820       /* A structure or union.  Extract the left justified value,
5821          regardless of the byte order.  I.e. DO NOT USE
5822          mips_xfer_lower.  */
5823       int offset;
5824       int regnum;
5825       for (offset = 0, regnum = MIPS_V0_REGNUM;
5826            offset < TYPE_LENGTH (type);
5827            offset += register_size (gdbarch, regnum), regnum++)
5828         {
5829           int xfer = register_size (gdbarch, regnum);
5830           if (offset + xfer > TYPE_LENGTH (type))
5831             xfer = TYPE_LENGTH (type) - offset;
5832           if (mips_debug)
5833             fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n",
5834                                 offset, xfer, regnum);
5835           mips_xfer_register (gdbarch, regcache,
5836                               gdbarch_num_regs (gdbarch) + regnum, xfer,
5837                               BFD_ENDIAN_UNKNOWN, readbuf, writebuf, offset);
5838         }
5839       return RETURN_VALUE_REGISTER_CONVENTION;
5840     }
5841 #endif
5842   else
5843     {
5844       /* A scalar extract each part but least-significant-byte
5845          justified.  o32 thinks registers are 4 byte, regardless of
5846          the ISA.  */
5847       int offset;
5848       int regnum;
5849       for (offset = 0, regnum = MIPS_V0_REGNUM;
5850            offset < TYPE_LENGTH (type);
5851            offset += MIPS32_REGSIZE, regnum++)
5852         {
5853           int xfer = MIPS32_REGSIZE;
5854           if (offset + xfer > TYPE_LENGTH (type))
5855             xfer = TYPE_LENGTH (type) - offset;
5856           if (mips_debug)
5857             fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
5858                                 offset, xfer, regnum);
5859           mips_xfer_register (gdbarch, regcache,
5860                               gdbarch_num_regs (gdbarch) + regnum, xfer,
5861                               gdbarch_byte_order (gdbarch),
5862                               readbuf, writebuf, offset);
5863         }
5864       return RETURN_VALUE_REGISTER_CONVENTION;
5865     }
5866 }
5867
5868 /* O64 ABI.  This is a hacked up kind of 64-bit version of the o32
5869    ABI.  */
5870
5871 static CORE_ADDR
5872 mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
5873                           struct regcache *regcache, CORE_ADDR bp_addr,
5874                           int nargs,
5875                           struct value **args, CORE_ADDR sp,
5876                           function_call_return_method return_method, CORE_ADDR struct_addr)
5877 {
5878   int argreg;
5879   int float_argreg;
5880   int argnum;
5881   int arg_space = 0;
5882   int stack_offset = 0;
5883   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5884   CORE_ADDR func_addr = find_function_addr (function, NULL);
5885
5886   /* For shared libraries, "t9" needs to point at the function
5887      address.  */
5888   regcache_cooked_write_signed (regcache, MIPS_T9_REGNUM, func_addr);
5889
5890   /* Set the return address register to point to the entry point of
5891      the program, where a breakpoint lies in wait.  */
5892   regcache_cooked_write_signed (regcache, MIPS_RA_REGNUM, bp_addr);
5893
5894   /* First ensure that the stack and structure return address (if any)
5895      are properly aligned.  The stack has to be at least 64-bit
5896      aligned even on 32-bit machines, because doubles must be 64-bit
5897      aligned.  For n32 and n64, stack frames need to be 128-bit
5898      aligned, so we round to this widest known alignment.  */
5899
5900   sp = align_down (sp, 16);
5901   struct_addr = align_down (struct_addr, 16);
5902
5903   /* Now make space on the stack for the args.  */
5904   for (argnum = 0; argnum < nargs; argnum++)
5905     {
5906       struct type *arg_type = check_typedef (value_type (args[argnum]));
5907
5908       /* Allocate space on the stack.  */
5909       arg_space += align_up (TYPE_LENGTH (arg_type), MIPS64_REGSIZE);
5910     }
5911   sp -= align_up (arg_space, 16);
5912
5913   if (mips_debug)
5914     fprintf_unfiltered (gdb_stdlog,
5915                         "mips_o64_push_dummy_call: sp=%s allocated %ld\n",
5916                         paddress (gdbarch, sp),
5917                         (long) align_up (arg_space, 16));
5918
5919   /* Initialize the integer and float register pointers.  */
5920   argreg = MIPS_A0_REGNUM;
5921   float_argreg = mips_fpa0_regnum (gdbarch);
5922
5923   /* The struct_return pointer occupies the first parameter-passing reg.  */
5924   if (return_method == return_method_struct)
5925     {
5926       if (mips_debug)
5927         fprintf_unfiltered (gdb_stdlog,
5928                             "mips_o64_push_dummy_call: "
5929                             "struct_return reg=%d %s\n",
5930                             argreg, paddress (gdbarch, struct_addr));
5931       regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
5932       stack_offset += MIPS64_REGSIZE;
5933     }
5934
5935   /* Now load as many as possible of the first arguments into
5936      registers, and push the rest onto the stack.  Loop thru args
5937      from first to last.  */
5938   for (argnum = 0; argnum < nargs; argnum++)
5939     {
5940       const gdb_byte *val;
5941       struct value *arg = args[argnum];
5942       struct type *arg_type = check_typedef (value_type (arg));
5943       int len = TYPE_LENGTH (arg_type);
5944       enum type_code typecode = TYPE_CODE (arg_type);
5945
5946       if (mips_debug)
5947         fprintf_unfiltered (gdb_stdlog,
5948                             "mips_o64_push_dummy_call: %d len=%d type=%d",
5949                             argnum + 1, len, (int) typecode);
5950
5951       val = value_contents (arg);
5952
5953       /* Floating point arguments passed in registers have to be
5954          treated specially.  On 32-bit architectures, doubles are
5955          passed in register pairs; the even FP register gets the
5956          low word, and the odd FP register gets the high word.
5957          On O64, the first two floating point arguments are also
5958          copied to general registers, because MIPS16 functions
5959          don't use float registers for arguments.  This duplication
5960          of arguments in general registers can't hurt non-MIPS16
5961          functions because those registers are normally skipped.  */
5962
5963       if (fp_register_arg_p (gdbarch, typecode, arg_type)
5964           && float_argreg <= MIPS_LAST_FP_ARG_REGNUM (gdbarch))
5965         {
5966           LONGEST regval = extract_unsigned_integer (val, len, byte_order);
5967           if (mips_debug)
5968             fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
5969                                 float_argreg, phex (regval, len));
5970           regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
5971           if (mips_debug)
5972             fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
5973                                 argreg, phex (regval, len));
5974           regcache_cooked_write_unsigned (regcache, argreg, regval);
5975           argreg++;
5976           /* Reserve space for the FP register.  */
5977           stack_offset += align_up (len, MIPS64_REGSIZE);
5978         }
5979       else
5980         {
5981           /* Copy the argument to general registers or the stack in
5982              register-sized pieces.  Large arguments are split between
5983              registers and stack.  */
5984           /* Note: structs whose size is not a multiple of MIPS64_REGSIZE
5985              are treated specially: Irix cc passes them in registers
5986              where gcc sometimes puts them on the stack.  For maximum
5987              compatibility, we will put them in both places.  */
5988           int odd_sized_struct = (len > MIPS64_REGSIZE
5989                                   && len % MIPS64_REGSIZE != 0);
5990           while (len > 0)
5991             {
5992               int partial_len = (len < MIPS64_REGSIZE ? len : MIPS64_REGSIZE);
5993
5994               if (mips_debug)
5995                 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
5996                                     partial_len);
5997
5998               /* Write this portion of the argument to the stack.  */
5999               if (argreg > MIPS_LAST_ARG_REGNUM (gdbarch)
6000                   || odd_sized_struct)
6001                 {
6002                   /* Should shorter than int integer values be
6003                      promoted to int before being stored?  */
6004                   int longword_offset = 0;
6005                   CORE_ADDR addr;
6006                   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
6007                     {
6008                       if ((typecode == TYPE_CODE_INT
6009                            || typecode == TYPE_CODE_PTR
6010                            || typecode == TYPE_CODE_FLT)
6011                           && len <= 4)
6012                         longword_offset = MIPS64_REGSIZE - len;
6013                     }
6014
6015                   if (mips_debug)
6016                     {
6017                       fprintf_unfiltered (gdb_stdlog, " - stack_offset=%s",
6018                                           paddress (gdbarch, stack_offset));
6019                       fprintf_unfiltered (gdb_stdlog, " longword_offset=%s",
6020                                           paddress (gdbarch, longword_offset));
6021                     }
6022
6023                   addr = sp + stack_offset + longword_offset;
6024
6025                   if (mips_debug)
6026                     {
6027                       int i;
6028                       fprintf_unfiltered (gdb_stdlog, " @%s ",
6029                                           paddress (gdbarch, addr));
6030                       for (i = 0; i < partial_len; i++)
6031                         {
6032                           fprintf_unfiltered (gdb_stdlog, "%02x",
6033                                               val[i] & 0xff);
6034                         }
6035                     }
6036                   write_memory (addr, val, partial_len);
6037                 }
6038
6039               /* Note!!! This is NOT an else clause.  Odd sized
6040                  structs may go thru BOTH paths.  */
6041               /* Write this portion of the argument to a general
6042                  purpose register.  */
6043               if (argreg <= MIPS_LAST_ARG_REGNUM (gdbarch))
6044                 {
6045                   LONGEST regval = extract_signed_integer (val, partial_len,
6046                                                            byte_order);
6047                   /* Value may need to be sign extended, because
6048                      mips_isa_regsize() != mips_abi_regsize().  */
6049
6050                   /* A non-floating-point argument being passed in a
6051                      general register.  If a struct or union, and if
6052                      the remaining length is smaller than the register
6053                      size, we have to adjust the register value on
6054                      big endian targets.
6055
6056                      It does not seem to be necessary to do the
6057                      same for integral types.  */
6058
6059                   if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
6060                       && partial_len < MIPS64_REGSIZE
6061                       && (typecode == TYPE_CODE_STRUCT
6062                           || typecode == TYPE_CODE_UNION))
6063                     regval <<= ((MIPS64_REGSIZE - partial_len)
6064                                 * TARGET_CHAR_BIT);
6065
6066                   if (mips_debug)
6067                     fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
6068                                       argreg,
6069                                       phex (regval, MIPS64_REGSIZE));
6070                   regcache_cooked_write_unsigned (regcache, argreg, regval);
6071                   argreg++;
6072
6073                   /* Prevent subsequent floating point arguments from
6074                      being passed in floating point registers.  */
6075                   float_argreg = MIPS_LAST_FP_ARG_REGNUM (gdbarch) + 1;
6076                 }
6077
6078               len -= partial_len;
6079               val += partial_len;
6080
6081               /* Compute the offset into the stack at which we will
6082                  copy the next parameter.
6083
6084                  In older ABIs, the caller reserved space for
6085                  registers that contained arguments.  This was loosely
6086                  refered to as their "home".  Consequently, space is
6087                  always allocated.  */
6088
6089               stack_offset += align_up (partial_len, MIPS64_REGSIZE);
6090             }
6091         }
6092       if (mips_debug)
6093         fprintf_unfiltered (gdb_stdlog, "\n");
6094     }
6095
6096   regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
6097
6098   /* Return adjusted stack pointer.  */
6099   return sp;
6100 }
6101
6102 static enum return_value_convention
6103 mips_o64_return_value (struct gdbarch *gdbarch, struct value *function,
6104                        struct type *type, struct regcache *regcache,
6105                        gdb_byte *readbuf, const gdb_byte *writebuf)
6106 {
6107   CORE_ADDR func_addr = function ? find_function_addr (function, NULL) : 0;
6108   int mips16 = mips_pc_is_mips16 (gdbarch, func_addr);
6109   enum mips_fval_reg fval_reg;
6110
6111   fval_reg = readbuf ? mips16 ? mips_fval_gpr : mips_fval_fpr : mips_fval_both;
6112   if (TYPE_CODE (type) == TYPE_CODE_STRUCT
6113       || TYPE_CODE (type) == TYPE_CODE_UNION
6114       || TYPE_CODE (type) == TYPE_CODE_ARRAY)
6115     return RETURN_VALUE_STRUCT_CONVENTION;
6116   else if (fp_register_arg_p (gdbarch, TYPE_CODE (type), type))
6117     {
6118       /* A floating-point value.  If reading in or copying, then we get it
6119          from/put it to FP0 for standard MIPS code or GPR2 for MIPS16 code.
6120          If writing out only, then we put it to both FP0 and GPR2.  We do
6121          not support reading in with no function known, if this safety
6122          check ever triggers, then we'll have to try harder.  */
6123       gdb_assert (function || !readbuf);
6124       if (mips_debug)
6125         switch (fval_reg)
6126           {
6127           case mips_fval_fpr:
6128             fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
6129             break;
6130           case mips_fval_gpr:
6131             fprintf_unfiltered (gdb_stderr, "Return float in $2\n");
6132             break;
6133           case mips_fval_both:
6134             fprintf_unfiltered (gdb_stderr, "Return float in $fp0 and $2\n");
6135             break;
6136           }
6137       if (fval_reg != mips_fval_gpr)
6138         mips_xfer_register (gdbarch, regcache,
6139                             (gdbarch_num_regs (gdbarch)
6140                              + mips_regnum (gdbarch)->fp0),
6141                             TYPE_LENGTH (type),
6142                             gdbarch_byte_order (gdbarch),
6143                             readbuf, writebuf, 0);
6144       if (fval_reg != mips_fval_fpr)
6145         mips_xfer_register (gdbarch, regcache,
6146                             gdbarch_num_regs (gdbarch) + 2,
6147                             TYPE_LENGTH (type),
6148                             gdbarch_byte_order (gdbarch),
6149                             readbuf, writebuf, 0);
6150       return RETURN_VALUE_REGISTER_CONVENTION;
6151     }
6152   else
6153     {
6154       /* A scalar extract each part but least-significant-byte
6155          justified.  */
6156       int offset;
6157       int regnum;
6158       for (offset = 0, regnum = MIPS_V0_REGNUM;
6159            offset < TYPE_LENGTH (type);
6160            offset += MIPS64_REGSIZE, regnum++)
6161         {
6162           int xfer = MIPS64_REGSIZE;
6163           if (offset + xfer > TYPE_LENGTH (type))
6164             xfer = TYPE_LENGTH (type) - offset;
6165           if (mips_debug)
6166             fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
6167                                 offset, xfer, regnum);
6168           mips_xfer_register (gdbarch, regcache,
6169                               gdbarch_num_regs (gdbarch) + regnum,
6170                               xfer, gdbarch_byte_order (gdbarch),
6171                               readbuf, writebuf, offset);
6172         }
6173       return RETURN_VALUE_REGISTER_CONVENTION;
6174     }
6175 }
6176
6177 /* Floating point register management.
6178
6179    Background: MIPS1 & 2 fp registers are 32 bits wide.  To support
6180    64bit operations, these early MIPS cpus treat fp register pairs
6181    (f0,f1) as a single register (d0).  Later MIPS cpu's have 64 bit fp
6182    registers and offer a compatibility mode that emulates the MIPS2 fp
6183    model.  When operating in MIPS2 fp compat mode, later cpu's split
6184    double precision floats into two 32-bit chunks and store them in
6185    consecutive fp regs.  To display 64-bit floats stored in this
6186    fashion, we have to combine 32 bits from f0 and 32 bits from f1.
6187    Throw in user-configurable endianness and you have a real mess.
6188
6189    The way this works is:
6190      - If we are in 32-bit mode or on a 32-bit processor, then a 64-bit
6191        double-precision value will be split across two logical registers.
6192        The lower-numbered logical register will hold the low-order bits,
6193        regardless of the processor's endianness.
6194      - If we are on a 64-bit processor, and we are looking for a
6195        single-precision value, it will be in the low ordered bits
6196        of a 64-bit GPR (after mfc1, for example) or a 64-bit register
6197        save slot in memory.
6198      - If we are in 64-bit mode, everything is straightforward.
6199
6200    Note that this code only deals with "live" registers at the top of the
6201    stack.  We will attempt to deal with saved registers later, when
6202    the raw/cooked register interface is in place.  (We need a general
6203    interface that can deal with dynamic saved register sizes -- fp
6204    regs could be 32 bits wide in one frame and 64 on the frame above
6205    and below).  */
6206
6207 /* Copy a 32-bit single-precision value from the current frame
6208    into rare_buffer.  */
6209
6210 static void
6211 mips_read_fp_register_single (struct frame_info *frame, int regno,
6212                               gdb_byte *rare_buffer)
6213 {
6214   struct gdbarch *gdbarch = get_frame_arch (frame);
6215   int raw_size = register_size (gdbarch, regno);
6216   gdb_byte *raw_buffer = (gdb_byte *) alloca (raw_size);
6217
6218   if (!deprecated_frame_register_read (frame, regno, raw_buffer))
6219     error (_("can't read register %d (%s)"),
6220            regno, gdbarch_register_name (gdbarch, regno));
6221   if (raw_size == 8)
6222     {
6223       /* We have a 64-bit value for this register.  Find the low-order
6224          32 bits.  */
6225       int offset;
6226
6227       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
6228         offset = 4;
6229       else
6230         offset = 0;
6231
6232       memcpy (rare_buffer, raw_buffer + offset, 4);
6233     }
6234   else
6235     {
6236       memcpy (rare_buffer, raw_buffer, 4);
6237     }
6238 }
6239
6240 /* Copy a 64-bit double-precision value from the current frame into
6241    rare_buffer.  This may include getting half of it from the next
6242    register.  */
6243
6244 static void
6245 mips_read_fp_register_double (struct frame_info *frame, int regno,
6246                               gdb_byte *rare_buffer)
6247 {
6248   struct gdbarch *gdbarch = get_frame_arch (frame);
6249   int raw_size = register_size (gdbarch, regno);
6250
6251   if (raw_size == 8 && !mips2_fp_compat (frame))
6252     {
6253       /* We have a 64-bit value for this register, and we should use
6254          all 64 bits.  */
6255       if (!deprecated_frame_register_read (frame, regno, rare_buffer))
6256         error (_("can't read register %d (%s)"),
6257                regno, gdbarch_register_name (gdbarch, regno));
6258     }
6259   else
6260     {
6261       int rawnum = regno % gdbarch_num_regs (gdbarch);
6262
6263       if ((rawnum - mips_regnum (gdbarch)->fp0) & 1)
6264         internal_error (__FILE__, __LINE__,
6265                         _("mips_read_fp_register_double: bad access to "
6266                         "odd-numbered FP register"));
6267
6268       /* mips_read_fp_register_single will find the correct 32 bits from
6269          each register.  */
6270       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
6271         {
6272           mips_read_fp_register_single (frame, regno, rare_buffer + 4);
6273           mips_read_fp_register_single (frame, regno + 1, rare_buffer);
6274         }
6275       else
6276         {
6277           mips_read_fp_register_single (frame, regno, rare_buffer);
6278           mips_read_fp_register_single (frame, regno + 1, rare_buffer + 4);
6279         }
6280     }
6281 }
6282
6283 static void
6284 mips_print_fp_register (struct ui_file *file, struct frame_info *frame,
6285                         int regnum)
6286 {                               /* Do values for FP (float) regs.  */
6287   struct gdbarch *gdbarch = get_frame_arch (frame);
6288   gdb_byte *raw_buffer;
6289   std::string flt_str, dbl_str;
6290
6291   const struct type *flt_type = builtin_type (gdbarch)->builtin_float;
6292   const struct type *dbl_type = builtin_type (gdbarch)->builtin_double;
6293
6294   raw_buffer
6295     = ((gdb_byte *)
6296        alloca (2 * register_size (gdbarch, mips_regnum (gdbarch)->fp0)));
6297
6298   fprintf_filtered (file, "%s:", gdbarch_register_name (gdbarch, regnum));
6299   fprintf_filtered (file, "%*s",
6300                     4 - (int) strlen (gdbarch_register_name (gdbarch, regnum)),
6301                     "");
6302
6303   if (register_size (gdbarch, regnum) == 4 || mips2_fp_compat (frame))
6304     {
6305       struct value_print_options opts;
6306
6307       /* 4-byte registers: Print hex and floating.  Also print even
6308          numbered registers as doubles.  */
6309       mips_read_fp_register_single (frame, regnum, raw_buffer);
6310       flt_str = target_float_to_string (raw_buffer, flt_type, "%-17.9g");
6311
6312       get_formatted_print_options (&opts, 'x');
6313       print_scalar_formatted (raw_buffer,
6314                               builtin_type (gdbarch)->builtin_uint32,
6315                               &opts, 'w', file);
6316
6317       fprintf_filtered (file, " flt: %s", flt_str.c_str ());
6318
6319       if ((regnum - gdbarch_num_regs (gdbarch)) % 2 == 0)
6320         {
6321           mips_read_fp_register_double (frame, regnum, raw_buffer);
6322           dbl_str = target_float_to_string (raw_buffer, dbl_type, "%-24.17g");
6323
6324           fprintf_filtered (file, " dbl: %s", dbl_str.c_str ());
6325         }
6326     }
6327   else
6328     {
6329       struct value_print_options opts;
6330
6331       /* Eight byte registers: print each one as hex, float and double.  */
6332       mips_read_fp_register_single (frame, regnum, raw_buffer);
6333       flt_str = target_float_to_string (raw_buffer, flt_type, "%-17.9g");
6334
6335       mips_read_fp_register_double (frame, regnum, raw_buffer);
6336       dbl_str = target_float_to_string (raw_buffer, dbl_type, "%-24.17g");
6337
6338       get_formatted_print_options (&opts, 'x');
6339       print_scalar_formatted (raw_buffer,
6340                               builtin_type (gdbarch)->builtin_uint64,
6341                               &opts, 'g', file);
6342
6343       fprintf_filtered (file, " flt: %s", flt_str.c_str ());
6344       fprintf_filtered (file, " dbl: %s", dbl_str.c_str ());
6345     }
6346 }
6347
6348 static void
6349 mips_print_register (struct ui_file *file, struct frame_info *frame,
6350                      int regnum)
6351 {
6352   struct gdbarch *gdbarch = get_frame_arch (frame);
6353   struct value_print_options opts;
6354   struct value *val;
6355
6356   if (mips_float_register_p (gdbarch, regnum))
6357     {
6358       mips_print_fp_register (file, frame, regnum);
6359       return;
6360     }
6361
6362   val = get_frame_register_value (frame, regnum);
6363
6364   fputs_filtered (gdbarch_register_name (gdbarch, regnum), file);
6365
6366   /* The problem with printing numeric register names (r26, etc.) is that
6367      the user can't use them on input.  Probably the best solution is to
6368      fix it so that either the numeric or the funky (a2, etc.) names
6369      are accepted on input.  */
6370   if (regnum < MIPS_NUMREGS)
6371     fprintf_filtered (file, "(r%d): ", regnum);
6372   else
6373     fprintf_filtered (file, ": ");
6374
6375   get_formatted_print_options (&opts, 'x');
6376   val_print_scalar_formatted (value_type (val),
6377                               value_embedded_offset (val),
6378                               val,
6379                               &opts, 0, file);
6380 }
6381
6382 /* Print IEEE exception condition bits in FLAGS.  */
6383
6384 static void
6385 print_fpu_flags (struct ui_file *file, int flags)
6386 {
6387   if (flags & (1 << 0))
6388     fputs_filtered (" inexact", file);
6389   if (flags & (1 << 1))
6390     fputs_filtered (" uflow", file);
6391   if (flags & (1 << 2))
6392     fputs_filtered (" oflow", file);
6393   if (flags & (1 << 3))
6394     fputs_filtered (" div0", file);
6395   if (flags & (1 << 4))
6396     fputs_filtered (" inval", file);
6397   if (flags & (1 << 5))
6398     fputs_filtered (" unimp", file);
6399   fputc_filtered ('\n', file);
6400 }
6401
6402 /* Print interesting information about the floating point processor
6403    (if present) or emulator.  */
6404
6405 static void
6406 mips_print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
6407                       struct frame_info *frame, const char *args)
6408 {
6409   int fcsr = mips_regnum (gdbarch)->fp_control_status;
6410   enum mips_fpu_type type = MIPS_FPU_TYPE (gdbarch);
6411   ULONGEST fcs = 0;
6412   int i;
6413
6414   if (fcsr == -1 || !read_frame_register_unsigned (frame, fcsr, &fcs))
6415     type = MIPS_FPU_NONE;
6416
6417   fprintf_filtered (file, "fpu type: %s\n",
6418                     type == MIPS_FPU_DOUBLE ? "double-precision"
6419                     : type == MIPS_FPU_SINGLE ? "single-precision"
6420                     : "none / unused");
6421
6422   if (type == MIPS_FPU_NONE)
6423     return;
6424
6425   fprintf_filtered (file, "reg size: %d bits\n",
6426                     register_size (gdbarch, mips_regnum (gdbarch)->fp0) * 8);
6427
6428   fputs_filtered ("cond    :", file);
6429   if (fcs & (1 << 23))
6430     fputs_filtered (" 0", file);
6431   for (i = 1; i <= 7; i++)
6432     if (fcs & (1 << (24 + i)))
6433       fprintf_filtered (file, " %d", i);
6434   fputc_filtered ('\n', file);
6435
6436   fputs_filtered ("cause   :", file);
6437   print_fpu_flags (file, (fcs >> 12) & 0x3f);
6438   fputs ("mask    :", stdout);
6439   print_fpu_flags (file, (fcs >> 7) & 0x1f);
6440   fputs ("flags   :", stdout);
6441   print_fpu_flags (file, (fcs >> 2) & 0x1f);
6442
6443   fputs_filtered ("rounding: ", file);
6444   switch (fcs & 3)
6445     {
6446     case 0: fputs_filtered ("nearest\n", file); break;
6447     case 1: fputs_filtered ("zero\n", file); break;
6448     case 2: fputs_filtered ("+inf\n", file); break;
6449     case 3: fputs_filtered ("-inf\n", file); break;
6450     }
6451
6452   fputs_filtered ("flush   :", file);
6453   if (fcs & (1 << 21))
6454     fputs_filtered (" nearest", file);
6455   if (fcs & (1 << 22))
6456     fputs_filtered (" override", file);
6457   if (fcs & (1 << 24))
6458     fputs_filtered (" zero", file);
6459   if ((fcs & (0xb << 21)) == 0)
6460     fputs_filtered (" no", file);
6461   fputc_filtered ('\n', file);
6462
6463   fprintf_filtered (file, "nan2008 : %s\n", fcs & (1 << 18) ? "yes" : "no");
6464   fprintf_filtered (file, "abs2008 : %s\n", fcs & (1 << 19) ? "yes" : "no");
6465   fputc_filtered ('\n', file);
6466
6467   default_print_float_info (gdbarch, file, frame, args);
6468 }
6469
6470 /* Replacement for generic do_registers_info.
6471    Print regs in pretty columns.  */
6472
6473 static int
6474 print_fp_register_row (struct ui_file *file, struct frame_info *frame,
6475                        int regnum)
6476 {
6477   fprintf_filtered (file, " ");
6478   mips_print_fp_register (file, frame, regnum);
6479   fprintf_filtered (file, "\n");
6480   return regnum + 1;
6481 }
6482
6483
6484 /* Print a row's worth of GP (int) registers, with name labels above.  */
6485
6486 static int
6487 print_gp_register_row (struct ui_file *file, struct frame_info *frame,
6488                        int start_regnum)
6489 {
6490   struct gdbarch *gdbarch = get_frame_arch (frame);
6491   /* Do values for GP (int) regs.  */
6492   const gdb_byte *raw_buffer;
6493   struct value *value;
6494   int ncols = (mips_abi_regsize (gdbarch) == 8 ? 4 : 8);    /* display cols
6495                                                                per row.  */
6496   int col, byte;
6497   int regnum;
6498
6499   /* For GP registers, we print a separate row of names above the vals.  */
6500   for (col = 0, regnum = start_regnum;
6501        col < ncols && regnum < gdbarch_num_cooked_regs (gdbarch);
6502        regnum++)
6503     {
6504       if (*gdbarch_register_name (gdbarch, regnum) == '\0')
6505         continue;               /* unused register */
6506       if (mips_float_register_p (gdbarch, regnum))
6507         break;                  /* End the row: reached FP register.  */
6508       /* Large registers are handled separately.  */
6509       if (register_size (gdbarch, regnum) > mips_abi_regsize (gdbarch))
6510         {
6511           if (col > 0)
6512             break;              /* End the row before this register.  */
6513
6514           /* Print this register on a row by itself.  */
6515           mips_print_register (file, frame, regnum);
6516           fprintf_filtered (file, "\n");
6517           return regnum + 1;
6518         }
6519       if (col == 0)
6520         fprintf_filtered (file, "     ");
6521       fprintf_filtered (file,
6522                         mips_abi_regsize (gdbarch) == 8 ? "%17s" : "%9s",
6523                         gdbarch_register_name (gdbarch, regnum));
6524       col++;
6525     }
6526
6527   if (col == 0)
6528     return regnum;
6529
6530   /* Print the R0 to R31 names.  */
6531   if ((start_regnum % gdbarch_num_regs (gdbarch)) < MIPS_NUMREGS)
6532     fprintf_filtered (file, "\n R%-4d",
6533                       start_regnum % gdbarch_num_regs (gdbarch));
6534   else
6535     fprintf_filtered (file, "\n      ");
6536
6537   /* Now print the values in hex, 4 or 8 to the row.  */
6538   for (col = 0, regnum = start_regnum;
6539        col < ncols && regnum < gdbarch_num_cooked_regs (gdbarch);
6540        regnum++)
6541     {
6542       if (*gdbarch_register_name (gdbarch, regnum) == '\0')
6543         continue;               /* unused register */
6544       if (mips_float_register_p (gdbarch, regnum))
6545         break;                  /* End row: reached FP register.  */
6546       if (register_size (gdbarch, regnum) > mips_abi_regsize (gdbarch))
6547         break;                  /* End row: large register.  */
6548
6549       /* OK: get the data in raw format.  */
6550       value = get_frame_register_value (frame, regnum);
6551       if (value_optimized_out (value)
6552         || !value_entirely_available (value))
6553         {
6554           fprintf_filtered (file, "%*s ",
6555                             (int) mips_abi_regsize (gdbarch) * 2,
6556                             (mips_abi_regsize (gdbarch) == 4 ? "<unavl>"
6557                              : "<unavailable>"));
6558           col++;
6559           continue;
6560         }
6561       raw_buffer = value_contents_all (value);
6562       /* pad small registers */
6563       for (byte = 0;
6564            byte < (mips_abi_regsize (gdbarch)
6565                    - register_size (gdbarch, regnum)); byte++)
6566         fprintf_filtered (file, "  ");
6567       /* Now print the register value in hex, endian order.  */
6568       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
6569         for (byte =
6570              register_size (gdbarch, regnum) - register_size (gdbarch, regnum);
6571              byte < register_size (gdbarch, regnum); byte++)
6572           fprintf_filtered (file, "%02x", raw_buffer[byte]);
6573       else
6574         for (byte = register_size (gdbarch, regnum) - 1;
6575              byte >= 0; byte--)
6576           fprintf_filtered (file, "%02x", raw_buffer[byte]);
6577       fprintf_filtered (file, " ");
6578       col++;
6579     }
6580   if (col > 0)                  /* ie. if we actually printed anything...  */
6581     fprintf_filtered (file, "\n");
6582
6583   return regnum;
6584 }
6585
6586 /* MIPS_DO_REGISTERS_INFO(): called by "info register" command.  */
6587
6588 static void
6589 mips_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
6590                            struct frame_info *frame, int regnum, int all)
6591 {
6592   if (regnum != -1)             /* Do one specified register.  */
6593     {
6594       gdb_assert (regnum >= gdbarch_num_regs (gdbarch));
6595       if (*(gdbarch_register_name (gdbarch, regnum)) == '\0')
6596         error (_("Not a valid register for the current processor type"));
6597
6598       mips_print_register (file, frame, regnum);
6599       fprintf_filtered (file, "\n");
6600     }
6601   else
6602     /* Do all (or most) registers.  */
6603     {
6604       regnum = gdbarch_num_regs (gdbarch);
6605       while (regnum < gdbarch_num_cooked_regs (gdbarch))
6606         {
6607           if (mips_float_register_p (gdbarch, regnum))
6608             {
6609               if (all)          /* True for "INFO ALL-REGISTERS" command.  */
6610                 regnum = print_fp_register_row (file, frame, regnum);
6611               else
6612                 regnum += MIPS_NUMREGS; /* Skip floating point regs.  */
6613             }
6614           else
6615             regnum = print_gp_register_row (file, frame, regnum);
6616         }
6617     }
6618 }
6619
6620 static int
6621 mips_single_step_through_delay (struct gdbarch *gdbarch,
6622                                 struct frame_info *frame)
6623 {
6624   CORE_ADDR pc = get_frame_pc (frame);
6625   enum mips_isa isa;
6626   ULONGEST insn;
6627   int size;
6628
6629   if ((mips_pc_is_mips (pc)
6630        && !mips32_insn_at_pc_has_delay_slot (gdbarch, pc))
6631       || (mips_pc_is_micromips (gdbarch, pc)
6632           && !micromips_insn_at_pc_has_delay_slot (gdbarch, pc, 0))
6633       || (mips_pc_is_mips16 (gdbarch, pc)
6634           && !mips16_insn_at_pc_has_delay_slot (gdbarch, pc, 0)))
6635     return 0;
6636
6637   isa = mips_pc_isa (gdbarch, pc);
6638   /* _has_delay_slot above will have validated the read.  */
6639   insn = mips_fetch_instruction (gdbarch, isa, pc, NULL);
6640   size = mips_insn_size (isa, insn);
6641
6642   const address_space *aspace = get_frame_address_space (frame);
6643
6644   return breakpoint_here_p (aspace, pc + size) != no_breakpoint_here;
6645 }
6646
6647 /* To skip prologues, I use this predicate.  Returns either PC itself
6648    if the code at PC does not look like a function prologue; otherwise
6649    returns an address that (if we're lucky) follows the prologue.  If
6650    LENIENT, then we must skip everything which is involved in setting
6651    up the frame (it's OK to skip more, just so long as we don't skip
6652    anything which might clobber the registers which are being saved.
6653    We must skip more in the case where part of the prologue is in the
6654    delay slot of a non-prologue instruction).  */
6655
6656 static CORE_ADDR
6657 mips_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
6658 {
6659   CORE_ADDR limit_pc;
6660   CORE_ADDR func_addr;
6661
6662   /* See if we can determine the end of the prologue via the symbol table.
6663      If so, then return either PC, or the PC after the prologue, whichever
6664      is greater.  */
6665   if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
6666     {
6667       CORE_ADDR post_prologue_pc
6668         = skip_prologue_using_sal (gdbarch, func_addr);
6669       if (post_prologue_pc != 0)
6670         return std::max (pc, post_prologue_pc);
6671     }
6672
6673   /* Can't determine prologue from the symbol table, need to examine
6674      instructions.  */
6675
6676   /* Find an upper limit on the function prologue using the debug
6677      information.  If the debug information could not be used to provide
6678      that bound, then use an arbitrary large number as the upper bound.  */
6679   limit_pc = skip_prologue_using_sal (gdbarch, pc);
6680   if (limit_pc == 0)
6681     limit_pc = pc + 100;          /* Magic.  */
6682
6683   if (mips_pc_is_mips16 (gdbarch, pc))
6684     return mips16_scan_prologue (gdbarch, pc, limit_pc, NULL, NULL);
6685   else if (mips_pc_is_micromips (gdbarch, pc))
6686     return micromips_scan_prologue (gdbarch, pc, limit_pc, NULL, NULL);
6687   else
6688     return mips32_scan_prologue (gdbarch, pc, limit_pc, NULL, NULL);
6689 }
6690
6691 /* Implement the stack_frame_destroyed_p gdbarch method (32-bit version).
6692    This is a helper function for mips_stack_frame_destroyed_p.  */
6693
6694 static int
6695 mips32_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
6696 {
6697   CORE_ADDR func_addr = 0, func_end = 0;
6698
6699   if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
6700     {
6701       /* The MIPS epilogue is max. 12 bytes long.  */
6702       CORE_ADDR addr = func_end - 12;
6703
6704       if (addr < func_addr + 4)
6705         addr = func_addr + 4;
6706       if (pc < addr)
6707         return 0;
6708
6709       for (; pc < func_end; pc += MIPS_INSN32_SIZE)
6710         {
6711           unsigned long high_word;
6712           unsigned long inst;
6713
6714           inst = mips_fetch_instruction (gdbarch, ISA_MIPS, pc, NULL);
6715           high_word = (inst >> 16) & 0xffff;
6716
6717           if (high_word != 0x27bd       /* addiu $sp,$sp,offset */
6718               && high_word != 0x67bd    /* daddiu $sp,$sp,offset */
6719               && inst != 0x03e00008     /* jr $ra */
6720               && inst != 0x00000000)    /* nop */
6721             return 0;
6722         }
6723
6724       return 1;
6725     }
6726
6727   return 0;
6728 }
6729
6730 /* Implement the stack_frame_destroyed_p gdbarch method (microMIPS version).
6731    This is a helper function for mips_stack_frame_destroyed_p.  */
6732
6733 static int
6734 micromips_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
6735 {
6736   CORE_ADDR func_addr = 0;
6737   CORE_ADDR func_end = 0;
6738   CORE_ADDR addr;
6739   ULONGEST insn;
6740   long offset;
6741   int dreg;
6742   int sreg;
6743   int loc;
6744
6745   if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
6746     return 0;
6747
6748   /* The microMIPS epilogue is max. 12 bytes long.  */
6749   addr = func_end - 12;
6750
6751   if (addr < func_addr + 2)
6752     addr = func_addr + 2;
6753   if (pc < addr)
6754     return 0;
6755
6756   for (; pc < func_end; pc += loc)
6757     {
6758       loc = 0;
6759       insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, pc, NULL);
6760       loc += MIPS_INSN16_SIZE;
6761       switch (mips_insn_size (ISA_MICROMIPS, insn))
6762         {
6763         /* 32-bit instructions.  */
6764         case 2 * MIPS_INSN16_SIZE:
6765           insn <<= 16;
6766           insn |= mips_fetch_instruction (gdbarch,
6767                                           ISA_MICROMIPS, pc + loc, NULL);
6768           loc += MIPS_INSN16_SIZE;
6769           switch (micromips_op (insn >> 16))
6770             {
6771             case 0xc: /* ADDIU: bits 001100 */
6772             case 0x17: /* DADDIU: bits 010111 */
6773               sreg = b0s5_reg (insn >> 16);
6774               dreg = b5s5_reg (insn >> 16);
6775               offset = (b0s16_imm (insn) ^ 0x8000) - 0x8000;
6776               if (sreg == MIPS_SP_REGNUM && dreg == MIPS_SP_REGNUM
6777                             /* (D)ADDIU $sp, imm */
6778                   && offset >= 0)
6779                 break;
6780               return 0;
6781
6782             default:
6783               return 0;
6784             }
6785           break;
6786
6787         /* 16-bit instructions.  */
6788         case MIPS_INSN16_SIZE:
6789           switch (micromips_op (insn))
6790             {
6791             case 0x3: /* MOVE: bits 000011 */
6792               sreg = b0s5_reg (insn);
6793               dreg = b5s5_reg (insn);
6794               if (sreg == 0 && dreg == 0)
6795                                 /* MOVE $zero, $zero aka NOP */
6796                 break;
6797               return 0;
6798
6799             case 0x11: /* POOL16C: bits 010001 */
6800               if (b5s5_op (insn) == 0x18
6801                                 /* JRADDIUSP: bits 010011 11000 */
6802                   || (b5s5_op (insn) == 0xd
6803                                 /* JRC: bits 010011 01101 */
6804                       && b0s5_reg (insn) == MIPS_RA_REGNUM))
6805                                 /* JRC $ra */
6806                 break;
6807               return 0;
6808
6809             case 0x13: /* POOL16D: bits 010011 */
6810               offset = micromips_decode_imm9 (b1s9_imm (insn));
6811               if ((insn & 0x1) == 0x1
6812                                 /* ADDIUSP: bits 010011 1 */
6813                   && offset > 0)
6814                 break;
6815               return 0;
6816
6817             default:
6818               return 0;
6819             }
6820         }
6821     }
6822
6823   return 1;
6824 }
6825
6826 /* Implement the stack_frame_destroyed_p gdbarch method (16-bit version).
6827    This is a helper function for mips_stack_frame_destroyed_p.  */
6828
6829 static int
6830 mips16_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
6831 {
6832   CORE_ADDR func_addr = 0, func_end = 0;
6833
6834   if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
6835     {
6836       /* The MIPS epilogue is max. 12 bytes long.  */
6837       CORE_ADDR addr = func_end - 12;
6838
6839       if (addr < func_addr + 4)
6840         addr = func_addr + 4;
6841       if (pc < addr)
6842         return 0;
6843
6844       for (; pc < func_end; pc += MIPS_INSN16_SIZE)
6845         {
6846           unsigned short inst;
6847
6848           inst = mips_fetch_instruction (gdbarch, ISA_MIPS16, pc, NULL);
6849
6850           if ((inst & 0xf800) == 0xf000)        /* extend */
6851             continue;
6852
6853           if (inst != 0x6300            /* addiu $sp,offset */
6854               && inst != 0xfb00         /* daddiu $sp,$sp,offset */
6855               && inst != 0xe820         /* jr $ra */
6856               && inst != 0xe8a0         /* jrc $ra */
6857               && inst != 0x6500)        /* nop */
6858             return 0;
6859         }
6860
6861       return 1;
6862     }
6863
6864   return 0;
6865 }
6866
6867 /* Implement the stack_frame_destroyed_p gdbarch method.
6868
6869    The epilogue is defined here as the area at the end of a function,
6870    after an instruction which destroys the function's stack frame.  */
6871
6872 static int
6873 mips_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
6874 {
6875   if (mips_pc_is_mips16 (gdbarch, pc))
6876     return mips16_stack_frame_destroyed_p (gdbarch, pc);
6877   else if (mips_pc_is_micromips (gdbarch, pc))
6878     return micromips_stack_frame_destroyed_p (gdbarch, pc);
6879   else
6880     return mips32_stack_frame_destroyed_p (gdbarch, pc);
6881 }
6882
6883 /* Root of all "set mips "/"show mips " commands.  This will eventually be
6884    used for all MIPS-specific commands.  */
6885
6886 static void
6887 show_mips_command (const char *args, int from_tty)
6888 {
6889   help_list (showmipscmdlist, "show mips ", all_commands, gdb_stdout);
6890 }
6891
6892 static void
6893 set_mips_command (const char *args, int from_tty)
6894 {
6895   printf_unfiltered
6896     ("\"set mips\" must be followed by an appropriate subcommand.\n");
6897   help_list (setmipscmdlist, "set mips ", all_commands, gdb_stdout);
6898 }
6899
6900 /* Commands to show/set the MIPS FPU type.  */
6901
6902 static void
6903 show_mipsfpu_command (const char *args, int from_tty)
6904 {
6905   const char *fpu;
6906
6907   if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_mips)
6908     {
6909       printf_unfiltered
6910         ("The MIPS floating-point coprocessor is unknown "
6911          "because the current architecture is not MIPS.\n");
6912       return;
6913     }
6914
6915   switch (MIPS_FPU_TYPE (target_gdbarch ()))
6916     {
6917     case MIPS_FPU_SINGLE:
6918       fpu = "single-precision";
6919       break;
6920     case MIPS_FPU_DOUBLE:
6921       fpu = "double-precision";
6922       break;
6923     case MIPS_FPU_NONE:
6924       fpu = "absent (none)";
6925       break;
6926     default:
6927       internal_error (__FILE__, __LINE__, _("bad switch"));
6928     }
6929   if (mips_fpu_type_auto)
6930     printf_unfiltered ("The MIPS floating-point coprocessor "
6931                        "is set automatically (currently %s)\n",
6932                        fpu);
6933   else
6934     printf_unfiltered
6935       ("The MIPS floating-point coprocessor is assumed to be %s\n", fpu);
6936 }
6937
6938
6939 static void
6940 set_mipsfpu_command (const char *args, int from_tty)
6941 {
6942   printf_unfiltered ("\"set mipsfpu\" must be followed by \"double\", "
6943                      "\"single\",\"none\" or \"auto\".\n");
6944   show_mipsfpu_command (args, from_tty);
6945 }
6946
6947 static void
6948 set_mipsfpu_single_command (const char *args, int from_tty)
6949 {
6950   struct gdbarch_info info;
6951   gdbarch_info_init (&info);
6952   mips_fpu_type = MIPS_FPU_SINGLE;
6953   mips_fpu_type_auto = 0;
6954   /* FIXME: cagney/2003-11-15: Should be setting a field in "info"
6955      instead of relying on globals.  Doing that would let generic code
6956      handle the search for this specific architecture.  */
6957   if (!gdbarch_update_p (info))
6958     internal_error (__FILE__, __LINE__, _("set mipsfpu failed"));
6959 }
6960
6961 static void
6962 set_mipsfpu_double_command (const char *args, int from_tty)
6963 {
6964   struct gdbarch_info info;
6965   gdbarch_info_init (&info);
6966   mips_fpu_type = MIPS_FPU_DOUBLE;
6967   mips_fpu_type_auto = 0;
6968   /* FIXME: cagney/2003-11-15: Should be setting a field in "info"
6969      instead of relying on globals.  Doing that would let generic code
6970      handle the search for this specific architecture.  */
6971   if (!gdbarch_update_p (info))
6972     internal_error (__FILE__, __LINE__, _("set mipsfpu failed"));
6973 }
6974
6975 static void
6976 set_mipsfpu_none_command (const char *args, int from_tty)
6977 {
6978   struct gdbarch_info info;
6979   gdbarch_info_init (&info);
6980   mips_fpu_type = MIPS_FPU_NONE;
6981   mips_fpu_type_auto = 0;
6982   /* FIXME: cagney/2003-11-15: Should be setting a field in "info"
6983      instead of relying on globals.  Doing that would let generic code
6984      handle the search for this specific architecture.  */
6985   if (!gdbarch_update_p (info))
6986     internal_error (__FILE__, __LINE__, _("set mipsfpu failed"));
6987 }
6988
6989 static void
6990 set_mipsfpu_auto_command (const char *args, int from_tty)
6991 {
6992   mips_fpu_type_auto = 1;
6993 }
6994
6995 /* Just like reinit_frame_cache, but with the right arguments to be
6996    callable as an sfunc.  */
6997
6998 static void
6999 reinit_frame_cache_sfunc (const char *args, int from_tty,
7000                           struct cmd_list_element *c)
7001 {
7002   reinit_frame_cache ();
7003 }
7004
7005 static int
7006 gdb_print_insn_mips (bfd_vma memaddr, struct disassemble_info *info)
7007 {
7008   gdb_disassembler *di
7009     = static_cast<gdb_disassembler *>(info->application_data);
7010   struct gdbarch *gdbarch = di->arch ();
7011
7012   /* FIXME: cagney/2003-06-26: Is this even necessary?  The
7013      disassembler needs to be able to locally determine the ISA, and
7014      not rely on GDB.  Otherwize the stand-alone 'objdump -d' will not
7015      work.  */
7016   if (mips_pc_is_mips16 (gdbarch, memaddr))
7017     info->mach = bfd_mach_mips16;
7018   else if (mips_pc_is_micromips (gdbarch, memaddr))
7019     info->mach = bfd_mach_mips_micromips;
7020
7021   /* Round down the instruction address to the appropriate boundary.  */
7022   memaddr &= (info->mach == bfd_mach_mips16
7023               || info->mach == bfd_mach_mips_micromips) ? ~1 : ~3;
7024
7025   return default_print_insn (memaddr, info);
7026 }
7027
7028 /* Implement the breakpoint_kind_from_pc gdbarch method.  */
7029
7030 static int
7031 mips_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
7032 {
7033   CORE_ADDR pc = *pcptr;
7034
7035   if (mips_pc_is_mips16 (gdbarch, pc))
7036     {
7037       *pcptr = unmake_compact_addr (pc);
7038       return MIPS_BP_KIND_MIPS16;
7039     }
7040   else if (mips_pc_is_micromips (gdbarch, pc))
7041     {
7042       ULONGEST insn;
7043       int status;
7044
7045       *pcptr = unmake_compact_addr (pc);
7046       insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, pc, &status);
7047       if (status || (mips_insn_size (ISA_MICROMIPS, insn) == 2))
7048         return MIPS_BP_KIND_MICROMIPS16;
7049       else
7050         return MIPS_BP_KIND_MICROMIPS32;
7051     }
7052   else
7053     return MIPS_BP_KIND_MIPS32;
7054 }
7055
7056 /* Implement the sw_breakpoint_from_kind gdbarch method.  */
7057
7058 static const gdb_byte *
7059 mips_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
7060 {
7061   enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
7062
7063   switch (kind)
7064     {
7065     case MIPS_BP_KIND_MIPS16:
7066       {
7067         static gdb_byte mips16_big_breakpoint[] = { 0xe8, 0xa5 };
7068         static gdb_byte mips16_little_breakpoint[] = { 0xa5, 0xe8 };
7069
7070         *size = 2;
7071         if (byte_order_for_code == BFD_ENDIAN_BIG)
7072           return mips16_big_breakpoint;
7073         else
7074           return mips16_little_breakpoint;
7075       }
7076     case MIPS_BP_KIND_MICROMIPS16:
7077       {
7078         static gdb_byte micromips16_big_breakpoint[] = { 0x46, 0x85 };
7079         static gdb_byte micromips16_little_breakpoint[] = { 0x85, 0x46 };
7080
7081         *size = 2;
7082
7083         if (byte_order_for_code == BFD_ENDIAN_BIG)
7084           return micromips16_big_breakpoint;
7085         else
7086           return micromips16_little_breakpoint;
7087       }
7088     case MIPS_BP_KIND_MICROMIPS32:
7089       {
7090         static gdb_byte micromips32_big_breakpoint[] = { 0, 0x5, 0, 0x7 };
7091         static gdb_byte micromips32_little_breakpoint[] = { 0x5, 0, 0x7, 0 };
7092
7093         *size = 4;
7094         if (byte_order_for_code == BFD_ENDIAN_BIG)
7095           return micromips32_big_breakpoint;
7096         else
7097           return micromips32_little_breakpoint;
7098       }
7099     case MIPS_BP_KIND_MIPS32:
7100       {
7101         static gdb_byte big_breakpoint[] = { 0, 0x5, 0, 0xd };
7102         static gdb_byte little_breakpoint[] = { 0xd, 0, 0x5, 0 };
7103
7104         *size = 4;
7105         if (byte_order_for_code == BFD_ENDIAN_BIG)
7106           return big_breakpoint;
7107         else
7108           return little_breakpoint;
7109       }
7110     default:
7111       gdb_assert_not_reached ("unexpected mips breakpoint kind");
7112     };
7113 }
7114
7115 /* Return non-zero if the standard MIPS instruction INST has a branch
7116    delay slot (i.e. it is a jump or branch instruction).  This function
7117    is based on mips32_next_pc.  */
7118
7119 static int
7120 mips32_instruction_has_delay_slot (struct gdbarch *gdbarch, ULONGEST inst)
7121 {
7122   int op;
7123   int rs;
7124   int rt;
7125
7126   op = itype_op (inst);
7127   if ((inst & 0xe0000000) != 0)
7128     {
7129       rs = itype_rs (inst);
7130       rt = itype_rt (inst);
7131       return (is_octeon_bbit_op (op, gdbarch) 
7132               || op >> 2 == 5   /* BEQL, BNEL, BLEZL, BGTZL: bits 0101xx  */
7133               || op == 29       /* JALX: bits 011101  */
7134               || (op == 17
7135                   && (rs == 8
7136                                 /* BC1F, BC1FL, BC1T, BC1TL: 010001 01000  */
7137                       || (rs == 9 && (rt & 0x2) == 0)
7138                                 /* BC1ANY2F, BC1ANY2T: bits 010001 01001  */
7139                       || (rs == 10 && (rt & 0x2) == 0))));
7140                                 /* BC1ANY4F, BC1ANY4T: bits 010001 01010  */
7141     }
7142   else
7143     switch (op & 0x07)          /* extract bits 28,27,26  */
7144       {
7145       case 0:                   /* SPECIAL  */
7146         op = rtype_funct (inst);
7147         return (op == 8         /* JR  */
7148                 || op == 9);    /* JALR  */
7149         break;                  /* end SPECIAL  */
7150       case 1:                   /* REGIMM  */
7151         rs = itype_rs (inst);
7152         rt = itype_rt (inst);   /* branch condition  */
7153         return ((rt & 0xc) == 0
7154                                 /* BLTZ, BLTZL, BGEZ, BGEZL: bits 000xx  */
7155                                 /* BLTZAL, BLTZALL, BGEZAL, BGEZALL: 100xx  */
7156                 || ((rt & 0x1e) == 0x1c && rs == 0));
7157                                 /* BPOSGE32, BPOSGE64: bits 1110x  */
7158         break;                  /* end REGIMM  */
7159       default:                  /* J, JAL, BEQ, BNE, BLEZ, BGTZ  */
7160         return 1;
7161         break;
7162       }
7163 }
7164
7165 /* Return non-zero if a standard MIPS instruction at ADDR has a branch
7166    delay slot (i.e. it is a jump or branch instruction).  */
7167
7168 static int
7169 mips32_insn_at_pc_has_delay_slot (struct gdbarch *gdbarch, CORE_ADDR addr)
7170 {
7171   ULONGEST insn;
7172   int status;
7173
7174   insn = mips_fetch_instruction (gdbarch, ISA_MIPS, addr, &status);
7175   if (status)
7176     return 0;
7177
7178   return mips32_instruction_has_delay_slot (gdbarch, insn);
7179 }
7180
7181 /* Return non-zero if the microMIPS instruction INSN, comprising the
7182    16-bit major opcode word in the high 16 bits and any second word
7183    in the low 16 bits, has a branch delay slot (i.e. it is a non-compact
7184    jump or branch instruction).  The instruction must be 32-bit if
7185    MUSTBE32 is set or can be any instruction otherwise.  */
7186
7187 static int
7188 micromips_instruction_has_delay_slot (ULONGEST insn, int mustbe32)
7189 {
7190   ULONGEST major = insn >> 16;
7191
7192   switch (micromips_op (major))
7193     {
7194     /* 16-bit instructions.  */
7195     case 0x33:                  /* B16: bits 110011 */
7196     case 0x2b:                  /* BNEZ16: bits 101011 */
7197     case 0x23:                  /* BEQZ16: bits 100011 */
7198       return !mustbe32;
7199     case 0x11:                  /* POOL16C: bits 010001 */
7200       return (!mustbe32
7201               && ((b5s5_op (major) == 0xc
7202                                 /* JR16: bits 010001 01100 */
7203                   || (b5s5_op (major) & 0x1e) == 0xe)));
7204                                 /* JALR16, JALRS16: bits 010001 0111x */
7205     /* 32-bit instructions.  */
7206     case 0x3d:                  /* JAL: bits 111101 */
7207     case 0x3c:                  /* JALX: bits 111100 */
7208     case 0x35:                  /* J: bits 110101 */
7209     case 0x2d:                  /* BNE: bits 101101 */
7210     case 0x25:                  /* BEQ: bits 100101 */
7211     case 0x1d:                  /* JALS: bits 011101 */
7212       return 1;
7213     case 0x10:                  /* POOL32I: bits 010000 */
7214       return ((b5s5_op (major) & 0x1c) == 0x0
7215                                 /* BLTZ, BLTZAL, BGEZ, BGEZAL: 010000 000xx */
7216               || (b5s5_op (major) & 0x1d) == 0x4
7217                                 /* BLEZ, BGTZ: bits 010000 001x0 */
7218               || (b5s5_op (major) & 0x1d) == 0x11
7219                                 /* BLTZALS, BGEZALS: bits 010000 100x1 */
7220               || ((b5s5_op (major) & 0x1e) == 0x14
7221                   && (major & 0x3) == 0x0)
7222                                 /* BC2F, BC2T: bits 010000 1010x xxx00 */
7223               || (b5s5_op (major) & 0x1e) == 0x1a
7224                                 /* BPOSGE64, BPOSGE32: bits 010000 1101x */
7225               || ((b5s5_op (major) & 0x1e) == 0x1c
7226                   && (major & 0x3) == 0x0)
7227                                 /* BC1F, BC1T: bits 010000 1110x xxx00 */
7228               || ((b5s5_op (major) & 0x1c) == 0x1c
7229                   && (major & 0x3) == 0x1));
7230                                 /* BC1ANY*: bits 010000 111xx xxx01 */
7231     case 0x0:                   /* POOL32A: bits 000000 */
7232       return (b0s6_op (insn) == 0x3c
7233                                 /* POOL32Axf: bits 000000 ... 111100 */
7234               && (b6s10_ext (insn) & 0x2bf) == 0x3c);
7235                                 /* JALR, JALR.HB: 000000 000x111100 111100 */
7236                                 /* JALRS, JALRS.HB: 000000 010x111100 111100 */
7237     default:
7238       return 0;
7239     }
7240 }
7241
7242 /* Return non-zero if a microMIPS instruction at ADDR has a branch delay
7243    slot (i.e. it is a non-compact jump instruction).  The instruction
7244    must be 32-bit if MUSTBE32 is set or can be any instruction otherwise.  */
7245
7246 static int
7247 micromips_insn_at_pc_has_delay_slot (struct gdbarch *gdbarch,
7248                                      CORE_ADDR addr, int mustbe32)
7249 {
7250   ULONGEST insn;
7251   int status;
7252   int size;
7253
7254   insn = mips_fetch_instruction (gdbarch, ISA_MICROMIPS, addr, &status);
7255   if (status)
7256     return 0;
7257   size = mips_insn_size (ISA_MICROMIPS, insn);
7258   insn <<= 16;
7259   if (size == 2 * MIPS_INSN16_SIZE)
7260     {
7261       insn |= mips_fetch_instruction (gdbarch, ISA_MICROMIPS, addr, &status);
7262       if (status)
7263         return 0;
7264     }
7265
7266   return micromips_instruction_has_delay_slot (insn, mustbe32);
7267 }
7268
7269 /* Return non-zero if the MIPS16 instruction INST, which must be
7270    a 32-bit instruction if MUSTBE32 is set or can be any instruction
7271    otherwise, has a branch delay slot (i.e. it is a non-compact jump
7272    instruction).  This function is based on mips16_next_pc.  */
7273
7274 static int
7275 mips16_instruction_has_delay_slot (unsigned short inst, int mustbe32)
7276 {
7277   if ((inst & 0xf89f) == 0xe800)        /* JR/JALR (16-bit instruction)  */
7278     return !mustbe32;
7279   return (inst & 0xf800) == 0x1800;     /* JAL/JALX (32-bit instruction)  */
7280 }
7281
7282 /* Return non-zero if a MIPS16 instruction at ADDR has a branch delay
7283    slot (i.e. it is a non-compact jump instruction).  The instruction
7284    must be 32-bit if MUSTBE32 is set or can be any instruction otherwise.  */
7285
7286 static int
7287 mips16_insn_at_pc_has_delay_slot (struct gdbarch *gdbarch,
7288                                   CORE_ADDR addr, int mustbe32)
7289 {
7290   unsigned short insn;
7291   int status;
7292
7293   insn = mips_fetch_instruction (gdbarch, ISA_MIPS16, addr, &status);
7294   if (status)
7295     return 0;
7296
7297   return mips16_instruction_has_delay_slot (insn, mustbe32);
7298 }
7299
7300 /* Calculate the starting address of the MIPS memory segment BPADDR is in.
7301    This assumes KSSEG exists.  */
7302
7303 static CORE_ADDR
7304 mips_segment_boundary (CORE_ADDR bpaddr)
7305 {
7306   CORE_ADDR mask = CORE_ADDR_MAX;
7307   int segsize;
7308
7309   if (sizeof (CORE_ADDR) == 8)
7310     /* Get the topmost two bits of bpaddr in a 32-bit safe manner (avoid
7311        a compiler warning produced where CORE_ADDR is a 32-bit type even
7312        though in that case this is dead code).  */
7313     switch (bpaddr >> ((sizeof (CORE_ADDR) << 3) - 2) & 3)
7314       {
7315       case 3:
7316         if (bpaddr == (bfd_signed_vma) (int32_t) bpaddr)
7317           segsize = 29;                 /* 32-bit compatibility segment  */
7318         else
7319           segsize = 62;                 /* xkseg  */
7320         break;
7321       case 2:                           /* xkphys  */
7322         segsize = 59;
7323         break;
7324       default:                          /* xksseg (1), xkuseg/kuseg (0)  */
7325         segsize = 62;
7326         break;
7327       }
7328   else if (bpaddr & 0x80000000)         /* kernel segment  */
7329     segsize = 29;
7330   else
7331     segsize = 31;                       /* user segment  */
7332   mask <<= segsize;
7333   return bpaddr & mask;
7334 }
7335
7336 /* Move the breakpoint at BPADDR out of any branch delay slot by shifting
7337    it backwards if necessary.  Return the address of the new location.  */
7338
7339 static CORE_ADDR
7340 mips_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
7341 {
7342   CORE_ADDR prev_addr;
7343   CORE_ADDR boundary;
7344   CORE_ADDR func_addr;
7345
7346   /* If a breakpoint is set on the instruction in a branch delay slot,
7347      GDB gets confused.  When the breakpoint is hit, the PC isn't on
7348      the instruction in the branch delay slot, the PC will point to
7349      the branch instruction.  Since the PC doesn't match any known
7350      breakpoints, GDB reports a trap exception.
7351
7352      There are two possible fixes for this problem.
7353
7354      1) When the breakpoint gets hit, see if the BD bit is set in the
7355      Cause register (which indicates the last exception occurred in a
7356      branch delay slot).  If the BD bit is set, fix the PC to point to
7357      the instruction in the branch delay slot.
7358
7359      2) When the user sets the breakpoint, don't allow him to set the
7360      breakpoint on the instruction in the branch delay slot.  Instead
7361      move the breakpoint to the branch instruction (which will have
7362      the same result).
7363
7364      The problem with the first solution is that if the user then
7365      single-steps the processor, the branch instruction will get
7366      skipped (since GDB thinks the PC is on the instruction in the
7367      branch delay slot).
7368
7369      So, we'll use the second solution.  To do this we need to know if
7370      the instruction we're trying to set the breakpoint on is in the
7371      branch delay slot.  */
7372
7373   boundary = mips_segment_boundary (bpaddr);
7374
7375   /* Make sure we don't scan back before the beginning of the current
7376      function, since we may fetch constant data or insns that look like
7377      a jump.  Of course we might do that anyway if the compiler has
7378      moved constants inline. :-(  */
7379   if (find_pc_partial_function (bpaddr, NULL, &func_addr, NULL)
7380       && func_addr > boundary && func_addr <= bpaddr)
7381     boundary = func_addr;
7382
7383   if (mips_pc_is_mips (bpaddr))
7384     {
7385       if (bpaddr == boundary)
7386         return bpaddr;
7387
7388       /* If the previous instruction has a branch delay slot, we have
7389          to move the breakpoint to the branch instruction. */
7390       prev_addr = bpaddr - 4;
7391       if (mips32_insn_at_pc_has_delay_slot (gdbarch, prev_addr))
7392         bpaddr = prev_addr;
7393     }
7394   else
7395     {
7396       int (*insn_at_pc_has_delay_slot) (struct gdbarch *, CORE_ADDR, int);
7397       CORE_ADDR addr, jmpaddr;
7398       int i;
7399
7400       boundary = unmake_compact_addr (boundary);
7401
7402       /* The only MIPS16 instructions with delay slots are JAL, JALX,
7403          JALR and JR.  An absolute JAL/JALX is always 4 bytes long,
7404          so try for that first, then try the 2 byte JALR/JR.
7405          The microMIPS ASE has a whole range of jumps and branches
7406          with delay slots, some of which take 4 bytes and some take
7407          2 bytes, so the idea is the same.
7408          FIXME: We have to assume that bpaddr is not the second half
7409          of an extended instruction.  */
7410       insn_at_pc_has_delay_slot = (mips_pc_is_micromips (gdbarch, bpaddr)
7411                                    ? micromips_insn_at_pc_has_delay_slot
7412                                    : mips16_insn_at_pc_has_delay_slot);
7413
7414       jmpaddr = 0;
7415       addr = bpaddr;
7416       for (i = 1; i < 4; i++)
7417         {
7418           if (unmake_compact_addr (addr) == boundary)
7419             break;
7420           addr -= MIPS_INSN16_SIZE;
7421           if (i == 1 && insn_at_pc_has_delay_slot (gdbarch, addr, 0))
7422             /* Looks like a JR/JALR at [target-1], but it could be
7423                the second word of a previous JAL/JALX, so record it
7424                and check back one more.  */
7425             jmpaddr = addr;
7426           else if (i > 1 && insn_at_pc_has_delay_slot (gdbarch, addr, 1))
7427             {
7428               if (i == 2)
7429                 /* Looks like a JAL/JALX at [target-2], but it could also
7430                    be the second word of a previous JAL/JALX, record it,
7431                    and check back one more.  */
7432                 jmpaddr = addr;
7433               else
7434                 /* Looks like a JAL/JALX at [target-3], so any previously
7435                    recorded JAL/JALX or JR/JALR must be wrong, because:
7436
7437                    >-3: JAL
7438                     -2: JAL-ext (can't be JAL/JALX)
7439                     -1: bdslot (can't be JR/JALR)
7440                      0: target insn
7441
7442                    Of course it could be another JAL-ext which looks
7443                    like a JAL, but in that case we'd have broken out
7444                    of this loop at [target-2]:
7445
7446                     -4: JAL
7447                    >-3: JAL-ext
7448                     -2: bdslot (can't be jmp)
7449                     -1: JR/JALR
7450                      0: target insn  */
7451                 jmpaddr = 0;
7452             }
7453           else
7454             {
7455               /* Not a jump instruction: if we're at [target-1] this
7456                  could be the second word of a JAL/JALX, so continue;
7457                  otherwise we're done.  */
7458               if (i > 1)
7459                 break;
7460             }
7461         }
7462
7463       if (jmpaddr)
7464         bpaddr = jmpaddr;
7465     }
7466
7467   return bpaddr;
7468 }
7469
7470 /* Return non-zero if SUFFIX is one of the numeric suffixes used for MIPS16
7471    call stubs, one of 1, 2, 5, 6, 9, 10, or, if ZERO is non-zero, also 0.  */
7472
7473 static int
7474 mips_is_stub_suffix (const char *suffix, int zero)
7475 {
7476   switch (suffix[0])
7477    {
7478    case '0':
7479      return zero && suffix[1] == '\0';
7480    case '1':
7481      return suffix[1] == '\0' || (suffix[1] == '0' && suffix[2] == '\0');
7482    case '2':
7483    case '5':
7484    case '6':
7485    case '9':
7486      return suffix[1] == '\0';
7487    default:
7488      return 0;
7489    }
7490 }
7491
7492 /* Return non-zero if MODE is one of the mode infixes used for MIPS16
7493    call stubs, one of sf, df, sc, or dc.  */
7494
7495 static int
7496 mips_is_stub_mode (const char *mode)
7497 {
7498   return ((mode[0] == 's' || mode[0] == 'd')
7499           && (mode[1] == 'f' || mode[1] == 'c'));
7500 }
7501
7502 /* Code at PC is a compiler-generated stub.  Such a stub for a function
7503    bar might have a name like __fn_stub_bar, and might look like this:
7504
7505       mfc1    $4, $f13
7506       mfc1    $5, $f12
7507       mfc1    $6, $f15
7508       mfc1    $7, $f14
7509
7510    followed by (or interspersed with):
7511
7512       j       bar
7513
7514    or:
7515
7516       lui     $25, %hi(bar)
7517       addiu   $25, $25, %lo(bar)
7518       jr      $25
7519
7520    ($1 may be used in old code; for robustness we accept any register)
7521    or, in PIC code:
7522
7523       lui     $28, %hi(_gp_disp)
7524       addiu   $28, $28, %lo(_gp_disp)
7525       addu    $28, $28, $25
7526       lw      $25, %got(bar)
7527       addiu   $25, $25, %lo(bar)
7528       jr      $25
7529
7530    In the case of a __call_stub_bar stub, the sequence to set up
7531    arguments might look like this:
7532
7533       mtc1    $4, $f13
7534       mtc1    $5, $f12
7535       mtc1    $6, $f15
7536       mtc1    $7, $f14
7537
7538    followed by (or interspersed with) one of the jump sequences above.
7539
7540    In the case of a __call_stub_fp_bar stub, JAL or JALR is used instead
7541    of J or JR, respectively, followed by:
7542
7543       mfc1    $2, $f0
7544       mfc1    $3, $f1
7545       jr      $18
7546
7547    We are at the beginning of the stub here, and scan down and extract
7548    the target address from the jump immediate instruction or, if a jump
7549    register instruction is used, from the register referred.  Return
7550    the value of PC calculated or 0 if inconclusive.
7551
7552    The limit on the search is arbitrarily set to 20 instructions.  FIXME.  */
7553
7554 static CORE_ADDR
7555 mips_get_mips16_fn_stub_pc (struct frame_info *frame, CORE_ADDR pc)
7556 {
7557   struct gdbarch *gdbarch = get_frame_arch (frame);
7558   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7559   int addrreg = MIPS_ZERO_REGNUM;
7560   CORE_ADDR start_pc = pc;
7561   CORE_ADDR target_pc = 0;
7562   CORE_ADDR addr = 0;
7563   CORE_ADDR gp = 0;
7564   int status = 0;
7565   int i;
7566
7567   for (i = 0;
7568        status == 0 && target_pc == 0 && i < 20;
7569        i++, pc += MIPS_INSN32_SIZE)
7570     {
7571       ULONGEST inst = mips_fetch_instruction (gdbarch, ISA_MIPS, pc, NULL);
7572       CORE_ADDR imm;
7573       int rt;
7574       int rs;
7575       int rd;
7576
7577       switch (itype_op (inst))
7578         {
7579         case 0:         /* SPECIAL */
7580           switch (rtype_funct (inst))
7581             {
7582             case 8:             /* JR */
7583             case 9:             /* JALR */
7584               rs = rtype_rs (inst);
7585               if (rs == MIPS_GP_REGNUM)
7586                 target_pc = gp;                         /* Hmm...  */
7587               else if (rs == addrreg)
7588                 target_pc = addr;
7589               break;
7590
7591             case 0x21:          /* ADDU */
7592               rt = rtype_rt (inst);
7593               rs = rtype_rs (inst);
7594               rd = rtype_rd (inst);
7595               if (rd == MIPS_GP_REGNUM
7596                   && ((rs == MIPS_GP_REGNUM && rt == MIPS_T9_REGNUM)
7597                       || (rs == MIPS_T9_REGNUM && rt == MIPS_GP_REGNUM)))
7598                 gp += start_pc;
7599               break;
7600             }
7601           break;
7602
7603         case 2:         /* J */
7604         case 3:         /* JAL */
7605           target_pc = jtype_target (inst) << 2;
7606           target_pc += ((pc + 4) & ~(CORE_ADDR) 0x0fffffff);
7607           break;
7608
7609         case 9:         /* ADDIU */
7610           rt = itype_rt (inst);
7611           rs = itype_rs (inst);
7612           if (rt == rs)
7613             {
7614               imm = (itype_immediate (inst) ^ 0x8000) - 0x8000;
7615               if (rt == MIPS_GP_REGNUM)
7616                 gp += imm;
7617               else if (rt == addrreg)
7618                 addr += imm;
7619             }
7620           break;
7621
7622         case 0xf:       /* LUI */
7623           rt = itype_rt (inst);
7624           imm = ((itype_immediate (inst) ^ 0x8000) - 0x8000) << 16;
7625           if (rt == MIPS_GP_REGNUM)
7626             gp = imm;
7627           else if (rt != MIPS_ZERO_REGNUM)
7628             {
7629               addrreg = rt;
7630               addr = imm;
7631             }
7632           break;
7633
7634         case 0x23:      /* LW */
7635           rt = itype_rt (inst);
7636           rs = itype_rs (inst);
7637           imm = (itype_immediate (inst) ^ 0x8000) - 0x8000;
7638           if (gp != 0 && rs == MIPS_GP_REGNUM)
7639             {
7640               gdb_byte buf[4];
7641
7642               memset (buf, 0, sizeof (buf));
7643               status = target_read_memory (gp + imm, buf, sizeof (buf));
7644               addrreg = rt;
7645               addr = extract_signed_integer (buf, sizeof (buf), byte_order);
7646             }
7647           break;
7648         }
7649     }
7650
7651   return target_pc;
7652 }
7653
7654 /* If PC is in a MIPS16 call or return stub, return the address of the
7655    target PC, which is either the callee or the caller.  There are several
7656    cases which must be handled:
7657
7658    * If the PC is in __mips16_ret_{d,s}{f,c}, this is a return stub
7659      and the target PC is in $31 ($ra).
7660    * If the PC is in __mips16_call_stub_{1..10}, this is a call stub
7661      and the target PC is in $2.
7662    * If the PC at the start of __mips16_call_stub_{s,d}{f,c}_{0..10},
7663      i.e. before the JALR instruction, this is effectively a call stub
7664      and the target PC is in $2.  Otherwise this is effectively
7665      a return stub and the target PC is in $18.
7666    * If the PC is at the start of __call_stub_fp_*, i.e. before the
7667      JAL or JALR instruction, this is effectively a call stub and the
7668      target PC is buried in the instruction stream.  Otherwise this
7669      is effectively a return stub and the target PC is in $18.
7670    * If the PC is in __call_stub_* or in __fn_stub_*, this is a call
7671      stub and the target PC is buried in the instruction stream.
7672
7673    See the source code for the stubs in gcc/config/mips/mips16.S, or the
7674    stub builder in gcc/config/mips/mips.c (mips16_build_call_stub) for the
7675    gory details.  */
7676
7677 static CORE_ADDR
7678 mips_skip_mips16_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
7679 {
7680   struct gdbarch *gdbarch = get_frame_arch (frame);
7681   CORE_ADDR start_addr;
7682   const char *name;
7683   size_t prefixlen;
7684
7685   /* Find the starting address and name of the function containing the PC.  */
7686   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
7687     return 0;
7688
7689   /* If the PC is in __mips16_ret_{d,s}{f,c}, this is a return stub
7690      and the target PC is in $31 ($ra).  */
7691   prefixlen = strlen (mips_str_mips16_ret_stub);
7692   if (strncmp (name, mips_str_mips16_ret_stub, prefixlen) == 0
7693       && mips_is_stub_mode (name + prefixlen)
7694       && name[prefixlen + 2] == '\0')
7695     return get_frame_register_signed
7696              (frame, gdbarch_num_regs (gdbarch) + MIPS_RA_REGNUM);
7697
7698   /* If the PC is in __mips16_call_stub_*, this is one of the call
7699      call/return stubs.  */
7700   prefixlen = strlen (mips_str_mips16_call_stub);
7701   if (strncmp (name, mips_str_mips16_call_stub, prefixlen) == 0)
7702     {
7703       /* If the PC is in __mips16_call_stub_{1..10}, this is a call stub
7704          and the target PC is in $2.  */
7705       if (mips_is_stub_suffix (name + prefixlen, 0))
7706         return get_frame_register_signed
7707                  (frame, gdbarch_num_regs (gdbarch) + MIPS_V0_REGNUM);
7708
7709       /* If the PC at the start of __mips16_call_stub_{s,d}{f,c}_{0..10},
7710          i.e. before the JALR instruction, this is effectively a call stub
7711          and the target PC is in $2.  Otherwise this is effectively
7712          a return stub and the target PC is in $18.  */
7713       else if (mips_is_stub_mode (name + prefixlen)
7714                && name[prefixlen + 2] == '_'
7715                && mips_is_stub_suffix (name + prefixlen + 3, 0))
7716         {
7717           if (pc == start_addr)
7718             /* This is the 'call' part of a call stub.  The return
7719                address is in $2.  */
7720             return get_frame_register_signed
7721                      (frame, gdbarch_num_regs (gdbarch) + MIPS_V0_REGNUM);
7722           else
7723             /* This is the 'return' part of a call stub.  The return
7724                address is in $18.  */
7725             return get_frame_register_signed
7726                      (frame, gdbarch_num_regs (gdbarch) + MIPS_S2_REGNUM);
7727         }
7728       else
7729         return 0;               /* Not a stub.  */
7730     }
7731
7732   /* If the PC is in __call_stub_* or __fn_stub*, this is one of the
7733      compiler-generated call or call/return stubs.  */
7734   if (startswith (name, mips_str_fn_stub)
7735       || startswith (name, mips_str_call_stub))
7736     {
7737       if (pc == start_addr)
7738         /* This is the 'call' part of a call stub.  Call this helper
7739            to scan through this code for interesting instructions
7740            and determine the final PC.  */
7741         return mips_get_mips16_fn_stub_pc (frame, pc);
7742       else
7743         /* This is the 'return' part of a call stub.  The return address
7744            is in $18.  */
7745         return get_frame_register_signed
7746                  (frame, gdbarch_num_regs (gdbarch) + MIPS_S2_REGNUM);
7747     }
7748
7749   return 0;                     /* Not a stub.  */
7750 }
7751
7752 /* Return non-zero if the PC is inside a return thunk (aka stub or trampoline).
7753    This implements the IN_SOLIB_RETURN_TRAMPOLINE macro.  */
7754
7755 static int
7756 mips_in_return_stub (struct gdbarch *gdbarch, CORE_ADDR pc, const char *name)
7757 {
7758   CORE_ADDR start_addr;
7759   size_t prefixlen;
7760
7761   /* Find the starting address of the function containing the PC.  */
7762   if (find_pc_partial_function (pc, NULL, &start_addr, NULL) == 0)
7763     return 0;
7764
7765   /* If the PC is in __mips16_call_stub_{s,d}{f,c}_{0..10} but not at
7766      the start, i.e. after the JALR instruction, this is effectively
7767      a return stub.  */
7768   prefixlen = strlen (mips_str_mips16_call_stub);
7769   if (pc != start_addr
7770       && strncmp (name, mips_str_mips16_call_stub, prefixlen) == 0
7771       && mips_is_stub_mode (name + prefixlen)
7772       && name[prefixlen + 2] == '_'
7773       && mips_is_stub_suffix (name + prefixlen + 3, 1))
7774     return 1;
7775
7776   /* If the PC is in __call_stub_fp_* but not at the start, i.e. after
7777      the JAL or JALR instruction, this is effectively a return stub.  */
7778   prefixlen = strlen (mips_str_call_fp_stub);
7779   if (pc != start_addr
7780       && strncmp (name, mips_str_call_fp_stub, prefixlen) == 0)
7781     return 1;
7782
7783   /* Consume the .pic. prefix of any PIC stub, this function must return
7784      true when the PC is in a PIC stub of a __mips16_ret_{d,s}{f,c} stub
7785      or the call stub path will trigger in handle_inferior_event causing
7786      it to go astray.  */
7787   prefixlen = strlen (mips_str_pic);
7788   if (strncmp (name, mips_str_pic, prefixlen) == 0)
7789     name += prefixlen;
7790
7791   /* If the PC is in __mips16_ret_{d,s}{f,c}, this is a return stub.  */
7792   prefixlen = strlen (mips_str_mips16_ret_stub);
7793   if (strncmp (name, mips_str_mips16_ret_stub, prefixlen) == 0
7794       && mips_is_stub_mode (name + prefixlen)
7795       && name[prefixlen + 2] == '\0')
7796     return 1;
7797
7798   return 0;                     /* Not a stub.  */
7799 }
7800
7801 /* If the current PC is the start of a non-PIC-to-PIC stub, return the
7802    PC of the stub target.  The stub just loads $t9 and jumps to it,
7803    so that $t9 has the correct value at function entry.  */
7804
7805 static CORE_ADDR
7806 mips_skip_pic_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
7807 {
7808   struct gdbarch *gdbarch = get_frame_arch (frame);
7809   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7810   struct bound_minimal_symbol msym;
7811   int i;
7812   gdb_byte stub_code[16];
7813   int32_t stub_words[4];
7814
7815   /* The stub for foo is named ".pic.foo", and is either two
7816      instructions inserted before foo or a three instruction sequence
7817      which jumps to foo.  */
7818   msym = lookup_minimal_symbol_by_pc (pc);
7819   if (msym.minsym == NULL
7820       || BMSYMBOL_VALUE_ADDRESS (msym) != pc
7821       || MSYMBOL_LINKAGE_NAME (msym.minsym) == NULL
7822       || !startswith (MSYMBOL_LINKAGE_NAME (msym.minsym), ".pic."))
7823     return 0;
7824
7825   /* A two-instruction header.  */
7826   if (MSYMBOL_SIZE (msym.minsym) == 8)
7827     return pc + 8;
7828
7829   /* A three-instruction (plus delay slot) trampoline.  */
7830   if (MSYMBOL_SIZE (msym.minsym) == 16)
7831     {
7832       if (target_read_memory (pc, stub_code, 16) != 0)
7833         return 0;
7834       for (i = 0; i < 4; i++)
7835         stub_words[i] = extract_unsigned_integer (stub_code + i * 4,
7836                                                   4, byte_order);
7837
7838       /* A stub contains these instructions:
7839          lui    t9, %hi(target)
7840          j      target
7841           addiu t9, t9, %lo(target)
7842          nop
7843
7844          This works even for N64, since stubs are only generated with
7845          -msym32.  */
7846       if ((stub_words[0] & 0xffff0000U) == 0x3c190000
7847           && (stub_words[1] & 0xfc000000U) == 0x08000000
7848           && (stub_words[2] & 0xffff0000U) == 0x27390000
7849           && stub_words[3] == 0x00000000)
7850         return ((((stub_words[0] & 0x0000ffff) << 16)
7851                  + (stub_words[2] & 0x0000ffff)) ^ 0x8000) - 0x8000;
7852     }
7853
7854   /* Not a recognized stub.  */
7855   return 0;
7856 }
7857
7858 static CORE_ADDR
7859 mips_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
7860 {
7861   CORE_ADDR requested_pc = pc;
7862   CORE_ADDR target_pc;
7863   CORE_ADDR new_pc;
7864
7865   do
7866     {
7867       target_pc = pc;
7868
7869       new_pc = mips_skip_mips16_trampoline_code (frame, pc);
7870       if (new_pc)
7871         pc = new_pc;
7872
7873       new_pc = find_solib_trampoline_target (frame, pc);
7874       if (new_pc)
7875         pc = new_pc;
7876
7877       new_pc = mips_skip_pic_trampoline_code (frame, pc);
7878       if (new_pc)
7879         pc = new_pc;
7880     }
7881   while (pc != target_pc);
7882
7883   return pc != requested_pc ? pc : 0;
7884 }
7885
7886 /* Convert a dbx stab register number (from `r' declaration) to a GDB
7887    [1 * gdbarch_num_regs .. 2 * gdbarch_num_regs) REGNUM.  */
7888
7889 static int
7890 mips_stab_reg_to_regnum (struct gdbarch *gdbarch, int num)
7891 {
7892   int regnum;
7893   if (num >= 0 && num < 32)
7894     regnum = num;
7895   else if (num >= 38 && num < 70)
7896     regnum = num + mips_regnum (gdbarch)->fp0 - 38;
7897   else if (num == 70)
7898     regnum = mips_regnum (gdbarch)->hi;
7899   else if (num == 71)
7900     regnum = mips_regnum (gdbarch)->lo;
7901   else if (mips_regnum (gdbarch)->dspacc != -1 && num >= 72 && num < 78)
7902     regnum = num + mips_regnum (gdbarch)->dspacc - 72;
7903   else
7904     return -1;
7905   return gdbarch_num_regs (gdbarch) + regnum;
7906 }
7907
7908
7909 /* Convert a dwarf, dwarf2, or ecoff register number to a GDB [1 *
7910    gdbarch_num_regs .. 2 * gdbarch_num_regs) REGNUM.  */
7911
7912 static int
7913 mips_dwarf_dwarf2_ecoff_reg_to_regnum (struct gdbarch *gdbarch, int num)
7914 {
7915   int regnum;
7916   if (num >= 0 && num < 32)
7917     regnum = num;
7918   else if (num >= 32 && num < 64)
7919     regnum = num + mips_regnum (gdbarch)->fp0 - 32;
7920   else if (num == 64)
7921     regnum = mips_regnum (gdbarch)->hi;
7922   else if (num == 65)
7923     regnum = mips_regnum (gdbarch)->lo;
7924   else if (mips_regnum (gdbarch)->dspacc != -1 && num >= 66 && num < 72)
7925     regnum = num + mips_regnum (gdbarch)->dspacc - 66;
7926   else
7927     return -1;
7928   return gdbarch_num_regs (gdbarch) + regnum;
7929 }
7930
7931 static int
7932 mips_register_sim_regno (struct gdbarch *gdbarch, int regnum)
7933 {
7934   /* Only makes sense to supply raw registers.  */
7935   gdb_assert (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch));
7936   /* FIXME: cagney/2002-05-13: Need to look at the pseudo register to
7937      decide if it is valid.  Should instead define a standard sim/gdb
7938      register numbering scheme.  */
7939   if (gdbarch_register_name (gdbarch,
7940                              gdbarch_num_regs (gdbarch) + regnum) != NULL
7941       && gdbarch_register_name (gdbarch,
7942                                 gdbarch_num_regs (gdbarch)
7943                                 + regnum)[0] != '\0')
7944     return regnum;
7945   else
7946     return LEGACY_SIM_REGNO_IGNORE;
7947 }
7948
7949
7950 /* Convert an integer into an address.  Extracting the value signed
7951    guarantees a correctly sign extended address.  */
7952
7953 static CORE_ADDR
7954 mips_integer_to_address (struct gdbarch *gdbarch,
7955                          struct type *type, const gdb_byte *buf)
7956 {
7957   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
7958   return extract_signed_integer (buf, TYPE_LENGTH (type), byte_order);
7959 }
7960
7961 /* Dummy virtual frame pointer method.  This is no more or less accurate
7962    than most other architectures; we just need to be explicit about it,
7963    because the pseudo-register gdbarch_sp_regnum will otherwise lead to
7964    an assertion failure.  */
7965
7966 static void
7967 mips_virtual_frame_pointer (struct gdbarch *gdbarch, 
7968                             CORE_ADDR pc, int *reg, LONGEST *offset)
7969 {
7970   *reg = MIPS_SP_REGNUM;
7971   *offset = 0;
7972 }
7973
7974 static void
7975 mips_find_abi_section (bfd *abfd, asection *sect, void *obj)
7976 {
7977   enum mips_abi *abip = (enum mips_abi *) obj;
7978   const char *name = bfd_get_section_name (abfd, sect);
7979
7980   if (*abip != MIPS_ABI_UNKNOWN)
7981     return;
7982
7983   if (!startswith (name, ".mdebug."))
7984     return;
7985
7986   if (strcmp (name, ".mdebug.abi32") == 0)
7987     *abip = MIPS_ABI_O32;
7988   else if (strcmp (name, ".mdebug.abiN32") == 0)
7989     *abip = MIPS_ABI_N32;
7990   else if (strcmp (name, ".mdebug.abi64") == 0)
7991     *abip = MIPS_ABI_N64;
7992   else if (strcmp (name, ".mdebug.abiO64") == 0)
7993     *abip = MIPS_ABI_O64;
7994   else if (strcmp (name, ".mdebug.eabi32") == 0)
7995     *abip = MIPS_ABI_EABI32;
7996   else if (strcmp (name, ".mdebug.eabi64") == 0)
7997     *abip = MIPS_ABI_EABI64;
7998   else
7999     warning (_("unsupported ABI %s."), name + 8);
8000 }
8001
8002 static void
8003 mips_find_long_section (bfd *abfd, asection *sect, void *obj)
8004 {
8005   int *lbp = (int *) obj;
8006   const char *name = bfd_get_section_name (abfd, sect);
8007
8008   if (startswith (name, ".gcc_compiled_long32"))
8009     *lbp = 32;
8010   else if (startswith (name, ".gcc_compiled_long64"))
8011     *lbp = 64;
8012   else if (startswith (name, ".gcc_compiled_long"))
8013     warning (_("unrecognized .gcc_compiled_longXX"));
8014 }
8015
8016 static enum mips_abi
8017 global_mips_abi (void)
8018 {
8019   int i;
8020
8021   for (i = 0; mips_abi_strings[i] != NULL; i++)
8022     if (mips_abi_strings[i] == mips_abi_string)
8023       return (enum mips_abi) i;
8024
8025   internal_error (__FILE__, __LINE__, _("unknown ABI string"));
8026 }
8027
8028 /* Return the default compressed instruction set, either of MIPS16
8029    or microMIPS, selected when none could have been determined from
8030    the ELF header of the binary being executed (or no binary has been
8031    selected.  */
8032
8033 static enum mips_isa
8034 global_mips_compression (void)
8035 {
8036   int i;
8037
8038   for (i = 0; mips_compression_strings[i] != NULL; i++)
8039     if (mips_compression_strings[i] == mips_compression_string)
8040       return (enum mips_isa) i;
8041
8042   internal_error (__FILE__, __LINE__, _("unknown compressed ISA string"));
8043 }
8044
8045 static void
8046 mips_register_g_packet_guesses (struct gdbarch *gdbarch)
8047 {
8048   /* If the size matches the set of 32-bit or 64-bit integer registers,
8049      assume that's what we've got.  */
8050   register_remote_g_packet_guess (gdbarch, 38 * 4, mips_tdesc_gp32);
8051   register_remote_g_packet_guess (gdbarch, 38 * 8, mips_tdesc_gp64);
8052
8053   /* If the size matches the full set of registers GDB traditionally
8054      knows about, including floating point, for either 32-bit or
8055      64-bit, assume that's what we've got.  */
8056   register_remote_g_packet_guess (gdbarch, 90 * 4, mips_tdesc_gp32);
8057   register_remote_g_packet_guess (gdbarch, 90 * 8, mips_tdesc_gp64);
8058
8059   /* Otherwise we don't have a useful guess.  */
8060 }
8061
8062 static struct value *
8063 value_of_mips_user_reg (struct frame_info *frame, const void *baton)
8064 {
8065   const int *reg_p = (const int *) baton;
8066   return value_of_register (*reg_p, frame);
8067 }
8068
8069 static struct gdbarch *
8070 mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
8071 {
8072   struct gdbarch *gdbarch;
8073   struct gdbarch_tdep *tdep;
8074   int elf_flags;
8075   enum mips_abi mips_abi, found_abi, wanted_abi;
8076   int i, num_regs;
8077   enum mips_fpu_type fpu_type;
8078   struct tdesc_arch_data *tdesc_data = NULL;
8079   int elf_fpu_type = Val_GNU_MIPS_ABI_FP_ANY;
8080   const char **reg_names;
8081   struct mips_regnum mips_regnum, *regnum;
8082   enum mips_isa mips_isa;
8083   int dspacc;
8084   int dspctl;
8085
8086   /* First of all, extract the elf_flags, if available.  */
8087   if (info.abfd && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
8088     elf_flags = elf_elfheader (info.abfd)->e_flags;
8089   else if (arches != NULL)
8090     elf_flags = gdbarch_tdep (arches->gdbarch)->elf_flags;
8091   else
8092     elf_flags = 0;
8093   if (gdbarch_debug)
8094     fprintf_unfiltered (gdb_stdlog,
8095                         "mips_gdbarch_init: elf_flags = 0x%08x\n", elf_flags);
8096
8097   /* Check ELF_FLAGS to see if it specifies the ABI being used.  */
8098   switch ((elf_flags & EF_MIPS_ABI))
8099     {
8100     case E_MIPS_ABI_O32:
8101       found_abi = MIPS_ABI_O32;
8102       break;
8103     case E_MIPS_ABI_O64:
8104       found_abi = MIPS_ABI_O64;
8105       break;
8106     case E_MIPS_ABI_EABI32:
8107       found_abi = MIPS_ABI_EABI32;
8108       break;
8109     case E_MIPS_ABI_EABI64:
8110       found_abi = MIPS_ABI_EABI64;
8111       break;
8112     default:
8113       if ((elf_flags & EF_MIPS_ABI2))
8114         found_abi = MIPS_ABI_N32;
8115       else
8116         found_abi = MIPS_ABI_UNKNOWN;
8117       break;
8118     }
8119
8120   /* GCC creates a pseudo-section whose name describes the ABI.  */
8121   if (found_abi == MIPS_ABI_UNKNOWN && info.abfd != NULL)
8122     bfd_map_over_sections (info.abfd, mips_find_abi_section, &found_abi);
8123
8124   /* If we have no useful BFD information, use the ABI from the last
8125      MIPS architecture (if there is one).  */
8126   if (found_abi == MIPS_ABI_UNKNOWN && info.abfd == NULL && arches != NULL)
8127     found_abi = gdbarch_tdep (arches->gdbarch)->found_abi;
8128
8129   /* Try the architecture for any hint of the correct ABI.  */
8130   if (found_abi == MIPS_ABI_UNKNOWN
8131       && info.bfd_arch_info != NULL
8132       && info.bfd_arch_info->arch == bfd_arch_mips)
8133     {
8134       switch (info.bfd_arch_info->mach)
8135         {
8136         case bfd_mach_mips3900:
8137           found_abi = MIPS_ABI_EABI32;
8138           break;
8139         case bfd_mach_mips4100:
8140         case bfd_mach_mips5000:
8141           found_abi = MIPS_ABI_EABI64;
8142           break;
8143         case bfd_mach_mips8000:
8144         case bfd_mach_mips10000:
8145           /* On Irix, ELF64 executables use the N64 ABI.  The
8146              pseudo-sections which describe the ABI aren't present
8147              on IRIX.  (Even for executables created by gcc.)  */
8148           if (info.abfd != NULL
8149               && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour
8150               && elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
8151             found_abi = MIPS_ABI_N64;
8152           else
8153             found_abi = MIPS_ABI_N32;
8154           break;
8155         }
8156     }
8157
8158   /* Default 64-bit objects to N64 instead of O32.  */
8159   if (found_abi == MIPS_ABI_UNKNOWN
8160       && info.abfd != NULL
8161       && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour
8162       && elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
8163     found_abi = MIPS_ABI_N64;
8164
8165   if (gdbarch_debug)
8166     fprintf_unfiltered (gdb_stdlog, "mips_gdbarch_init: found_abi = %d\n",
8167                         found_abi);
8168
8169   /* What has the user specified from the command line?  */
8170   wanted_abi = global_mips_abi ();
8171   if (gdbarch_debug)
8172     fprintf_unfiltered (gdb_stdlog, "mips_gdbarch_init: wanted_abi = %d\n",
8173                         wanted_abi);
8174
8175   /* Now that we have found what the ABI for this binary would be,
8176      check whether the user is overriding it.  */
8177   if (wanted_abi != MIPS_ABI_UNKNOWN)
8178     mips_abi = wanted_abi;
8179   else if (found_abi != MIPS_ABI_UNKNOWN)
8180     mips_abi = found_abi;
8181   else
8182     mips_abi = MIPS_ABI_O32;
8183   if (gdbarch_debug)
8184     fprintf_unfiltered (gdb_stdlog, "mips_gdbarch_init: mips_abi = %d\n",
8185                         mips_abi);
8186
8187   /* Make sure we don't use a 32-bit architecture with a 64-bit ABI.  */
8188   if (mips_abi != MIPS_ABI_EABI32
8189       && mips_abi != MIPS_ABI_O32
8190       && info.bfd_arch_info != NULL
8191       && info.bfd_arch_info->arch == bfd_arch_mips
8192       && info.bfd_arch_info->bits_per_word < 64)
8193     info.bfd_arch_info = bfd_lookup_arch (bfd_arch_mips, bfd_mach_mips4000);
8194
8195   /* Determine the default compressed ISA.  */
8196   if ((elf_flags & EF_MIPS_ARCH_ASE_MICROMIPS) != 0
8197       && (elf_flags & EF_MIPS_ARCH_ASE_M16) == 0)
8198     mips_isa = ISA_MICROMIPS;
8199   else if ((elf_flags & EF_MIPS_ARCH_ASE_M16) != 0
8200            && (elf_flags & EF_MIPS_ARCH_ASE_MICROMIPS) == 0)
8201     mips_isa = ISA_MIPS16;
8202   else
8203     mips_isa = global_mips_compression ();
8204   mips_compression_string = mips_compression_strings[mips_isa];
8205
8206   /* Also used when doing an architecture lookup.  */
8207   if (gdbarch_debug)
8208     fprintf_unfiltered (gdb_stdlog,
8209                         "mips_gdbarch_init: "
8210                         "mips64_transfers_32bit_regs_p = %d\n",
8211                         mips64_transfers_32bit_regs_p);
8212
8213   /* Determine the MIPS FPU type.  */
8214 #ifdef HAVE_ELF
8215   if (info.abfd
8216       && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
8217     elf_fpu_type = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
8218                                              Tag_GNU_MIPS_ABI_FP);
8219 #endif /* HAVE_ELF */
8220
8221   if (!mips_fpu_type_auto)
8222     fpu_type = mips_fpu_type;
8223   else if (elf_fpu_type != Val_GNU_MIPS_ABI_FP_ANY)
8224     {
8225       switch (elf_fpu_type)
8226         {
8227         case Val_GNU_MIPS_ABI_FP_DOUBLE:
8228           fpu_type = MIPS_FPU_DOUBLE;
8229           break;
8230         case Val_GNU_MIPS_ABI_FP_SINGLE:
8231           fpu_type = MIPS_FPU_SINGLE;
8232           break;
8233         case Val_GNU_MIPS_ABI_FP_SOFT:
8234         default:
8235           /* Soft float or unknown.  */
8236           fpu_type = MIPS_FPU_NONE;
8237           break;
8238         }
8239     }
8240   else if (info.bfd_arch_info != NULL
8241            && info.bfd_arch_info->arch == bfd_arch_mips)
8242     switch (info.bfd_arch_info->mach)
8243       {
8244       case bfd_mach_mips3900:
8245       case bfd_mach_mips4100:
8246       case bfd_mach_mips4111:
8247       case bfd_mach_mips4120:
8248         fpu_type = MIPS_FPU_NONE;
8249         break;
8250       case bfd_mach_mips4650:
8251         fpu_type = MIPS_FPU_SINGLE;
8252         break;
8253       default:
8254         fpu_type = MIPS_FPU_DOUBLE;
8255         break;
8256       }
8257   else if (arches != NULL)
8258     fpu_type = MIPS_FPU_TYPE (arches->gdbarch);
8259   else
8260     fpu_type = MIPS_FPU_DOUBLE;
8261   if (gdbarch_debug)
8262     fprintf_unfiltered (gdb_stdlog,
8263                         "mips_gdbarch_init: fpu_type = %d\n", fpu_type);
8264
8265   /* Check for blatant incompatibilities.  */
8266
8267   /* If we have only 32-bit registers, then we can't debug a 64-bit
8268      ABI.  */
8269   if (info.target_desc
8270       && tdesc_property (info.target_desc, PROPERTY_GP32) != NULL
8271       && mips_abi != MIPS_ABI_EABI32
8272       && mips_abi != MIPS_ABI_O32)
8273     return NULL;
8274
8275   /* Fill in the OS dependent register numbers and names.  */
8276   if (info.osabi == GDB_OSABI_LINUX)
8277     {
8278       mips_regnum.fp0 = 38;
8279       mips_regnum.pc = 37;
8280       mips_regnum.cause = 36;
8281       mips_regnum.badvaddr = 35;
8282       mips_regnum.hi = 34;
8283       mips_regnum.lo = 33;
8284       mips_regnum.fp_control_status = 70;
8285       mips_regnum.fp_implementation_revision = 71;
8286       mips_regnum.dspacc = -1;
8287       mips_regnum.dspctl = -1;
8288       dspacc = 72;
8289       dspctl = 78;
8290       num_regs = 90;
8291       reg_names = mips_linux_reg_names;
8292     }
8293   else
8294     {
8295       mips_regnum.lo = MIPS_EMBED_LO_REGNUM;
8296       mips_regnum.hi = MIPS_EMBED_HI_REGNUM;
8297       mips_regnum.badvaddr = MIPS_EMBED_BADVADDR_REGNUM;
8298       mips_regnum.cause = MIPS_EMBED_CAUSE_REGNUM;
8299       mips_regnum.pc = MIPS_EMBED_PC_REGNUM;
8300       mips_regnum.fp0 = MIPS_EMBED_FP0_REGNUM;
8301       mips_regnum.fp_control_status = 70;
8302       mips_regnum.fp_implementation_revision = 71;
8303       mips_regnum.dspacc = dspacc = -1;
8304       mips_regnum.dspctl = dspctl = -1;
8305       num_regs = MIPS_LAST_EMBED_REGNUM + 1;
8306       if (info.bfd_arch_info != NULL
8307           && info.bfd_arch_info->mach == bfd_mach_mips3900)
8308         reg_names = mips_tx39_reg_names;
8309       else
8310         reg_names = mips_generic_reg_names;
8311     }
8312
8313   /* Check any target description for validity.  */
8314   if (tdesc_has_registers (info.target_desc))
8315     {
8316       static const char *const mips_gprs[] = {
8317         "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
8318         "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
8319         "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
8320         "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31"
8321       };
8322       static const char *const mips_fprs[] = {
8323         "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
8324         "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
8325         "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
8326         "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
8327       };
8328
8329       const struct tdesc_feature *feature;
8330       int valid_p;
8331
8332       feature = tdesc_find_feature (info.target_desc,
8333                                     "org.gnu.gdb.mips.cpu");
8334       if (feature == NULL)
8335         return NULL;
8336
8337       tdesc_data = tdesc_data_alloc ();
8338
8339       valid_p = 1;
8340       for (i = MIPS_ZERO_REGNUM; i <= MIPS_RA_REGNUM; i++)
8341         valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
8342                                             mips_gprs[i]);
8343
8344
8345       valid_p &= tdesc_numbered_register (feature, tdesc_data,
8346                                           mips_regnum.lo, "lo");
8347       valid_p &= tdesc_numbered_register (feature, tdesc_data,
8348                                           mips_regnum.hi, "hi");
8349       valid_p &= tdesc_numbered_register (feature, tdesc_data,
8350                                           mips_regnum.pc, "pc");
8351
8352       if (!valid_p)
8353         {
8354           tdesc_data_cleanup (tdesc_data);
8355           return NULL;
8356         }
8357
8358       feature = tdesc_find_feature (info.target_desc,
8359                                     "org.gnu.gdb.mips.cp0");
8360       if (feature == NULL)
8361         {
8362           tdesc_data_cleanup (tdesc_data);
8363           return NULL;
8364         }
8365
8366       valid_p = 1;
8367       valid_p &= tdesc_numbered_register (feature, tdesc_data,
8368                                           mips_regnum.badvaddr, "badvaddr");
8369       valid_p &= tdesc_numbered_register (feature, tdesc_data,
8370                                           MIPS_PS_REGNUM, "status");
8371       valid_p &= tdesc_numbered_register (feature, tdesc_data,
8372                                           mips_regnum.cause, "cause");
8373
8374       if (!valid_p)
8375         {
8376           tdesc_data_cleanup (tdesc_data);
8377           return NULL;
8378         }
8379
8380       /* FIXME drow/2007-05-17: The FPU should be optional.  The MIPS
8381          backend is not prepared for that, though.  */
8382       feature = tdesc_find_feature (info.target_desc,
8383                                     "org.gnu.gdb.mips.fpu");
8384       if (feature == NULL)
8385         {
8386           tdesc_data_cleanup (tdesc_data);
8387           return NULL;
8388         }
8389
8390       valid_p = 1;
8391       for (i = 0; i < 32; i++)
8392         valid_p &= tdesc_numbered_register (feature, tdesc_data,
8393                                             i + mips_regnum.fp0, mips_fprs[i]);
8394
8395       valid_p &= tdesc_numbered_register (feature, tdesc_data,
8396                                           mips_regnum.fp_control_status,
8397                                           "fcsr");
8398       valid_p
8399         &= tdesc_numbered_register (feature, tdesc_data,
8400                                     mips_regnum.fp_implementation_revision,
8401                                     "fir");
8402
8403       if (!valid_p)
8404         {
8405           tdesc_data_cleanup (tdesc_data);
8406           return NULL;
8407         }
8408
8409       num_regs = mips_regnum.fp_implementation_revision + 1;
8410
8411       if (dspacc >= 0)
8412         {
8413           feature = tdesc_find_feature (info.target_desc,
8414                                         "org.gnu.gdb.mips.dsp");
8415           /* The DSP registers are optional; it's OK if they are absent.  */
8416           if (feature != NULL)
8417             {
8418               i = 0;
8419               valid_p = 1;
8420               valid_p &= tdesc_numbered_register (feature, tdesc_data,
8421                                                   dspacc + i++, "hi1");
8422               valid_p &= tdesc_numbered_register (feature, tdesc_data,
8423                                                   dspacc + i++, "lo1");
8424               valid_p &= tdesc_numbered_register (feature, tdesc_data,
8425                                                   dspacc + i++, "hi2");
8426               valid_p &= tdesc_numbered_register (feature, tdesc_data,
8427                                                   dspacc + i++, "lo2");
8428               valid_p &= tdesc_numbered_register (feature, tdesc_data,
8429                                                   dspacc + i++, "hi3");
8430               valid_p &= tdesc_numbered_register (feature, tdesc_data,
8431                                                   dspacc + i++, "lo3");
8432
8433               valid_p &= tdesc_numbered_register (feature, tdesc_data,
8434                                                   dspctl, "dspctl");
8435
8436               if (!valid_p)
8437                 {
8438                   tdesc_data_cleanup (tdesc_data);
8439                   return NULL;
8440                 }
8441
8442               mips_regnum.dspacc = dspacc;
8443               mips_regnum.dspctl = dspctl;
8444
8445               num_regs = mips_regnum.dspctl + 1;
8446             }
8447         }
8448
8449       /* It would be nice to detect an attempt to use a 64-bit ABI
8450          when only 32-bit registers are provided.  */
8451       reg_names = NULL;
8452     }
8453
8454   /* Try to find a pre-existing architecture.  */
8455   for (arches = gdbarch_list_lookup_by_info (arches, &info);
8456        arches != NULL;
8457        arches = gdbarch_list_lookup_by_info (arches->next, &info))
8458     {
8459       /* MIPS needs to be pedantic about which ABI and the compressed
8460          ISA variation the object is using.  */
8461       if (gdbarch_tdep (arches->gdbarch)->elf_flags != elf_flags)
8462         continue;
8463       if (gdbarch_tdep (arches->gdbarch)->mips_abi != mips_abi)
8464         continue;
8465       if (gdbarch_tdep (arches->gdbarch)->mips_isa != mips_isa)
8466         continue;
8467       /* Need to be pedantic about which register virtual size is
8468          used.  */
8469       if (gdbarch_tdep (arches->gdbarch)->mips64_transfers_32bit_regs_p
8470           != mips64_transfers_32bit_regs_p)
8471         continue;
8472       /* Be pedantic about which FPU is selected.  */
8473       if (MIPS_FPU_TYPE (arches->gdbarch) != fpu_type)
8474         continue;
8475
8476       if (tdesc_data != NULL)
8477         tdesc_data_cleanup (tdesc_data);
8478       return arches->gdbarch;
8479     }
8480
8481   /* Need a new architecture.  Fill in a target specific vector.  */
8482   tdep = XCNEW (struct gdbarch_tdep);
8483   gdbarch = gdbarch_alloc (&info, tdep);
8484   tdep->elf_flags = elf_flags;
8485   tdep->mips64_transfers_32bit_regs_p = mips64_transfers_32bit_regs_p;
8486   tdep->found_abi = found_abi;
8487   tdep->mips_abi = mips_abi;
8488   tdep->mips_isa = mips_isa;
8489   tdep->mips_fpu_type = fpu_type;
8490   tdep->register_size_valid_p = 0;
8491   tdep->register_size = 0;
8492
8493   if (info.target_desc)
8494     {
8495       /* Some useful properties can be inferred from the target.  */
8496       if (tdesc_property (info.target_desc, PROPERTY_GP32) != NULL)
8497         {
8498           tdep->register_size_valid_p = 1;
8499           tdep->register_size = 4;
8500         }
8501       else if (tdesc_property (info.target_desc, PROPERTY_GP64) != NULL)
8502         {
8503           tdep->register_size_valid_p = 1;
8504           tdep->register_size = 8;
8505         }
8506     }
8507
8508   /* Initially set everything according to the default ABI/ISA.  */
8509   set_gdbarch_short_bit (gdbarch, 16);
8510   set_gdbarch_int_bit (gdbarch, 32);
8511   set_gdbarch_float_bit (gdbarch, 32);
8512   set_gdbarch_double_bit (gdbarch, 64);
8513   set_gdbarch_long_double_bit (gdbarch, 64);
8514   set_gdbarch_register_reggroup_p (gdbarch, mips_register_reggroup_p);
8515   set_gdbarch_pseudo_register_read (gdbarch, mips_pseudo_register_read);
8516   set_gdbarch_pseudo_register_write (gdbarch, mips_pseudo_register_write);
8517
8518   set_gdbarch_ax_pseudo_register_collect (gdbarch,
8519                                           mips_ax_pseudo_register_collect);
8520   set_gdbarch_ax_pseudo_register_push_stack
8521       (gdbarch, mips_ax_pseudo_register_push_stack);
8522
8523   set_gdbarch_elf_make_msymbol_special (gdbarch,
8524                                         mips_elf_make_msymbol_special);
8525   set_gdbarch_make_symbol_special (gdbarch, mips_make_symbol_special);
8526   set_gdbarch_adjust_dwarf2_addr (gdbarch, mips_adjust_dwarf2_addr);
8527   set_gdbarch_adjust_dwarf2_line (gdbarch, mips_adjust_dwarf2_line);
8528
8529   regnum = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct mips_regnum);
8530   *regnum = mips_regnum;
8531   set_gdbarch_fp0_regnum (gdbarch, regnum->fp0);
8532   set_gdbarch_num_regs (gdbarch, num_regs);
8533   set_gdbarch_num_pseudo_regs (gdbarch, num_regs);
8534   set_gdbarch_register_name (gdbarch, mips_register_name);
8535   set_gdbarch_virtual_frame_pointer (gdbarch, mips_virtual_frame_pointer);
8536   tdep->mips_processor_reg_names = reg_names;
8537   tdep->regnum = regnum;
8538
8539   switch (mips_abi)
8540     {
8541     case MIPS_ABI_O32:
8542       set_gdbarch_push_dummy_call (gdbarch, mips_o32_push_dummy_call);
8543       set_gdbarch_return_value (gdbarch, mips_o32_return_value);
8544       tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 4 - 1;
8545       tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 4 - 1;
8546       tdep->default_mask_address_p = 0;
8547       set_gdbarch_long_bit (gdbarch, 32);
8548       set_gdbarch_ptr_bit (gdbarch, 32);
8549       set_gdbarch_long_long_bit (gdbarch, 64);
8550       break;
8551     case MIPS_ABI_O64:
8552       set_gdbarch_push_dummy_call (gdbarch, mips_o64_push_dummy_call);
8553       set_gdbarch_return_value (gdbarch, mips_o64_return_value);
8554       tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 4 - 1;
8555       tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 4 - 1;
8556       tdep->default_mask_address_p = 0;
8557       set_gdbarch_long_bit (gdbarch, 32);
8558       set_gdbarch_ptr_bit (gdbarch, 32);
8559       set_gdbarch_long_long_bit (gdbarch, 64);
8560       break;
8561     case MIPS_ABI_EABI32:
8562       set_gdbarch_push_dummy_call (gdbarch, mips_eabi_push_dummy_call);
8563       set_gdbarch_return_value (gdbarch, mips_eabi_return_value);
8564       tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 8 - 1;
8565       tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 8 - 1;
8566       tdep->default_mask_address_p = 0;
8567       set_gdbarch_long_bit (gdbarch, 32);
8568       set_gdbarch_ptr_bit (gdbarch, 32);
8569       set_gdbarch_long_long_bit (gdbarch, 64);
8570       break;
8571     case MIPS_ABI_EABI64:
8572       set_gdbarch_push_dummy_call (gdbarch, mips_eabi_push_dummy_call);
8573       set_gdbarch_return_value (gdbarch, mips_eabi_return_value);
8574       tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 8 - 1;
8575       tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 8 - 1;
8576       tdep->default_mask_address_p = 0;
8577       set_gdbarch_long_bit (gdbarch, 64);
8578       set_gdbarch_ptr_bit (gdbarch, 64);
8579       set_gdbarch_long_long_bit (gdbarch, 64);
8580       break;
8581     case MIPS_ABI_N32:
8582       set_gdbarch_push_dummy_call (gdbarch, mips_n32n64_push_dummy_call);
8583       set_gdbarch_return_value (gdbarch, mips_n32n64_return_value);
8584       tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 8 - 1;
8585       tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 8 - 1;
8586       tdep->default_mask_address_p = 0;
8587       set_gdbarch_long_bit (gdbarch, 32);
8588       set_gdbarch_ptr_bit (gdbarch, 32);
8589       set_gdbarch_long_long_bit (gdbarch, 64);
8590       set_gdbarch_long_double_bit (gdbarch, 128);
8591       set_gdbarch_long_double_format (gdbarch, floatformats_ibm_long_double);
8592       break;
8593     case MIPS_ABI_N64:
8594       set_gdbarch_push_dummy_call (gdbarch, mips_n32n64_push_dummy_call);
8595       set_gdbarch_return_value (gdbarch, mips_n32n64_return_value);
8596       tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 8 - 1;
8597       tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 8 - 1;
8598       tdep->default_mask_address_p = 0;
8599       set_gdbarch_long_bit (gdbarch, 64);
8600       set_gdbarch_ptr_bit (gdbarch, 64);
8601       set_gdbarch_long_long_bit (gdbarch, 64);
8602       set_gdbarch_long_double_bit (gdbarch, 128);
8603       set_gdbarch_long_double_format (gdbarch, floatformats_ibm_long_double);
8604       break;
8605     default:
8606       internal_error (__FILE__, __LINE__, _("unknown ABI in switch"));
8607     }
8608
8609   /* GCC creates a pseudo-section whose name specifies the size of
8610      longs, since -mlong32 or -mlong64 may be used independent of
8611      other options.  How those options affect pointer sizes is ABI and
8612      architecture dependent, so use them to override the default sizes
8613      set by the ABI.  This table shows the relationship between ABI,
8614      -mlongXX, and size of pointers:
8615
8616      ABI                -mlongXX        ptr bits
8617      ---                --------        --------
8618      o32                32              32
8619      o32                64              32
8620      n32                32              32
8621      n32                64              64
8622      o64                32              32
8623      o64                64              64
8624      n64                32              32
8625      n64                64              64
8626      eabi32             32              32
8627      eabi32             64              32
8628      eabi64             32              32
8629      eabi64             64              64
8630
8631     Note that for o32 and eabi32, pointers are always 32 bits
8632     regardless of any -mlongXX option.  For all others, pointers and
8633     longs are the same, as set by -mlongXX or set by defaults.  */
8634
8635   if (info.abfd != NULL)
8636     {
8637       int long_bit = 0;
8638
8639       bfd_map_over_sections (info.abfd, mips_find_long_section, &long_bit);
8640       if (long_bit)
8641         {
8642           set_gdbarch_long_bit (gdbarch, long_bit);
8643           switch (mips_abi)
8644             {
8645             case MIPS_ABI_O32:
8646             case MIPS_ABI_EABI32:
8647               break;
8648             case MIPS_ABI_N32:
8649             case MIPS_ABI_O64:
8650             case MIPS_ABI_N64:
8651             case MIPS_ABI_EABI64:
8652               set_gdbarch_ptr_bit (gdbarch, long_bit);
8653               break;
8654             default:
8655               internal_error (__FILE__, __LINE__, _("unknown ABI in switch"));
8656             }
8657         }
8658     }
8659
8660   /* FIXME: jlarmour/2000-04-07: There *is* a flag EF_MIPS_32BIT_MODE
8661      that could indicate -gp32 BUT gas/config/tc-mips.c contains the
8662      comment:
8663
8664      ``We deliberately don't allow "-gp32" to set the MIPS_32BITMODE
8665      flag in object files because to do so would make it impossible to
8666      link with libraries compiled without "-gp32".  This is
8667      unnecessarily restrictive.
8668
8669      We could solve this problem by adding "-gp32" multilibs to gcc,
8670      but to set this flag before gcc is built with such multilibs will
8671      break too many systems.''
8672
8673      But even more unhelpfully, the default linker output target for
8674      mips64-elf is elf32-bigmips, and has EF_MIPS_32BIT_MODE set, even
8675      for 64-bit programs - you need to change the ABI to change this,
8676      and not all gcc targets support that currently.  Therefore using
8677      this flag to detect 32-bit mode would do the wrong thing given
8678      the current gcc - it would make GDB treat these 64-bit programs
8679      as 32-bit programs by default.  */
8680
8681   set_gdbarch_read_pc (gdbarch, mips_read_pc);
8682   set_gdbarch_write_pc (gdbarch, mips_write_pc);
8683
8684   /* Add/remove bits from an address.  The MIPS needs be careful to
8685      ensure that all 32 bit addresses are sign extended to 64 bits.  */
8686   set_gdbarch_addr_bits_remove (gdbarch, mips_addr_bits_remove);
8687
8688   /* Unwind the frame.  */
8689   set_gdbarch_unwind_pc (gdbarch, mips_unwind_pc);
8690   set_gdbarch_unwind_sp (gdbarch, mips_unwind_sp);
8691   set_gdbarch_dummy_id (gdbarch, mips_dummy_id);
8692
8693   /* Map debug register numbers onto internal register numbers.  */
8694   set_gdbarch_stab_reg_to_regnum (gdbarch, mips_stab_reg_to_regnum);
8695   set_gdbarch_ecoff_reg_to_regnum (gdbarch,
8696                                    mips_dwarf_dwarf2_ecoff_reg_to_regnum);
8697   set_gdbarch_dwarf2_reg_to_regnum (gdbarch,
8698                                     mips_dwarf_dwarf2_ecoff_reg_to_regnum);
8699   set_gdbarch_register_sim_regno (gdbarch, mips_register_sim_regno);
8700
8701   /* MIPS version of CALL_DUMMY.  */
8702
8703   set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
8704   set_gdbarch_push_dummy_code (gdbarch, mips_push_dummy_code);
8705   set_gdbarch_frame_align (gdbarch, mips_frame_align);
8706
8707   set_gdbarch_print_float_info (gdbarch, mips_print_float_info);
8708
8709   set_gdbarch_convert_register_p (gdbarch, mips_convert_register_p);
8710   set_gdbarch_register_to_value (gdbarch, mips_register_to_value);
8711   set_gdbarch_value_to_register (gdbarch, mips_value_to_register);
8712
8713   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
8714   set_gdbarch_breakpoint_kind_from_pc (gdbarch, mips_breakpoint_kind_from_pc);
8715   set_gdbarch_sw_breakpoint_from_kind (gdbarch, mips_sw_breakpoint_from_kind);
8716   set_gdbarch_adjust_breakpoint_address (gdbarch,
8717                                          mips_adjust_breakpoint_address);
8718
8719   set_gdbarch_skip_prologue (gdbarch, mips_skip_prologue);
8720
8721   set_gdbarch_stack_frame_destroyed_p (gdbarch, mips_stack_frame_destroyed_p);
8722
8723   set_gdbarch_pointer_to_address (gdbarch, signed_pointer_to_address);
8724   set_gdbarch_address_to_pointer (gdbarch, address_to_signed_pointer);
8725   set_gdbarch_integer_to_address (gdbarch, mips_integer_to_address);
8726
8727   set_gdbarch_register_type (gdbarch, mips_register_type);
8728
8729   set_gdbarch_print_registers_info (gdbarch, mips_print_registers_info);
8730
8731   set_gdbarch_print_insn (gdbarch, gdb_print_insn_mips);
8732   if (mips_abi == MIPS_ABI_N64)
8733     set_gdbarch_disassembler_options_implicit
8734       (gdbarch, (const char *) mips_disassembler_options_n64);
8735   else if (mips_abi == MIPS_ABI_N32)
8736     set_gdbarch_disassembler_options_implicit
8737       (gdbarch, (const char *) mips_disassembler_options_n32);
8738   else
8739     set_gdbarch_disassembler_options_implicit
8740       (gdbarch, (const char *) mips_disassembler_options_o32);
8741   set_gdbarch_disassembler_options (gdbarch, &mips_disassembler_options);
8742   set_gdbarch_valid_disassembler_options (gdbarch,
8743                                           disassembler_options_mips ());
8744
8745   /* FIXME: cagney/2003-08-29: The macros target_have_steppable_watchpoint,
8746      HAVE_NONSTEPPABLE_WATCHPOINT, and target_have_continuable_watchpoint
8747      need to all be folded into the target vector.  Since they are
8748      being used as guards for target_stopped_by_watchpoint, why not have
8749      target_stopped_by_watchpoint return the type of watchpoint that the code
8750      is sitting on?  */
8751   set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
8752
8753   set_gdbarch_skip_trampoline_code (gdbarch, mips_skip_trampoline_code);
8754
8755   /* NOTE drow/2012-04-25: We overload the core solib trampoline code
8756      to support MIPS16.  This is a bad thing.  Make sure not to do it
8757      if we have an OS ABI that actually supports shared libraries, since
8758      shared library support is more important.  If we have an OS someday
8759      that supports both shared libraries and MIPS16, we'll have to find
8760      a better place for these.
8761      macro/2012-04-25: But that applies to return trampolines only and
8762      currently no MIPS OS ABI uses shared libraries that have them.  */
8763   set_gdbarch_in_solib_return_trampoline (gdbarch, mips_in_return_stub);
8764
8765   set_gdbarch_single_step_through_delay (gdbarch,
8766                                          mips_single_step_through_delay);
8767
8768   /* Virtual tables.  */
8769   set_gdbarch_vbit_in_delta (gdbarch, 1);
8770
8771   mips_register_g_packet_guesses (gdbarch);
8772
8773   /* Hook in OS ABI-specific overrides, if they have been registered.  */
8774   info.tdesc_data = tdesc_data;
8775   gdbarch_init_osabi (info, gdbarch);
8776
8777   /* The hook may have adjusted num_regs, fetch the final value and
8778      set pc_regnum and sp_regnum now that it has been fixed.  */
8779   num_regs = gdbarch_num_regs (gdbarch);
8780   set_gdbarch_pc_regnum (gdbarch, regnum->pc + num_regs);
8781   set_gdbarch_sp_regnum (gdbarch, MIPS_SP_REGNUM + num_regs);
8782
8783   /* Unwind the frame.  */
8784   dwarf2_append_unwinders (gdbarch);
8785   frame_unwind_append_unwinder (gdbarch, &mips_stub_frame_unwind);
8786   frame_unwind_append_unwinder (gdbarch, &mips_insn16_frame_unwind);
8787   frame_unwind_append_unwinder (gdbarch, &mips_micro_frame_unwind);
8788   frame_unwind_append_unwinder (gdbarch, &mips_insn32_frame_unwind);
8789   frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
8790   frame_base_append_sniffer (gdbarch, mips_stub_frame_base_sniffer);
8791   frame_base_append_sniffer (gdbarch, mips_insn16_frame_base_sniffer);
8792   frame_base_append_sniffer (gdbarch, mips_micro_frame_base_sniffer);
8793   frame_base_append_sniffer (gdbarch, mips_insn32_frame_base_sniffer);
8794
8795   if (tdesc_data)
8796     {
8797       set_tdesc_pseudo_register_type (gdbarch, mips_pseudo_register_type);
8798       tdesc_use_registers (gdbarch, info.target_desc, tdesc_data);
8799
8800       /* Override the normal target description methods to handle our
8801          dual real and pseudo registers.  */
8802       set_gdbarch_register_name (gdbarch, mips_register_name);
8803       set_gdbarch_register_reggroup_p (gdbarch,
8804                                        mips_tdesc_register_reggroup_p);
8805
8806       num_regs = gdbarch_num_regs (gdbarch);
8807       set_gdbarch_num_pseudo_regs (gdbarch, num_regs);
8808       set_gdbarch_pc_regnum (gdbarch, tdep->regnum->pc + num_regs);
8809       set_gdbarch_sp_regnum (gdbarch, MIPS_SP_REGNUM + num_regs);
8810     }
8811
8812   /* Add ABI-specific aliases for the registers.  */
8813   if (mips_abi == MIPS_ABI_N32 || mips_abi == MIPS_ABI_N64)
8814     for (i = 0; i < ARRAY_SIZE (mips_n32_n64_aliases); i++)
8815       user_reg_add (gdbarch, mips_n32_n64_aliases[i].name,
8816                     value_of_mips_user_reg, &mips_n32_n64_aliases[i].regnum);
8817   else
8818     for (i = 0; i < ARRAY_SIZE (mips_o32_aliases); i++)
8819       user_reg_add (gdbarch, mips_o32_aliases[i].name,
8820                     value_of_mips_user_reg, &mips_o32_aliases[i].regnum);
8821
8822   /* Add some other standard aliases.  */
8823   for (i = 0; i < ARRAY_SIZE (mips_register_aliases); i++)
8824     user_reg_add (gdbarch, mips_register_aliases[i].name,
8825                   value_of_mips_user_reg, &mips_register_aliases[i].regnum);
8826
8827   for (i = 0; i < ARRAY_SIZE (mips_numeric_register_aliases); i++)
8828     user_reg_add (gdbarch, mips_numeric_register_aliases[i].name,
8829                   value_of_mips_user_reg, 
8830                   &mips_numeric_register_aliases[i].regnum);
8831
8832   return gdbarch;
8833 }
8834
8835 static void
8836 mips_abi_update (const char *ignore_args,
8837                  int from_tty, struct cmd_list_element *c)
8838 {
8839   struct gdbarch_info info;
8840
8841   /* Force the architecture to update, and (if it's a MIPS architecture)
8842      mips_gdbarch_init will take care of the rest.  */
8843   gdbarch_info_init (&info);
8844   gdbarch_update_p (info);
8845 }
8846
8847 /* Print out which MIPS ABI is in use.  */
8848
8849 static void
8850 show_mips_abi (struct ui_file *file,
8851                int from_tty,
8852                struct cmd_list_element *ignored_cmd,
8853                const char *ignored_value)
8854 {
8855   if (gdbarch_bfd_arch_info (target_gdbarch ())->arch != bfd_arch_mips)
8856     fprintf_filtered
8857       (file, 
8858        "The MIPS ABI is unknown because the current architecture "
8859        "is not MIPS.\n");
8860   else
8861     {
8862       enum mips_abi global_abi = global_mips_abi ();
8863       enum mips_abi actual_abi = mips_abi (target_gdbarch ());
8864       const char *actual_abi_str = mips_abi_strings[actual_abi];
8865
8866       if (global_abi == MIPS_ABI_UNKNOWN)
8867         fprintf_filtered
8868           (file, 
8869            "The MIPS ABI is set automatically (currently \"%s\").\n",
8870            actual_abi_str);
8871       else if (global_abi == actual_abi)
8872         fprintf_filtered
8873           (file,
8874            "The MIPS ABI is assumed to be \"%s\" (due to user setting).\n",
8875            actual_abi_str);
8876       else
8877         {
8878           /* Probably shouldn't happen...  */
8879           fprintf_filtered (file,
8880                             "The (auto detected) MIPS ABI \"%s\" is in use "
8881                             "even though the user setting was \"%s\".\n",
8882              actual_abi_str, mips_abi_strings[global_abi]);
8883         }
8884     }
8885 }
8886
8887 /* Print out which MIPS compressed ISA encoding is used.  */
8888
8889 static void
8890 show_mips_compression (struct ui_file *file, int from_tty,
8891                        struct cmd_list_element *c, const char *value)
8892 {
8893   fprintf_filtered (file, _("The compressed ISA encoding used is %s.\n"),
8894                     value);
8895 }
8896
8897 /* Return a textual name for MIPS FPU type FPU_TYPE.  */
8898
8899 static const char *
8900 mips_fpu_type_str (enum mips_fpu_type fpu_type)
8901 {
8902   switch (fpu_type)
8903     {
8904     case MIPS_FPU_NONE:
8905       return "none";
8906     case MIPS_FPU_SINGLE:
8907       return "single";
8908     case MIPS_FPU_DOUBLE:
8909       return "double";
8910     default:
8911       return "???";
8912     }
8913 }
8914
8915 static void
8916 mips_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
8917 {
8918   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
8919   if (tdep != NULL)
8920     {
8921       int ef_mips_arch;
8922       int ef_mips_32bitmode;
8923       /* Determine the ISA.  */
8924       switch (tdep->elf_flags & EF_MIPS_ARCH)
8925         {
8926         case E_MIPS_ARCH_1:
8927           ef_mips_arch = 1;
8928           break;
8929         case E_MIPS_ARCH_2:
8930           ef_mips_arch = 2;
8931           break;
8932         case E_MIPS_ARCH_3:
8933           ef_mips_arch = 3;
8934           break;
8935         case E_MIPS_ARCH_4:
8936           ef_mips_arch = 4;
8937           break;
8938         default:
8939           ef_mips_arch = 0;
8940           break;
8941         }
8942       /* Determine the size of a pointer.  */
8943       ef_mips_32bitmode = (tdep->elf_flags & EF_MIPS_32BITMODE);
8944       fprintf_unfiltered (file,
8945                           "mips_dump_tdep: tdep->elf_flags = 0x%x\n",
8946                           tdep->elf_flags);
8947       fprintf_unfiltered (file,
8948                           "mips_dump_tdep: ef_mips_32bitmode = %d\n",
8949                           ef_mips_32bitmode);
8950       fprintf_unfiltered (file,
8951                           "mips_dump_tdep: ef_mips_arch = %d\n",
8952                           ef_mips_arch);
8953       fprintf_unfiltered (file,
8954                           "mips_dump_tdep: tdep->mips_abi = %d (%s)\n",
8955                           tdep->mips_abi, mips_abi_strings[tdep->mips_abi]);
8956       fprintf_unfiltered (file,
8957                           "mips_dump_tdep: "
8958                           "mips_mask_address_p() %d (default %d)\n",
8959                           mips_mask_address_p (tdep),
8960                           tdep->default_mask_address_p);
8961     }
8962   fprintf_unfiltered (file,
8963                       "mips_dump_tdep: MIPS_DEFAULT_FPU_TYPE = %d (%s)\n",
8964                       MIPS_DEFAULT_FPU_TYPE,
8965                       mips_fpu_type_str (MIPS_DEFAULT_FPU_TYPE));
8966   fprintf_unfiltered (file, "mips_dump_tdep: MIPS_EABI = %d\n",
8967                       MIPS_EABI (gdbarch));
8968   fprintf_unfiltered (file,
8969                       "mips_dump_tdep: MIPS_FPU_TYPE = %d (%s)\n",
8970                       MIPS_FPU_TYPE (gdbarch),
8971                       mips_fpu_type_str (MIPS_FPU_TYPE (gdbarch)));
8972 }
8973
8974 void
8975 _initialize_mips_tdep (void)
8976 {
8977   static struct cmd_list_element *mipsfpulist = NULL;
8978
8979   mips_abi_string = mips_abi_strings[MIPS_ABI_UNKNOWN];
8980   if (MIPS_ABI_LAST + 1
8981       != sizeof (mips_abi_strings) / sizeof (mips_abi_strings[0]))
8982     internal_error (__FILE__, __LINE__, _("mips_abi_strings out of sync"));
8983
8984   gdbarch_register (bfd_arch_mips, mips_gdbarch_init, mips_dump_tdep);
8985
8986   /* Create feature sets with the appropriate properties.  The values
8987      are not important.  */
8988   mips_tdesc_gp32 = allocate_target_description ();
8989   set_tdesc_property (mips_tdesc_gp32, PROPERTY_GP32, "");
8990
8991   mips_tdesc_gp64 = allocate_target_description ();
8992   set_tdesc_property (mips_tdesc_gp64, PROPERTY_GP64, "");
8993
8994   /* Add root prefix command for all "set mips"/"show mips" commands.  */
8995   add_prefix_cmd ("mips", no_class, set_mips_command,
8996                   _("Various MIPS specific commands."),
8997                   &setmipscmdlist, "set mips ", 0, &setlist);
8998
8999   add_prefix_cmd ("mips", no_class, show_mips_command,
9000                   _("Various MIPS specific commands."),
9001                   &showmipscmdlist, "show mips ", 0, &showlist);
9002
9003   /* Allow the user to override the ABI.  */
9004   add_setshow_enum_cmd ("abi", class_obscure, mips_abi_strings,
9005                         &mips_abi_string, _("\
9006 Set the MIPS ABI used by this program."), _("\
9007 Show the MIPS ABI used by this program."), _("\
9008 This option can be set to one of:\n\
9009   auto  - the default ABI associated with the current binary\n\
9010   o32\n\
9011   o64\n\
9012   n32\n\
9013   n64\n\
9014   eabi32\n\
9015   eabi64"),
9016                         mips_abi_update,
9017                         show_mips_abi,
9018                         &setmipscmdlist, &showmipscmdlist);
9019
9020   /* Allow the user to set the ISA to assume for compressed code if ELF
9021      file flags don't tell or there is no program file selected.  This
9022      setting is updated whenever unambiguous ELF file flags are interpreted,
9023      and carried over to subsequent sessions.  */
9024   add_setshow_enum_cmd ("compression", class_obscure, mips_compression_strings,
9025                         &mips_compression_string, _("\
9026 Set the compressed ISA encoding used by MIPS code."), _("\
9027 Show the compressed ISA encoding used by MIPS code."), _("\
9028 Select the compressed ISA encoding used in functions that have no symbol\n\
9029 information available.  The encoding can be set to either of:\n\
9030   mips16\n\
9031   micromips\n\
9032 and is updated automatically from ELF file flags if available."),
9033                         mips_abi_update,
9034                         show_mips_compression,
9035                         &setmipscmdlist, &showmipscmdlist);
9036
9037   /* Let the user turn off floating point and set the fence post for
9038      heuristic_proc_start.  */
9039
9040   add_prefix_cmd ("mipsfpu", class_support, set_mipsfpu_command,
9041                   _("Set use of MIPS floating-point coprocessor."),
9042                   &mipsfpulist, "set mipsfpu ", 0, &setlist);
9043   add_cmd ("single", class_support, set_mipsfpu_single_command,
9044            _("Select single-precision MIPS floating-point coprocessor."),
9045            &mipsfpulist);
9046   add_cmd ("double", class_support, set_mipsfpu_double_command,
9047            _("Select double-precision MIPS floating-point coprocessor."),
9048            &mipsfpulist);
9049   add_alias_cmd ("on", "double", class_support, 1, &mipsfpulist);
9050   add_alias_cmd ("yes", "double", class_support, 1, &mipsfpulist);
9051   add_alias_cmd ("1", "double", class_support, 1, &mipsfpulist);
9052   add_cmd ("none", class_support, set_mipsfpu_none_command,
9053            _("Select no MIPS floating-point coprocessor."), &mipsfpulist);
9054   add_alias_cmd ("off", "none", class_support, 1, &mipsfpulist);
9055   add_alias_cmd ("no", "none", class_support, 1, &mipsfpulist);
9056   add_alias_cmd ("0", "none", class_support, 1, &mipsfpulist);
9057   add_cmd ("auto", class_support, set_mipsfpu_auto_command,
9058            _("Select MIPS floating-point coprocessor automatically."),
9059            &mipsfpulist);
9060   add_cmd ("mipsfpu", class_support, show_mipsfpu_command,
9061            _("Show current use of MIPS floating-point coprocessor target."),
9062            &showlist);
9063
9064   /* We really would like to have both "0" and "unlimited" work, but
9065      command.c doesn't deal with that.  So make it a var_zinteger
9066      because the user can always use "999999" or some such for unlimited.  */
9067   add_setshow_zinteger_cmd ("heuristic-fence-post", class_support,
9068                             &heuristic_fence_post, _("\
9069 Set the distance searched for the start of a function."), _("\
9070 Show the distance searched for the start of a function."), _("\
9071 If you are debugging a stripped executable, GDB needs to search through the\n\
9072 program for the start of a function.  This command sets the distance of the\n\
9073 search.  The only need to set it is when debugging a stripped executable."),
9074                             reinit_frame_cache_sfunc,
9075                             NULL, /* FIXME: i18n: The distance searched for
9076                                      the start of a function is %s.  */
9077                             &setlist, &showlist);
9078
9079   /* Allow the user to control whether the upper bits of 64-bit
9080      addresses should be zeroed.  */
9081   add_setshow_auto_boolean_cmd ("mask-address", no_class,
9082                                 &mask_address_var, _("\
9083 Set zeroing of upper 32 bits of 64-bit addresses."), _("\
9084 Show zeroing of upper 32 bits of 64-bit addresses."), _("\
9085 Use \"on\" to enable the masking, \"off\" to disable it and \"auto\" to\n\
9086 allow GDB to determine the correct value."),
9087                                 NULL, show_mask_address,
9088                                 &setmipscmdlist, &showmipscmdlist);
9089
9090   /* Allow the user to control the size of 32 bit registers within the
9091      raw remote packet.  */
9092   add_setshow_boolean_cmd ("remote-mips64-transfers-32bit-regs", class_obscure,
9093                            &mips64_transfers_32bit_regs_p, _("\
9094 Set compatibility with 64-bit MIPS target that transfers 32-bit quantities."),
9095                            _("\
9096 Show compatibility with 64-bit MIPS target that transfers 32-bit quantities."),
9097                            _("\
9098 Use \"on\" to enable backward compatibility with older MIPS 64 GDB+target\n\
9099 that would transfer 32 bits for some registers (e.g. SR, FSR) and\n\
9100 64 bits for others.  Use \"off\" to disable compatibility mode"),
9101                            set_mips64_transfers_32bit_regs,
9102                            NULL, /* FIXME: i18n: Compatibility with 64-bit
9103                                     MIPS target that transfers 32-bit
9104                                     quantities is %s.  */
9105                            &setlist, &showlist);
9106
9107   /* Debug this files internals.  */
9108   add_setshow_zuinteger_cmd ("mips", class_maintenance,
9109                              &mips_debug, _("\
9110 Set mips debugging."), _("\
9111 Show mips debugging."), _("\
9112 When non-zero, mips specific debugging is enabled."),
9113                              NULL,
9114                              NULL, /* FIXME: i18n: Mips debugging is
9115                                       currently %s.  */
9116                              &setdebuglist, &showdebuglist);
9117 }