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