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