Eliminate IEEE_FLOAT.
[external/binutils.git] / gdb / mips-tdep.c
1 /* Target-dependent code for the MIPS architecture, for GDB, the GNU Debugger.
2
3    Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
4    1998, 1999, 2000, 2001 Free Software Foundation, Inc.
5
6    Contributed by Alessandro Forin(af@cs.cmu.edu) at CMU
7    and by Per Bothner(bothner@cs.wisc.edu) at U.Wisconsin.
8
9    This file is part of GDB.
10
11    This program is free software; you can redistribute it and/or modify
12    it under the terms of the GNU General Public License as published by
13    the Free Software Foundation; either version 2 of the License, or
14    (at your option) any later version.
15
16    This program is distributed in the hope that it will be useful,
17    but WITHOUT ANY WARRANTY; without even the implied warranty of
18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19    GNU General Public License for more details.
20
21    You should have received a copy of the GNU General Public License
22    along with this program; if not, write to the Free Software
23    Foundation, Inc., 59 Temple Place - Suite 330,
24    Boston, MA 02111-1307, USA.  */
25
26 #include "defs.h"
27 #include "gdb_string.h"
28 #include "frame.h"
29 #include "inferior.h"
30 #include "symtab.h"
31 #include "value.h"
32 #include "gdbcmd.h"
33 #include "language.h"
34 #include "gdbcore.h"
35 #include "symfile.h"
36 #include "objfiles.h"
37 #include "gdbtypes.h"
38 #include "target.h"
39 #include "arch-utils.h"
40 #include "regcache.h"
41
42 #include "opcode/mips.h"
43 #include "elf/mips.h"
44 #include "elf-bfd.h"
45 #include "symcat.h"
46
47 /* The sizes of floating point registers.  */
48
49 enum
50 {
51   MIPS_FPU_SINGLE_REGSIZE = 4,
52   MIPS_FPU_DOUBLE_REGSIZE = 8
53 };
54
55 /* All the possible MIPS ABIs. */
56
57 enum mips_abi
58   {
59     MIPS_ABI_UNKNOWN,
60     MIPS_ABI_N32,
61     MIPS_ABI_O32,
62     MIPS_ABI_O64,
63     MIPS_ABI_EABI32,
64     MIPS_ABI_EABI64
65   };
66
67 struct frame_extra_info
68   {
69     mips_extra_func_info_t proc_desc;
70     int num_args;
71   };
72
73 /* Various MIPS ISA options (related to stack analysis) can be
74    overridden dynamically.  Establish an enum/array for managing
75    them. */
76
77 static const char size_auto[] = "auto";
78 static const char size_32[] = "32";
79 static const char size_64[] = "64";
80
81 static const char *size_enums[] = {
82   size_auto,
83   size_32,
84   size_64,
85   0
86 };
87
88 /* Some MIPS boards don't support floating point while others only
89    support single-precision floating-point operations.  See also
90    FP_REGISTER_DOUBLE. */
91
92 enum mips_fpu_type
93   {
94     MIPS_FPU_DOUBLE,            /* Full double precision floating point.  */
95     MIPS_FPU_SINGLE,            /* Single precision floating point (R4650).  */
96     MIPS_FPU_NONE               /* No floating point.  */
97   };
98
99 #ifndef MIPS_DEFAULT_FPU_TYPE
100 #define MIPS_DEFAULT_FPU_TYPE MIPS_FPU_DOUBLE
101 #endif
102 static int mips_fpu_type_auto = 1;
103 static enum mips_fpu_type mips_fpu_type = MIPS_DEFAULT_FPU_TYPE;
104 #define MIPS_FPU_TYPE mips_fpu_type
105
106 /* Do not use "TARGET_IS_MIPS64" to test the size of floating point registers */
107 #ifndef FP_REGISTER_DOUBLE
108 #define FP_REGISTER_DOUBLE (REGISTER_VIRTUAL_SIZE(FP0_REGNUM) == 8)
109 #endif
110
111 static int mips_debug = 0;
112
113 /* MIPS specific per-architecture information */
114 struct gdbarch_tdep
115   {
116     /* from the elf header */
117     int elf_flags;
118     /* mips options */
119     enum mips_abi mips_abi;
120     const char *mips_abi_string;
121     enum mips_fpu_type mips_fpu_type;
122     int mips_last_arg_regnum;
123     int mips_last_fp_arg_regnum;
124     int mips_default_saved_regsize;
125     int mips_fp_register_double;
126     int mips_regs_have_home_p;
127     int mips_default_stack_argsize;
128     int gdb_target_is_mips64;
129     int default_mask_address_p;
130   };
131
132 #if GDB_MULTI_ARCH
133 #undef MIPS_EABI
134 #define MIPS_EABI (gdbarch_tdep (current_gdbarch)->mips_abi == MIPS_ABI_EABI32 \
135                    || gdbarch_tdep (current_gdbarch)->mips_abi == MIPS_ABI_EABI64)
136 #endif
137
138 #if GDB_MULTI_ARCH
139 #undef MIPS_LAST_FP_ARG_REGNUM
140 #define MIPS_LAST_FP_ARG_REGNUM (gdbarch_tdep (current_gdbarch)->mips_last_fp_arg_regnum)
141 #endif
142
143 #if GDB_MULTI_ARCH
144 #undef MIPS_LAST_ARG_REGNUM
145 #define MIPS_LAST_ARG_REGNUM (gdbarch_tdep (current_gdbarch)->mips_last_arg_regnum)
146 #endif
147
148 #if GDB_MULTI_ARCH
149 #undef MIPS_FPU_TYPE
150 #define MIPS_FPU_TYPE (gdbarch_tdep (current_gdbarch)->mips_fpu_type)
151 #endif
152
153 /* Return the currently configured (or set) saved register size. */
154
155 #if GDB_MULTI_ARCH
156 #undef MIPS_DEFAULT_SAVED_REGSIZE
157 #define MIPS_DEFAULT_SAVED_REGSIZE (gdbarch_tdep (current_gdbarch)->mips_default_saved_regsize)
158 #elif !defined (MIPS_DEFAULT_SAVED_REGSIZE)
159 #define MIPS_DEFAULT_SAVED_REGSIZE MIPS_REGSIZE
160 #endif
161
162 static const char *mips_saved_regsize_string = size_auto;
163
164 #define MIPS_SAVED_REGSIZE (mips_saved_regsize())
165
166 static unsigned int
167 mips_saved_regsize (void)
168 {
169   if (mips_saved_regsize_string == size_auto)
170     return MIPS_DEFAULT_SAVED_REGSIZE;
171   else if (mips_saved_regsize_string == size_64)
172     return 8;
173   else /* if (mips_saved_regsize_string == size_32) */
174     return 4;
175 }
176
177 /* Indicate that the ABI makes use of double-precision registers
178    provided by the FPU (rather than combining pairs of registers to
179    form double-precision values).  Do not use "TARGET_IS_MIPS64" to
180    determine if the ABI is using double-precision registers.  See also
181    MIPS_FPU_TYPE. */
182 #if GDB_MULTI_ARCH
183 #undef FP_REGISTER_DOUBLE
184 #define FP_REGISTER_DOUBLE (gdbarch_tdep (current_gdbarch)->mips_fp_register_double)
185 #endif
186
187 /* Does the caller allocate a ``home'' for each register used in the
188    function call?  The N32 ABI and MIPS_EABI do not, the others do. */
189
190 #if GDB_MULTI_ARCH
191 #undef MIPS_REGS_HAVE_HOME_P
192 #define MIPS_REGS_HAVE_HOME_P (gdbarch_tdep (current_gdbarch)->mips_regs_have_home_p)
193 #elif !defined (MIPS_REGS_HAVE_HOME_P)
194 #define MIPS_REGS_HAVE_HOME_P (!MIPS_EABI)
195 #endif
196
197 /* The amount of space reserved on the stack for registers. This is
198    different to MIPS_SAVED_REGSIZE as it determines the alignment of
199    data allocated after the registers have run out. */
200
201 #if GDB_MULTI_ARCH
202 #undef MIPS_DEFAULT_STACK_ARGSIZE
203 #define MIPS_DEFAULT_STACK_ARGSIZE (gdbarch_tdep (current_gdbarch)->mips_default_stack_argsize)
204 #elif !defined (MIPS_DEFAULT_STACK_ARGSIZE)
205 #define MIPS_DEFAULT_STACK_ARGSIZE (MIPS_DEFAULT_SAVED_REGSIZE)
206 #endif
207
208 #define MIPS_STACK_ARGSIZE (mips_stack_argsize ())
209
210 static const char *mips_stack_argsize_string = size_auto;
211
212 static unsigned int
213 mips_stack_argsize (void)
214 {
215   if (mips_stack_argsize_string == size_auto)
216     return MIPS_DEFAULT_STACK_ARGSIZE;
217   else if (mips_stack_argsize_string == size_64)
218     return 8;
219   else /* if (mips_stack_argsize_string == size_32) */
220     return 4;
221 }
222
223 #if GDB_MULTI_ARCH
224 #undef GDB_TARGET_IS_MIPS64
225 #define GDB_TARGET_IS_MIPS64 (gdbarch_tdep (current_gdbarch)->gdb_target_is_mips64 + 0)
226 #endif
227
228 #if GDB_MULTI_ARCH
229 #undef MIPS_DEFAULT_MASK_ADDRESS_P
230 #define MIPS_DEFAULT_MASK_ADDRESS_P (gdbarch_tdep (current_gdbarch)->default_mask_address_p)
231 #elif !defined (MIPS_DEFAULT_MASK_ADDRESS_P)
232 #define MIPS_DEFAULT_MASK_ADDRESS_P (0)
233 #endif
234
235 #define VM_MIN_ADDRESS (CORE_ADDR)0x400000
236
237 int gdb_print_insn_mips (bfd_vma, disassemble_info *);
238
239 static void mips_print_register (int, int);
240
241 static mips_extra_func_info_t
242 heuristic_proc_desc (CORE_ADDR, CORE_ADDR, struct frame_info *, int);
243
244 static CORE_ADDR heuristic_proc_start (CORE_ADDR);
245
246 static CORE_ADDR read_next_frame_reg (struct frame_info *, int);
247
248 int mips_set_processor_type (char *);
249
250 static void mips_show_processor_type_command (char *, int);
251
252 static void reinit_frame_cache_sfunc (char *, int, struct cmd_list_element *);
253
254 static mips_extra_func_info_t
255 find_proc_desc (CORE_ADDR pc, struct frame_info *next_frame, int cur_frame);
256
257 static CORE_ADDR after_prologue (CORE_ADDR pc,
258                                  mips_extra_func_info_t proc_desc);
259
260 /* This value is the model of MIPS in use.  It is derived from the value
261    of the PrID register.  */
262
263 char *mips_processor_type;
264
265 char *tmp_mips_processor_type;
266
267 /* The list of available "set mips " and "show mips " commands */
268
269 static struct cmd_list_element *setmipscmdlist = NULL;
270 static struct cmd_list_element *showmipscmdlist = NULL;
271
272 /* A set of original names, to be used when restoring back to generic
273    registers from a specific set.  */
274
275 char *mips_generic_reg_names[] = MIPS_REGISTER_NAMES;
276 char **mips_processor_reg_names = mips_generic_reg_names;
277
278 char *
279 mips_register_name (int i)
280 {
281   return mips_processor_reg_names[i];
282 }
283 /* *INDENT-OFF* */
284 /* Names of IDT R3041 registers.  */
285
286 char *mips_r3041_reg_names[] = {
287         "zero", "at",   "v0",   "v1",   "a0",   "a1",   "a2",   "a3",
288         "t0",   "t1",   "t2",   "t3",   "t4",   "t5",   "t6",   "t7",
289         "s0",   "s1",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",
290         "t8",   "t9",   "k0",   "k1",   "gp",   "sp",   "s8",   "ra",
291         "sr",   "lo",   "hi",   "bad",  "cause","pc",
292         "f0",   "f1",   "f2",   "f3",   "f4",   "f5",   "f6",   "f7",
293         "f8",   "f9",   "f10",  "f11",  "f12",  "f13",  "f14",  "f15",
294         "f16",  "f17",  "f18",  "f19",  "f20",  "f21",  "f22",  "f23",
295         "f24",  "f25",  "f26",  "f27",  "f28",  "f29",  "f30",  "f31",
296         "fsr",  "fir",  "fp",   "",
297         "",     "",     "bus",  "ccfg", "",     "",     "",     "",
298         "",     "",     "port", "cmp",  "",     "",     "epc",  "prid",
299 };
300
301 /* Names of IDT R3051 registers.  */
302
303 char *mips_r3051_reg_names[] = {
304         "zero", "at",   "v0",   "v1",   "a0",   "a1",   "a2",   "a3",
305         "t0",   "t1",   "t2",   "t3",   "t4",   "t5",   "t6",   "t7",
306         "s0",   "s1",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",
307         "t8",   "t9",   "k0",   "k1",   "gp",   "sp",   "s8",   "ra",
308         "sr",   "lo",   "hi",   "bad",  "cause","pc",
309         "f0",   "f1",   "f2",   "f3",   "f4",   "f5",   "f6",   "f7",
310         "f8",   "f9",   "f10",  "f11",  "f12",  "f13",  "f14",  "f15",
311         "f16",  "f17",  "f18",  "f19",  "f20",  "f21",  "f22",  "f23",
312         "f24",  "f25",  "f26",  "f27",  "f28",  "f29",  "f30",  "f31",
313         "fsr",  "fir",  "fp",   "",
314         "inx",  "rand", "elo",  "",     "ctxt", "",     "",     "",
315         "",     "",     "ehi",  "",     "",     "",     "epc",  "prid",
316 };
317
318 /* Names of IDT R3081 registers.  */
319
320 char *mips_r3081_reg_names[] = {
321         "zero", "at",   "v0",   "v1",   "a0",   "a1",   "a2",   "a3",
322         "t0",   "t1",   "t2",   "t3",   "t4",   "t5",   "t6",   "t7",
323         "s0",   "s1",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",
324         "t8",   "t9",   "k0",   "k1",   "gp",   "sp",   "s8",   "ra",
325         "sr",   "lo",   "hi",   "bad",  "cause","pc",
326         "f0",   "f1",   "f2",   "f3",   "f4",   "f5",   "f6",   "f7",
327         "f8",   "f9",   "f10",  "f11",  "f12",  "f13",  "f14",  "f15",
328         "f16",  "f17",  "f18",  "f19",  "f20",  "f21",  "f22",  "f23",
329         "f24",  "f25",  "f26",  "f27",  "f28",  "f29",  "f30",  "f31",
330         "fsr",  "fir",  "fp",   "",
331         "inx",  "rand", "elo",  "cfg",  "ctxt", "",     "",     "",
332         "",     "",     "ehi",  "",     "",     "",     "epc",  "prid",
333 };
334
335 /* Names of LSI 33k registers.  */
336
337 char *mips_lsi33k_reg_names[] = {
338         "zero", "at",   "v0",   "v1",   "a0",   "a1",   "a2",   "a3",
339         "t0",   "t1",   "t2",   "t3",   "t4",   "t5",   "t6",   "t7",
340         "s0",   "s1",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",
341         "t8",   "t9",   "k0",   "k1",   "gp",   "sp",   "s8",   "ra",
342         "epc",  "hi",   "lo",   "sr",   "cause","badvaddr",
343         "dcic", "bpc",  "bda",  "",     "",     "",     "",      "",
344         "",     "",     "",     "",     "",     "",     "",      "",
345         "",     "",     "",     "",     "",     "",     "",      "",
346         "",     "",     "",     "",     "",     "",     "",      "",
347         "",     "",     "",     "",
348         "",     "",     "",     "",     "",     "",     "",      "",
349         "",     "",     "",     "",     "",     "",     "",      "",
350 };
351
352 struct {
353   char *name;
354   char **regnames;
355 } mips_processor_type_table[] = {
356   { "generic", mips_generic_reg_names },
357   { "r3041", mips_r3041_reg_names },
358   { "r3051", mips_r3051_reg_names },
359   { "r3071", mips_r3081_reg_names },
360   { "r3081", mips_r3081_reg_names },
361   { "lsi33k", mips_lsi33k_reg_names },
362   { NULL, NULL }
363 };
364 /* *INDENT-ON* */
365
366
367
368
369 /* Table to translate MIPS16 register field to actual register number.  */
370 static int mips16_to_32_reg[8] =
371 {16, 17, 2, 3, 4, 5, 6, 7};
372
373 /* Heuristic_proc_start may hunt through the text section for a long
374    time across a 2400 baud serial line.  Allows the user to limit this
375    search.  */
376
377 static unsigned int heuristic_fence_post = 0;
378
379 #define PROC_LOW_ADDR(proc) ((proc)->pdr.adr)   /* least address */
380 #define PROC_HIGH_ADDR(proc) ((proc)->high_addr)        /* upper address bound */
381 #define PROC_FRAME_OFFSET(proc) ((proc)->pdr.frameoffset)
382 #define PROC_FRAME_REG(proc) ((proc)->pdr.framereg)
383 #define PROC_FRAME_ADJUST(proc)  ((proc)->frame_adjust)
384 #define PROC_REG_MASK(proc) ((proc)->pdr.regmask)
385 #define PROC_FREG_MASK(proc) ((proc)->pdr.fregmask)
386 #define PROC_REG_OFFSET(proc) ((proc)->pdr.regoffset)
387 #define PROC_FREG_OFFSET(proc) ((proc)->pdr.fregoffset)
388 #define PROC_PC_REG(proc) ((proc)->pdr.pcreg)
389 #define PROC_SYMBOL(proc) (*(struct symbol**)&(proc)->pdr.isym)
390 #define _PROC_MAGIC_ 0x0F0F0F0F
391 #define PROC_DESC_IS_DUMMY(proc) ((proc)->pdr.isym == _PROC_MAGIC_)
392 #define SET_PROC_DESC_IS_DUMMY(proc) ((proc)->pdr.isym = _PROC_MAGIC_)
393
394 struct linked_proc_info
395   {
396     struct mips_extra_func_info info;
397     struct linked_proc_info *next;
398   }
399  *linked_proc_desc_table = NULL;
400
401 void
402 mips_print_extra_frame_info (struct frame_info *fi)
403 {
404   if (fi
405       && fi->extra_info
406       && fi->extra_info->proc_desc
407       && fi->extra_info->proc_desc->pdr.framereg < NUM_REGS)
408     printf_filtered (" frame pointer is at %s+%s\n",
409                      REGISTER_NAME (fi->extra_info->proc_desc->pdr.framereg),
410                      paddr_d (fi->extra_info->proc_desc->pdr.frameoffset));
411 }
412
413 /* Number of bytes of storage in the actual machine representation for
414    register N.  NOTE: This indirectly defines the register size
415    transfered by the GDB protocol. */
416
417 static int mips64_transfers_32bit_regs_p = 0;
418
419 int
420 mips_register_raw_size (int reg_nr)
421 {
422   if (mips64_transfers_32bit_regs_p)
423     return REGISTER_VIRTUAL_SIZE (reg_nr);
424   else if (reg_nr >= FP0_REGNUM && reg_nr < FP0_REGNUM + 32
425            && FP_REGISTER_DOUBLE)
426     /* For MIPS_ABI_N32 (for example) we need 8 byte floating point
427        registers.  */
428     return 8;
429   else
430     return MIPS_REGSIZE;
431 }
432
433 /* Convert between RAW and VIRTUAL registers.  The RAW register size
434    defines the remote-gdb packet. */
435
436 int
437 mips_register_convertible (int reg_nr)
438 {
439   if (mips64_transfers_32bit_regs_p)
440     return 0;
441   else
442     return (REGISTER_RAW_SIZE (reg_nr) > REGISTER_VIRTUAL_SIZE (reg_nr));
443 }
444
445 void
446 mips_register_convert_to_virtual (int n, struct type *virtual_type,
447                                   char *raw_buf, char *virt_buf)
448 {
449   if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
450     memcpy (virt_buf,
451             raw_buf + (REGISTER_RAW_SIZE (n) - TYPE_LENGTH (virtual_type)),
452             TYPE_LENGTH (virtual_type));
453   else
454     memcpy (virt_buf,
455             raw_buf,
456             TYPE_LENGTH (virtual_type));
457 }
458
459 void
460 mips_register_convert_to_raw (struct type *virtual_type, int n,
461                               char *virt_buf, char *raw_buf)
462 {
463   memset (raw_buf, 0, REGISTER_RAW_SIZE (n));
464   if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
465     memcpy (raw_buf + (REGISTER_RAW_SIZE (n) - TYPE_LENGTH (virtual_type)),
466             virt_buf,
467             TYPE_LENGTH (virtual_type));
468   else
469     memcpy (raw_buf,
470             virt_buf,
471             TYPE_LENGTH (virtual_type));
472 }
473
474 /* Should the upper word of 64-bit addresses be zeroed? */
475 enum cmd_auto_boolean mask_address_var = CMD_AUTO_BOOLEAN_AUTO;
476
477 static int
478 mips_mask_address_p (void)
479 {
480   switch (mask_address_var)
481     {
482     case CMD_AUTO_BOOLEAN_TRUE:
483       return 1;
484     case CMD_AUTO_BOOLEAN_FALSE:
485       return 0;
486       break;
487     case CMD_AUTO_BOOLEAN_AUTO:
488       return MIPS_DEFAULT_MASK_ADDRESS_P;
489     default:
490       internal_error (__FILE__, __LINE__,
491                       "mips_mask_address_p: bad switch");
492       return -1;
493     }      
494 }
495
496 static void
497 show_mask_address (char *cmd, int from_tty)
498 {
499   switch (mask_address_var)
500     {
501     case CMD_AUTO_BOOLEAN_TRUE:
502       printf_filtered ("The 32 bit mips address mask is enabled\n");
503       break;
504     case CMD_AUTO_BOOLEAN_FALSE:
505       printf_filtered ("The 32 bit mips address mask is disabled\n");
506       break;
507     case CMD_AUTO_BOOLEAN_AUTO:
508       printf_filtered ("The 32 bit address mask is set automatically.  Currently %s\n",
509                        mips_mask_address_p () ? "enabled" : "disabled");
510       break;
511     default:
512       internal_error (__FILE__, __LINE__,
513                       "show_mask_address: bad switch");
514       break;
515     }      
516 }
517
518 /* Should call_function allocate stack space for a struct return?  */
519 int
520 mips_use_struct_convention (int gcc_p, struct type *type)
521 {
522   if (MIPS_EABI)
523     return (TYPE_LENGTH (type) > 2 * MIPS_SAVED_REGSIZE);
524   else
525     return 1;                   /* Structures are returned by ref in extra arg0 */
526 }
527
528 /* Tell if the program counter value in MEMADDR is in a MIPS16 function.  */
529
530 static int
531 pc_is_mips16 (bfd_vma memaddr)
532 {
533   struct minimal_symbol *sym;
534
535   /* If bit 0 of the address is set, assume this is a MIPS16 address. */
536   if (IS_MIPS16_ADDR (memaddr))
537     return 1;
538
539   /* A flag indicating that this is a MIPS16 function is stored by elfread.c in
540      the high bit of the info field.  Use this to decide if the function is
541      MIPS16 or normal MIPS.  */
542   sym = lookup_minimal_symbol_by_pc (memaddr);
543   if (sym)
544     return MSYMBOL_IS_SPECIAL (sym);
545   else
546     return 0;
547 }
548
549 /* MIPS believes that the PC has a sign extended value.  Perhaphs the
550    all registers should be sign extended for simplicity? */
551
552 static CORE_ADDR
553 mips_read_pc (ptid_t ptid)
554 {
555   return read_signed_register_pid (PC_REGNUM, ptid);
556 }
557
558 /* This returns the PC of the first inst after the prologue.  If we can't
559    find the prologue, then return 0.  */
560
561 static CORE_ADDR
562 after_prologue (CORE_ADDR pc,
563                 mips_extra_func_info_t proc_desc)
564 {
565   struct symtab_and_line sal;
566   CORE_ADDR func_addr, func_end;
567
568   /* Pass cur_frame == 0 to find_proc_desc.  We should not attempt
569      to read the stack pointer from the current machine state, because
570      the current machine state has nothing to do with the information
571      we need from the proc_desc; and the process may or may not exist
572      right now.  */
573   if (!proc_desc)
574     proc_desc = find_proc_desc (pc, NULL, 0);
575
576   if (proc_desc)
577     {
578       /* If function is frameless, then we need to do it the hard way.  I
579          strongly suspect that frameless always means prologueless... */
580       if (PROC_FRAME_REG (proc_desc) == SP_REGNUM
581           && PROC_FRAME_OFFSET (proc_desc) == 0)
582         return 0;
583     }
584
585   if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
586     return 0;                   /* Unknown */
587
588   sal = find_pc_line (func_addr, 0);
589
590   if (sal.end < func_end)
591     return sal.end;
592
593   /* The line after the prologue is after the end of the function.  In this
594      case, tell the caller to find the prologue the hard way.  */
595
596   return 0;
597 }
598
599 /* Decode a MIPS32 instruction that saves a register in the stack, and
600    set the appropriate bit in the general register mask or float register mask
601    to indicate which register is saved.  This is a helper function
602    for mips_find_saved_regs.  */
603
604 static void
605 mips32_decode_reg_save (t_inst inst, unsigned long *gen_mask,
606                         unsigned long *float_mask)
607 {
608   int reg;
609
610   if ((inst & 0xffe00000) == 0xafa00000         /* sw reg,n($sp) */
611       || (inst & 0xffe00000) == 0xafc00000      /* sw reg,n($r30) */
612       || (inst & 0xffe00000) == 0xffa00000)     /* sd reg,n($sp) */
613     {
614       /* It might be possible to use the instruction to
615          find the offset, rather than the code below which
616          is based on things being in a certain order in the
617          frame, but figuring out what the instruction's offset
618          is relative to might be a little tricky.  */
619       reg = (inst & 0x001f0000) >> 16;
620       *gen_mask |= (1 << reg);
621     }
622   else if ((inst & 0xffe00000) == 0xe7a00000    /* swc1 freg,n($sp) */
623            || (inst & 0xffe00000) == 0xe7c00000         /* swc1 freg,n($r30) */
624            || (inst & 0xffe00000) == 0xf7a00000)        /* sdc1 freg,n($sp) */
625
626     {
627       reg = ((inst & 0x001f0000) >> 16);
628       *float_mask |= (1 << reg);
629     }
630 }
631
632 /* Decode a MIPS16 instruction that saves a register in the stack, and
633    set the appropriate bit in the general register or float register mask
634    to indicate which register is saved.  This is a helper function
635    for mips_find_saved_regs.  */
636
637 static void
638 mips16_decode_reg_save (t_inst inst, unsigned long *gen_mask)
639 {
640   if ((inst & 0xf800) == 0xd000)        /* sw reg,n($sp) */
641     {
642       int reg = mips16_to_32_reg[(inst & 0x700) >> 8];
643       *gen_mask |= (1 << reg);
644     }
645   else if ((inst & 0xff00) == 0xf900)   /* sd reg,n($sp) */
646     {
647       int reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
648       *gen_mask |= (1 << reg);
649     }
650   else if ((inst & 0xff00) == 0x6200    /* sw $ra,n($sp) */
651            || (inst & 0xff00) == 0xfa00)        /* sd $ra,n($sp) */
652     *gen_mask |= (1 << RA_REGNUM);
653 }
654
655
656 /* Fetch and return instruction from the specified location.  If the PC
657    is odd, assume it's a MIPS16 instruction; otherwise MIPS32.  */
658
659 static t_inst
660 mips_fetch_instruction (CORE_ADDR addr)
661 {
662   char buf[MIPS_INSTLEN];
663   int instlen;
664   int status;
665
666   if (pc_is_mips16 (addr))
667     {
668       instlen = MIPS16_INSTLEN;
669       addr = UNMAKE_MIPS16_ADDR (addr);
670     }
671   else
672     instlen = MIPS_INSTLEN;
673   status = read_memory_nobpt (addr, buf, instlen);
674   if (status)
675     memory_error (status, addr);
676   return extract_unsigned_integer (buf, instlen);
677 }
678
679
680 /* These the fields of 32 bit mips instructions */
681 #define mips32_op(x) (x >> 26)
682 #define itype_op(x) (x >> 26)
683 #define itype_rs(x) ((x >> 21) & 0x1f)
684 #define itype_rt(x) ((x >> 16) & 0x1f)
685 #define itype_immediate(x) (x & 0xffff)
686
687 #define jtype_op(x) (x >> 26)
688 #define jtype_target(x) (x & 0x03ffffff)
689
690 #define rtype_op(x) (x >> 26)
691 #define rtype_rs(x) ((x >> 21) & 0x1f)
692 #define rtype_rt(x) ((x >> 16) & 0x1f)
693 #define rtype_rd(x) ((x >> 11) & 0x1f)
694 #define rtype_shamt(x) ((x >> 6) & 0x1f)
695 #define rtype_funct(x) (x & 0x3f)
696
697 static CORE_ADDR
698 mips32_relative_offset (unsigned long inst)
699 {
700   long x;
701   x = itype_immediate (inst);
702   if (x & 0x8000)               /* sign bit set */
703     {
704       x |= 0xffff0000;          /* sign extension */
705     }
706   x = x << 2;
707   return x;
708 }
709
710 /* Determine whate to set a single step breakpoint while considering
711    branch prediction */
712 CORE_ADDR
713 mips32_next_pc (CORE_ADDR pc)
714 {
715   unsigned long inst;
716   int op;
717   inst = mips_fetch_instruction (pc);
718   if ((inst & 0xe0000000) != 0) /* Not a special, jump or branch instruction */
719     {
720       if (itype_op (inst) >> 2 == 5)
721                                 /* BEQL, BNEL, BLEZL, BGTZL: bits 0101xx */
722         {
723           op = (itype_op (inst) & 0x03);
724           switch (op)
725             {
726             case 0:             /* BEQL */
727               goto equal_branch;
728             case 1:             /* BNEL */
729               goto neq_branch;
730             case 2:             /* BLEZL */
731               goto less_branch;
732             case 3:             /* BGTZ */
733               goto greater_branch;
734             default:
735               pc += 4;
736             }
737         }
738       else if (itype_op (inst) == 17 && itype_rs (inst) == 8)
739                                 /* BC1F, BC1FL, BC1T, BC1TL: 010001 01000 */
740         {
741           int tf = itype_rt (inst) & 0x01;
742           int cnum = itype_rt (inst) >> 2;
743           int fcrcs = read_signed_register (FCRCS_REGNUM);
744           int cond = ((fcrcs >> 24) & 0x0e) | ((fcrcs >> 23) & 0x01);
745
746           if (((cond >> cnum) & 0x01) == tf)
747             pc += mips32_relative_offset (inst) + 4;
748           else
749             pc += 8;
750         }
751       else
752         pc += 4;                /* Not a branch, next instruction is easy */
753     }
754   else
755     {                           /* This gets way messy */
756
757       /* Further subdivide into SPECIAL, REGIMM and other */
758       switch (op = itype_op (inst) & 0x07)      /* extract bits 28,27,26 */
759         {
760         case 0:         /* SPECIAL */
761           op = rtype_funct (inst);
762           switch (op)
763             {
764             case 8:             /* JR */
765             case 9:             /* JALR */
766               /* Set PC to that address */
767               pc = read_signed_register (rtype_rs (inst));
768               break;
769             default:
770               pc += 4;
771             }
772
773           break;        /* end SPECIAL */
774         case 1:         /* REGIMM */
775           {
776             op = itype_rt (inst);       /* branch condition */
777             switch (op)
778               {
779               case 0:           /* BLTZ */
780               case 2:           /* BLTZL */
781               case 16:          /* BLTZAL */
782               case 18:          /* BLTZALL */
783               less_branch:
784                 if (read_signed_register (itype_rs (inst)) < 0)
785                   pc += mips32_relative_offset (inst) + 4;
786                 else
787                   pc += 8;      /* after the delay slot */
788                 break;
789               case 1:           /* BGEZ */
790               case 3:           /* BGEZL */
791               case 17:          /* BGEZAL */
792               case 19:          /* BGEZALL */
793               greater_equal_branch:
794                 if (read_signed_register (itype_rs (inst)) >= 0)
795                   pc += mips32_relative_offset (inst) + 4;
796                 else
797                   pc += 8;      /* after the delay slot */
798                 break;
799                 /* All of the other instructions in the REGIMM category */
800               default:
801                 pc += 4;
802               }
803           }
804           break;        /* end REGIMM */
805         case 2:         /* J */
806         case 3:         /* JAL */
807           {
808             unsigned long reg;
809             reg = jtype_target (inst) << 2;
810             /* Upper four bits get never changed... */
811             pc = reg + ((pc + 4) & 0xf0000000);
812           }
813           break;
814           /* FIXME case JALX : */
815           {
816             unsigned long reg;
817             reg = jtype_target (inst) << 2;
818             pc = reg + ((pc + 4) & 0xf0000000) + 1;     /* yes, +1 */
819             /* Add 1 to indicate 16 bit mode - Invert ISA mode */
820           }
821           break;                /* The new PC will be alternate mode */
822         case 4:         /* BEQ, BEQL */
823         equal_branch:
824           if (read_signed_register (itype_rs (inst)) ==
825               read_signed_register (itype_rt (inst)))
826             pc += mips32_relative_offset (inst) + 4;
827           else
828             pc += 8;
829           break;
830         case 5:         /* BNE, BNEL */
831         neq_branch:
832           if (read_signed_register (itype_rs (inst)) !=
833               read_signed_register (itype_rt (inst)))
834             pc += mips32_relative_offset (inst) + 4;
835           else
836             pc += 8;
837           break;
838         case 6:         /* BLEZ, BLEZL */
839         less_zero_branch:
840           if (read_signed_register (itype_rs (inst) <= 0))
841             pc += mips32_relative_offset (inst) + 4;
842           else
843             pc += 8;
844           break;
845         case 7:
846         default:
847         greater_branch: /* BGTZ, BGTZL */
848           if (read_signed_register (itype_rs (inst) > 0))
849             pc += mips32_relative_offset (inst) + 4;
850           else
851             pc += 8;
852           break;
853         }                       /* switch */
854     }                           /* else */
855   return pc;
856 }                               /* mips32_next_pc */
857
858 /* Decoding the next place to set a breakpoint is irregular for the
859    mips 16 variant, but fortunately, there fewer instructions. We have to cope
860    ith extensions for 16 bit instructions and a pair of actual 32 bit instructions.
861    We dont want to set a single step instruction on the extend instruction
862    either.
863  */
864
865 /* Lots of mips16 instruction formats */
866 /* Predicting jumps requires itype,ritype,i8type
867    and their extensions      extItype,extritype,extI8type
868  */
869 enum mips16_inst_fmts
870 {
871   itype,                        /* 0  immediate 5,10 */
872   ritype,                       /* 1   5,3,8 */
873   rrtype,                       /* 2   5,3,3,5 */
874   rritype,                      /* 3   5,3,3,5 */
875   rrrtype,                      /* 4   5,3,3,3,2 */
876   rriatype,                     /* 5   5,3,3,1,4 */
877   shifttype,                    /* 6   5,3,3,3,2 */
878   i8type,                       /* 7   5,3,8 */
879   i8movtype,                    /* 8   5,3,3,5 */
880   i8mov32rtype,                 /* 9   5,3,5,3 */
881   i64type,                      /* 10  5,3,8 */
882   ri64type,                     /* 11  5,3,3,5 */
883   jalxtype,                     /* 12  5,1,5,5,16 - a 32 bit instruction */
884   exiItype,                     /* 13  5,6,5,5,1,1,1,1,1,1,5 */
885   extRitype,                    /* 14  5,6,5,5,3,1,1,1,5 */
886   extRRItype,                   /* 15  5,5,5,5,3,3,5 */
887   extRRIAtype,                  /* 16  5,7,4,5,3,3,1,4 */
888   EXTshifttype,                 /* 17  5,5,1,1,1,1,1,1,5,3,3,1,1,1,2 */
889   extI8type,                    /* 18  5,6,5,5,3,1,1,1,5 */
890   extI64type,                   /* 19  5,6,5,5,3,1,1,1,5 */
891   extRi64type,                  /* 20  5,6,5,5,3,3,5 */
892   extshift64type                /* 21  5,5,1,1,1,1,1,1,5,1,1,1,3,5 */
893 };
894 /* I am heaping all the fields of the formats into one structure and
895    then, only the fields which are involved in instruction extension */
896 struct upk_mips16
897   {
898     CORE_ADDR offset;
899     unsigned int regx;          /* Function in i8 type */
900     unsigned int regy;
901   };
902
903
904 /* The EXT-I, EXT-ri nad EXT-I8 instructions all have the same format
905    for the bits which make up the immediatate extension.  */
906
907 static CORE_ADDR
908 extended_offset (unsigned int extension)
909 {
910   CORE_ADDR value;
911   value = (extension >> 21) & 0x3f;     /* * extract 15:11 */
912   value = value << 6;
913   value |= (extension >> 16) & 0x1f;    /* extrace 10:5 */
914   value = value << 5;
915   value |= extension & 0x01f;   /* extract 4:0 */
916   return value;
917 }
918
919 /* Only call this function if you know that this is an extendable
920    instruction, It wont malfunction, but why make excess remote memory references?
921    If the immediate operands get sign extended or somthing, do it after
922    the extension is performed.
923  */
924 /* FIXME: Every one of these cases needs to worry about sign extension
925    when the offset is to be used in relative addressing */
926
927
928 static unsigned int
929 fetch_mips_16 (CORE_ADDR pc)
930 {
931   char buf[8];
932   pc &= 0xfffffffe;             /* clear the low order bit */
933   target_read_memory (pc, buf, 2);
934   return extract_unsigned_integer (buf, 2);
935 }
936
937 static void
938 unpack_mips16 (CORE_ADDR pc,
939                unsigned int extension,
940                unsigned int inst,
941                enum mips16_inst_fmts insn_format,
942                struct upk_mips16 *upk)
943 {
944   CORE_ADDR offset;
945   int regx;
946   int regy;
947   switch (insn_format)
948     {
949     case itype:
950       {
951         CORE_ADDR value;
952         if (extension)
953           {
954             value = extended_offset (extension);
955             value = value << 11;        /* rom for the original value */
956             value |= inst & 0x7ff;              /* eleven bits from instruction */
957           }
958         else
959           {
960             value = inst & 0x7ff;
961             /* FIXME : Consider sign extension */
962           }
963         offset = value;
964         regx = -1;
965         regy = -1;
966       }
967       break;
968     case ritype:
969     case i8type:
970       {                         /* A register identifier and an offset */
971         /* Most of the fields are the same as I type but the
972            immediate value is of a different length */
973         CORE_ADDR value;
974         if (extension)
975           {
976             value = extended_offset (extension);
977             value = value << 8; /* from the original instruction */
978             value |= inst & 0xff;       /* eleven bits from instruction */
979             regx = (extension >> 8) & 0x07;     /* or i8 funct */
980             if (value & 0x4000) /* test the sign bit , bit 26 */
981               {
982                 value &= ~0x3fff;       /* remove the sign bit */
983                 value = -value;
984               }
985           }
986         else
987           {
988             value = inst & 0xff;        /* 8 bits */
989             regx = (inst >> 8) & 0x07;  /* or i8 funct */
990             /* FIXME: Do sign extension , this format needs it */
991             if (value & 0x80)   /* THIS CONFUSES ME */
992               {
993                 value &= 0xef;  /* remove the sign bit */
994                 value = -value;
995               }
996           }
997         offset = value;
998         regy = -1;
999         break;
1000       }
1001     case jalxtype:
1002       {
1003         unsigned long value;
1004         unsigned int nexthalf;
1005         value = ((inst & 0x1f) << 5) | ((inst >> 5) & 0x1f);
1006         value = value << 16;
1007         nexthalf = mips_fetch_instruction (pc + 2);     /* low bit still set */
1008         value |= nexthalf;
1009         offset = value;
1010         regx = -1;
1011         regy = -1;
1012         break;
1013       }
1014     default:
1015       internal_error (__FILE__, __LINE__,
1016                       "bad switch");
1017     }
1018   upk->offset = offset;
1019   upk->regx = regx;
1020   upk->regy = regy;
1021 }
1022
1023
1024 static CORE_ADDR
1025 add_offset_16 (CORE_ADDR pc, int offset)
1026 {
1027   return ((offset << 2) | ((pc + 2) & (0xf0000000)));
1028
1029 }
1030
1031 static CORE_ADDR
1032 extended_mips16_next_pc (CORE_ADDR pc,
1033                          unsigned int extension,
1034                          unsigned int insn)
1035 {
1036   int op = (insn >> 11);
1037   switch (op)
1038     {
1039     case 2:             /* Branch */
1040       {
1041         CORE_ADDR offset;
1042         struct upk_mips16 upk;
1043         unpack_mips16 (pc, extension, insn, itype, &upk);
1044         offset = upk.offset;
1045         if (offset & 0x800)
1046           {
1047             offset &= 0xeff;
1048             offset = -offset;
1049           }
1050         pc += (offset << 1) + 2;
1051         break;
1052       }
1053     case 3:             /* JAL , JALX - Watch out, these are 32 bit instruction */
1054       {
1055         struct upk_mips16 upk;
1056         unpack_mips16 (pc, extension, insn, jalxtype, &upk);
1057         pc = add_offset_16 (pc, upk.offset);
1058         if ((insn >> 10) & 0x01)        /* Exchange mode */
1059           pc = pc & ~0x01;      /* Clear low bit, indicate 32 bit mode */
1060         else
1061           pc |= 0x01;
1062         break;
1063       }
1064     case 4:             /* beqz */
1065       {
1066         struct upk_mips16 upk;
1067         int reg;
1068         unpack_mips16 (pc, extension, insn, ritype, &upk);
1069         reg = read_signed_register (upk.regx);
1070         if (reg == 0)
1071           pc += (upk.offset << 1) + 2;
1072         else
1073           pc += 2;
1074         break;
1075       }
1076     case 5:             /* bnez */
1077       {
1078         struct upk_mips16 upk;
1079         int reg;
1080         unpack_mips16 (pc, extension, insn, ritype, &upk);
1081         reg = read_signed_register (upk.regx);
1082         if (reg != 0)
1083           pc += (upk.offset << 1) + 2;
1084         else
1085           pc += 2;
1086         break;
1087       }
1088     case 12:            /* I8 Formats btez btnez */
1089       {
1090         struct upk_mips16 upk;
1091         int reg;
1092         unpack_mips16 (pc, extension, insn, i8type, &upk);
1093         /* upk.regx contains the opcode */
1094         reg = read_signed_register (24);        /* Test register is 24 */
1095         if (((upk.regx == 0) && (reg == 0))     /* BTEZ */
1096             || ((upk.regx == 1) && (reg != 0))) /* BTNEZ */
1097           /* pc = add_offset_16(pc,upk.offset) ; */
1098           pc += (upk.offset << 1) + 2;
1099         else
1100           pc += 2;
1101         break;
1102       }
1103     case 29:            /* RR Formats JR, JALR, JALR-RA */
1104       {
1105         struct upk_mips16 upk;
1106         /* upk.fmt = rrtype; */
1107         op = insn & 0x1f;
1108         if (op == 0)
1109           {
1110             int reg;
1111             upk.regx = (insn >> 8) & 0x07;
1112             upk.regy = (insn >> 5) & 0x07;
1113             switch (upk.regy)
1114               {
1115               case 0:
1116                 reg = upk.regx;
1117                 break;
1118               case 1:
1119                 reg = 31;
1120                 break;  /* Function return instruction */
1121               case 2:
1122                 reg = upk.regx;
1123                 break;
1124               default:
1125                 reg = 31;
1126                 break;  /* BOGUS Guess */
1127               }
1128             pc = read_signed_register (reg);
1129           }
1130         else
1131           pc += 2;
1132         break;
1133       }
1134     case 30:
1135       /* This is an instruction extension.  Fetch the real instruction
1136          (which follows the extension) and decode things based on
1137          that. */
1138       {
1139         pc += 2;
1140         pc = extended_mips16_next_pc (pc, insn, fetch_mips_16 (pc));
1141         break;
1142       }
1143     default:
1144       {
1145         pc += 2;
1146         break;
1147       }
1148     }
1149   return pc;
1150 }
1151
1152 CORE_ADDR
1153 mips16_next_pc (CORE_ADDR pc)
1154 {
1155   unsigned int insn = fetch_mips_16 (pc);
1156   return extended_mips16_next_pc (pc, 0, insn);
1157 }
1158
1159 /* The mips_next_pc function supports single_step when the remote
1160    target monitor or stub is not developed enough to do a single_step.
1161    It works by decoding the current instruction and predicting where a
1162    branch will go. This isnt hard because all the data is available.
1163    The MIPS32 and MIPS16 variants are quite different */
1164 CORE_ADDR
1165 mips_next_pc (CORE_ADDR pc)
1166 {
1167   if (pc & 0x01)
1168     return mips16_next_pc (pc);
1169   else
1170     return mips32_next_pc (pc);
1171 }
1172
1173 /* Guaranteed to set fci->saved_regs to some values (it never leaves it
1174    NULL).  */
1175
1176 void
1177 mips_find_saved_regs (struct frame_info *fci)
1178 {
1179   int ireg;
1180   CORE_ADDR reg_position;
1181   /* r0 bit means kernel trap */
1182   int kernel_trap;
1183   /* What registers have been saved?  Bitmasks.  */
1184   unsigned long gen_mask, float_mask;
1185   mips_extra_func_info_t proc_desc;
1186   t_inst inst;
1187
1188   frame_saved_regs_zalloc (fci);
1189
1190   /* If it is the frame for sigtramp, the saved registers are located
1191      in a sigcontext structure somewhere on the stack.
1192      If the stack layout for sigtramp changes we might have to change these
1193      constants and the companion fixup_sigtramp in mdebugread.c  */
1194 #ifndef SIGFRAME_BASE
1195 /* To satisfy alignment restrictions, sigcontext is located 4 bytes
1196    above the sigtramp frame.  */
1197 #define SIGFRAME_BASE           MIPS_REGSIZE
1198 /* FIXME!  Are these correct?? */
1199 #define SIGFRAME_PC_OFF         (SIGFRAME_BASE + 2 * MIPS_REGSIZE)
1200 #define SIGFRAME_REGSAVE_OFF    (SIGFRAME_BASE + 3 * MIPS_REGSIZE)
1201 #define SIGFRAME_FPREGSAVE_OFF  \
1202         (SIGFRAME_REGSAVE_OFF + MIPS_NUMREGS * MIPS_REGSIZE + 3 * MIPS_REGSIZE)
1203 #endif
1204 #ifndef SIGFRAME_REG_SIZE
1205 /* FIXME!  Is this correct?? */
1206 #define SIGFRAME_REG_SIZE       MIPS_REGSIZE
1207 #endif
1208   if (fci->signal_handler_caller)
1209     {
1210       for (ireg = 0; ireg < MIPS_NUMREGS; ireg++)
1211         {
1212           reg_position = fci->frame + SIGFRAME_REGSAVE_OFF
1213             + ireg * SIGFRAME_REG_SIZE;
1214           fci->saved_regs[ireg] = reg_position;
1215         }
1216       for (ireg = 0; ireg < MIPS_NUMREGS; ireg++)
1217         {
1218           reg_position = fci->frame + SIGFRAME_FPREGSAVE_OFF
1219             + ireg * SIGFRAME_REG_SIZE;
1220           fci->saved_regs[FP0_REGNUM + ireg] = reg_position;
1221         }
1222       fci->saved_regs[PC_REGNUM] = fci->frame + SIGFRAME_PC_OFF;
1223       return;
1224     }
1225
1226   proc_desc = fci->extra_info->proc_desc;
1227   if (proc_desc == NULL)
1228     /* I'm not sure how/whether this can happen.  Normally when we can't
1229        find a proc_desc, we "synthesize" one using heuristic_proc_desc
1230        and set the saved_regs right away.  */
1231     return;
1232
1233   kernel_trap = PROC_REG_MASK (proc_desc) & 1;
1234   gen_mask = kernel_trap ? 0xFFFFFFFF : PROC_REG_MASK (proc_desc);
1235   float_mask = kernel_trap ? 0xFFFFFFFF : PROC_FREG_MASK (proc_desc);
1236
1237   if (                          /* In any frame other than the innermost or a frame interrupted by
1238                                    a signal, we assume that all registers have been saved.
1239                                    This assumes that all register saves in a function happen before
1240                                    the first function call.  */
1241        (fci->next == NULL || fci->next->signal_handler_caller)
1242
1243   /* In a dummy frame we know exactly where things are saved.  */
1244        && !PROC_DESC_IS_DUMMY (proc_desc)
1245
1246   /* Don't bother unless we are inside a function prologue.  Outside the
1247      prologue, we know where everything is. */
1248
1249        && in_prologue (fci->pc, PROC_LOW_ADDR (proc_desc))
1250
1251   /* Not sure exactly what kernel_trap means, but if it means
1252      the kernel saves the registers without a prologue doing it,
1253      we better not examine the prologue to see whether registers
1254      have been saved yet.  */
1255        && !kernel_trap)
1256     {
1257       /* We need to figure out whether the registers that the proc_desc
1258          claims are saved have been saved yet.  */
1259
1260       CORE_ADDR addr;
1261
1262       /* Bitmasks; set if we have found a save for the register.  */
1263       unsigned long gen_save_found = 0;
1264       unsigned long float_save_found = 0;
1265       int instlen;
1266
1267       /* If the address is odd, assume this is MIPS16 code.  */
1268       addr = PROC_LOW_ADDR (proc_desc);
1269       instlen = pc_is_mips16 (addr) ? MIPS16_INSTLEN : MIPS_INSTLEN;
1270
1271       /* Scan through this function's instructions preceding the current
1272          PC, and look for those that save registers.  */
1273       while (addr < fci->pc)
1274         {
1275           inst = mips_fetch_instruction (addr);
1276           if (pc_is_mips16 (addr))
1277             mips16_decode_reg_save (inst, &gen_save_found);
1278           else
1279             mips32_decode_reg_save (inst, &gen_save_found, &float_save_found);
1280           addr += instlen;
1281         }
1282       gen_mask = gen_save_found;
1283       float_mask = float_save_found;
1284     }
1285
1286   /* Fill in the offsets for the registers which gen_mask says
1287      were saved.  */
1288   reg_position = fci->frame + PROC_REG_OFFSET (proc_desc);
1289   for (ireg = MIPS_NUMREGS - 1; gen_mask; --ireg, gen_mask <<= 1)
1290     if (gen_mask & 0x80000000)
1291       {
1292         fci->saved_regs[ireg] = reg_position;
1293         reg_position -= MIPS_SAVED_REGSIZE;
1294       }
1295
1296   /* The MIPS16 entry instruction saves $s0 and $s1 in the reverse order
1297      of that normally used by gcc.  Therefore, we have to fetch the first
1298      instruction of the function, and if it's an entry instruction that
1299      saves $s0 or $s1, correct their saved addresses.  */
1300   if (pc_is_mips16 (PROC_LOW_ADDR (proc_desc)))
1301     {
1302       inst = mips_fetch_instruction (PROC_LOW_ADDR (proc_desc));
1303       if ((inst & 0xf81f) == 0xe809 && (inst & 0x700) != 0x700)         /* entry */
1304         {
1305           int reg;
1306           int sreg_count = (inst >> 6) & 3;
1307
1308           /* Check if the ra register was pushed on the stack.  */
1309           reg_position = fci->frame + PROC_REG_OFFSET (proc_desc);
1310           if (inst & 0x20)
1311             reg_position -= MIPS_SAVED_REGSIZE;
1312
1313           /* Check if the s0 and s1 registers were pushed on the stack.  */
1314           for (reg = 16; reg < sreg_count + 16; reg++)
1315             {
1316               fci->saved_regs[reg] = reg_position;
1317               reg_position -= MIPS_SAVED_REGSIZE;
1318             }
1319         }
1320     }
1321
1322   /* Fill in the offsets for the registers which float_mask says
1323      were saved.  */
1324   reg_position = fci->frame + PROC_FREG_OFFSET (proc_desc);
1325
1326   /* The freg_offset points to where the first *double* register
1327      is saved.  So skip to the high-order word. */
1328   if (!GDB_TARGET_IS_MIPS64)
1329     reg_position += MIPS_SAVED_REGSIZE;
1330
1331   /* Fill in the offsets for the float registers which float_mask says
1332      were saved.  */
1333   for (ireg = MIPS_NUMREGS - 1; float_mask; --ireg, float_mask <<= 1)
1334     if (float_mask & 0x80000000)
1335       {
1336         fci->saved_regs[FP0_REGNUM + ireg] = reg_position;
1337         reg_position -= MIPS_SAVED_REGSIZE;
1338       }
1339
1340   fci->saved_regs[PC_REGNUM] = fci->saved_regs[RA_REGNUM];
1341 }
1342
1343 static CORE_ADDR
1344 read_next_frame_reg (struct frame_info *fi, int regno)
1345 {
1346   for (; fi; fi = fi->next)
1347     {
1348       /* We have to get the saved sp from the sigcontext
1349          if it is a signal handler frame.  */
1350       if (regno == SP_REGNUM && !fi->signal_handler_caller)
1351         return fi->frame;
1352       else
1353         {
1354           if (fi->saved_regs == NULL)
1355             mips_find_saved_regs (fi);
1356           if (fi->saved_regs[regno])
1357             return read_memory_integer (ADDR_BITS_REMOVE (fi->saved_regs[regno]), MIPS_SAVED_REGSIZE);
1358         }
1359     }
1360   return read_signed_register (regno);
1361 }
1362
1363 /* mips_addr_bits_remove - remove useless address bits  */
1364
1365 static CORE_ADDR
1366 mips_addr_bits_remove (CORE_ADDR addr)
1367 {
1368   if (GDB_TARGET_IS_MIPS64)
1369     {
1370       if (mips_mask_address_p () && (addr >> 32 == (CORE_ADDR) 0xffffffff))
1371         {
1372           /* This hack is a work-around for existing boards using
1373              PMON, the simulator, and any other 64-bit targets that
1374              doesn't have true 64-bit addressing.  On these targets,
1375              the upper 32 bits of addresses are ignored by the
1376              hardware.  Thus, the PC or SP are likely to have been
1377              sign extended to all 1s by instruction sequences that
1378              load 32-bit addresses.  For example, a typical piece of
1379              code that loads an address is this:
1380                  lui $r2, <upper 16 bits>
1381                  ori $r2, <lower 16 bits>
1382              But the lui sign-extends the value such that the upper 32
1383              bits may be all 1s.  The workaround is simply to mask off
1384              these bits.  In the future, gcc may be changed to support
1385              true 64-bit addressing, and this masking will have to be
1386              disabled.  */
1387           addr &= (CORE_ADDR) 0xffffffff;
1388         }
1389     }
1390   else if (mips_mask_address_p ())
1391     {
1392       /* FIXME: This is wrong!  mips_addr_bits_remove() shouldn't be
1393          masking off bits, instead, the actual target should be asking
1394          for the address to be converted to a valid pointer. */
1395       /* Even when GDB is configured for some 32-bit targets
1396          (e.g. mips-elf), BFD is configured to handle 64-bit targets,
1397          so CORE_ADDR is 64 bits.  So we still have to mask off
1398          useless bits from addresses.  */
1399       addr &= (CORE_ADDR) 0xffffffff;
1400     }
1401   return addr;
1402 }
1403
1404 /* mips_software_single_step() is called just before we want to resume
1405    the inferior, if we want to single-step it but there is no hardware
1406    or kernel single-step support (MIPS on Linux for example).  We find
1407    the target of the coming instruction and breakpoint it.
1408
1409    single_step is also called just after the inferior stops.  If we had
1410    set up a simulated single-step, we undo our damage.  */
1411
1412 void
1413 mips_software_single_step (enum target_signal sig, int insert_breakpoints_p)
1414 {
1415   static CORE_ADDR next_pc;
1416   typedef char binsn_quantum[BREAKPOINT_MAX];
1417   static binsn_quantum break_mem;
1418   CORE_ADDR pc;
1419
1420   if (insert_breakpoints_p)
1421     {
1422       pc = read_register (PC_REGNUM);
1423       next_pc = mips_next_pc (pc);
1424
1425       target_insert_breakpoint (next_pc, break_mem);
1426     }
1427   else
1428     target_remove_breakpoint (next_pc, break_mem);
1429 }
1430
1431 static void
1432 mips_init_frame_pc_first (int fromleaf, struct frame_info *prev)
1433 {
1434   CORE_ADDR pc, tmp;
1435
1436   pc = ((fromleaf) ? SAVED_PC_AFTER_CALL (prev->next) :
1437         prev->next ? FRAME_SAVED_PC (prev->next) : read_pc ());
1438   tmp = mips_skip_stub (pc);
1439   prev->pc = tmp ? tmp : pc;
1440 }
1441
1442
1443 CORE_ADDR
1444 mips_frame_saved_pc (struct frame_info *frame)
1445 {
1446   CORE_ADDR saved_pc;
1447   mips_extra_func_info_t proc_desc = frame->extra_info->proc_desc;
1448   /* We have to get the saved pc from the sigcontext
1449      if it is a signal handler frame.  */
1450   int pcreg = frame->signal_handler_caller ? PC_REGNUM
1451   : (proc_desc ? PROC_PC_REG (proc_desc) : RA_REGNUM);
1452
1453   if (proc_desc && PROC_DESC_IS_DUMMY (proc_desc))
1454     saved_pc = read_memory_integer (frame->frame - MIPS_SAVED_REGSIZE, MIPS_SAVED_REGSIZE);
1455   else
1456     saved_pc = read_next_frame_reg (frame, pcreg);
1457
1458   return ADDR_BITS_REMOVE (saved_pc);
1459 }
1460
1461 static struct mips_extra_func_info temp_proc_desc;
1462 static CORE_ADDR temp_saved_regs[NUM_REGS];
1463
1464 /* Set a register's saved stack address in temp_saved_regs.  If an address
1465    has already been set for this register, do nothing; this way we will
1466    only recognize the first save of a given register in a function prologue.
1467    This is a helper function for mips{16,32}_heuristic_proc_desc.  */
1468
1469 static void
1470 set_reg_offset (int regno, CORE_ADDR offset)
1471 {
1472   if (temp_saved_regs[regno] == 0)
1473     temp_saved_regs[regno] = offset;
1474 }
1475
1476
1477 /* Test whether the PC points to the return instruction at the
1478    end of a function. */
1479
1480 static int
1481 mips_about_to_return (CORE_ADDR pc)
1482 {
1483   if (pc_is_mips16 (pc))
1484     /* This mips16 case isn't necessarily reliable.  Sometimes the compiler
1485        generates a "jr $ra"; other times it generates code to load
1486        the return address from the stack to an accessible register (such
1487        as $a3), then a "jr" using that register.  This second case
1488        is almost impossible to distinguish from an indirect jump
1489        used for switch statements, so we don't even try.  */
1490     return mips_fetch_instruction (pc) == 0xe820;       /* jr $ra */
1491   else
1492     return mips_fetch_instruction (pc) == 0x3e00008;    /* jr $ra */
1493 }
1494
1495
1496 /* This fencepost looks highly suspicious to me.  Removing it also
1497    seems suspicious as it could affect remote debugging across serial
1498    lines.  */
1499
1500 static CORE_ADDR
1501 heuristic_proc_start (CORE_ADDR pc)
1502 {
1503   CORE_ADDR start_pc;
1504   CORE_ADDR fence;
1505   int instlen;
1506   int seen_adjsp = 0;
1507
1508   pc = ADDR_BITS_REMOVE (pc);
1509   start_pc = pc;
1510   fence = start_pc - heuristic_fence_post;
1511   if (start_pc == 0)
1512     return 0;
1513
1514   if (heuristic_fence_post == UINT_MAX
1515       || fence < VM_MIN_ADDRESS)
1516     fence = VM_MIN_ADDRESS;
1517
1518   instlen = pc_is_mips16 (pc) ? MIPS16_INSTLEN : MIPS_INSTLEN;
1519
1520   /* search back for previous return */
1521   for (start_pc -= instlen;; start_pc -= instlen)
1522     if (start_pc < fence)
1523       {
1524         /* It's not clear to me why we reach this point when
1525            stop_soon_quietly, but with this test, at least we
1526            don't print out warnings for every child forked (eg, on
1527            decstation).  22apr93 rich@cygnus.com.  */
1528         if (!stop_soon_quietly)
1529           {
1530             static int blurb_printed = 0;
1531
1532             warning ("Warning: GDB can't find the start of the function at 0x%s.",
1533                      paddr_nz (pc));
1534
1535             if (!blurb_printed)
1536               {
1537                 /* This actually happens frequently in embedded
1538                    development, when you first connect to a board
1539                    and your stack pointer and pc are nowhere in
1540                    particular.  This message needs to give people
1541                    in that situation enough information to
1542                    determine that it's no big deal.  */
1543                 printf_filtered ("\n\
1544     GDB is unable to find the start of the function at 0x%s\n\
1545 and thus can't determine the size of that function's stack frame.\n\
1546 This means that GDB may be unable to access that stack frame, or\n\
1547 the frames below it.\n\
1548     This problem is most likely caused by an invalid program counter or\n\
1549 stack pointer.\n\
1550     However, if you think GDB should simply search farther back\n\
1551 from 0x%s for code which looks like the beginning of a\n\
1552 function, you can increase the range of the search using the `set\n\
1553 heuristic-fence-post' command.\n",
1554                                  paddr_nz (pc), paddr_nz (pc));
1555                 blurb_printed = 1;
1556               }
1557           }
1558
1559         return 0;
1560       }
1561     else if (pc_is_mips16 (start_pc))
1562       {
1563         unsigned short inst;
1564
1565         /* On MIPS16, any one of the following is likely to be the
1566            start of a function:
1567            entry
1568            addiu sp,-n
1569            daddiu sp,-n
1570            extend -n followed by 'addiu sp,+n' or 'daddiu sp,+n'  */
1571         inst = mips_fetch_instruction (start_pc);
1572         if (((inst & 0xf81f) == 0xe809 && (inst & 0x700) != 0x700)      /* entry */
1573             || (inst & 0xff80) == 0x6380        /* addiu sp,-n */
1574             || (inst & 0xff80) == 0xfb80        /* daddiu sp,-n */
1575             || ((inst & 0xf810) == 0xf010 && seen_adjsp))       /* extend -n */
1576           break;
1577         else if ((inst & 0xff00) == 0x6300      /* addiu sp */
1578                  || (inst & 0xff00) == 0xfb00)  /* daddiu sp */
1579           seen_adjsp = 1;
1580         else
1581           seen_adjsp = 0;
1582       }
1583     else if (mips_about_to_return (start_pc))
1584       {
1585         start_pc += 2 * MIPS_INSTLEN;   /* skip return, and its delay slot */
1586         break;
1587       }
1588
1589   return start_pc;
1590 }
1591
1592 /* Fetch the immediate value from a MIPS16 instruction.
1593    If the previous instruction was an EXTEND, use it to extend
1594    the upper bits of the immediate value.  This is a helper function
1595    for mips16_heuristic_proc_desc.  */
1596
1597 static int
1598 mips16_get_imm (unsigned short prev_inst,       /* previous instruction */
1599                 unsigned short inst,    /* current instruction */
1600                 int nbits,              /* number of bits in imm field */
1601                 int scale,              /* scale factor to be applied to imm */
1602                 int is_signed)          /* is the imm field signed? */
1603 {
1604   int offset;
1605
1606   if ((prev_inst & 0xf800) == 0xf000)   /* prev instruction was EXTEND? */
1607     {
1608       offset = ((prev_inst & 0x1f) << 11) | (prev_inst & 0x7e0);
1609       if (offset & 0x8000)      /* check for negative extend */
1610         offset = 0 - (0x10000 - (offset & 0xffff));
1611       return offset | (inst & 0x1f);
1612     }
1613   else
1614     {
1615       int max_imm = 1 << nbits;
1616       int mask = max_imm - 1;
1617       int sign_bit = max_imm >> 1;
1618
1619       offset = inst & mask;
1620       if (is_signed && (offset & sign_bit))
1621         offset = 0 - (max_imm - offset);
1622       return offset * scale;
1623     }
1624 }
1625
1626
1627 /* Fill in values in temp_proc_desc based on the MIPS16 instruction
1628    stream from start_pc to limit_pc.  */
1629
1630 static void
1631 mips16_heuristic_proc_desc (CORE_ADDR start_pc, CORE_ADDR limit_pc,
1632                             struct frame_info *next_frame, CORE_ADDR sp)
1633 {
1634   CORE_ADDR cur_pc;
1635   CORE_ADDR frame_addr = 0;     /* Value of $r17, used as frame pointer */
1636   unsigned short prev_inst = 0; /* saved copy of previous instruction */
1637   unsigned inst = 0;            /* current instruction */
1638   unsigned entry_inst = 0;      /* the entry instruction */
1639   int reg, offset;
1640
1641   PROC_FRAME_OFFSET (&temp_proc_desc) = 0;      /* size of stack frame */
1642   PROC_FRAME_ADJUST (&temp_proc_desc) = 0;      /* offset of FP from SP */
1643
1644   for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS16_INSTLEN)
1645     {
1646       /* Save the previous instruction.  If it's an EXTEND, we'll extract
1647          the immediate offset extension from it in mips16_get_imm.  */
1648       prev_inst = inst;
1649
1650       /* Fetch and decode the instruction.   */
1651       inst = (unsigned short) mips_fetch_instruction (cur_pc);
1652       if ((inst & 0xff00) == 0x6300     /* addiu sp */
1653           || (inst & 0xff00) == 0xfb00)         /* daddiu sp */
1654         {
1655           offset = mips16_get_imm (prev_inst, inst, 8, 8, 1);
1656           if (offset < 0)       /* negative stack adjustment? */
1657             PROC_FRAME_OFFSET (&temp_proc_desc) -= offset;
1658           else
1659             /* Exit loop if a positive stack adjustment is found, which
1660                usually means that the stack cleanup code in the function
1661                epilogue is reached.  */
1662             break;
1663         }
1664       else if ((inst & 0xf800) == 0xd000)       /* sw reg,n($sp) */
1665         {
1666           offset = mips16_get_imm (prev_inst, inst, 8, 4, 0);
1667           reg = mips16_to_32_reg[(inst & 0x700) >> 8];
1668           PROC_REG_MASK (&temp_proc_desc) |= (1 << reg);
1669           set_reg_offset (reg, sp + offset);
1670         }
1671       else if ((inst & 0xff00) == 0xf900)       /* sd reg,n($sp) */
1672         {
1673           offset = mips16_get_imm (prev_inst, inst, 5, 8, 0);
1674           reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
1675           PROC_REG_MASK (&temp_proc_desc) |= (1 << reg);
1676           set_reg_offset (reg, sp + offset);
1677         }
1678       else if ((inst & 0xff00) == 0x6200)       /* sw $ra,n($sp) */
1679         {
1680           offset = mips16_get_imm (prev_inst, inst, 8, 4, 0);
1681           PROC_REG_MASK (&temp_proc_desc) |= (1 << RA_REGNUM);
1682           set_reg_offset (RA_REGNUM, sp + offset);
1683         }
1684       else if ((inst & 0xff00) == 0xfa00)       /* sd $ra,n($sp) */
1685         {
1686           offset = mips16_get_imm (prev_inst, inst, 8, 8, 0);
1687           PROC_REG_MASK (&temp_proc_desc) |= (1 << RA_REGNUM);
1688           set_reg_offset (RA_REGNUM, sp + offset);
1689         }
1690       else if (inst == 0x673d)  /* move $s1, $sp */
1691         {
1692           frame_addr = sp;
1693           PROC_FRAME_REG (&temp_proc_desc) = 17;
1694         }
1695       else if ((inst & 0xff00) == 0x0100)       /* addiu $s1,sp,n */
1696         {
1697           offset = mips16_get_imm (prev_inst, inst, 8, 4, 0);
1698           frame_addr = sp + offset;
1699           PROC_FRAME_REG (&temp_proc_desc) = 17;
1700           PROC_FRAME_ADJUST (&temp_proc_desc) = offset;
1701         }
1702       else if ((inst & 0xFF00) == 0xd900)       /* sw reg,offset($s1) */
1703         {
1704           offset = mips16_get_imm (prev_inst, inst, 5, 4, 0);
1705           reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
1706           PROC_REG_MASK (&temp_proc_desc) |= 1 << reg;
1707           set_reg_offset (reg, frame_addr + offset);
1708         }
1709       else if ((inst & 0xFF00) == 0x7900)       /* sd reg,offset($s1) */
1710         {
1711           offset = mips16_get_imm (prev_inst, inst, 5, 8, 0);
1712           reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
1713           PROC_REG_MASK (&temp_proc_desc) |= 1 << reg;
1714           set_reg_offset (reg, frame_addr + offset);
1715         }
1716       else if ((inst & 0xf81f) == 0xe809 && (inst & 0x700) != 0x700)    /* entry */
1717         entry_inst = inst;      /* save for later processing */
1718       else if ((inst & 0xf800) == 0x1800)       /* jal(x) */
1719         cur_pc += MIPS16_INSTLEN;       /* 32-bit instruction */
1720     }
1721
1722   /* The entry instruction is typically the first instruction in a function,
1723      and it stores registers at offsets relative to the value of the old SP
1724      (before the prologue).  But the value of the sp parameter to this
1725      function is the new SP (after the prologue has been executed).  So we
1726      can't calculate those offsets until we've seen the entire prologue,
1727      and can calculate what the old SP must have been. */
1728   if (entry_inst != 0)
1729     {
1730       int areg_count = (entry_inst >> 8) & 7;
1731       int sreg_count = (entry_inst >> 6) & 3;
1732
1733       /* The entry instruction always subtracts 32 from the SP.  */
1734       PROC_FRAME_OFFSET (&temp_proc_desc) += 32;
1735
1736       /* Now we can calculate what the SP must have been at the
1737          start of the function prologue.  */
1738       sp += PROC_FRAME_OFFSET (&temp_proc_desc);
1739
1740       /* Check if a0-a3 were saved in the caller's argument save area.  */
1741       for (reg = 4, offset = 0; reg < areg_count + 4; reg++)
1742         {
1743           PROC_REG_MASK (&temp_proc_desc) |= 1 << reg;
1744           set_reg_offset (reg, sp + offset);
1745           offset += MIPS_SAVED_REGSIZE;
1746         }
1747
1748       /* Check if the ra register was pushed on the stack.  */
1749       offset = -4;
1750       if (entry_inst & 0x20)
1751         {
1752           PROC_REG_MASK (&temp_proc_desc) |= 1 << RA_REGNUM;
1753           set_reg_offset (RA_REGNUM, sp + offset);
1754           offset -= MIPS_SAVED_REGSIZE;
1755         }
1756
1757       /* Check if the s0 and s1 registers were pushed on the stack.  */
1758       for (reg = 16; reg < sreg_count + 16; reg++)
1759         {
1760           PROC_REG_MASK (&temp_proc_desc) |= 1 << reg;
1761           set_reg_offset (reg, sp + offset);
1762           offset -= MIPS_SAVED_REGSIZE;
1763         }
1764     }
1765 }
1766
1767 static void
1768 mips32_heuristic_proc_desc (CORE_ADDR start_pc, CORE_ADDR limit_pc,
1769                             struct frame_info *next_frame, CORE_ADDR sp)
1770 {
1771   CORE_ADDR cur_pc;
1772   CORE_ADDR frame_addr = 0;     /* Value of $r30. Used by gcc for frame-pointer */
1773 restart:
1774   memset (temp_saved_regs, '\0', SIZEOF_FRAME_SAVED_REGS);
1775   PROC_FRAME_OFFSET (&temp_proc_desc) = 0;
1776   PROC_FRAME_ADJUST (&temp_proc_desc) = 0;      /* offset of FP from SP */
1777   for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS_INSTLEN)
1778     {
1779       unsigned long inst, high_word, low_word;
1780       int reg;
1781
1782       /* Fetch the instruction.   */
1783       inst = (unsigned long) mips_fetch_instruction (cur_pc);
1784
1785       /* Save some code by pre-extracting some useful fields.  */
1786       high_word = (inst >> 16) & 0xffff;
1787       low_word = inst & 0xffff;
1788       reg = high_word & 0x1f;
1789
1790       if (high_word == 0x27bd   /* addiu $sp,$sp,-i */
1791           || high_word == 0x23bd        /* addi $sp,$sp,-i */
1792           || high_word == 0x67bd)       /* daddiu $sp,$sp,-i */
1793         {
1794           if (low_word & 0x8000)        /* negative stack adjustment? */
1795             PROC_FRAME_OFFSET (&temp_proc_desc) += 0x10000 - low_word;
1796           else
1797             /* Exit loop if a positive stack adjustment is found, which
1798                usually means that the stack cleanup code in the function
1799                epilogue is reached.  */
1800             break;
1801         }
1802       else if ((high_word & 0xFFE0) == 0xafa0)  /* sw reg,offset($sp) */
1803         {
1804           PROC_REG_MASK (&temp_proc_desc) |= 1 << reg;
1805           set_reg_offset (reg, sp + low_word);
1806         }
1807       else if ((high_word & 0xFFE0) == 0xffa0)  /* sd reg,offset($sp) */
1808         {
1809           /* Irix 6.2 N32 ABI uses sd instructions for saving $gp and $ra,
1810              but the register size used is only 32 bits. Make the address
1811              for the saved register point to the lower 32 bits.  */
1812           PROC_REG_MASK (&temp_proc_desc) |= 1 << reg;
1813           set_reg_offset (reg, sp + low_word + 8 - MIPS_REGSIZE);
1814         }
1815       else if (high_word == 0x27be)     /* addiu $30,$sp,size */
1816         {
1817           /* Old gcc frame, r30 is virtual frame pointer.  */
1818           if ((long) low_word != PROC_FRAME_OFFSET (&temp_proc_desc))
1819             frame_addr = sp + low_word;
1820           else if (PROC_FRAME_REG (&temp_proc_desc) == SP_REGNUM)
1821             {
1822               unsigned alloca_adjust;
1823               PROC_FRAME_REG (&temp_proc_desc) = 30;
1824               frame_addr = read_next_frame_reg (next_frame, 30);
1825               alloca_adjust = (unsigned) (frame_addr - (sp + low_word));
1826               if (alloca_adjust > 0)
1827                 {
1828                   /* FP > SP + frame_size. This may be because
1829                    * of an alloca or somethings similar.
1830                    * Fix sp to "pre-alloca" value, and try again.
1831                    */
1832                   sp += alloca_adjust;
1833                   goto restart;
1834                 }
1835             }
1836         }
1837       /* move $30,$sp.  With different versions of gas this will be either
1838          `addu $30,$sp,$zero' or `or $30,$sp,$zero' or `daddu 30,sp,$0'.
1839          Accept any one of these.  */
1840       else if (inst == 0x03A0F021 || inst == 0x03a0f025 || inst == 0x03a0f02d)
1841         {
1842           /* New gcc frame, virtual frame pointer is at r30 + frame_size.  */
1843           if (PROC_FRAME_REG (&temp_proc_desc) == SP_REGNUM)
1844             {
1845               unsigned alloca_adjust;
1846               PROC_FRAME_REG (&temp_proc_desc) = 30;
1847               frame_addr = read_next_frame_reg (next_frame, 30);
1848               alloca_adjust = (unsigned) (frame_addr - sp);
1849               if (alloca_adjust > 0)
1850                 {
1851                   /* FP > SP + frame_size. This may be because
1852                    * of an alloca or somethings similar.
1853                    * Fix sp to "pre-alloca" value, and try again.
1854                    */
1855                   sp += alloca_adjust;
1856                   goto restart;
1857                 }
1858             }
1859         }
1860       else if ((high_word & 0xFFE0) == 0xafc0)  /* sw reg,offset($30) */
1861         {
1862           PROC_REG_MASK (&temp_proc_desc) |= 1 << reg;
1863           set_reg_offset (reg, frame_addr + low_word);
1864         }
1865     }
1866 }
1867
1868 static mips_extra_func_info_t
1869 heuristic_proc_desc (CORE_ADDR start_pc, CORE_ADDR limit_pc,
1870                      struct frame_info *next_frame, int cur_frame)
1871 {
1872   CORE_ADDR sp;
1873
1874   if (cur_frame)
1875     sp = read_next_frame_reg (next_frame, SP_REGNUM);
1876   else
1877     sp = 0;
1878
1879   if (start_pc == 0)
1880     return NULL;
1881   memset (&temp_proc_desc, '\0', sizeof (temp_proc_desc));
1882   memset (&temp_saved_regs, '\0', SIZEOF_FRAME_SAVED_REGS);
1883   PROC_LOW_ADDR (&temp_proc_desc) = start_pc;
1884   PROC_FRAME_REG (&temp_proc_desc) = SP_REGNUM;
1885   PROC_PC_REG (&temp_proc_desc) = RA_REGNUM;
1886
1887   if (start_pc + 200 < limit_pc)
1888     limit_pc = start_pc + 200;
1889   if (pc_is_mips16 (start_pc))
1890     mips16_heuristic_proc_desc (start_pc, limit_pc, next_frame, sp);
1891   else
1892     mips32_heuristic_proc_desc (start_pc, limit_pc, next_frame, sp);
1893   return &temp_proc_desc;
1894 }
1895
1896 static mips_extra_func_info_t
1897 non_heuristic_proc_desc (CORE_ADDR pc, CORE_ADDR *addrptr)
1898 {
1899   CORE_ADDR startaddr;
1900   mips_extra_func_info_t proc_desc;
1901   struct block *b = block_for_pc (pc);
1902   struct symbol *sym;
1903
1904   find_pc_partial_function (pc, NULL, &startaddr, NULL);
1905   if (addrptr)
1906     *addrptr = startaddr;
1907   if (b == NULL || PC_IN_CALL_DUMMY (pc, 0, 0))
1908     sym = NULL;
1909   else
1910     {
1911       if (startaddr > BLOCK_START (b))
1912         /* This is the "pathological" case referred to in a comment in
1913            print_frame_info.  It might be better to move this check into
1914            symbol reading.  */
1915         sym = NULL;
1916       else
1917         sym = lookup_symbol (MIPS_EFI_SYMBOL_NAME, b, LABEL_NAMESPACE, 0, NULL);
1918     }
1919
1920   /* If we never found a PDR for this function in symbol reading, then
1921      examine prologues to find the information.  */
1922   if (sym)
1923     {
1924       proc_desc = (mips_extra_func_info_t) SYMBOL_VALUE (sym);
1925       if (PROC_FRAME_REG (proc_desc) == -1)
1926         return NULL;
1927       else
1928         return proc_desc;
1929     }
1930   else
1931     return NULL;
1932 }
1933
1934
1935 static mips_extra_func_info_t
1936 find_proc_desc (CORE_ADDR pc, struct frame_info *next_frame, int cur_frame)
1937 {
1938   mips_extra_func_info_t proc_desc;
1939   CORE_ADDR startaddr;
1940
1941   proc_desc = non_heuristic_proc_desc (pc, &startaddr);
1942
1943   if (proc_desc)
1944     {
1945       /* IF this is the topmost frame AND
1946        * (this proc does not have debugging information OR
1947        * the PC is in the procedure prologue)
1948        * THEN create a "heuristic" proc_desc (by analyzing
1949        * the actual code) to replace the "official" proc_desc.
1950        */
1951       if (next_frame == NULL)
1952         {
1953           struct symtab_and_line val;
1954           struct symbol *proc_symbol =
1955           PROC_DESC_IS_DUMMY (proc_desc) ? 0 : PROC_SYMBOL (proc_desc);
1956
1957           if (proc_symbol)
1958             {
1959               val = find_pc_line (BLOCK_START
1960                                   (SYMBOL_BLOCK_VALUE (proc_symbol)),
1961                                   0);
1962               val.pc = val.end ? val.end : pc;
1963             }
1964           if (!proc_symbol || pc < val.pc)
1965             {
1966               mips_extra_func_info_t found_heuristic =
1967               heuristic_proc_desc (PROC_LOW_ADDR (proc_desc),
1968                                    pc, next_frame, cur_frame);
1969               if (found_heuristic)
1970                 proc_desc = found_heuristic;
1971             }
1972         }
1973     }
1974   else
1975     {
1976       /* Is linked_proc_desc_table really necessary?  It only seems to be used
1977          by procedure call dummys.  However, the procedures being called ought
1978          to have their own proc_descs, and even if they don't,
1979          heuristic_proc_desc knows how to create them! */
1980
1981       register struct linked_proc_info *link;
1982
1983       for (link = linked_proc_desc_table; link; link = link->next)
1984         if (PROC_LOW_ADDR (&link->info) <= pc
1985             && PROC_HIGH_ADDR (&link->info) > pc)
1986           return &link->info;
1987
1988       if (startaddr == 0)
1989         startaddr = heuristic_proc_start (pc);
1990
1991       proc_desc =
1992         heuristic_proc_desc (startaddr, pc, next_frame, cur_frame);
1993     }
1994   return proc_desc;
1995 }
1996
1997 static CORE_ADDR
1998 get_frame_pointer (struct frame_info *frame,
1999                    mips_extra_func_info_t proc_desc)
2000 {
2001   return ADDR_BITS_REMOVE (
2002                    read_next_frame_reg (frame, PROC_FRAME_REG (proc_desc)) +
2003              PROC_FRAME_OFFSET (proc_desc) - PROC_FRAME_ADJUST (proc_desc));
2004 }
2005
2006 mips_extra_func_info_t cached_proc_desc;
2007
2008 CORE_ADDR
2009 mips_frame_chain (struct frame_info *frame)
2010 {
2011   mips_extra_func_info_t proc_desc;
2012   CORE_ADDR tmp;
2013   CORE_ADDR saved_pc = FRAME_SAVED_PC (frame);
2014
2015   if (saved_pc == 0 || inside_entry_file (saved_pc))
2016     return 0;
2017
2018   /* Check if the PC is inside a call stub.  If it is, fetch the
2019      PC of the caller of that stub.  */
2020   if ((tmp = mips_skip_stub (saved_pc)) != 0)
2021     saved_pc = tmp;
2022
2023   /* Look up the procedure descriptor for this PC.  */
2024   proc_desc = find_proc_desc (saved_pc, frame, 1);
2025   if (!proc_desc)
2026     return 0;
2027
2028   cached_proc_desc = proc_desc;
2029
2030   /* If no frame pointer and frame size is zero, we must be at end
2031      of stack (or otherwise hosed).  If we don't check frame size,
2032      we loop forever if we see a zero size frame.  */
2033   if (PROC_FRAME_REG (proc_desc) == SP_REGNUM
2034       && PROC_FRAME_OFFSET (proc_desc) == 0
2035   /* The previous frame from a sigtramp frame might be frameless
2036      and have frame size zero.  */
2037       && !frame->signal_handler_caller)
2038     return 0;
2039   else
2040     return get_frame_pointer (frame, proc_desc);
2041 }
2042
2043 void
2044 mips_init_extra_frame_info (int fromleaf, struct frame_info *fci)
2045 {
2046   int regnum;
2047
2048   /* Use proc_desc calculated in frame_chain */
2049   mips_extra_func_info_t proc_desc =
2050   fci->next ? cached_proc_desc : find_proc_desc (fci->pc, fci->next, 1);
2051
2052   fci->extra_info = (struct frame_extra_info *)
2053     frame_obstack_alloc (sizeof (struct frame_extra_info));
2054
2055   fci->saved_regs = NULL;
2056   fci->extra_info->proc_desc =
2057     proc_desc == &temp_proc_desc ? 0 : proc_desc;
2058   if (proc_desc)
2059     {
2060       /* Fixup frame-pointer - only needed for top frame */
2061       /* This may not be quite right, if proc has a real frame register.
2062          Get the value of the frame relative sp, procedure might have been
2063          interrupted by a signal at it's very start.  */
2064       if (fci->pc == PROC_LOW_ADDR (proc_desc)
2065           && !PROC_DESC_IS_DUMMY (proc_desc))
2066         fci->frame = read_next_frame_reg (fci->next, SP_REGNUM);
2067       else
2068         fci->frame = get_frame_pointer (fci->next, proc_desc);
2069
2070       if (proc_desc == &temp_proc_desc)
2071         {
2072           char *name;
2073
2074           /* Do not set the saved registers for a sigtramp frame,
2075              mips_find_saved_registers will do that for us.
2076              We can't use fci->signal_handler_caller, it is not yet set.  */
2077           find_pc_partial_function (fci->pc, &name,
2078                                     (CORE_ADDR *) NULL, (CORE_ADDR *) NULL);
2079           if (!IN_SIGTRAMP (fci->pc, name))
2080             {
2081               frame_saved_regs_zalloc (fci);
2082               memcpy (fci->saved_regs, temp_saved_regs, SIZEOF_FRAME_SAVED_REGS);
2083               fci->saved_regs[PC_REGNUM]
2084                 = fci->saved_regs[RA_REGNUM];
2085             }
2086         }
2087
2088       /* hack: if argument regs are saved, guess these contain args */
2089       /* assume we can't tell how many args for now */
2090       fci->extra_info->num_args = -1;
2091       for (regnum = MIPS_LAST_ARG_REGNUM; regnum >= A0_REGNUM; regnum--)
2092         {
2093           if (PROC_REG_MASK (proc_desc) & (1 << regnum))
2094             {
2095               fci->extra_info->num_args = regnum - A0_REGNUM + 1;
2096               break;
2097             }
2098         }
2099     }
2100 }
2101
2102 /* MIPS stack frames are almost impenetrable.  When execution stops,
2103    we basically have to look at symbol information for the function
2104    that we stopped in, which tells us *which* register (if any) is
2105    the base of the frame pointer, and what offset from that register
2106    the frame itself is at.  
2107
2108    This presents a problem when trying to examine a stack in memory
2109    (that isn't executing at the moment), using the "frame" command.  We
2110    don't have a PC, nor do we have any registers except SP.
2111
2112    This routine takes two arguments, SP and PC, and tries to make the
2113    cached frames look as if these two arguments defined a frame on the
2114    cache.  This allows the rest of info frame to extract the important
2115    arguments without difficulty.  */
2116
2117 struct frame_info *
2118 setup_arbitrary_frame (int argc, CORE_ADDR *argv)
2119 {
2120   if (argc != 2)
2121     error ("MIPS frame specifications require two arguments: sp and pc");
2122
2123   return create_new_frame (argv[0], argv[1]);
2124 }
2125
2126 /* According to the current ABI, should the type be passed in a
2127    floating-point register (assuming that there is space)?  When there
2128    is no FPU, FP are not even considered as possibile candidates for
2129    FP registers and, consequently this returns false - forces FP
2130    arguments into integer registers. */
2131
2132 static int
2133 fp_register_arg_p (enum type_code typecode, struct type *arg_type)
2134 {
2135   return ((typecode == TYPE_CODE_FLT
2136            || (MIPS_EABI
2137                && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION)
2138                && TYPE_NFIELDS (arg_type) == 1
2139                && TYPE_CODE (TYPE_FIELD_TYPE (arg_type, 0)) == TYPE_CODE_FLT))
2140            && MIPS_FPU_TYPE != MIPS_FPU_NONE);
2141 }
2142
2143 /* On o32, argument passing in GPRs depends on the alignment of the type being
2144    passed.  Return 1 if this type must be aligned to a doubleword boundary. */
2145
2146 static int
2147 mips_type_needs_double_align (struct type *type)
2148 {
2149   enum type_code typecode = TYPE_CODE (type);
2150   
2151   if (typecode == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8)
2152     return 1;
2153   else if (typecode == TYPE_CODE_STRUCT)
2154     {
2155       if (TYPE_NFIELDS (type) < 1)
2156         return 0;
2157       return mips_type_needs_double_align (TYPE_FIELD_TYPE (type, 0));
2158     }
2159   else if (typecode == TYPE_CODE_UNION)
2160     {
2161       int i, n;    
2162
2163       n = TYPE_NFIELDS (type);
2164       for (i = 0; i < n; i++)
2165         if (mips_type_needs_double_align (TYPE_FIELD_TYPE (type, i)))
2166           return 1;
2167       return 0;
2168     }
2169   return 0;
2170 }
2171
2172 CORE_ADDR
2173 mips_push_arguments (int nargs,
2174                      struct value **args,
2175                      CORE_ADDR sp,
2176                      int struct_return,
2177                      CORE_ADDR struct_addr)
2178 {
2179   int argreg;
2180   int float_argreg;
2181   int argnum;
2182   int len = 0;
2183   int stack_offset = 0;
2184
2185   /* Macros to round N up or down to the next A boundary; A must be
2186      a power of two. */
2187 #define ROUND_DOWN(n,a) ((n) & ~((a)-1))
2188 #define ROUND_UP(n,a) (((n)+(a)-1) & ~((a)-1))
2189
2190   /* First ensure that the stack and structure return address (if any)
2191      are properly aligned. The stack has to be at least 64-bit aligned
2192      even on 32-bit machines, because doubles must be 64-bit aligned.
2193      On at least one MIPS variant, stack frames need to be 128-bit
2194      aligned, so we round to this widest known alignment. */
2195   sp = ROUND_DOWN (sp, 16);
2196   struct_addr = ROUND_DOWN (struct_addr, 16);
2197
2198   /* Now make space on the stack for the args. We allocate more
2199      than necessary for EABI, because the first few arguments are
2200      passed in registers, but that's OK. */
2201   for (argnum = 0; argnum < nargs; argnum++)
2202     len += ROUND_UP (TYPE_LENGTH (VALUE_TYPE (args[argnum])), MIPS_STACK_ARGSIZE);
2203   sp -= ROUND_UP (len, 16);
2204
2205   if (mips_debug)
2206     fprintf_unfiltered (gdb_stdlog, "mips_push_arguments: sp=0x%lx allocated %d\n",
2207                         (long) sp, ROUND_UP (len, 16));
2208
2209   /* Initialize the integer and float register pointers.  */
2210   argreg = A0_REGNUM;
2211   float_argreg = FPA0_REGNUM;
2212
2213   /* the struct_return pointer occupies the first parameter-passing reg */
2214   if (struct_return)
2215     {
2216       if (mips_debug)
2217         fprintf_unfiltered (gdb_stdlog,
2218                             "mips_push_arguments: struct_return reg=%d 0x%lx\n",
2219                             argreg, (long) struct_addr);
2220       write_register (argreg++, struct_addr);
2221       if (MIPS_REGS_HAVE_HOME_P)
2222         stack_offset += MIPS_STACK_ARGSIZE;
2223     }
2224
2225   /* Now load as many as possible of the first arguments into
2226      registers, and push the rest onto the stack.  Loop thru args
2227      from first to last.  */
2228   for (argnum = 0; argnum < nargs; argnum++)
2229     {
2230       char *val;
2231       char valbuf[MAX_REGISTER_RAW_SIZE];
2232       struct value *arg = args[argnum];
2233       struct type *arg_type = check_typedef (VALUE_TYPE (arg));
2234       int len = TYPE_LENGTH (arg_type);
2235       enum type_code typecode = TYPE_CODE (arg_type);
2236
2237       if (mips_debug)
2238         fprintf_unfiltered (gdb_stdlog,
2239                             "mips_push_arguments: %d len=%d type=%d",
2240                             argnum + 1, len, (int) typecode);
2241
2242       /* The EABI passes structures that do not fit in a register by
2243          reference. In all other cases, pass the structure by value.  */
2244       if (MIPS_EABI
2245           && len > MIPS_SAVED_REGSIZE
2246           && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION))
2247         {
2248           store_address (valbuf, MIPS_SAVED_REGSIZE, VALUE_ADDRESS (arg));
2249           typecode = TYPE_CODE_PTR;
2250           len = MIPS_SAVED_REGSIZE;
2251           val = valbuf;
2252           if (mips_debug)
2253             fprintf_unfiltered (gdb_stdlog, " push");
2254         }
2255       else
2256         val = (char *) VALUE_CONTENTS (arg);
2257
2258       /* 32-bit ABIs always start floating point arguments in an
2259          even-numbered floating point register.  Round the FP register
2260          up before the check to see if there are any FP registers
2261          left. Non MIPS_EABI targets also pass the FP in the integer
2262          registers so also round up normal registers. */
2263       if (!FP_REGISTER_DOUBLE
2264           && fp_register_arg_p (typecode, arg_type))
2265         {
2266           if ((float_argreg & 1))
2267             float_argreg++;
2268         }
2269
2270       /* Floating point arguments passed in registers have to be
2271          treated specially.  On 32-bit architectures, doubles
2272          are passed in register pairs; the even register gets
2273          the low word, and the odd register gets the high word.
2274          On non-EABI processors, the first two floating point arguments are
2275          also copied to general registers, because MIPS16 functions
2276          don't use float registers for arguments.  This duplication of
2277          arguments in general registers can't hurt non-MIPS16 functions
2278          because those registers are normally skipped.  */
2279       /* MIPS_EABI squeezes a struct that contains a single floating
2280          point value into an FP register instead of pushing it onto the
2281          stack. */
2282       if (fp_register_arg_p (typecode, arg_type)
2283           && float_argreg <= MIPS_LAST_FP_ARG_REGNUM)
2284         {
2285           if (!FP_REGISTER_DOUBLE && len == 8)
2286             {
2287               int low_offset = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? 4 : 0;
2288               unsigned long regval;
2289
2290               /* Write the low word of the double to the even register(s).  */
2291               regval = extract_unsigned_integer (val + low_offset, 4);
2292               if (mips_debug)
2293                 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
2294                                     float_argreg, phex (regval, 4));
2295               write_register (float_argreg++, regval);
2296               if (!MIPS_EABI)
2297                 {
2298                   if (mips_debug)
2299                     fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
2300                                         argreg, phex (regval, 4));
2301                   write_register (argreg++, regval);
2302                 }
2303
2304               /* Write the high word of the double to the odd register(s).  */
2305               regval = extract_unsigned_integer (val + 4 - low_offset, 4);
2306               if (mips_debug)
2307                 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
2308                                     float_argreg, phex (regval, 4));
2309               write_register (float_argreg++, regval);
2310               if (!MIPS_EABI)
2311                 {
2312                   if (mips_debug)
2313                     fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
2314                                         argreg, phex (regval, 4));
2315                   write_register (argreg++, regval);
2316                 }
2317
2318             }
2319           else
2320             {
2321               /* This is a floating point value that fits entirely
2322                  in a single register.  */
2323               /* On 32 bit ABI's the float_argreg is further adjusted
2324                  above to ensure that it is even register aligned. */
2325               LONGEST regval = extract_unsigned_integer (val, len);
2326               if (mips_debug)
2327                 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
2328                                     float_argreg, phex (regval, len));
2329               write_register (float_argreg++, regval);
2330               if (!MIPS_EABI)
2331                 {
2332                   /* CAGNEY: 32 bit MIPS ABI's always reserve two FP
2333                      registers for each argument.  The below is (my
2334                      guess) to ensure that the corresponding integer
2335                      register has reserved the same space. */
2336                   if (mips_debug)
2337                     fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
2338                                         argreg, phex (regval, len));
2339                   write_register (argreg, regval);
2340                   argreg += FP_REGISTER_DOUBLE ? 1 : 2;
2341                 }
2342             }
2343           /* Reserve space for the FP register. */
2344           if (MIPS_REGS_HAVE_HOME_P)
2345             stack_offset += ROUND_UP (len, MIPS_STACK_ARGSIZE);
2346         }
2347       else
2348         {
2349           /* Copy the argument to general registers or the stack in
2350              register-sized pieces.  Large arguments are split between
2351              registers and stack.  */
2352           /* Note: structs whose size is not a multiple of MIPS_REGSIZE
2353              are treated specially: Irix cc passes them in registers
2354              where gcc sometimes puts them on the stack.  For maximum
2355              compatibility, we will put them in both places.  */
2356           int odd_sized_struct = ((len > MIPS_SAVED_REGSIZE) &&
2357                                   (len % MIPS_SAVED_REGSIZE != 0));
2358           /* Structures should be aligned to eight bytes (even arg registers)
2359              on MIPS_ABI_O32 if their first member has double precision. */
2360           if (gdbarch_tdep (current_gdbarch)->mips_abi == MIPS_ABI_O32
2361               && mips_type_needs_double_align (arg_type))
2362             {
2363               if ((argreg & 1))
2364                 argreg++;
2365             }
2366           /* Note: Floating-point values that didn't fit into an FP
2367              register are only written to memory. */
2368           while (len > 0)
2369             {
2370               /* Rememer if the argument was written to the stack. */
2371               int stack_used_p = 0;
2372               int partial_len = len < MIPS_SAVED_REGSIZE ? len : MIPS_SAVED_REGSIZE;
2373
2374               if (mips_debug)
2375                 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
2376                                     partial_len);
2377
2378               /* Write this portion of the argument to the stack.  */
2379               if (argreg > MIPS_LAST_ARG_REGNUM
2380                   || odd_sized_struct
2381                   || fp_register_arg_p (typecode, arg_type))
2382                 {
2383                   /* Should shorter than int integer values be
2384                      promoted to int before being stored? */
2385                   int longword_offset = 0;
2386                   CORE_ADDR addr;
2387                   stack_used_p = 1;
2388                   if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
2389                     {
2390                       if (MIPS_STACK_ARGSIZE == 8 &&
2391                           (typecode == TYPE_CODE_INT ||
2392                            typecode == TYPE_CODE_PTR ||
2393                            typecode == TYPE_CODE_FLT) && len <= 4)
2394                         longword_offset = MIPS_STACK_ARGSIZE - len;
2395                       else if ((typecode == TYPE_CODE_STRUCT ||
2396                                 typecode == TYPE_CODE_UNION) &&
2397                                TYPE_LENGTH (arg_type) < MIPS_STACK_ARGSIZE)
2398                         longword_offset = MIPS_STACK_ARGSIZE - len;
2399                     }
2400
2401                   if (mips_debug)
2402                     {
2403                       fprintf_unfiltered (gdb_stdlog, " - stack_offset=0x%lx",
2404                                           (long) stack_offset);
2405                       fprintf_unfiltered (gdb_stdlog, " longword_offset=0x%lx",
2406                                           (long) longword_offset);
2407                     }
2408                     
2409                   addr = sp + stack_offset + longword_offset;
2410
2411                   if (mips_debug)
2412                     {
2413                       int i;
2414                       fprintf_unfiltered (gdb_stdlog, " @0x%lx ", (long) addr);
2415                       for (i = 0; i < partial_len; i++)
2416                         {
2417                           fprintf_unfiltered (gdb_stdlog, "%02x", val[i] & 0xff);
2418                         }
2419                     }
2420                   write_memory (addr, val, partial_len);
2421                 }
2422
2423               /* Note!!! This is NOT an else clause.  Odd sized
2424                  structs may go thru BOTH paths.  Floating point
2425                  arguments will not. */
2426               /* Write this portion of the argument to a general
2427                  purpose register. */
2428               if (argreg <= MIPS_LAST_ARG_REGNUM
2429                   && !fp_register_arg_p (typecode, arg_type))
2430                 {
2431                   LONGEST regval = extract_unsigned_integer (val, partial_len);
2432
2433                   /* A non-floating-point argument being passed in a 
2434                      general register.  If a struct or union, and if
2435                      the remaining length is smaller than the register
2436                      size, we have to adjust the register value on
2437                      big endian targets.
2438
2439                      It does not seem to be necessary to do the
2440                      same for integral types.
2441
2442                      Also don't do this adjustment on EABI and O64
2443                      binaries.
2444
2445                      cagney/2001-07-23: gdb/179: Also, GCC, when
2446                      outputting LE O32 with sizeof (struct) <
2447                      MIPS_SAVED_REGSIZE, generates a left shift as
2448                      part of storing the argument in a register a
2449                      register (the left shift isn't generated when
2450                      sizeof (struct) >= MIPS_SAVED_REGSIZE).  Since it
2451                      is quite possible that this is GCC contradicting
2452                      the LE/O32 ABI, GDB has not been adjusted to
2453                      accommodate this.  Either someone needs to
2454                      demonstrate that the LE/O32 ABI specifies such a
2455                      left shift OR this new ABI gets identified as
2456                      such and GDB gets tweaked accordingly.  */
2457
2458                   if (!MIPS_EABI
2459                       && MIPS_SAVED_REGSIZE < 8
2460                       && TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
2461                       && partial_len < MIPS_SAVED_REGSIZE
2462                       && (typecode == TYPE_CODE_STRUCT ||
2463                           typecode == TYPE_CODE_UNION))
2464                     regval <<= ((MIPS_SAVED_REGSIZE - partial_len) *
2465                                 TARGET_CHAR_BIT);
2466
2467                   if (mips_debug)
2468                     fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
2469                                       argreg,
2470                                       phex (regval, MIPS_SAVED_REGSIZE));
2471                   write_register (argreg, regval);
2472                   argreg++;
2473
2474                   /* If this is the old ABI, prevent subsequent floating
2475                      point arguments from being passed in floating point
2476                      registers.  */
2477                   if (!MIPS_EABI)
2478                     float_argreg = MIPS_LAST_FP_ARG_REGNUM + 1;
2479                 }
2480
2481               len -= partial_len;
2482               val += partial_len;
2483
2484               /* Compute the the offset into the stack at which we
2485                  will copy the next parameter.
2486
2487                  In older ABIs, the caller reserved space for
2488                  registers that contained arguments.  This was loosely
2489                  refered to as their "home".  Consequently, space is
2490                  always allocated.
2491
2492                  In the new EABI (and the NABI32), the stack_offset
2493                  only needs to be adjusted when it has been used.. */
2494
2495               if (MIPS_REGS_HAVE_HOME_P || stack_used_p)
2496                 stack_offset += ROUND_UP (partial_len, MIPS_STACK_ARGSIZE);
2497             }
2498         }
2499       if (mips_debug)
2500         fprintf_unfiltered (gdb_stdlog, "\n");
2501     }
2502
2503   /* Return adjusted stack pointer.  */
2504   return sp;
2505 }
2506
2507 CORE_ADDR
2508 mips_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
2509 {
2510   /* Set the return address register to point to the entry
2511      point of the program, where a breakpoint lies in wait.  */
2512   write_register (RA_REGNUM, CALL_DUMMY_ADDRESS ());
2513   return sp;
2514 }
2515
2516 static void
2517 mips_push_register (CORE_ADDR * sp, int regno)
2518 {
2519   char buffer[MAX_REGISTER_RAW_SIZE];
2520   int regsize;
2521   int offset;
2522   if (MIPS_SAVED_REGSIZE < REGISTER_RAW_SIZE (regno))
2523     {
2524       regsize = MIPS_SAVED_REGSIZE;
2525       offset = (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
2526                 ? REGISTER_RAW_SIZE (regno) - MIPS_SAVED_REGSIZE
2527                 : 0);
2528     }
2529   else
2530     {
2531       regsize = REGISTER_RAW_SIZE (regno);
2532       offset = 0;
2533     }
2534   *sp -= regsize;
2535   read_register_gen (regno, buffer);
2536   write_memory (*sp, buffer + offset, regsize);
2537 }
2538
2539 /* MASK(i,j) == (1<<i) + (1<<(i+1)) + ... + (1<<j)). Assume i<=j<(MIPS_NUMREGS-1). */
2540 #define MASK(i,j) (((1 << ((j)+1))-1) ^ ((1 << (i))-1))
2541
2542 void
2543 mips_push_dummy_frame (void)
2544 {
2545   int ireg;
2546   struct linked_proc_info *link = (struct linked_proc_info *)
2547   xmalloc (sizeof (struct linked_proc_info));
2548   mips_extra_func_info_t proc_desc = &link->info;
2549   CORE_ADDR sp = ADDR_BITS_REMOVE (read_signed_register (SP_REGNUM));
2550   CORE_ADDR old_sp = sp;
2551   link->next = linked_proc_desc_table;
2552   linked_proc_desc_table = link;
2553
2554 /* FIXME!   are these correct ? */
2555 #define PUSH_FP_REGNUM 16       /* must be a register preserved across calls */
2556 #define GEN_REG_SAVE_MASK MASK(1,16)|MASK(24,28)|(1<<(MIPS_NUMREGS-1))
2557 #define FLOAT_REG_SAVE_MASK MASK(0,19)
2558 #define FLOAT_SINGLE_REG_SAVE_MASK \
2559   ((1<<18)|(1<<16)|(1<<14)|(1<<12)|(1<<10)|(1<<8)|(1<<6)|(1<<4)|(1<<2)|(1<<0))
2560   /*
2561    * The registers we must save are all those not preserved across
2562    * procedure calls. Dest_Reg (see tm-mips.h) must also be saved.
2563    * In addition, we must save the PC, PUSH_FP_REGNUM, MMLO/-HI
2564    * and FP Control/Status registers.
2565    * 
2566    *
2567    * Dummy frame layout:
2568    *  (high memory)
2569    *    Saved PC
2570    *    Saved MMHI, MMLO, FPC_CSR
2571    *    Saved R31
2572    *    Saved R28
2573    *    ...
2574    *    Saved R1
2575    *    Saved D18 (i.e. F19, F18)
2576    *    ...
2577    *    Saved D0 (i.e. F1, F0)
2578    *    Argument build area and stack arguments written via mips_push_arguments
2579    *  (low memory)
2580    */
2581
2582   /* Save special registers (PC, MMHI, MMLO, FPC_CSR) */
2583   PROC_FRAME_REG (proc_desc) = PUSH_FP_REGNUM;
2584   PROC_FRAME_OFFSET (proc_desc) = 0;
2585   PROC_FRAME_ADJUST (proc_desc) = 0;
2586   mips_push_register (&sp, PC_REGNUM);
2587   mips_push_register (&sp, HI_REGNUM);
2588   mips_push_register (&sp, LO_REGNUM);
2589   mips_push_register (&sp, MIPS_FPU_TYPE == MIPS_FPU_NONE ? 0 : FCRCS_REGNUM);
2590
2591   /* Save general CPU registers */
2592   PROC_REG_MASK (proc_desc) = GEN_REG_SAVE_MASK;
2593   /* PROC_REG_OFFSET is the offset of the first saved register from FP.  */
2594   PROC_REG_OFFSET (proc_desc) = sp - old_sp - MIPS_SAVED_REGSIZE;
2595   for (ireg = 32; --ireg >= 0;)
2596     if (PROC_REG_MASK (proc_desc) & (1 << ireg))
2597       mips_push_register (&sp, ireg);
2598
2599   /* Save floating point registers starting with high order word */
2600   PROC_FREG_MASK (proc_desc) =
2601     MIPS_FPU_TYPE == MIPS_FPU_DOUBLE ? FLOAT_REG_SAVE_MASK
2602     : MIPS_FPU_TYPE == MIPS_FPU_SINGLE ? FLOAT_SINGLE_REG_SAVE_MASK : 0;
2603   /* PROC_FREG_OFFSET is the offset of the first saved *double* register
2604      from FP.  */
2605   PROC_FREG_OFFSET (proc_desc) = sp - old_sp - 8;
2606   for (ireg = 32; --ireg >= 0;)
2607     if (PROC_FREG_MASK (proc_desc) & (1 << ireg))
2608       mips_push_register (&sp, ireg + FP0_REGNUM);
2609
2610   /* Update the frame pointer for the call dummy and the stack pointer.
2611      Set the procedure's starting and ending addresses to point to the
2612      call dummy address at the entry point.  */
2613   write_register (PUSH_FP_REGNUM, old_sp);
2614   write_register (SP_REGNUM, sp);
2615   PROC_LOW_ADDR (proc_desc) = CALL_DUMMY_ADDRESS ();
2616   PROC_HIGH_ADDR (proc_desc) = CALL_DUMMY_ADDRESS () + 4;
2617   SET_PROC_DESC_IS_DUMMY (proc_desc);
2618   PROC_PC_REG (proc_desc) = RA_REGNUM;
2619 }
2620
2621 void
2622 mips_pop_frame (void)
2623 {
2624   register int regnum;
2625   struct frame_info *frame = get_current_frame ();
2626   CORE_ADDR new_sp = FRAME_FP (frame);
2627
2628   mips_extra_func_info_t proc_desc = frame->extra_info->proc_desc;
2629
2630   write_register (PC_REGNUM, FRAME_SAVED_PC (frame));
2631   if (frame->saved_regs == NULL)
2632     mips_find_saved_regs (frame);
2633   for (regnum = 0; regnum < NUM_REGS; regnum++)
2634     {
2635       if (regnum != SP_REGNUM && regnum != PC_REGNUM
2636           && frame->saved_regs[regnum])
2637         write_register (regnum,
2638                         read_memory_integer (frame->saved_regs[regnum],
2639                                              MIPS_SAVED_REGSIZE));
2640     }
2641   write_register (SP_REGNUM, new_sp);
2642   flush_cached_frames ();
2643
2644   if (proc_desc && PROC_DESC_IS_DUMMY (proc_desc))
2645     {
2646       struct linked_proc_info *pi_ptr, *prev_ptr;
2647
2648       for (pi_ptr = linked_proc_desc_table, prev_ptr = NULL;
2649            pi_ptr != NULL;
2650            prev_ptr = pi_ptr, pi_ptr = pi_ptr->next)
2651         {
2652           if (&pi_ptr->info == proc_desc)
2653             break;
2654         }
2655
2656       if (pi_ptr == NULL)
2657         error ("Can't locate dummy extra frame info\n");
2658
2659       if (prev_ptr != NULL)
2660         prev_ptr->next = pi_ptr->next;
2661       else
2662         linked_proc_desc_table = pi_ptr->next;
2663
2664       xfree (pi_ptr);
2665
2666       write_register (HI_REGNUM,
2667                       read_memory_integer (new_sp - 2 * MIPS_SAVED_REGSIZE,
2668                                            MIPS_SAVED_REGSIZE));
2669       write_register (LO_REGNUM,
2670                       read_memory_integer (new_sp - 3 * MIPS_SAVED_REGSIZE,
2671                                            MIPS_SAVED_REGSIZE));
2672       if (MIPS_FPU_TYPE != MIPS_FPU_NONE)
2673         write_register (FCRCS_REGNUM,
2674                         read_memory_integer (new_sp - 4 * MIPS_SAVED_REGSIZE,
2675                                              MIPS_SAVED_REGSIZE));
2676     }
2677 }
2678
2679 static void
2680 mips_print_register (int regnum, int all)
2681 {
2682   char raw_buffer[MAX_REGISTER_RAW_SIZE];
2683
2684   /* Get the data in raw format.  */
2685   if (read_relative_register_raw_bytes (regnum, raw_buffer))
2686     {
2687       printf_filtered ("%s: [Invalid]", REGISTER_NAME (regnum));
2688       return;
2689     }
2690
2691   /* If an even floating point register, also print as double. */
2692   if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT
2693       && !((regnum - FP0_REGNUM) & 1))
2694     if (REGISTER_RAW_SIZE (regnum) == 4)        /* this would be silly on MIPS64 or N32 (Irix 6) */
2695       {
2696         char dbuffer[2 * MAX_REGISTER_RAW_SIZE];
2697
2698         read_relative_register_raw_bytes (regnum, dbuffer);
2699         read_relative_register_raw_bytes (regnum + 1, dbuffer + MIPS_REGSIZE);
2700         REGISTER_CONVERT_TO_TYPE (regnum, builtin_type_double, dbuffer);
2701
2702         printf_filtered ("(d%d: ", regnum - FP0_REGNUM);
2703         val_print (builtin_type_double, dbuffer, 0, 0,
2704                    gdb_stdout, 0, 1, 0, Val_pretty_default);
2705         printf_filtered ("); ");
2706       }
2707   fputs_filtered (REGISTER_NAME (regnum), gdb_stdout);
2708
2709   /* The problem with printing numeric register names (r26, etc.) is that
2710      the user can't use them on input.  Probably the best solution is to
2711      fix it so that either the numeric or the funky (a2, etc.) names
2712      are accepted on input.  */
2713   if (regnum < MIPS_NUMREGS)
2714     printf_filtered ("(r%d): ", regnum);
2715   else
2716     printf_filtered (": ");
2717
2718   /* If virtual format is floating, print it that way.  */
2719   if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT)
2720     if (FP_REGISTER_DOUBLE)
2721       {                         /* show 8-byte floats as float AND double: */
2722         int offset = 4 * (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG);
2723
2724         printf_filtered (" (float) ");
2725         val_print (builtin_type_float, raw_buffer + offset, 0, 0,
2726                    gdb_stdout, 0, 1, 0, Val_pretty_default);
2727         printf_filtered (", (double) ");
2728         val_print (builtin_type_double, raw_buffer, 0, 0,
2729                    gdb_stdout, 0, 1, 0, Val_pretty_default);
2730       }
2731     else
2732       val_print (REGISTER_VIRTUAL_TYPE (regnum), raw_buffer, 0, 0,
2733                  gdb_stdout, 0, 1, 0, Val_pretty_default);
2734   /* Else print as integer in hex.  */
2735   else
2736     {
2737       int offset;
2738
2739       if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
2740         offset = REGISTER_RAW_SIZE (regnum) - REGISTER_VIRTUAL_SIZE (regnum);
2741       else
2742         offset = 0;
2743         
2744       print_scalar_formatted (raw_buffer + offset,
2745                               REGISTER_VIRTUAL_TYPE (regnum),
2746                               'x', 0, gdb_stdout);
2747     }
2748 }
2749
2750 /* Replacement for generic do_registers_info.  
2751    Print regs in pretty columns.  */
2752
2753 static int
2754 do_fp_register_row (int regnum)
2755 {                               /* do values for FP (float) regs */
2756   char *raw_buffer[2];
2757   char *dbl_buffer;
2758   /* use HI and LO to control the order of combining two flt regs */
2759   int HI = (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG);
2760   int LO = (TARGET_BYTE_ORDER != BFD_ENDIAN_BIG);
2761   double doub, flt1, flt2;      /* doubles extracted from raw hex data */
2762   int inv1, inv2, inv3;
2763
2764   raw_buffer[0] = (char *) alloca (REGISTER_RAW_SIZE (FP0_REGNUM));
2765   raw_buffer[1] = (char *) alloca (REGISTER_RAW_SIZE (FP0_REGNUM));
2766   dbl_buffer = (char *) alloca (2 * REGISTER_RAW_SIZE (FP0_REGNUM));
2767
2768   /* Get the data in raw format.  */
2769   if (read_relative_register_raw_bytes (regnum, raw_buffer[HI]))
2770     error ("can't read register %d (%s)", regnum, REGISTER_NAME (regnum));
2771   if (REGISTER_RAW_SIZE (regnum) == 4)
2772     {
2773       /* 4-byte registers: we can fit two registers per row. */
2774       /* Also print every pair of 4-byte regs as an 8-byte double. */
2775       if (read_relative_register_raw_bytes (regnum + 1, raw_buffer[LO]))
2776         error ("can't read register %d (%s)",
2777                regnum + 1, REGISTER_NAME (regnum + 1));
2778
2779       /* copy the two floats into one double, and unpack both */
2780       memcpy (dbl_buffer, raw_buffer, 2 * REGISTER_RAW_SIZE (FP0_REGNUM));
2781       flt1 = unpack_double (builtin_type_float, raw_buffer[HI], &inv1);
2782       flt2 = unpack_double (builtin_type_float, raw_buffer[LO], &inv2);
2783       doub = unpack_double (builtin_type_double, dbl_buffer, &inv3);
2784
2785       printf_filtered (" %-5s", REGISTER_NAME (regnum));
2786       if (inv1)
2787         printf_filtered (": <invalid float>");
2788       else
2789         printf_filtered ("%-17.9g", flt1);
2790
2791       printf_filtered (" %-5s", REGISTER_NAME (regnum + 1));
2792       if (inv2)
2793         printf_filtered (": <invalid float>");
2794       else
2795         printf_filtered ("%-17.9g", flt2);
2796
2797       printf_filtered (" dbl: ");
2798       if (inv3)
2799         printf_filtered ("<invalid double>");
2800       else
2801         printf_filtered ("%-24.17g", doub);
2802       printf_filtered ("\n");
2803
2804       /* may want to do hex display here (future enhancement) */
2805       regnum += 2;
2806     }
2807   else
2808     {                           /* eight byte registers: print each one as float AND as double. */
2809       int offset = 4 * (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG);
2810
2811       memcpy (dbl_buffer, raw_buffer[HI], 2 * REGISTER_RAW_SIZE (FP0_REGNUM));
2812       flt1 = unpack_double (builtin_type_float,
2813                             &raw_buffer[HI][offset], &inv1);
2814       doub = unpack_double (builtin_type_double, dbl_buffer, &inv3);
2815
2816       printf_filtered (" %-5s: ", REGISTER_NAME (regnum));
2817       if (inv1)
2818         printf_filtered ("<invalid float>");
2819       else
2820         printf_filtered ("flt: %-17.9g", flt1);
2821
2822       printf_filtered (" dbl: ");
2823       if (inv3)
2824         printf_filtered ("<invalid double>");
2825       else
2826         printf_filtered ("%-24.17g", doub);
2827
2828       printf_filtered ("\n");
2829       /* may want to do hex display here (future enhancement) */
2830       regnum++;
2831     }
2832   return regnum;
2833 }
2834
2835 /* Print a row's worth of GP (int) registers, with name labels above */
2836
2837 static int
2838 do_gp_register_row (int regnum)
2839 {
2840   /* do values for GP (int) regs */
2841   char raw_buffer[MAX_REGISTER_RAW_SIZE];
2842   int ncols = (MIPS_REGSIZE == 8 ? 4 : 8);      /* display cols per row */
2843   int col, byte;
2844   int start_regnum = regnum;
2845   int numregs = NUM_REGS;
2846
2847
2848   /* For GP registers, we print a separate row of names above the vals */
2849   printf_filtered ("     ");
2850   for (col = 0; col < ncols && regnum < numregs; regnum++)
2851     {
2852       if (*REGISTER_NAME (regnum) == '\0')
2853         continue;               /* unused register */
2854       if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT)
2855         break;                  /* end the row: reached FP register */
2856       printf_filtered (MIPS_REGSIZE == 8 ? "%17s" : "%9s",
2857                        REGISTER_NAME (regnum));
2858       col++;
2859     }
2860   printf_filtered (start_regnum < MIPS_NUMREGS ? "\n R%-4d" : "\n      ",
2861                    start_regnum);       /* print the R0 to R31 names */
2862
2863   regnum = start_regnum;        /* go back to start of row */
2864   /* now print the values in hex, 4 or 8 to the row */
2865   for (col = 0; col < ncols && regnum < numregs; regnum++)
2866     {
2867       if (*REGISTER_NAME (regnum) == '\0')
2868         continue;               /* unused register */
2869       if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT)
2870         break;                  /* end row: reached FP register */
2871       /* OK: get the data in raw format.  */
2872       if (read_relative_register_raw_bytes (regnum, raw_buffer))
2873         error ("can't read register %d (%s)", regnum, REGISTER_NAME (regnum));
2874       /* pad small registers */
2875       for (byte = 0; byte < (MIPS_REGSIZE - REGISTER_VIRTUAL_SIZE (regnum)); byte++)
2876         printf_filtered ("  ");
2877       /* Now print the register value in hex, endian order. */
2878       if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
2879         for (byte = REGISTER_RAW_SIZE (regnum) - REGISTER_VIRTUAL_SIZE (regnum);
2880              byte < REGISTER_RAW_SIZE (regnum);
2881              byte++)
2882           printf_filtered ("%02x", (unsigned char) raw_buffer[byte]);
2883       else
2884         for (byte = REGISTER_VIRTUAL_SIZE (regnum) - 1;
2885              byte >= 0;
2886              byte--)
2887           printf_filtered ("%02x", (unsigned char) raw_buffer[byte]);
2888       printf_filtered (" ");
2889       col++;
2890     }
2891   if (col > 0)                  /* ie. if we actually printed anything... */
2892     printf_filtered ("\n");
2893
2894   return regnum;
2895 }
2896
2897 /* MIPS_DO_REGISTERS_INFO(): called by "info register" command */
2898
2899 void
2900 mips_do_registers_info (int regnum, int fpregs)
2901 {
2902   if (regnum != -1)             /* do one specified register */
2903     {
2904       if (*(REGISTER_NAME (regnum)) == '\0')
2905         error ("Not a valid register for the current processor type");
2906
2907       mips_print_register (regnum, 0);
2908       printf_filtered ("\n");
2909     }
2910   else
2911     /* do all (or most) registers */
2912     {
2913       regnum = 0;
2914       while (regnum < NUM_REGS)
2915         {
2916           if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT)
2917             if (fpregs)         /* true for "INFO ALL-REGISTERS" command */
2918               regnum = do_fp_register_row (regnum);     /* FP regs */
2919             else
2920               regnum += MIPS_NUMREGS;   /* skip floating point regs */
2921           else
2922             regnum = do_gp_register_row (regnum);       /* GP (int) regs */
2923         }
2924     }
2925 }
2926
2927 /* Return number of args passed to a frame. described by FIP.
2928    Can return -1, meaning no way to tell.  */
2929
2930 int
2931 mips_frame_num_args (struct frame_info *frame)
2932 {
2933   return -1;
2934 }
2935
2936 /* Is this a branch with a delay slot?  */
2937
2938 static int is_delayed (unsigned long);
2939
2940 static int
2941 is_delayed (unsigned long insn)
2942 {
2943   int i;
2944   for (i = 0; i < NUMOPCODES; ++i)
2945     if (mips_opcodes[i].pinfo != INSN_MACRO
2946         && (insn & mips_opcodes[i].mask) == mips_opcodes[i].match)
2947       break;
2948   return (i < NUMOPCODES
2949           && (mips_opcodes[i].pinfo & (INSN_UNCOND_BRANCH_DELAY
2950                                        | INSN_COND_BRANCH_DELAY
2951                                        | INSN_COND_BRANCH_LIKELY)));
2952 }
2953
2954 int
2955 mips_step_skips_delay (CORE_ADDR pc)
2956 {
2957   char buf[MIPS_INSTLEN];
2958
2959   /* There is no branch delay slot on MIPS16.  */
2960   if (pc_is_mips16 (pc))
2961     return 0;
2962
2963   if (target_read_memory (pc, buf, MIPS_INSTLEN) != 0)
2964     /* If error reading memory, guess that it is not a delayed branch.  */
2965     return 0;
2966   return is_delayed ((unsigned long) extract_unsigned_integer (buf, MIPS_INSTLEN));
2967 }
2968
2969
2970 /* Skip the PC past function prologue instructions (32-bit version).
2971    This is a helper function for mips_skip_prologue.  */
2972
2973 static CORE_ADDR
2974 mips32_skip_prologue (CORE_ADDR pc)
2975 {
2976   t_inst inst;
2977   CORE_ADDR end_pc;
2978   int seen_sp_adjust = 0;
2979   int load_immediate_bytes = 0;
2980
2981   /* Skip the typical prologue instructions. These are the stack adjustment
2982      instruction and the instructions that save registers on the stack
2983      or in the gcc frame.  */
2984   for (end_pc = pc + 100; pc < end_pc; pc += MIPS_INSTLEN)
2985     {
2986       unsigned long high_word;
2987
2988       inst = mips_fetch_instruction (pc);
2989       high_word = (inst >> 16) & 0xffff;
2990
2991       if (high_word == 0x27bd   /* addiu $sp,$sp,offset */
2992           || high_word == 0x67bd)       /* daddiu $sp,$sp,offset */
2993         seen_sp_adjust = 1;
2994       else if (inst == 0x03a1e823 ||    /* subu $sp,$sp,$at */
2995                inst == 0x03a8e823)      /* subu $sp,$sp,$t0 */
2996         seen_sp_adjust = 1;
2997       else if (((inst & 0xFFE00000) == 0xAFA00000       /* sw reg,n($sp) */
2998                 || (inst & 0xFFE00000) == 0xFFA00000)   /* sd reg,n($sp) */
2999                && (inst & 0x001F0000))  /* reg != $zero */
3000         continue;
3001
3002       else if ((inst & 0xFFE00000) == 0xE7A00000)       /* swc1 freg,n($sp) */
3003         continue;
3004       else if ((inst & 0xF3E00000) == 0xA3C00000 && (inst & 0x001F0000))
3005         /* sx reg,n($s8) */
3006         continue;               /* reg != $zero */
3007
3008       /* move $s8,$sp.  With different versions of gas this will be either
3009          `addu $s8,$sp,$zero' or `or $s8,$sp,$zero' or `daddu s8,sp,$0'.
3010          Accept any one of these.  */
3011       else if (inst == 0x03A0F021 || inst == 0x03a0f025 || inst == 0x03a0f02d)
3012         continue;
3013
3014       else if ((inst & 0xFF9F07FF) == 0x00800021)       /* move reg,$a0-$a3 */
3015         continue;
3016       else if (high_word == 0x3c1c)     /* lui $gp,n */
3017         continue;
3018       else if (high_word == 0x279c)     /* addiu $gp,$gp,n */
3019         continue;
3020       else if (inst == 0x0399e021       /* addu $gp,$gp,$t9 */
3021                || inst == 0x033ce021)   /* addu $gp,$t9,$gp */
3022         continue;
3023       /* The following instructions load $at or $t0 with an immediate
3024          value in preparation for a stack adjustment via
3025          subu $sp,$sp,[$at,$t0]. These instructions could also initialize
3026          a local variable, so we accept them only before a stack adjustment
3027          instruction was seen.  */
3028       else if (!seen_sp_adjust)
3029         {
3030           if (high_word == 0x3c01 ||    /* lui $at,n */
3031               high_word == 0x3c08)      /* lui $t0,n */
3032             {
3033               load_immediate_bytes += MIPS_INSTLEN;     /* FIXME!! */
3034               continue;
3035             }
3036           else if (high_word == 0x3421 ||       /* ori $at,$at,n */
3037                    high_word == 0x3508 ||       /* ori $t0,$t0,n */
3038                    high_word == 0x3401 ||       /* ori $at,$zero,n */
3039                    high_word == 0x3408)         /* ori $t0,$zero,n */
3040             {
3041               load_immediate_bytes += MIPS_INSTLEN;     /* FIXME!! */
3042               continue;
3043             }
3044           else
3045             break;
3046         }
3047       else
3048         break;
3049     }
3050
3051   /* In a frameless function, we might have incorrectly
3052      skipped some load immediate instructions. Undo the skipping
3053      if the load immediate was not followed by a stack adjustment.  */
3054   if (load_immediate_bytes && !seen_sp_adjust)
3055     pc -= load_immediate_bytes;
3056   return pc;
3057 }
3058
3059 /* Skip the PC past function prologue instructions (16-bit version).
3060    This is a helper function for mips_skip_prologue.  */
3061
3062 static CORE_ADDR
3063 mips16_skip_prologue (CORE_ADDR pc)
3064 {
3065   CORE_ADDR end_pc;
3066   int extend_bytes = 0;
3067   int prev_extend_bytes;
3068
3069   /* Table of instructions likely to be found in a function prologue.  */
3070   static struct
3071     {
3072       unsigned short inst;
3073       unsigned short mask;
3074     }
3075   table[] =
3076   {
3077     {
3078       0x6300, 0xff00
3079     }
3080     ,                           /* addiu $sp,offset */
3081     {
3082       0xfb00, 0xff00
3083     }
3084     ,                           /* daddiu $sp,offset */
3085     {
3086       0xd000, 0xf800
3087     }
3088     ,                           /* sw reg,n($sp) */
3089     {
3090       0xf900, 0xff00
3091     }
3092     ,                           /* sd reg,n($sp) */
3093     {
3094       0x6200, 0xff00
3095     }
3096     ,                           /* sw $ra,n($sp) */
3097     {
3098       0xfa00, 0xff00
3099     }
3100     ,                           /* sd $ra,n($sp) */
3101     {
3102       0x673d, 0xffff
3103     }
3104     ,                           /* move $s1,sp */
3105     {
3106       0xd980, 0xff80
3107     }
3108     ,                           /* sw $a0-$a3,n($s1) */
3109     {
3110       0x6704, 0xff1c
3111     }
3112     ,                           /* move reg,$a0-$a3 */
3113     {
3114       0xe809, 0xf81f
3115     }
3116     ,                           /* entry pseudo-op */
3117     {
3118       0x0100, 0xff00
3119     }
3120     ,                           /* addiu $s1,$sp,n */
3121     {
3122       0, 0
3123     }                           /* end of table marker */
3124   };
3125
3126   /* Skip the typical prologue instructions. These are the stack adjustment
3127      instruction and the instructions that save registers on the stack
3128      or in the gcc frame.  */
3129   for (end_pc = pc + 100; pc < end_pc; pc += MIPS16_INSTLEN)
3130     {
3131       unsigned short inst;
3132       int i;
3133
3134       inst = mips_fetch_instruction (pc);
3135
3136       /* Normally we ignore an extend instruction.  However, if it is
3137          not followed by a valid prologue instruction, we must adjust
3138          the pc back over the extend so that it won't be considered
3139          part of the prologue.  */
3140       if ((inst & 0xf800) == 0xf000)    /* extend */
3141         {
3142           extend_bytes = MIPS16_INSTLEN;
3143           continue;
3144         }
3145       prev_extend_bytes = extend_bytes;
3146       extend_bytes = 0;
3147
3148       /* Check for other valid prologue instructions besides extend.  */
3149       for (i = 0; table[i].mask != 0; i++)
3150         if ((inst & table[i].mask) == table[i].inst)    /* found, get out */
3151           break;
3152       if (table[i].mask != 0)   /* it was in table? */
3153         continue;               /* ignore it */
3154       else
3155         /* non-prologue */
3156         {
3157           /* Return the current pc, adjusted backwards by 2 if
3158              the previous instruction was an extend.  */
3159           return pc - prev_extend_bytes;
3160         }
3161     }
3162   return pc;
3163 }
3164
3165 /* To skip prologues, I use this predicate.  Returns either PC itself
3166    if the code at PC does not look like a function prologue; otherwise
3167    returns an address that (if we're lucky) follows the prologue.  If
3168    LENIENT, then we must skip everything which is involved in setting
3169    up the frame (it's OK to skip more, just so long as we don't skip
3170    anything which might clobber the registers which are being saved.
3171    We must skip more in the case where part of the prologue is in the
3172    delay slot of a non-prologue instruction).  */
3173
3174 CORE_ADDR
3175 mips_skip_prologue (CORE_ADDR pc)
3176 {
3177   /* See if we can determine the end of the prologue via the symbol table.
3178      If so, then return either PC, or the PC after the prologue, whichever
3179      is greater.  */
3180
3181   CORE_ADDR post_prologue_pc = after_prologue (pc, NULL);
3182
3183   if (post_prologue_pc != 0)
3184     return max (pc, post_prologue_pc);
3185
3186   /* Can't determine prologue from the symbol table, need to examine
3187      instructions.  */
3188
3189   if (pc_is_mips16 (pc))
3190     return mips16_skip_prologue (pc);
3191   else
3192     return mips32_skip_prologue (pc);
3193 }
3194
3195 /* Determine how a return value is stored within the MIPS register
3196    file, given the return type `valtype'. */
3197
3198 struct return_value_word
3199 {
3200   int len;
3201   int reg;
3202   int reg_offset;
3203   int buf_offset;
3204 };
3205
3206 static void
3207 return_value_location (struct type *valtype,
3208                        struct return_value_word *hi,
3209                        struct return_value_word *lo)
3210 {
3211   int len = TYPE_LENGTH (valtype);
3212
3213   if (TYPE_CODE (valtype) == TYPE_CODE_FLT
3214       && ((MIPS_FPU_TYPE == MIPS_FPU_DOUBLE && (len == 4 || len == 8))
3215           || (MIPS_FPU_TYPE == MIPS_FPU_SINGLE && len == 4)))
3216     {
3217       if (!FP_REGISTER_DOUBLE && len == 8)
3218         {
3219           /* We need to break a 64bit float in two 32 bit halves and
3220              spread them across a floating-point register pair. */
3221           lo->buf_offset = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? 4 : 0;
3222           hi->buf_offset = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? 0 : 4;
3223           lo->reg_offset = ((TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
3224                              && REGISTER_RAW_SIZE (FP0_REGNUM) == 8)
3225                             ? 4 : 0);
3226           hi->reg_offset = lo->reg_offset;
3227           lo->reg = FP0_REGNUM + 0;
3228           hi->reg = FP0_REGNUM + 1;
3229           lo->len = 4;
3230           hi->len = 4;
3231         }
3232       else
3233         {
3234           /* The floating point value fits in a single floating-point
3235              register. */
3236           lo->reg_offset = ((TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
3237                              && REGISTER_RAW_SIZE (FP0_REGNUM) == 8
3238                              && len == 4)
3239                             ? 4 : 0);
3240           lo->reg = FP0_REGNUM;
3241           lo->len = len;
3242           lo->buf_offset = 0;
3243           hi->len = 0;
3244           hi->reg_offset = 0;
3245           hi->buf_offset = 0;
3246           hi->reg = 0;
3247         }
3248     }
3249   else
3250     {
3251       /* Locate a result possibly spread across two registers. */
3252       int regnum = 2;
3253       lo->reg = regnum + 0;
3254       hi->reg = regnum + 1;
3255       if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
3256           && len < MIPS_SAVED_REGSIZE)
3257         {
3258           /* "un-left-justify" the value in the low register */
3259           lo->reg_offset = MIPS_SAVED_REGSIZE - len;
3260           lo->len = len;
3261           hi->reg_offset = 0;
3262           hi->len = 0;
3263         }
3264       else if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
3265                && len > MIPS_SAVED_REGSIZE      /* odd-size structs */
3266                && len < MIPS_SAVED_REGSIZE * 2
3267                && (TYPE_CODE (valtype) == TYPE_CODE_STRUCT ||
3268                    TYPE_CODE (valtype) == TYPE_CODE_UNION))
3269         {
3270           /* "un-left-justify" the value spread across two registers. */
3271           lo->reg_offset = 2 * MIPS_SAVED_REGSIZE - len;
3272           lo->len = MIPS_SAVED_REGSIZE - lo->reg_offset;
3273           hi->reg_offset = 0;
3274           hi->len = len - lo->len;
3275         }
3276       else
3277         {
3278           /* Only perform a partial copy of the second register. */
3279           lo->reg_offset = 0;
3280           hi->reg_offset = 0;
3281           if (len > MIPS_SAVED_REGSIZE)
3282             {
3283               lo->len = MIPS_SAVED_REGSIZE;
3284               hi->len = len - MIPS_SAVED_REGSIZE;
3285             }
3286           else
3287             {
3288               lo->len = len;
3289               hi->len = 0;
3290             }
3291         }
3292       if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG
3293           && REGISTER_RAW_SIZE (regnum) == 8
3294           && MIPS_SAVED_REGSIZE == 4)
3295         {
3296           /* Account for the fact that only the least-signficant part
3297              of the register is being used */
3298           lo->reg_offset += 4;
3299           hi->reg_offset += 4;
3300         }
3301       lo->buf_offset = 0;
3302       hi->buf_offset = lo->len;
3303     }
3304 }
3305
3306 /* Given a return value in `regbuf' with a type `valtype', extract and
3307    copy its value into `valbuf'. */
3308
3309 void
3310 mips_extract_return_value (struct type *valtype,
3311                            char regbuf[REGISTER_BYTES],
3312                            char *valbuf)
3313 {
3314   struct return_value_word lo;
3315   struct return_value_word hi;
3316   return_value_location (valtype, &hi, &lo);
3317
3318   memcpy (valbuf + lo.buf_offset,
3319           regbuf + REGISTER_BYTE (lo.reg) + lo.reg_offset,
3320           lo.len);
3321
3322   if (hi.len > 0)
3323     memcpy (valbuf + hi.buf_offset,
3324             regbuf + REGISTER_BYTE (hi.reg) + hi.reg_offset,
3325             hi.len);
3326 }
3327
3328 /* Given a return value in `valbuf' with a type `valtype', write it's
3329    value into the appropriate register. */
3330
3331 void
3332 mips_store_return_value (struct type *valtype, char *valbuf)
3333 {
3334   char raw_buffer[MAX_REGISTER_RAW_SIZE];
3335   struct return_value_word lo;
3336   struct return_value_word hi;
3337   return_value_location (valtype, &hi, &lo);
3338
3339   memset (raw_buffer, 0, sizeof (raw_buffer));
3340   memcpy (raw_buffer + lo.reg_offset, valbuf + lo.buf_offset, lo.len);
3341   write_register_bytes (REGISTER_BYTE (lo.reg),
3342                         raw_buffer,
3343                         REGISTER_RAW_SIZE (lo.reg));
3344
3345   if (hi.len > 0)
3346     {
3347       memset (raw_buffer, 0, sizeof (raw_buffer));
3348       memcpy (raw_buffer + hi.reg_offset, valbuf + hi.buf_offset, hi.len);
3349       write_register_bytes (REGISTER_BYTE (hi.reg),
3350                             raw_buffer,
3351                             REGISTER_RAW_SIZE (hi.reg));
3352     }
3353 }
3354
3355 /* Exported procedure: Is PC in the signal trampoline code */
3356
3357 int
3358 in_sigtramp (CORE_ADDR pc, char *ignore)
3359 {
3360   if (sigtramp_address == 0)
3361     fixup_sigtramp ();
3362   return (pc >= sigtramp_address && pc < sigtramp_end);
3363 }
3364
3365 /* Root of all "set mips "/"show mips " commands. This will eventually be
3366    used for all MIPS-specific commands.  */
3367
3368 static void
3369 show_mips_command (char *args, int from_tty)
3370 {
3371   help_list (showmipscmdlist, "show mips ", all_commands, gdb_stdout);
3372 }
3373
3374 static void
3375 set_mips_command (char *args, int from_tty)
3376 {
3377   printf_unfiltered ("\"set mips\" must be followed by an appropriate subcommand.\n");
3378   help_list (setmipscmdlist, "set mips ", all_commands, gdb_stdout);
3379 }
3380
3381 /* Commands to show/set the MIPS FPU type.  */
3382
3383 static void
3384 show_mipsfpu_command (char *args, int from_tty)
3385 {
3386   char *fpu;
3387   switch (MIPS_FPU_TYPE)
3388     {
3389     case MIPS_FPU_SINGLE:
3390       fpu = "single-precision";
3391       break;
3392     case MIPS_FPU_DOUBLE:
3393       fpu = "double-precision";
3394       break;
3395     case MIPS_FPU_NONE:
3396       fpu = "absent (none)";
3397       break;
3398     default:
3399       internal_error (__FILE__, __LINE__, "bad switch");
3400     }
3401   if (mips_fpu_type_auto)
3402     printf_unfiltered ("The MIPS floating-point coprocessor is set automatically (currently %s)\n",
3403                        fpu);
3404   else
3405     printf_unfiltered ("The MIPS floating-point coprocessor is assumed to be %s\n",
3406                        fpu);
3407 }
3408
3409
3410 static void
3411 set_mipsfpu_command (char *args, int from_tty)
3412 {
3413   printf_unfiltered ("\"set mipsfpu\" must be followed by \"double\", \"single\",\"none\" or \"auto\".\n");
3414   show_mipsfpu_command (args, from_tty);
3415 }
3416
3417 static void
3418 set_mipsfpu_single_command (char *args, int from_tty)
3419 {
3420   mips_fpu_type = MIPS_FPU_SINGLE;
3421   mips_fpu_type_auto = 0;
3422   if (GDB_MULTI_ARCH)
3423     {
3424       gdbarch_tdep (current_gdbarch)->mips_fpu_type = MIPS_FPU_SINGLE;
3425     }
3426 }
3427
3428 static void
3429 set_mipsfpu_double_command (char *args, int from_tty)
3430 {
3431   mips_fpu_type = MIPS_FPU_DOUBLE;
3432   mips_fpu_type_auto = 0;
3433   if (GDB_MULTI_ARCH)
3434     {
3435       gdbarch_tdep (current_gdbarch)->mips_fpu_type = MIPS_FPU_DOUBLE;
3436     }
3437 }
3438
3439 static void
3440 set_mipsfpu_none_command (char *args, int from_tty)
3441 {
3442   mips_fpu_type = MIPS_FPU_NONE;
3443   mips_fpu_type_auto = 0;
3444   if (GDB_MULTI_ARCH)
3445     {
3446       gdbarch_tdep (current_gdbarch)->mips_fpu_type = MIPS_FPU_NONE;
3447     }
3448 }
3449
3450 static void
3451 set_mipsfpu_auto_command (char *args, int from_tty)
3452 {
3453   mips_fpu_type_auto = 1;
3454 }
3455
3456 /* Command to set the processor type.  */
3457
3458 void
3459 mips_set_processor_type_command (char *args, int from_tty)
3460 {
3461   int i;
3462
3463   if (tmp_mips_processor_type == NULL || *tmp_mips_processor_type == '\0')
3464     {
3465       printf_unfiltered ("The known MIPS processor types are as follows:\n\n");
3466       for (i = 0; mips_processor_type_table[i].name != NULL; ++i)
3467         printf_unfiltered ("%s\n", mips_processor_type_table[i].name);
3468
3469       /* Restore the value.  */
3470       tmp_mips_processor_type = xstrdup (mips_processor_type);
3471
3472       return;
3473     }
3474
3475   if (!mips_set_processor_type (tmp_mips_processor_type))
3476     {
3477       error ("Unknown processor type `%s'.", tmp_mips_processor_type);
3478       /* Restore its value.  */
3479       tmp_mips_processor_type = xstrdup (mips_processor_type);
3480     }
3481 }
3482
3483 static void
3484 mips_show_processor_type_command (char *args, int from_tty)
3485 {
3486 }
3487
3488 /* Modify the actual processor type. */
3489
3490 int
3491 mips_set_processor_type (char *str)
3492 {
3493   int i;
3494
3495   if (str == NULL)
3496     return 0;
3497
3498   for (i = 0; mips_processor_type_table[i].name != NULL; ++i)
3499     {
3500       if (strcasecmp (str, mips_processor_type_table[i].name) == 0)
3501         {
3502           mips_processor_type = str;
3503           mips_processor_reg_names = mips_processor_type_table[i].regnames;
3504           return 1;
3505           /* FIXME tweak fpu flag too */
3506         }
3507     }
3508
3509   return 0;
3510 }
3511
3512 /* Attempt to identify the particular processor model by reading the
3513    processor id.  */
3514
3515 char *
3516 mips_read_processor_type (void)
3517 {
3518   CORE_ADDR prid;
3519
3520   prid = read_register (PRID_REGNUM);
3521
3522   if ((prid & ~0xf) == 0x700)
3523     return savestring ("r3041", strlen ("r3041"));
3524
3525   return NULL;
3526 }
3527
3528 /* Just like reinit_frame_cache, but with the right arguments to be
3529    callable as an sfunc.  */
3530
3531 static void
3532 reinit_frame_cache_sfunc (char *args, int from_tty,
3533                           struct cmd_list_element *c)
3534 {
3535   reinit_frame_cache ();
3536 }
3537
3538 int
3539 gdb_print_insn_mips (bfd_vma memaddr, disassemble_info *info)
3540 {
3541   mips_extra_func_info_t proc_desc;
3542
3543   /* Search for the function containing this address.  Set the low bit
3544      of the address when searching, in case we were given an even address
3545      that is the start of a 16-bit function.  If we didn't do this,
3546      the search would fail because the symbol table says the function
3547      starts at an odd address, i.e. 1 byte past the given address.  */
3548   memaddr = ADDR_BITS_REMOVE (memaddr);
3549   proc_desc = non_heuristic_proc_desc (MAKE_MIPS16_ADDR (memaddr), NULL);
3550
3551   /* Make an attempt to determine if this is a 16-bit function.  If
3552      the procedure descriptor exists and the address therein is odd,
3553      it's definitely a 16-bit function.  Otherwise, we have to just
3554      guess that if the address passed in is odd, it's 16-bits.  */
3555   if (proc_desc)
3556     info->mach = pc_is_mips16 (PROC_LOW_ADDR (proc_desc)) ? 
3557       bfd_mach_mips16 : TM_PRINT_INSN_MACH;
3558   else
3559     info->mach = pc_is_mips16 (memaddr) ? 
3560       bfd_mach_mips16 : TM_PRINT_INSN_MACH;
3561
3562   /* Round down the instruction address to the appropriate boundary.  */
3563   memaddr &= (info->mach == bfd_mach_mips16 ? ~1 : ~3);
3564
3565   /* Call the appropriate disassembler based on the target endian-ness.  */
3566   if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
3567     return print_insn_big_mips (memaddr, info);
3568   else
3569     return print_insn_little_mips (memaddr, info);
3570 }
3571
3572 /* Old-style breakpoint macros.
3573    The IDT board uses an unusual breakpoint value, and sometimes gets
3574    confused when it sees the usual MIPS breakpoint instruction.  */
3575
3576 #define BIG_BREAKPOINT {0, 0x5, 0, 0xd}
3577 #define LITTLE_BREAKPOINT {0xd, 0, 0x5, 0}
3578 #define PMON_BIG_BREAKPOINT {0, 0, 0, 0xd}
3579 #define PMON_LITTLE_BREAKPOINT {0xd, 0, 0, 0}
3580 #define IDT_BIG_BREAKPOINT {0, 0, 0x0a, 0xd}
3581 #define IDT_LITTLE_BREAKPOINT {0xd, 0x0a, 0, 0}
3582 #define MIPS16_BIG_BREAKPOINT {0xe8, 0xa5}
3583 #define MIPS16_LITTLE_BREAKPOINT {0xa5, 0xe8}
3584
3585 /* This function implements the BREAKPOINT_FROM_PC macro.  It uses the program
3586    counter value to determine whether a 16- or 32-bit breakpoint should be
3587    used.  It returns a pointer to a string of bytes that encode a breakpoint
3588    instruction, stores the length of the string to *lenptr, and adjusts pc
3589    (if necessary) to point to the actual memory location where the
3590    breakpoint should be inserted.  */
3591
3592 unsigned char *
3593 mips_breakpoint_from_pc (CORE_ADDR * pcptr, int *lenptr)
3594 {
3595   if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
3596     {
3597       if (pc_is_mips16 (*pcptr))
3598         {
3599           static unsigned char mips16_big_breakpoint[] =
3600             MIPS16_BIG_BREAKPOINT;
3601           *pcptr = UNMAKE_MIPS16_ADDR (*pcptr);
3602           *lenptr = sizeof (mips16_big_breakpoint);
3603           return mips16_big_breakpoint;
3604         }
3605       else
3606         {
3607           static unsigned char big_breakpoint[] = BIG_BREAKPOINT;
3608           static unsigned char pmon_big_breakpoint[] = PMON_BIG_BREAKPOINT;
3609           static unsigned char idt_big_breakpoint[] = IDT_BIG_BREAKPOINT;
3610
3611           *lenptr = sizeof (big_breakpoint);
3612
3613           if (strcmp (target_shortname, "mips") == 0)
3614             return idt_big_breakpoint;
3615           else if (strcmp (target_shortname, "ddb") == 0
3616                    || strcmp (target_shortname, "pmon") == 0
3617                    || strcmp (target_shortname, "lsi") == 0)
3618             return pmon_big_breakpoint;
3619           else
3620             return big_breakpoint;
3621         }
3622     }
3623   else
3624     {
3625       if (pc_is_mips16 (*pcptr))
3626         {
3627           static unsigned char mips16_little_breakpoint[] =
3628             MIPS16_LITTLE_BREAKPOINT;
3629           *pcptr = UNMAKE_MIPS16_ADDR (*pcptr);
3630           *lenptr = sizeof (mips16_little_breakpoint);
3631           return mips16_little_breakpoint;
3632         }
3633       else
3634         {
3635           static unsigned char little_breakpoint[] = LITTLE_BREAKPOINT;
3636           static unsigned char pmon_little_breakpoint[] =
3637             PMON_LITTLE_BREAKPOINT;
3638           static unsigned char idt_little_breakpoint[] =
3639             IDT_LITTLE_BREAKPOINT;
3640
3641           *lenptr = sizeof (little_breakpoint);
3642
3643           if (strcmp (target_shortname, "mips") == 0)
3644             return idt_little_breakpoint;
3645           else if (strcmp (target_shortname, "ddb") == 0
3646                    || strcmp (target_shortname, "pmon") == 0
3647                    || strcmp (target_shortname, "lsi") == 0)
3648             return pmon_little_breakpoint;
3649           else
3650             return little_breakpoint;
3651         }
3652     }
3653 }
3654
3655 /* If PC is in a mips16 call or return stub, return the address of the target
3656    PC, which is either the callee or the caller.  There are several
3657    cases which must be handled:
3658
3659    * If the PC is in __mips16_ret_{d,s}f, this is a return stub and the
3660    target PC is in $31 ($ra).
3661    * If the PC is in __mips16_call_stub_{1..10}, this is a call stub
3662    and the target PC is in $2.
3663    * If the PC at the start of __mips16_call_stub_{s,d}f_{0..10}, i.e.
3664    before the jal instruction, this is effectively a call stub
3665    and the the target PC is in $2.  Otherwise this is effectively
3666    a return stub and the target PC is in $18.
3667
3668    See the source code for the stubs in gcc/config/mips/mips16.S for
3669    gory details.
3670
3671    This function implements the SKIP_TRAMPOLINE_CODE macro.
3672  */
3673
3674 CORE_ADDR
3675 mips_skip_stub (CORE_ADDR pc)
3676 {
3677   char *name;
3678   CORE_ADDR start_addr;
3679
3680   /* Find the starting address and name of the function containing the PC.  */
3681   if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
3682     return 0;
3683
3684   /* If the PC is in __mips16_ret_{d,s}f, this is a return stub and the
3685      target PC is in $31 ($ra).  */
3686   if (strcmp (name, "__mips16_ret_sf") == 0
3687       || strcmp (name, "__mips16_ret_df") == 0)
3688     return read_signed_register (RA_REGNUM);
3689
3690   if (strncmp (name, "__mips16_call_stub_", 19) == 0)
3691     {
3692       /* If the PC is in __mips16_call_stub_{1..10}, this is a call stub
3693          and the target PC is in $2.  */
3694       if (name[19] >= '0' && name[19] <= '9')
3695         return read_signed_register (2);
3696
3697       /* If the PC at the start of __mips16_call_stub_{s,d}f_{0..10}, i.e.
3698          before the jal instruction, this is effectively a call stub
3699          and the the target PC is in $2.  Otherwise this is effectively
3700          a return stub and the target PC is in $18.  */
3701       else if (name[19] == 's' || name[19] == 'd')
3702         {
3703           if (pc == start_addr)
3704             {
3705               /* Check if the target of the stub is a compiler-generated
3706                  stub.  Such a stub for a function bar might have a name
3707                  like __fn_stub_bar, and might look like this:
3708                  mfc1    $4,$f13
3709                  mfc1    $5,$f12
3710                  mfc1    $6,$f15
3711                  mfc1    $7,$f14
3712                  la      $1,bar   (becomes a lui/addiu pair)
3713                  jr      $1
3714                  So scan down to the lui/addi and extract the target
3715                  address from those two instructions.  */
3716
3717               CORE_ADDR target_pc = read_signed_register (2);
3718               t_inst inst;
3719               int i;
3720
3721               /* See if the name of the target function is  __fn_stub_*.  */
3722               if (find_pc_partial_function (target_pc, &name, NULL, NULL) == 0)
3723                 return target_pc;
3724               if (strncmp (name, "__fn_stub_", 10) != 0
3725                   && strcmp (name, "etext") != 0
3726                   && strcmp (name, "_etext") != 0)
3727                 return target_pc;
3728
3729               /* Scan through this _fn_stub_ code for the lui/addiu pair.
3730                  The limit on the search is arbitrarily set to 20
3731                  instructions.  FIXME.  */
3732               for (i = 0, pc = 0; i < 20; i++, target_pc += MIPS_INSTLEN)
3733                 {
3734                   inst = mips_fetch_instruction (target_pc);
3735                   if ((inst & 0xffff0000) == 0x3c010000)        /* lui $at */
3736                     pc = (inst << 16) & 0xffff0000;     /* high word */
3737                   else if ((inst & 0xffff0000) == 0x24210000)   /* addiu $at */
3738                     return pc | (inst & 0xffff);        /* low word */
3739                 }
3740
3741               /* Couldn't find the lui/addui pair, so return stub address.  */
3742               return target_pc;
3743             }
3744           else
3745             /* This is the 'return' part of a call stub.  The return
3746                address is in $r18.  */
3747             return read_signed_register (18);
3748         }
3749     }
3750   return 0;                     /* not a stub */
3751 }
3752
3753
3754 /* Return non-zero if the PC is inside a call thunk (aka stub or trampoline).
3755    This implements the IN_SOLIB_CALL_TRAMPOLINE macro.  */
3756
3757 int
3758 mips_in_call_stub (CORE_ADDR pc, char *name)
3759 {
3760   CORE_ADDR start_addr;
3761
3762   /* Find the starting address of the function containing the PC.  If the
3763      caller didn't give us a name, look it up at the same time.  */
3764   if (find_pc_partial_function (pc, name ? NULL : &name, &start_addr, NULL) == 0)
3765     return 0;
3766
3767   if (strncmp (name, "__mips16_call_stub_", 19) == 0)
3768     {
3769       /* If the PC is in __mips16_call_stub_{1..10}, this is a call stub.  */
3770       if (name[19] >= '0' && name[19] <= '9')
3771         return 1;
3772       /* If the PC at the start of __mips16_call_stub_{s,d}f_{0..10}, i.e.
3773          before the jal instruction, this is effectively a call stub.  */
3774       else if (name[19] == 's' || name[19] == 'd')
3775         return pc == start_addr;
3776     }
3777
3778   return 0;                     /* not a stub */
3779 }
3780
3781
3782 /* Return non-zero if the PC is inside a return thunk (aka stub or trampoline).
3783    This implements the IN_SOLIB_RETURN_TRAMPOLINE macro.  */
3784
3785 int
3786 mips_in_return_stub (CORE_ADDR pc, char *name)
3787 {
3788   CORE_ADDR start_addr;
3789
3790   /* Find the starting address of the function containing the PC.  */
3791   if (find_pc_partial_function (pc, NULL, &start_addr, NULL) == 0)
3792     return 0;
3793
3794   /* If the PC is in __mips16_ret_{d,s}f, this is a return stub.  */
3795   if (strcmp (name, "__mips16_ret_sf") == 0
3796       || strcmp (name, "__mips16_ret_df") == 0)
3797     return 1;
3798
3799   /* If the PC is in __mips16_call_stub_{s,d}f_{0..10} but not at the start,
3800      i.e. after the jal instruction, this is effectively a return stub.  */
3801   if (strncmp (name, "__mips16_call_stub_", 19) == 0
3802       && (name[19] == 's' || name[19] == 'd')
3803       && pc != start_addr)
3804     return 1;
3805
3806   return 0;                     /* not a stub */
3807 }
3808
3809
3810 /* Return non-zero if the PC is in a library helper function that should
3811    be ignored.  This implements the IGNORE_HELPER_CALL macro.  */
3812
3813 int
3814 mips_ignore_helper (CORE_ADDR pc)
3815 {
3816   char *name;
3817
3818   /* Find the starting address and name of the function containing the PC.  */
3819   if (find_pc_partial_function (pc, &name, NULL, NULL) == 0)
3820     return 0;
3821
3822   /* If the PC is in __mips16_ret_{d,s}f, this is a library helper function
3823      that we want to ignore.  */
3824   return (strcmp (name, "__mips16_ret_sf") == 0
3825           || strcmp (name, "__mips16_ret_df") == 0);
3826 }
3827
3828
3829 /* Return a location where we can set a breakpoint that will be hit
3830    when an inferior function call returns.  This is normally the
3831    program's entry point.  Executables that don't have an entry
3832    point (e.g. programs in ROM) should define a symbol __CALL_DUMMY_ADDRESS
3833    whose address is the location where the breakpoint should be placed.  */
3834
3835 CORE_ADDR
3836 mips_call_dummy_address (void)
3837 {
3838   struct minimal_symbol *sym;
3839
3840   sym = lookup_minimal_symbol ("__CALL_DUMMY_ADDRESS", NULL, NULL);
3841   if (sym)
3842     return SYMBOL_VALUE_ADDRESS (sym);
3843   else
3844     return entry_point_address ();
3845 }
3846
3847
3848 /* If the current gcc for this target does not produce correct debugging
3849    information for float parameters, both prototyped and unprototyped, then
3850    define this macro.  This forces gdb to  always assume that floats are
3851    passed as doubles and then converted in the callee.
3852
3853    For the mips chip, it appears that the debug info marks the parameters as
3854    floats regardless of whether the function is prototyped, but the actual
3855    values are passed as doubles for the non-prototyped case and floats for
3856    the prototyped case.  Thus we choose to make the non-prototyped case work
3857    for C and break the prototyped case, since the non-prototyped case is
3858    probably much more common.  (FIXME). */
3859
3860 static int
3861 mips_coerce_float_to_double (struct type *formal, struct type *actual)
3862 {
3863   return current_language->la_language == language_c;
3864 }
3865
3866 /* When debugging a 64 MIPS target running a 32 bit ABI, the size of
3867    the register stored on the stack (32) is different to its real raw
3868    size (64).  The below ensures that registers are fetched from the
3869    stack using their ABI size and then stored into the RAW_BUFFER
3870    using their raw size.
3871
3872    The alternative to adding this function would be to add an ABI
3873    macro - REGISTER_STACK_SIZE(). */
3874
3875 static void
3876 mips_get_saved_register (char *raw_buffer,
3877                          int *optimized,
3878                          CORE_ADDR *addrp,
3879                          struct frame_info *frame,
3880                          int regnum,
3881                          enum lval_type *lval)
3882 {
3883   CORE_ADDR addr;
3884
3885   if (!target_has_registers)
3886     error ("No registers.");
3887
3888   /* Normal systems don't optimize out things with register numbers.  */
3889   if (optimized != NULL)
3890     *optimized = 0;
3891   addr = find_saved_register (frame, regnum);
3892   if (addr != 0)
3893     {
3894       if (lval != NULL)
3895         *lval = lval_memory;
3896       if (regnum == SP_REGNUM)
3897         {
3898           if (raw_buffer != NULL)
3899             {
3900               /* Put it back in target format.  */
3901               store_address (raw_buffer, REGISTER_RAW_SIZE (regnum),
3902                              (LONGEST) addr);
3903             }
3904           if (addrp != NULL)
3905             *addrp = 0;
3906           return;
3907         }
3908       if (raw_buffer != NULL)
3909         {
3910           LONGEST val;
3911           if (regnum < 32)
3912             /* Only MIPS_SAVED_REGSIZE bytes of GP registers are
3913                saved. */
3914             val = read_memory_integer (addr, MIPS_SAVED_REGSIZE);
3915           else
3916             val = read_memory_integer (addr, REGISTER_RAW_SIZE (regnum));
3917           store_address (raw_buffer, REGISTER_RAW_SIZE (regnum), val);
3918         }
3919     }
3920   else
3921     {
3922       if (lval != NULL)
3923         *lval = lval_register;
3924       addr = REGISTER_BYTE (regnum);
3925       if (raw_buffer != NULL)
3926         read_register_gen (regnum, raw_buffer);
3927     }
3928   if (addrp != NULL)
3929     *addrp = addr;
3930 }
3931
3932 /* Immediately after a function call, return the saved pc.
3933    Can't always go through the frames for this because on some machines
3934    the new frame is not set up until the new function executes
3935    some instructions.  */
3936
3937 static CORE_ADDR
3938 mips_saved_pc_after_call (struct frame_info *frame)
3939 {
3940   return read_signed_register (RA_REGNUM);
3941 }
3942
3943
3944 /* Convert a dbx stab register number (from `r' declaration) to a gdb
3945    REGNUM */
3946
3947 static int
3948 mips_stab_reg_to_regnum (int num)
3949 {
3950   if (num < 32)
3951     return num;
3952   else 
3953     return num + FP0_REGNUM - 38;
3954 }
3955
3956 /* Convert a ecoff register number to a gdb REGNUM */
3957
3958 static int
3959 mips_ecoff_reg_to_regnum (int num)
3960 {
3961   if (num < 32)
3962     return num;
3963   else
3964     return num + FP0_REGNUM - 32;
3965 }
3966
3967 /* Convert an integer into an address.  By first converting the value
3968    into a pointer and then extracting it signed, the address is
3969    guarenteed to be correctly sign extended.  */
3970
3971 static CORE_ADDR
3972 mips_integer_to_address (struct type *type, void *buf)
3973 {
3974   char *tmp = alloca (TYPE_LENGTH (builtin_type_void_data_ptr));
3975   LONGEST val = unpack_long (type, buf);
3976   store_signed_integer (tmp, TYPE_LENGTH (builtin_type_void_data_ptr), val);
3977   return extract_signed_integer (tmp,
3978                                  TYPE_LENGTH (builtin_type_void_data_ptr));
3979 }
3980
3981 static struct gdbarch *
3982 mips_gdbarch_init (struct gdbarch_info info,
3983                    struct gdbarch_list *arches)
3984 {
3985   static LONGEST mips_call_dummy_words[] =
3986   {0};
3987   struct gdbarch *gdbarch;
3988   struct gdbarch_tdep *tdep;
3989   int elf_flags;
3990   enum mips_abi mips_abi;
3991
3992   /* Reset the disassembly info, in case it was set to something
3993      non-default.  */
3994   tm_print_insn_info.flavour = bfd_target_unknown_flavour;
3995   tm_print_insn_info.arch = bfd_arch_unknown;
3996   tm_print_insn_info.mach = 0;
3997
3998   /* Extract the elf_flags if available */
3999   if (info.abfd != NULL
4000       && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
4001     elf_flags = elf_elfheader (info.abfd)->e_flags;
4002   else
4003     elf_flags = 0;
4004
4005   /* Check ELF_FLAGS to see if it specifies the ABI being used. */
4006   switch ((elf_flags & EF_MIPS_ABI))
4007     {
4008     case E_MIPS_ABI_O32:
4009       mips_abi = MIPS_ABI_O32;
4010       break;
4011     case E_MIPS_ABI_O64:
4012       mips_abi = MIPS_ABI_O64;
4013       break;
4014     case E_MIPS_ABI_EABI32:
4015       mips_abi = MIPS_ABI_EABI32;
4016       break;
4017     case E_MIPS_ABI_EABI64:
4018       mips_abi = MIPS_ABI_EABI64;
4019       break;
4020     default:
4021       if ((elf_flags & EF_MIPS_ABI2))
4022         mips_abi = MIPS_ABI_N32;
4023       else
4024         mips_abi = MIPS_ABI_UNKNOWN;
4025       break;
4026     }
4027
4028   /* Try the architecture for any hint of the corect ABI */
4029   if (mips_abi == MIPS_ABI_UNKNOWN
4030       && info.bfd_arch_info != NULL
4031       && info.bfd_arch_info->arch == bfd_arch_mips)
4032     {
4033       switch (info.bfd_arch_info->mach)
4034         {
4035         case bfd_mach_mips3900:
4036           mips_abi = MIPS_ABI_EABI32;
4037           break;
4038         case bfd_mach_mips4100:
4039         case bfd_mach_mips5000:
4040           mips_abi = MIPS_ABI_EABI64;
4041           break;
4042         case bfd_mach_mips8000:
4043         case bfd_mach_mips10000:
4044           mips_abi = MIPS_ABI_N32;
4045           break;
4046         }
4047     }
4048 #ifdef MIPS_DEFAULT_ABI
4049   if (mips_abi == MIPS_ABI_UNKNOWN)
4050     mips_abi = MIPS_DEFAULT_ABI;
4051 #endif
4052
4053   if (gdbarch_debug)
4054     {
4055       fprintf_unfiltered (gdb_stdlog,
4056                           "mips_gdbarch_init: elf_flags = 0x%08x\n",
4057                           elf_flags);
4058       fprintf_unfiltered (gdb_stdlog,
4059                           "mips_gdbarch_init: mips_abi = %d\n",
4060                           mips_abi);
4061     }
4062
4063   /* try to find a pre-existing architecture */
4064   for (arches = gdbarch_list_lookup_by_info (arches, &info);
4065        arches != NULL;
4066        arches = gdbarch_list_lookup_by_info (arches->next, &info))
4067     {
4068       /* MIPS needs to be pedantic about which ABI the object is
4069          using. */
4070       if (gdbarch_tdep (arches->gdbarch)->elf_flags != elf_flags)
4071         continue;
4072       if (gdbarch_tdep (arches->gdbarch)->mips_abi != mips_abi)
4073         continue;
4074       return arches->gdbarch;
4075     }
4076
4077   /* Need a new architecture. Fill in a target specific vector. */
4078   tdep = (struct gdbarch_tdep *) xmalloc (sizeof (struct gdbarch_tdep));
4079   gdbarch = gdbarch_alloc (&info, tdep);
4080   tdep->elf_flags = elf_flags;
4081
4082   /* Initially set everything according to the default ABI/ISA. */
4083   set_gdbarch_short_bit (gdbarch, 16);
4084   set_gdbarch_int_bit (gdbarch, 32);
4085   set_gdbarch_float_bit (gdbarch, 32);
4086   set_gdbarch_double_bit (gdbarch, 64);
4087   set_gdbarch_long_double_bit (gdbarch, 64);
4088   set_gdbarch_register_raw_size (gdbarch, mips_register_raw_size);
4089   tdep->mips_abi = mips_abi;
4090
4091   switch (mips_abi)
4092     {
4093     case MIPS_ABI_O32:
4094       tdep->mips_abi_string = "o32";
4095       tdep->mips_default_saved_regsize = 4;
4096       tdep->mips_default_stack_argsize = 4;
4097       tdep->mips_fp_register_double = 0;
4098       tdep->mips_last_arg_regnum = A0_REGNUM + 4 - 1;
4099       tdep->mips_last_fp_arg_regnum = FPA0_REGNUM + 4 - 1;
4100       tdep->mips_regs_have_home_p = 1;
4101       tdep->gdb_target_is_mips64 = 0;
4102       tdep->default_mask_address_p = 0;
4103       set_gdbarch_long_bit (gdbarch, 32);
4104       set_gdbarch_ptr_bit (gdbarch, 32);
4105       set_gdbarch_long_long_bit (gdbarch, 64);
4106       break;
4107     case MIPS_ABI_O64:
4108       tdep->mips_abi_string = "o64";
4109       tdep->mips_default_saved_regsize = 8;
4110       tdep->mips_default_stack_argsize = 8;
4111       tdep->mips_fp_register_double = 1;
4112       tdep->mips_last_arg_regnum = A0_REGNUM + 4 - 1;
4113       tdep->mips_last_fp_arg_regnum = FPA0_REGNUM + 4 - 1;
4114       tdep->mips_regs_have_home_p = 1;
4115       tdep->gdb_target_is_mips64 = 1;
4116       tdep->default_mask_address_p = 0; 
4117       set_gdbarch_long_bit (gdbarch, 32);
4118       set_gdbarch_ptr_bit (gdbarch, 32);
4119       set_gdbarch_long_long_bit (gdbarch, 64);
4120       break;
4121     case MIPS_ABI_EABI32:
4122       tdep->mips_abi_string = "eabi32";
4123       tdep->mips_default_saved_regsize = 4;
4124       tdep->mips_default_stack_argsize = 4;
4125       tdep->mips_fp_register_double = 0;
4126       tdep->mips_last_arg_regnum = A0_REGNUM + 8 - 1;
4127       tdep->mips_last_fp_arg_regnum = FPA0_REGNUM + 8 - 1;
4128       tdep->mips_regs_have_home_p = 0;
4129       tdep->gdb_target_is_mips64 = 0;
4130       tdep->default_mask_address_p = 0;
4131       set_gdbarch_long_bit (gdbarch, 32);
4132       set_gdbarch_ptr_bit (gdbarch, 32);
4133       set_gdbarch_long_long_bit (gdbarch, 64);
4134       break;
4135     case MIPS_ABI_EABI64:
4136       tdep->mips_abi_string = "eabi64";
4137       tdep->mips_default_saved_regsize = 8;
4138       tdep->mips_default_stack_argsize = 8;
4139       tdep->mips_fp_register_double = 1;
4140       tdep->mips_last_arg_regnum = A0_REGNUM + 8 - 1;
4141       tdep->mips_last_fp_arg_regnum = FPA0_REGNUM + 8 - 1;
4142       tdep->mips_regs_have_home_p = 0;
4143       tdep->gdb_target_is_mips64 = 1;
4144       tdep->default_mask_address_p = 0;
4145       set_gdbarch_long_bit (gdbarch, 64);
4146       set_gdbarch_ptr_bit (gdbarch, 64);
4147       set_gdbarch_long_long_bit (gdbarch, 64);
4148       break;
4149     case MIPS_ABI_N32:
4150       tdep->mips_abi_string = "n32";
4151       tdep->mips_default_saved_regsize = 4;
4152       tdep->mips_default_stack_argsize = 8;
4153       tdep->mips_fp_register_double = 1;
4154       tdep->mips_last_arg_regnum = A0_REGNUM + 8 - 1;
4155       tdep->mips_last_fp_arg_regnum = FPA0_REGNUM + 8 - 1;
4156       tdep->mips_regs_have_home_p = 0;
4157       tdep->gdb_target_is_mips64 = 0;
4158       tdep->default_mask_address_p = 0;
4159       set_gdbarch_long_bit (gdbarch, 32);
4160       set_gdbarch_ptr_bit (gdbarch, 32);
4161       set_gdbarch_long_long_bit (gdbarch, 64);
4162
4163       /* Set up the disassembler info, so that we get the right
4164          register names from libopcodes.  */
4165       tm_print_insn_info.flavour = bfd_target_elf_flavour;
4166       tm_print_insn_info.arch = bfd_arch_mips;
4167       if (info.bfd_arch_info != NULL
4168           && info.bfd_arch_info->arch == bfd_arch_mips
4169           && info.bfd_arch_info->mach)
4170         tm_print_insn_info.mach = info.bfd_arch_info->mach;
4171       else
4172         tm_print_insn_info.mach = bfd_mach_mips8000;
4173       break;
4174     default:
4175       tdep->mips_abi_string = "default";
4176       tdep->mips_default_saved_regsize = MIPS_REGSIZE;
4177       tdep->mips_default_stack_argsize = MIPS_REGSIZE;
4178       tdep->mips_fp_register_double = (REGISTER_VIRTUAL_SIZE (FP0_REGNUM) == 8);
4179       tdep->mips_last_arg_regnum = A0_REGNUM + 8 - 1;
4180       tdep->mips_last_fp_arg_regnum = FPA0_REGNUM + 8 - 1;
4181       tdep->mips_regs_have_home_p = 1;
4182       tdep->gdb_target_is_mips64 = 0;
4183       tdep->default_mask_address_p = 0;
4184       set_gdbarch_long_bit (gdbarch, 32);
4185       set_gdbarch_ptr_bit (gdbarch, 32);
4186       set_gdbarch_long_long_bit (gdbarch, 64);
4187       break;
4188     }
4189
4190   /* FIXME: jlarmour/2000-04-07: There *is* a flag EF_MIPS_32BIT_MODE
4191      that could indicate -gp32 BUT gas/config/tc-mips.c contains the
4192      comment:
4193
4194      ``We deliberately don't allow "-gp32" to set the MIPS_32BITMODE
4195      flag in object files because to do so would make it impossible to
4196      link with libraries compiled without "-gp32". This is
4197      unnecessarily restrictive.
4198  
4199      We could solve this problem by adding "-gp32" multilibs to gcc,
4200      but to set this flag before gcc is built with such multilibs will
4201      break too many systems.''
4202
4203      But even more unhelpfully, the default linker output target for
4204      mips64-elf is elf32-bigmips, and has EF_MIPS_32BIT_MODE set, even
4205      for 64-bit programs - you need to change the ABI to change this,
4206      and not all gcc targets support that currently. Therefore using
4207      this flag to detect 32-bit mode would do the wrong thing given
4208      the current gcc - it would make GDB treat these 64-bit programs
4209      as 32-bit programs by default. */
4210
4211   /* enable/disable the MIPS FPU */
4212   if (!mips_fpu_type_auto)
4213     tdep->mips_fpu_type = mips_fpu_type;
4214   else if (info.bfd_arch_info != NULL
4215            && info.bfd_arch_info->arch == bfd_arch_mips)
4216     switch (info.bfd_arch_info->mach)
4217       {
4218       case bfd_mach_mips3900:
4219       case bfd_mach_mips4100:
4220       case bfd_mach_mips4111:
4221         tdep->mips_fpu_type = MIPS_FPU_NONE;
4222         break;
4223       case bfd_mach_mips4650:
4224         tdep->mips_fpu_type = MIPS_FPU_SINGLE;
4225         break;
4226       default:
4227         tdep->mips_fpu_type = MIPS_FPU_DOUBLE;
4228         break;
4229       }
4230   else
4231     tdep->mips_fpu_type = MIPS_FPU_DOUBLE;
4232
4233   /* MIPS version of register names.  NOTE: At present the MIPS
4234      register name management is part way between the old -
4235      #undef/#define REGISTER_NAMES and the new REGISTER_NAME(nr).
4236      Further work on it is required. */
4237   set_gdbarch_register_name (gdbarch, mips_register_name);
4238   set_gdbarch_read_pc (gdbarch, mips_read_pc);
4239   set_gdbarch_write_pc (gdbarch, generic_target_write_pc);
4240   set_gdbarch_read_fp (gdbarch, generic_target_read_fp);
4241   set_gdbarch_write_fp (gdbarch, generic_target_write_fp);
4242   set_gdbarch_read_sp (gdbarch, generic_target_read_sp);
4243   set_gdbarch_write_sp (gdbarch, generic_target_write_sp);
4244
4245   /* Add/remove bits from an address. The MIPS needs be careful to
4246      ensure that all 32 bit addresses are sign extended to 64 bits. */
4247   set_gdbarch_addr_bits_remove (gdbarch, mips_addr_bits_remove);
4248
4249   /* There's a mess in stack frame creation.  See comments in
4250      blockframe.c near reference to INIT_FRAME_PC_FIRST.  */
4251   set_gdbarch_init_frame_pc_first (gdbarch, mips_init_frame_pc_first);
4252   set_gdbarch_init_frame_pc (gdbarch, init_frame_pc_noop);
4253
4254   /* Map debug register numbers onto internal register numbers. */
4255   set_gdbarch_stab_reg_to_regnum (gdbarch, mips_stab_reg_to_regnum);
4256   set_gdbarch_ecoff_reg_to_regnum (gdbarch, mips_ecoff_reg_to_regnum);
4257
4258   /* Initialize a frame */
4259   set_gdbarch_init_extra_frame_info (gdbarch, mips_init_extra_frame_info);
4260
4261   /* MIPS version of CALL_DUMMY */
4262
4263   set_gdbarch_call_dummy_p (gdbarch, 1);
4264   set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
4265   set_gdbarch_use_generic_dummy_frames (gdbarch, 0);
4266   set_gdbarch_call_dummy_location (gdbarch, AT_ENTRY_POINT);
4267   set_gdbarch_call_dummy_address (gdbarch, mips_call_dummy_address);
4268   set_gdbarch_call_dummy_start_offset (gdbarch, 0);
4269   set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
4270   set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0);
4271   set_gdbarch_call_dummy_length (gdbarch, 0);
4272   set_gdbarch_pc_in_call_dummy (gdbarch, pc_in_call_dummy_at_entry_point);
4273   set_gdbarch_call_dummy_words (gdbarch, mips_call_dummy_words);
4274   set_gdbarch_sizeof_call_dummy_words (gdbarch, sizeof (mips_call_dummy_words));
4275   set_gdbarch_push_return_address (gdbarch, mips_push_return_address);
4276   set_gdbarch_push_arguments (gdbarch, mips_push_arguments);
4277   set_gdbarch_register_convertible (gdbarch, generic_register_convertible_not);
4278   set_gdbarch_coerce_float_to_double (gdbarch, mips_coerce_float_to_double);
4279
4280   set_gdbarch_frame_chain_valid (gdbarch, func_frame_chain_valid);
4281   set_gdbarch_get_saved_register (gdbarch, mips_get_saved_register);
4282
4283   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
4284   set_gdbarch_breakpoint_from_pc (gdbarch, mips_breakpoint_from_pc);
4285   set_gdbarch_decr_pc_after_break (gdbarch, 0);
4286
4287   set_gdbarch_skip_prologue (gdbarch, mips_skip_prologue);
4288   set_gdbarch_saved_pc_after_call (gdbarch, mips_saved_pc_after_call);
4289
4290   set_gdbarch_pointer_to_address (gdbarch, signed_pointer_to_address);
4291   set_gdbarch_address_to_pointer (gdbarch, address_to_signed_pointer);
4292   set_gdbarch_integer_to_address (gdbarch, mips_integer_to_address);
4293   return gdbarch;
4294 }
4295
4296 static void
4297 mips_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file)
4298 {
4299   struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
4300   if (tdep != NULL)
4301     {
4302       int ef_mips_arch;
4303       int ef_mips_32bitmode;
4304       /* determine the ISA */
4305       switch (tdep->elf_flags & EF_MIPS_ARCH)
4306         {
4307         case E_MIPS_ARCH_1:
4308           ef_mips_arch = 1;
4309           break;
4310         case E_MIPS_ARCH_2:
4311           ef_mips_arch = 2;
4312           break;
4313         case E_MIPS_ARCH_3:
4314           ef_mips_arch = 3;
4315           break;
4316         case E_MIPS_ARCH_4:
4317           ef_mips_arch = 4;
4318           break;
4319         default:
4320           ef_mips_arch = 0;
4321           break;
4322         }
4323       /* determine the size of a pointer */
4324       ef_mips_32bitmode = (tdep->elf_flags & EF_MIPS_32BITMODE);
4325       fprintf_unfiltered (file,
4326                           "mips_dump_tdep: tdep->elf_flags = 0x%x\n",
4327                           tdep->elf_flags);
4328       fprintf_unfiltered (file,
4329                           "mips_dump_tdep: ef_mips_32bitmode = %d\n",
4330                           ef_mips_32bitmode);
4331       fprintf_unfiltered (file,
4332                           "mips_dump_tdep: ef_mips_arch = %d\n",
4333                           ef_mips_arch);
4334       fprintf_unfiltered (file,
4335                           "mips_dump_tdep: tdep->mips_abi = %d (%s)\n",
4336                           tdep->mips_abi,
4337                           tdep->mips_abi_string);
4338       fprintf_unfiltered (file,
4339                           "mips_dump_tdep: mips_mask_address_p() %d (default %d)\n",
4340                           mips_mask_address_p (),
4341                           tdep->default_mask_address_p);
4342     }
4343   fprintf_unfiltered (file,
4344                       "mips_dump_tdep: FP_REGISTER_DOUBLE = %d\n",
4345                       FP_REGISTER_DOUBLE);
4346   fprintf_unfiltered (file,
4347                       "mips_dump_tdep: MIPS_DEFAULT_FPU_TYPE = %d (%s)\n",
4348                       MIPS_DEFAULT_FPU_TYPE,
4349                       (MIPS_DEFAULT_FPU_TYPE == MIPS_FPU_NONE ? "none"
4350                        : MIPS_DEFAULT_FPU_TYPE == MIPS_FPU_SINGLE ? "single"
4351                        : MIPS_DEFAULT_FPU_TYPE == MIPS_FPU_DOUBLE ? "double"
4352                        : "???"));
4353   fprintf_unfiltered (file,
4354                       "mips_dump_tdep: MIPS_EABI = %d\n",
4355                       MIPS_EABI);
4356   fprintf_unfiltered (file,
4357                       "mips_dump_tdep: MIPS_LAST_FP_ARG_REGNUM = %d (%d regs)\n",
4358                       MIPS_LAST_FP_ARG_REGNUM,
4359                       MIPS_LAST_FP_ARG_REGNUM - FPA0_REGNUM + 1);
4360   fprintf_unfiltered (file,
4361                       "mips_dump_tdep: MIPS_FPU_TYPE = %d (%s)\n",
4362                       MIPS_FPU_TYPE,
4363                       (MIPS_FPU_TYPE == MIPS_FPU_NONE ? "none"
4364                        : MIPS_FPU_TYPE == MIPS_FPU_SINGLE ? "single"
4365                        : MIPS_FPU_TYPE == MIPS_FPU_DOUBLE ? "double"
4366                        : "???"));
4367   fprintf_unfiltered (file,
4368                       "mips_dump_tdep: MIPS_DEFAULT_SAVED_REGSIZE = %d\n",
4369                       MIPS_DEFAULT_SAVED_REGSIZE);
4370   fprintf_unfiltered (file,
4371                       "mips_dump_tdep: FP_REGISTER_DOUBLE = %d\n",
4372                       FP_REGISTER_DOUBLE);
4373   fprintf_unfiltered (file,
4374                       "mips_dump_tdep: MIPS_REGS_HAVE_HOME_P = %d\n",
4375                       MIPS_REGS_HAVE_HOME_P);
4376   fprintf_unfiltered (file,
4377                       "mips_dump_tdep: MIPS_DEFAULT_STACK_ARGSIZE = %d\n",
4378                       MIPS_DEFAULT_STACK_ARGSIZE);
4379   fprintf_unfiltered (file,
4380                       "mips_dump_tdep: MIPS_STACK_ARGSIZE = %d\n",
4381                       MIPS_STACK_ARGSIZE);
4382   fprintf_unfiltered (file,
4383                       "mips_dump_tdep: MIPS_REGSIZE = %d\n",
4384                       MIPS_REGSIZE);
4385   fprintf_unfiltered (file,
4386                       "mips_dump_tdep: A0_REGNUM = %d\n",
4387                       A0_REGNUM);
4388   fprintf_unfiltered (file,
4389                       "mips_dump_tdep: ADDR_BITS_REMOVE # %s\n",
4390                       XSTRING (ADDR_BITS_REMOVE(ADDR)));
4391   fprintf_unfiltered (file,
4392                       "mips_dump_tdep: ATTACH_DETACH # %s\n",
4393                       XSTRING (ATTACH_DETACH));
4394   fprintf_unfiltered (file,
4395                       "mips_dump_tdep: BADVADDR_REGNUM = %d\n",
4396                       BADVADDR_REGNUM);
4397   fprintf_unfiltered (file,
4398                       "mips_dump_tdep: BIG_BREAKPOINT = delete?\n");
4399   fprintf_unfiltered (file,
4400                       "mips_dump_tdep: CAUSE_REGNUM = %d\n",
4401                       CAUSE_REGNUM);
4402   fprintf_unfiltered (file,
4403                       "mips_dump_tdep: CPLUS_MARKER = %c\n",
4404                       CPLUS_MARKER);
4405   fprintf_unfiltered (file,
4406                       "mips_dump_tdep: DEFAULT_MIPS_TYPE = %s\n",
4407                       DEFAULT_MIPS_TYPE);
4408   fprintf_unfiltered (file,
4409                       "mips_dump_tdep: DO_REGISTERS_INFO # %s\n",
4410                       XSTRING (DO_REGISTERS_INFO));
4411   fprintf_unfiltered (file,
4412                       "mips_dump_tdep: DWARF_REG_TO_REGNUM # %s\n",
4413                       XSTRING (DWARF_REG_TO_REGNUM (REGNUM)));
4414   fprintf_unfiltered (file,
4415                       "mips_dump_tdep: ECOFF_REG_TO_REGNUM # %s\n",
4416                       XSTRING (ECOFF_REG_TO_REGNUM (REGNUM)));
4417   fprintf_unfiltered (file,
4418                       "mips_dump_tdep: ELF_MAKE_MSYMBOL_SPECIAL # %s\n",
4419                       XSTRING (ELF_MAKE_MSYMBOL_SPECIAL (SYM, MSYM)));
4420   fprintf_unfiltered (file,
4421                       "mips_dump_tdep: FCRCS_REGNUM = %d\n",
4422                       FCRCS_REGNUM);
4423   fprintf_unfiltered (file,
4424                       "mips_dump_tdep: FCRIR_REGNUM = %d\n",
4425                       FCRIR_REGNUM);
4426   fprintf_unfiltered (file,
4427                       "mips_dump_tdep: FIRST_EMBED_REGNUM = %d\n",
4428                       FIRST_EMBED_REGNUM);
4429   fprintf_unfiltered (file,
4430                       "mips_dump_tdep: FPA0_REGNUM = %d\n",
4431                       FPA0_REGNUM);
4432   fprintf_unfiltered (file,
4433                       "mips_dump_tdep: GDB_TARGET_IS_MIPS64 = %d\n",
4434                       GDB_TARGET_IS_MIPS64);
4435   fprintf_unfiltered (file,
4436                       "mips_dump_tdep: GDB_TARGET_MASK_DISAS_PC # %s\n",
4437                       XSTRING (GDB_TARGET_MASK_DISAS_PC (PC)));
4438   fprintf_unfiltered (file,
4439                       "mips_dump_tdep: GDB_TARGET_UNMASK_DISAS_PC # %s\n",
4440                       XSTRING (GDB_TARGET_UNMASK_DISAS_PC (PC)));
4441   fprintf_unfiltered (file,
4442                       "mips_dump_tdep: GEN_REG_SAVE_MASK = %d\n",
4443                       GEN_REG_SAVE_MASK);
4444   fprintf_unfiltered (file,
4445                       "mips_dump_tdep: HAVE_NONSTEPPABLE_WATCHPOINT # %s\n",
4446                       XSTRING (HAVE_NONSTEPPABLE_WATCHPOINT));
4447   fprintf_unfiltered (file,
4448                       "mips_dump_tdep:  HI_REGNUM = %d\n",
4449                       HI_REGNUM);
4450   fprintf_unfiltered (file,
4451                       "mips_dump_tdep: IDT_BIG_BREAKPOINT = delete?\n");
4452   fprintf_unfiltered (file,
4453                       "mips_dump_tdep: IDT_LITTLE_BREAKPOINT = delete?\n");
4454   fprintf_unfiltered (file,
4455                       "mips_dump_tdep: IGNORE_HELPER_CALL # %s\n",
4456                       XSTRING (IGNORE_HELPER_CALL (PC)));
4457   fprintf_unfiltered (file,
4458                       "mips_dump_tdep: IN_SIGTRAMP # %s\n",
4459                       XSTRING (IN_SIGTRAMP (PC, NAME)));
4460   fprintf_unfiltered (file,
4461                       "mips_dump_tdep: IN_SOLIB_CALL_TRAMPOLINE # %s\n",
4462                       XSTRING (IN_SOLIB_CALL_TRAMPOLINE (PC, NAME)));
4463   fprintf_unfiltered (file,
4464                       "mips_dump_tdep: IN_SOLIB_RETURN_TRAMPOLINE # %s\n",
4465                       XSTRING (IN_SOLIB_RETURN_TRAMPOLINE (PC, NAME)));
4466   fprintf_unfiltered (file,
4467                       "mips_dump_tdep: IS_MIPS16_ADDR = FIXME!\n");
4468   fprintf_unfiltered (file,
4469                       "mips_dump_tdep: LAST_EMBED_REGNUM = %d\n",
4470                       LAST_EMBED_REGNUM);
4471   fprintf_unfiltered (file,
4472                       "mips_dump_tdep: LITTLE_BREAKPOINT = delete?\n");
4473   fprintf_unfiltered (file,
4474                       "mips_dump_tdep: LO_REGNUM = %d\n",
4475                       LO_REGNUM);
4476 #ifdef MACHINE_CPROC_FP_OFFSET
4477   fprintf_unfiltered (file,
4478                       "mips_dump_tdep: MACHINE_CPROC_FP_OFFSET = %d\n",
4479                       MACHINE_CPROC_FP_OFFSET);
4480 #endif
4481 #ifdef MACHINE_CPROC_PC_OFFSET
4482   fprintf_unfiltered (file,
4483                       "mips_dump_tdep: MACHINE_CPROC_PC_OFFSET = %d\n",
4484                       MACHINE_CPROC_PC_OFFSET);
4485 #endif
4486 #ifdef MACHINE_CPROC_SP_OFFSET
4487   fprintf_unfiltered (file,
4488                       "mips_dump_tdep: MACHINE_CPROC_SP_OFFSET = %d\n",
4489                       MACHINE_CPROC_SP_OFFSET);
4490 #endif
4491   fprintf_unfiltered (file,
4492                       "mips_dump_tdep: MAKE_MIPS16_ADDR = FIXME!\n");
4493   fprintf_unfiltered (file,
4494                       "mips_dump_tdep: MIPS16_BIG_BREAKPOINT = delete?\n");
4495   fprintf_unfiltered (file,
4496                       "mips_dump_tdep: MIPS16_INSTLEN = %d\n",
4497                       MIPS16_INSTLEN);
4498   fprintf_unfiltered (file,
4499                       "mips_dump_tdep: MIPS16_LITTLE_BREAKPOINT = delete?\n");
4500   fprintf_unfiltered (file,
4501                       "mips_dump_tdep: MIPS_DEFAULT_ABI = FIXME!\n");
4502   fprintf_unfiltered (file,
4503                       "mips_dump_tdep: MIPS_EFI_SYMBOL_NAME = multi-arch!!\n");
4504   fprintf_unfiltered (file,
4505                       "mips_dump_tdep: MIPS_INSTLEN = %d\n",
4506                       MIPS_INSTLEN);
4507   fprintf_unfiltered (file,
4508                       "mips_dump_tdep: MIPS_LAST_ARG_REGNUM = %d (%d regs)\n",
4509                       MIPS_LAST_ARG_REGNUM,
4510                       MIPS_LAST_ARG_REGNUM - A0_REGNUM + 1);
4511   fprintf_unfiltered (file,
4512                       "mips_dump_tdep: MIPS_NUMREGS = %d\n",
4513                       MIPS_NUMREGS);
4514   fprintf_unfiltered (file,
4515                       "mips_dump_tdep: MIPS_REGISTER_NAMES = delete?\n");
4516   fprintf_unfiltered (file,
4517                       "mips_dump_tdep: MIPS_SAVED_REGSIZE = %d\n",
4518                       MIPS_SAVED_REGSIZE);
4519   fprintf_unfiltered (file,
4520                       "mips_dump_tdep: MSYMBOL_IS_SPECIAL = function?\n");
4521   fprintf_unfiltered (file,
4522                       "mips_dump_tdep: MSYMBOL_SIZE # %s\n",
4523                       XSTRING (MSYMBOL_SIZE (MSYM)));
4524   fprintf_unfiltered (file,
4525                       "mips_dump_tdep: OP_LDFPR = used?\n");
4526   fprintf_unfiltered (file,
4527                       "mips_dump_tdep: OP_LDGPR = used?\n");
4528   fprintf_unfiltered (file,
4529                       "mips_dump_tdep: PMON_BIG_BREAKPOINT = delete?\n");
4530   fprintf_unfiltered (file,
4531                       "mips_dump_tdep: PMON_LITTLE_BREAKPOINT = delete?\n");
4532   fprintf_unfiltered (file,
4533                       "mips_dump_tdep: PRID_REGNUM = %d\n",
4534                       PRID_REGNUM);
4535   fprintf_unfiltered (file,
4536                       "mips_dump_tdep: PRINT_EXTRA_FRAME_INFO # %s\n",
4537                       XSTRING (PRINT_EXTRA_FRAME_INFO (FRAME)));
4538   fprintf_unfiltered (file,
4539                       "mips_dump_tdep: PROC_DESC_IS_DUMMY = function?\n");
4540   fprintf_unfiltered (file,
4541                       "mips_dump_tdep: PROC_FRAME_ADJUST = function?\n");
4542   fprintf_unfiltered (file,
4543                       "mips_dump_tdep: PROC_FRAME_OFFSET = function?\n");
4544   fprintf_unfiltered (file,
4545                       "mips_dump_tdep: PROC_FRAME_REG = function?\n");
4546   fprintf_unfiltered (file,
4547                       "mips_dump_tdep: PROC_FREG_MASK = function?\n");
4548   fprintf_unfiltered (file,
4549                       "mips_dump_tdep: PROC_FREG_OFFSET = function?\n");
4550   fprintf_unfiltered (file,
4551                       "mips_dump_tdep: PROC_HIGH_ADDR = function?\n");
4552   fprintf_unfiltered (file,
4553                       "mips_dump_tdep: PROC_LOW_ADDR = function?\n");
4554   fprintf_unfiltered (file,
4555                       "mips_dump_tdep: PROC_PC_REG = function?\n");
4556   fprintf_unfiltered (file,
4557                       "mips_dump_tdep: PROC_REG_MASK = function?\n");
4558   fprintf_unfiltered (file,
4559                       "mips_dump_tdep: PROC_REG_OFFSET = function?\n");
4560   fprintf_unfiltered (file,
4561                       "mips_dump_tdep: PROC_SYMBOL = function?\n");
4562   fprintf_unfiltered (file,
4563                       "mips_dump_tdep: PS_REGNUM = %d\n",
4564                       PS_REGNUM);
4565   fprintf_unfiltered (file,
4566                       "mips_dump_tdep: PUSH_FP_REGNUM = %d\n",
4567                       PUSH_FP_REGNUM);
4568   fprintf_unfiltered (file,
4569                       "mips_dump_tdep: RA_REGNUM = %d\n",
4570                       RA_REGNUM);
4571   fprintf_unfiltered (file,
4572                       "mips_dump_tdep: REGISTER_CONVERT_FROM_TYPE # %s\n",
4573                       XSTRING (REGISTER_CONVERT_FROM_TYPE (REGNUM, VALTYPE, RAW_BUFFER)));
4574   fprintf_unfiltered (file,
4575                       "mips_dump_tdep: REGISTER_CONVERT_TO_TYPE # %s\n",
4576                       XSTRING (REGISTER_CONVERT_TO_TYPE (REGNUM, VALTYPE, RAW_BUFFER)));
4577   fprintf_unfiltered (file,
4578                       "mips_dump_tdep: REGISTER_NAMES = delete?\n");
4579   fprintf_unfiltered (file,
4580                       "mips_dump_tdep: ROUND_DOWN = function?\n");
4581   fprintf_unfiltered (file,
4582                       "mips_dump_tdep: ROUND_UP = function?\n");
4583 #ifdef SAVED_BYTES
4584   fprintf_unfiltered (file,
4585                       "mips_dump_tdep: SAVED_BYTES = %d\n",
4586                       SAVED_BYTES);
4587 #endif
4588 #ifdef SAVED_FP
4589   fprintf_unfiltered (file,
4590                       "mips_dump_tdep: SAVED_FP = %d\n",
4591                       SAVED_FP);
4592 #endif
4593 #ifdef SAVED_PC
4594   fprintf_unfiltered (file,
4595                       "mips_dump_tdep: SAVED_PC = %d\n",
4596                       SAVED_PC);
4597 #endif
4598   fprintf_unfiltered (file,
4599                       "mips_dump_tdep: SETUP_ARBITRARY_FRAME # %s\n",
4600                       XSTRING (SETUP_ARBITRARY_FRAME (NUMARGS, ARGS)));
4601   fprintf_unfiltered (file,
4602                       "mips_dump_tdep: SET_PROC_DESC_IS_DUMMY = function?\n");
4603   fprintf_unfiltered (file,
4604                       "mips_dump_tdep: SIGFRAME_BASE = %d\n",
4605                       SIGFRAME_BASE);
4606   fprintf_unfiltered (file,
4607                       "mips_dump_tdep: SIGFRAME_FPREGSAVE_OFF = %d\n",
4608                       SIGFRAME_FPREGSAVE_OFF);
4609   fprintf_unfiltered (file,
4610                       "mips_dump_tdep: SIGFRAME_PC_OFF = %d\n",
4611                       SIGFRAME_PC_OFF);
4612   fprintf_unfiltered (file,
4613                       "mips_dump_tdep: SIGFRAME_REGSAVE_OFF = %d\n",
4614                       SIGFRAME_REGSAVE_OFF);
4615   fprintf_unfiltered (file,
4616                       "mips_dump_tdep: SIGFRAME_REG_SIZE = %d\n",
4617                       SIGFRAME_REG_SIZE);
4618   fprintf_unfiltered (file,
4619                       "mips_dump_tdep: SKIP_TRAMPOLINE_CODE # %s\n",
4620                       XSTRING (SKIP_TRAMPOLINE_CODE (PC)));
4621   fprintf_unfiltered (file,
4622                       "mips_dump_tdep: SOFTWARE_SINGLE_STEP # %s\n",
4623                       XSTRING (SOFTWARE_SINGLE_STEP (SIG, BP_P)));
4624   fprintf_unfiltered (file,
4625                       "mips_dump_tdep: SOFTWARE_SINGLE_STEP_P () = %d\n",
4626                       SOFTWARE_SINGLE_STEP_P ());
4627   fprintf_unfiltered (file,
4628                       "mips_dump_tdep: STAB_REG_TO_REGNUM # %s\n",
4629                       XSTRING (STAB_REG_TO_REGNUM (REGNUM)));
4630 #ifdef STACK_END_ADDR
4631   fprintf_unfiltered (file,
4632                       "mips_dump_tdep: STACK_END_ADDR = %d\n",
4633                       STACK_END_ADDR);
4634 #endif
4635   fprintf_unfiltered (file,
4636                       "mips_dump_tdep: STEP_SKIPS_DELAY # %s\n",
4637                       XSTRING (STEP_SKIPS_DELAY (PC)));
4638   fprintf_unfiltered (file,
4639                       "mips_dump_tdep: STEP_SKIPS_DELAY_P = %d\n",
4640                       STEP_SKIPS_DELAY_P);
4641   fprintf_unfiltered (file,
4642                       "mips_dump_tdep: STOPPED_BY_WATCHPOINT # %s\n",
4643                       XSTRING (STOPPED_BY_WATCHPOINT (WS)));
4644   fprintf_unfiltered (file,
4645                       "mips_dump_tdep: T9_REGNUM = %d\n",
4646                       T9_REGNUM);
4647   fprintf_unfiltered (file,
4648                       "mips_dump_tdep: TABULAR_REGISTER_OUTPUT = used?\n");
4649   fprintf_unfiltered (file,
4650                       "mips_dump_tdep: TARGET_CAN_USE_HARDWARE_WATCHPOINT # %s\n",
4651                       XSTRING (TARGET_CAN_USE_HARDWARE_WATCHPOINT (TYPE,CNT,OTHERTYPE)));
4652   fprintf_unfiltered (file,
4653                       "mips_dump_tdep: TARGET_HAS_HARDWARE_WATCHPOINTS # %s\n",
4654                       XSTRING (TARGET_HAS_HARDWARE_WATCHPOINTS));
4655   fprintf_unfiltered (file,
4656                       "mips_dump_tdep: TARGET_MIPS = used?\n");
4657   fprintf_unfiltered (file,
4658                       "mips_dump_tdep: TM_PRINT_INSN_MACH # %s\n",
4659                       XSTRING (TM_PRINT_INSN_MACH));
4660 #ifdef TRACE_CLEAR
4661   fprintf_unfiltered (file,
4662                       "mips_dump_tdep: TRACE_CLEAR # %s\n",
4663                       XSTRING (TRACE_CLEAR (THREAD, STATE)));
4664 #endif
4665 #ifdef TRACE_FLAVOR
4666   fprintf_unfiltered (file,
4667                       "mips_dump_tdep: TRACE_FLAVOR = %d\n",
4668                       TRACE_FLAVOR);
4669 #endif
4670 #ifdef TRACE_FLAVOR_SIZE
4671   fprintf_unfiltered (file,
4672                       "mips_dump_tdep: TRACE_FLAVOR_SIZE = %d\n",
4673                       TRACE_FLAVOR_SIZE);
4674 #endif
4675 #ifdef TRACE_SET
4676   fprintf_unfiltered (file,
4677                       "mips_dump_tdep: TRACE_SET # %s\n",
4678                       XSTRING (TRACE_SET (X,STATE)));
4679 #endif
4680   fprintf_unfiltered (file,
4681                       "mips_dump_tdep: UNMAKE_MIPS16_ADDR = function?\n");
4682 #ifdef UNUSED_REGNUM
4683   fprintf_unfiltered (file,
4684                       "mips_dump_tdep: UNUSED_REGNUM = %d\n",
4685                       UNUSED_REGNUM);
4686 #endif
4687   fprintf_unfiltered (file,
4688                       "mips_dump_tdep: V0_REGNUM = %d\n",
4689                       V0_REGNUM);
4690   fprintf_unfiltered (file,
4691                       "mips_dump_tdep: VM_MIN_ADDRESS = %ld\n",
4692                       (long) VM_MIN_ADDRESS);
4693 #ifdef VX_NUM_REGS
4694   fprintf_unfiltered (file,
4695                       "mips_dump_tdep: VX_NUM_REGS = %d (used?)\n",
4696                       VX_NUM_REGS);
4697 #endif
4698   fprintf_unfiltered (file,
4699                       "mips_dump_tdep: ZERO_REGNUM = %d\n",
4700                       ZERO_REGNUM);
4701   fprintf_unfiltered (file,
4702                       "mips_dump_tdep: _PROC_MAGIC_ = %d\n",
4703                       _PROC_MAGIC_);
4704 }
4705
4706 void
4707 _initialize_mips_tdep (void)
4708 {
4709   static struct cmd_list_element *mipsfpulist = NULL;
4710   struct cmd_list_element *c;
4711
4712   gdbarch_register (bfd_arch_mips, mips_gdbarch_init, mips_dump_tdep);
4713   if (!tm_print_insn)           /* Someone may have already set it */
4714     tm_print_insn = gdb_print_insn_mips;
4715
4716   /* Add root prefix command for all "set mips"/"show mips" commands */
4717   add_prefix_cmd ("mips", no_class, set_mips_command,
4718                   "Various MIPS specific commands.",
4719                   &setmipscmdlist, "set mips ", 0, &setlist);
4720
4721   add_prefix_cmd ("mips", no_class, show_mips_command,
4722                   "Various MIPS specific commands.",
4723                   &showmipscmdlist, "show mips ", 0, &showlist);
4724
4725   /* Allow the user to override the saved register size. */
4726   add_show_from_set (add_set_enum_cmd ("saved-gpreg-size",
4727                                        class_obscure,
4728                                        size_enums,
4729                                        &mips_saved_regsize_string, "\
4730 Set size of general purpose registers saved on the stack.\n\
4731 This option can be set to one of:\n\
4732   32    - Force GDB to treat saved GP registers as 32-bit\n\
4733   64    - Force GDB to treat saved GP registers as 64-bit\n\
4734   auto  - Allow GDB to use the target's default setting or autodetect the\n\
4735           saved GP register size from information contained in the executable.\n\
4736           (default: auto)",
4737                                        &setmipscmdlist),
4738                      &showmipscmdlist);
4739
4740   /* Allow the user to override the argument stack size. */
4741   add_show_from_set (add_set_enum_cmd ("stack-arg-size",
4742                                        class_obscure,
4743                                        size_enums,
4744                                        &mips_stack_argsize_string, "\
4745 Set the amount of stack space reserved for each argument.\n\
4746 This option can be set to one of:\n\
4747   32    - Force GDB to allocate 32-bit chunks per argument\n\
4748   64    - Force GDB to allocate 64-bit chunks per argument\n\
4749   auto  - Allow GDB to determine the correct setting from the current\n\
4750           target and executable (default)",
4751                                        &setmipscmdlist),
4752                      &showmipscmdlist);
4753
4754   /* Let the user turn off floating point and set the fence post for
4755      heuristic_proc_start.  */
4756
4757   add_prefix_cmd ("mipsfpu", class_support, set_mipsfpu_command,
4758                   "Set use of MIPS floating-point coprocessor.",
4759                   &mipsfpulist, "set mipsfpu ", 0, &setlist);
4760   add_cmd ("single", class_support, set_mipsfpu_single_command,
4761            "Select single-precision MIPS floating-point coprocessor.",
4762            &mipsfpulist);
4763   add_cmd ("double", class_support, set_mipsfpu_double_command,
4764            "Select double-precision MIPS floating-point coprocessor.",
4765            &mipsfpulist);
4766   add_alias_cmd ("on", "double", class_support, 1, &mipsfpulist);
4767   add_alias_cmd ("yes", "double", class_support, 1, &mipsfpulist);
4768   add_alias_cmd ("1", "double", class_support, 1, &mipsfpulist);
4769   add_cmd ("none", class_support, set_mipsfpu_none_command,
4770            "Select no MIPS floating-point coprocessor.",
4771            &mipsfpulist);
4772   add_alias_cmd ("off", "none", class_support, 1, &mipsfpulist);
4773   add_alias_cmd ("no", "none", class_support, 1, &mipsfpulist);
4774   add_alias_cmd ("0", "none", class_support, 1, &mipsfpulist);
4775   add_cmd ("auto", class_support, set_mipsfpu_auto_command,
4776            "Select MIPS floating-point coprocessor automatically.",
4777            &mipsfpulist);
4778   add_cmd ("mipsfpu", class_support, show_mipsfpu_command,
4779            "Show current use of MIPS floating-point coprocessor target.",
4780            &showlist);
4781
4782 #if !GDB_MULTI_ARCH
4783   c = add_set_cmd ("processor", class_support, var_string_noescape,
4784                    (char *) &tmp_mips_processor_type,
4785                    "Set the type of MIPS processor in use.\n\
4786 Set this to be able to access processor-type-specific registers.\n\
4787 ",
4788                    &setlist);
4789   c->function.cfunc = mips_set_processor_type_command;
4790   c = add_show_from_set (c, &showlist);
4791   c->function.cfunc = mips_show_processor_type_command;
4792
4793   tmp_mips_processor_type = xstrdup (DEFAULT_MIPS_TYPE);
4794   mips_set_processor_type_command (xstrdup (DEFAULT_MIPS_TYPE), 0);
4795 #endif
4796
4797   /* We really would like to have both "0" and "unlimited" work, but
4798      command.c doesn't deal with that.  So make it a var_zinteger
4799      because the user can always use "999999" or some such for unlimited.  */
4800   c = add_set_cmd ("heuristic-fence-post", class_support, var_zinteger,
4801                    (char *) &heuristic_fence_post,
4802                    "\
4803 Set the distance searched for the start of a function.\n\
4804 If you are debugging a stripped executable, GDB needs to search through the\n\
4805 program for the start of a function.  This command sets the distance of the\n\
4806 search.  The only need to set it is when debugging a stripped executable.",
4807                    &setlist);
4808   /* We need to throw away the frame cache when we set this, since it
4809      might change our ability to get backtraces.  */
4810   c->function.sfunc = reinit_frame_cache_sfunc;
4811   add_show_from_set (c, &showlist);
4812
4813   /* Allow the user to control whether the upper bits of 64-bit
4814      addresses should be zeroed.  */
4815   c = add_set_auto_boolean_cmd ("mask-address", no_class, &mask_address_var,
4816                                 "Set zeroing of upper 32 bits of 64-bit addresses.\n\
4817 Use \"on\" to enable the masking, \"off\" to disable it and \"auto\" to allow GDB to determine\n\
4818 the correct value.\n",
4819                                 &setmipscmdlist);
4820   add_cmd ("mask-address", no_class, show_mask_address,
4821                "Show current mask-address value", &showmipscmdlist);
4822
4823   /* Allow the user to control the size of 32 bit registers within the
4824      raw remote packet.  */
4825   add_show_from_set (add_set_cmd ("remote-mips64-transfers-32bit-regs",
4826                                   class_obscure,
4827                                   var_boolean,
4828                                   (char *)&mips64_transfers_32bit_regs_p, "\
4829 Set compatibility with MIPS targets that transfers 32 and 64 bit quantities.\n\
4830 Use \"on\" to enable backward compatibility with older MIPS 64 GDB+target\n\
4831 that would transfer 32 bits for some registers (e.g. SR, FSR) and\n\
4832 64 bits for others.  Use \"off\" to disable compatibility mode",
4833                                   &setlist),
4834                      &showlist);
4835
4836   /* Debug this files internals. */
4837   add_show_from_set (add_set_cmd ("mips", class_maintenance, var_zinteger,
4838                                   &mips_debug, "Set mips debugging.\n\
4839 When non-zero, mips specific debugging is enabled.", &setdebuglist),
4840                      &showdebuglist);
4841 }
4842