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"
28 #include "cli/cli-cmds.h"
35 #include "arch-utils.h"
38 #include "mips-tdep.h"
40 #include "reggroups.h"
41 #include "opcode/mips.h"
45 #include "sim-regno.h"
48 #include "frame-unwind.h"
49 #include "frame-base.h"
50 #include "trad-frame.h"
53 #include "target-descriptions.h"
54 #include "dwarf2/frame.h"
55 #include "user-regs.h"
58 #include "target-float.h"
61 static struct type
*mips_register_type (struct gdbarch
*gdbarch
, int regnum
);
63 static int mips32_instruction_has_delay_slot (struct gdbarch
*gdbarch
,
65 static int micromips_instruction_has_delay_slot (ULONGEST insn
, int mustbe32
);
66 static int mips16_instruction_has_delay_slot (unsigned short inst
,
69 static int mips32_insn_at_pc_has_delay_slot (struct gdbarch
*gdbarch
,
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. */
87 MIPS_FPU_SINGLE_REGSIZE
= 4,
88 MIPS_FPU_DOUBLE_REGSIZE
= 8
97 static const char *mips_abi_string
;
99 static const char *const mips_abi_strings
[] = {
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
,
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
148 /* Aliases for o32 and most other ABIs. */
149 const struct register_alias mips_o32_aliases
[] = {
156 /* Aliases for n32 and n64. */
157 const struct register_alias mips_n32_n64_aliases
[] = {
164 /* Aliases for ABI-independent registers. */
165 const struct register_alias mips_register_aliases
[] = {
166 /* The architecture manuals specify these ABI-independent names for
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),
175 /* k0 and k1 are sometimes called these instead (for "kernel
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),
199 #ifndef MIPS_DEFAULT_FPU_TYPE
200 #define MIPS_DEFAULT_FPU_TYPE MIPS_FPU_DOUBLE
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
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
);
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. */
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);
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
);
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
;
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. */
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. */
309 mips_abi_regsize (struct gdbarch
*gdbarch
)
311 switch (mips_abi (gdbarch
))
313 case MIPS_ABI_EABI32
:
319 case MIPS_ABI_EABI64
:
321 case MIPS_ABI_UNKNOWN
:
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. */
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. */
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. */
354 is_compact_addr (CORE_ADDR addr
)
359 /* Return one iff ADDR denotes standard ISA code. */
362 is_mips_addr (CORE_ADDR addr
)
364 return !is_compact_addr (addr
);
367 /* Return one iff ADDR denotes MIPS16 code. */
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. */
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. */
386 unmake_compact_addr (CORE_ADDR addr
)
388 return ((addr
) & ~(CORE_ADDR
) 1);
391 /* Add the ISA (compression) bit to 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. */
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. */
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
;
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. */
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. */
462 msymbol_is_mips16 (struct minimal_symbol
*msym
)
464 return MSYMBOL_TARGET_FLAG_MIPS16 (msym
);
467 /* Return one iff MSYM refers to microMIPS code. */
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. */
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. */
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
)
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. */
523 reg_offset
= register_size (gdbarch
, reg_num
) - length
;
525 case BFD_ENDIAN_LITTLE
:
528 case BFD_ENDIAN_UNKNOWN
: /* Indicates no alignment. */
532 internal_error (_("bad switch"));
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
)
541 gdb_printf (gdb_stdlog
, "out ");
542 for (i
= 0; i
< length
; i
++)
543 gdb_printf (gdb_stdlog
, "%02x", out
[buf_offset
+ i
]);
546 regcache
->cooked_read_part (reg_num
, reg_offset
, length
, in
+ buf_offset
);
548 regcache
->cooked_write_part (reg_num
, reg_offset
, length
, out
+ buf_offset
);
549 if (mips_debug
&& in
!= NULL
)
552 gdb_printf (gdb_stdlog
, "in ");
553 for (i
= 0; i
< length
; i
++)
554 gdb_printf (gdb_stdlog
, "%02x", in
[buf_offset
+ i
]);
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. */
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
570 if (register_size (gdbarch
, mips_regnum (gdbarch
)->fp0
) == 4)
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
579 if ((get_frame_register_unsigned (frame
, MIPS_PS_REGNUM
) & ST0_FR
) == 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. */
600 { NUM_MIPS_PROCESSOR_REGS
= (90 - 32) };
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",
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 "", "", "", "", "", "", "", "",
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",
637 /* Return the name of the register corresponding to REGNO. */
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
))
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
];
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];
695 internal_error (_("mips_register_name: bad register number %d"), rawnum
);
698 /* Return the groups that a MIPS register can be categorised into. */
701 mips_register_reggroup_p (struct gdbarch
*gdbarch
, int regnum
,
702 const struct reggroup
*reggroup
)
707 int rawnum
= regnum
% gdbarch_num_regs (gdbarch
);
708 int pseudo
= regnum
/ gdbarch_num_regs (gdbarch
);
709 if (reggroup
== all_reggroup
)
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')
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
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
;
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). */
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
);
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. */
757 ret
= tdesc_register_in_reggroup_p (gdbarch
, rawnum
, reggroup
);
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
);
786 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
788 enum register_status status
;
790 status
= regcache
->raw_read (rawnum
, ®val
);
791 if (status
== REG_VALID
)
792 store_signed_integer (buf
, 4, byte_order
, regval
);
797 internal_error (_("bad register size"));
801 mips_pseudo_register_write (struct gdbarch
*gdbarch
,
802 struct regcache
*regcache
, int cookednum
,
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
);
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
);
828 internal_error (_("bad register size"));
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
);
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
))
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
)
864 ax_simple (ax
, aop_lsh
);
867 ax_simple (ax
, aop_rsh_signed
);
871 internal_error (_("bad register size"));
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
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;
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
913 mips_convert_register_float_case_p (struct gdbarch
*gdbarch
, int regnum
,
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. */
926 mips_convert_register_gpreg_case_p (struct gdbarch
*gdbarch
, int regnum
,
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);
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
));
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
))
964 if (!get_frame_register_bytes (next_frame
, regnum
+ 1, 0, first_half
,
965 optimizedp
, unavailablep
))
967 *optimizedp
= *unavailablep
= 0;
970 else if (mips_convert_register_gpreg_case_p (gdbarch
, regnum
, type
))
972 size_t len
= type
->length ();
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
))
980 *optimizedp
= *unavailablep
= 0;
985 internal_error (_("mips_register_to_value: unrecognized case"));
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
))
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
)
1017 store_signed_integer (fill
, 8, BFD_ENDIAN_BIG
, -1);
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
});
1025 if (from
[len
-1] & 0x80)
1026 store_signed_integer (fill
, 8, BFD_ENDIAN_LITTLE
, -1);
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
});
1035 internal_error (_("mips_value_to_register: unrecognized case"));
1039 /* Return the GDB type object for the "standard" data type of data in
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
;
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
1059 if (mips_isa_regsize (gdbarch
) == 4)
1060 return builtin_type (gdbarch
)->builtin_int32
;
1062 return builtin_type (gdbarch
)->builtin_int64
;
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
1088 return builtin_type (gdbarch
)->builtin_int32
;
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)
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
))
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. */
1165 /* Should the upper word of 64-bit addresses be zeroed? */
1166 static enum auto_boolean mask_address_var
= AUTO_BOOLEAN_AUTO
;
1169 mips_mask_address_p (mips_gdbarch_tdep
*tdep
)
1171 switch (mask_address_var
)
1173 case AUTO_BOOLEAN_TRUE
:
1175 case AUTO_BOOLEAN_FALSE
:
1178 case AUTO_BOOLEAN_AUTO
:
1179 return tdep
->default_mask_address_p
;
1181 internal_error (_("mips_mask_address_p: bad switch"));
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
1195 additional_text
= _(" (current architecture is not MIPS)");
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\")");
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
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
));
1225 return msymbol_is_mips (sym
.minsym
);
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
));
1242 return msymbol_is_mips16 (sym
.minsym
);
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
1257 bound_minimal_symbol sym
1258 = lookup_minimal_symbol_by_pc (make_compact_addr (memaddr
));
1260 return msymbol_is_micromips (sym
.minsym
);
1262 return is_micromips_addr (gdbarch
, memaddr
);
1265 /* Tell the ISA type of the function the program counter value in MEMADDR
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
));
1280 if (msymbol_is_micromips (sym
.minsym
))
1281 return ISA_MICROMIPS
;
1282 else if (msymbol_is_mips16 (sym
.minsym
))
1289 if (is_mips_addr (memaddr
))
1291 else if (is_micromips_addr (gdbarch
, memaddr
))
1292 return ISA_MICROMIPS
;
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. */
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
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. */
1346 mips_adjust_dwarf2_line (CORE_ADDR addr
, int rel
)
1348 static CORE_ADDR adj_pc
;
1349 static CORE_ADDR pc
;
1352 pc
= rel
? pc
+ addr
: addr
;
1353 isa_pc
= mips_adjust_dwarf2_addr (pc
);
1354 addr
= rel
? isa_pc
- adj_pc
: isa_pc
;
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. */
1375 mips_in_frame_stub (CORE_ADDR pc
)
1377 CORE_ADDR start_addr
;
1380 /* Find the starting address of the function containing the PC. */
1381 if (find_pc_partial_function (pc
, &name
, &start_addr
, NULL
) == 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
))
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
))
1390 /* If the PC is in __fn_stub_*, this is a call stub. */
1391 if (startswith (name
, mips_str_fn_stub
))
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? */
1401 mips_read_pc (readable_regcache
*regcache
)
1403 int regnum
= gdbarch_pc_regnum (regcache
->arch ());
1406 regcache
->cooked_read (regnum
, &pc
);
1411 mips_unwind_pc (struct gdbarch
*gdbarch
, const frame_info_ptr
&next_frame
)
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
);
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
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
)
1451 get_frame_pc (this_frame
));
1454 /* Implement the "write_pc" gdbarch method. */
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. */
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
];
1480 instlen
= MIPS_INSN16_SIZE
;
1481 addr
= unmake_compact_addr (addr
);
1484 instlen
= MIPS_INSN32_SIZE
;
1487 internal_error (_("invalid ISA"));
1490 err
= target_read_memory (addr
, buf
, instlen
);
1496 memory_error (TARGET_XFER_E_IO
, addr
);
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
1553 mips_insn_size (enum mips_isa isa
, ULONGEST insn
)
1558 if ((micromips_op (insn
) & 0x4) == 0x4
1559 || (micromips_op (insn
) & 0x7) == 0x0)
1560 return 2 * MIPS_INSN16_SIZE
;
1562 return MIPS_INSN16_SIZE
;
1564 if ((insn
& 0xf800) == 0xf000)
1565 return 2 * MIPS_INSN16_SIZE
;
1567 return MIPS_INSN16_SIZE
;
1569 return MIPS_INSN32_SIZE
;
1571 internal_error (_("invalid ISA"));
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. */
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;
1596 /* No way to handle; it'll most likely trap anyway. */
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
);
1610 /* Return nonzero if the gdbarch is an Octeon series. */
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. */
1625 is_octeon_bbit_op (int op
, struct gdbarch
*gdbarch
)
1627 if (!is_octeon (gdbarch
))
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)
1639 /* Determine where to set a single step breakpoint while considering
1640 branch prediction. */
1643 mips32_next_pc (struct regcache
*regcache
, CORE_ADDR pc
)
1645 struct gdbarch
*gdbarch
= regcache
->arch ();
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
1654 /* BEQL, BNEL, BLEZL, BGTZL: bits 0101xx */
1665 goto greater_branch
;
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);
1683 /* The new PC will be alternate mode. */
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
))
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)
1702 if (((regcache_raw_get_signed (regcache
,
1703 itype_rs (inst
)) >> bit
) & 1)
1705 pc
+= mips32_relative_offset (inst
) + 4;
1707 pc
+= 8; /* After the delay slot. */
1711 pc
+= 4; /* Not a branch, next instruction is easy. */
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
);
1725 /* Set PC to that address. */
1726 pc
= regcache_raw_get_signed (regcache
, rtype_rs (inst
));
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 ());
1743 break; /* end SPECIAL */
1744 case 1: /* REGIMM */
1746 op
= itype_rt (inst
); /* branch condition */
1751 case 16: /* BLTZAL */
1752 case 18: /* BLTZALL */
1754 if (regcache_raw_get_signed (regcache
, itype_rs (inst
)) < 0)
1755 pc
+= mips32_relative_offset (inst
) + 4;
1757 pc
+= 8; /* after the delay slot */
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;
1766 pc
+= 8; /* after the delay slot */
1768 case 0x1c: /* BPOSGE32 */
1769 case 0x1e: /* BPOSGE64 */
1771 if (itype_rs (inst
) == 0)
1773 unsigned int pos
= (op
& 2) ? 64 : 32;
1774 int dspctl
= mips_regnum (gdbarch
)->dspctl
;
1777 /* No way to handle; it'll most likely trap anyway. */
1780 if ((regcache_raw_get_unsigned (regcache
,
1781 dspctl
) & 0x7f) >= pos
)
1782 pc
+= mips32_relative_offset (inst
);
1787 /* All of the other instructions in the REGIMM category */
1792 break; /* end REGIMM */
1797 reg
= jtype_target (inst
) << 2;
1798 /* Upper four bits get never changed... */
1799 pc
= reg
+ ((pc
+ 4) & ~(CORE_ADDR
) 0x0fffffff);
1802 case 4: /* BEQ, BEQL */
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;
1810 case 5: /* BNE, BNEL */
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;
1818 case 6: /* BLEZ, BLEZL */
1819 if (regcache_raw_get_signed (regcache
, itype_rs (inst
)) <= 0)
1820 pc
+= mips32_relative_offset (inst
) + 4;
1826 greater_branch
: /* BGTZ, BGTZL */
1827 if (regcache_raw_get_signed (regcache
, itype_rs (inst
)) > 0)
1828 pc
+= mips32_relative_offset (inst
) + 4;
1835 } /* mips32_next_pc */
1837 /* Extract the 7-bit signed immediate offset from the microMIPS instruction
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
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
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. */
1867 micromips_pc_insn_size (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
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. */
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;
1892 /* No way to handle; it'll most likely trap anyway. */
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
);
1901 pc
+= micromips_pc_insn_size (gdbarch
, pc
);
1906 /* Calculate the address of the next microMIPS instruction to execute
1907 after the instruction at the address PC. */
1910 micromips_next_pc (struct regcache
*regcache
, CORE_ADDR pc
)
1912 struct gdbarch
*gdbarch
= regcache
->arch ();
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
:
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));
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 ());
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
);
1963 pc
+= micromips_pc_insn_size (gdbarch
, pc
);
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
);
1973 pc
+= micromips_pc_insn_size (gdbarch
, pc
);
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
);
1981 pc
+= micromips_pc_insn_size (gdbarch
, pc
);
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
);
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
);
1995 pc
+= micromips_pc_insn_size (gdbarch
, pc
);
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
);
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. */
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
;
2018 /* No way to handle; it'll most likely trap anyway. */
2021 if ((regcache_raw_get_unsigned (regcache
,
2022 dspctl
) & 0x7f) >= pos
)
2023 pc
+= micromips_relative_offset16 (insn
);
2025 pc
+= micromips_pc_insn_size (gdbarch
, pc
);
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);
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);
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);
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
);
2057 pc
+= micromips_pc_insn_size (gdbarch
, pc
);
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
);
2065 pc
+= micromips_pc_insn_size (gdbarch
, pc
);
2068 case 0x3c: /* JALX: bits 111100 */
2069 pc
= ((pc
| 0xfffffff) ^ 0xfffffff) | (b0s26_imm (insn
) << 2);
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
);
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
);
2094 pc
+= micromips_pc_insn_size (gdbarch
, pc
);
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
);
2105 pc
+= micromips_pc_insn_size (gdbarch
, pc
);
2109 case 0x33: /* B16: bits 110011 */
2110 pc
+= micromips_relative_offset10 (insn
);
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. */
2158 unsigned int regx
; /* Function in i8 type. */
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. */
2167 extended_offset (unsigned int extension
)
2171 value
= (extension
>> 16) & 0x1f; /* Extract 15:11. */
2173 value
|= (extension
>> 21) & 0x3f; /* Extract 10:5. */
2175 value
|= extension
& 0x1f; /* Extract 4:0. */
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. */
2188 fetch_mips_16 (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
2190 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
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
);
2199 unpack_mips16 (struct gdbarch
*gdbarch
, CORE_ADDR pc
,
2200 unsigned int extension
,
2202 enum mips16_inst_fmts insn_format
, struct upk_mips16
*upk
)
2207 switch (insn_format
)
2214 value
= extended_offset ((extension
<< 16) | inst
);
2215 value
= (value
^ 0x8000) - 0x8000; /* Sign-extend. */
2219 value
= inst
& 0x7ff;
2220 value
= (value
^ 0x400) - 0x400; /* Sign-extend. */
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. */
2235 value
= extended_offset ((extension
<< 16) | inst
);
2236 value
= (value
^ 0x8000) - 0x8000; /* Sign-extend. */
2240 value
= inst
& 0xff; /* 8 bits */
2241 value
= (value
^ 0x80) - 0x80; /* Sign-extend. */
2244 regx
= (inst
>> 8) & 0x07; /* i8 funct */
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. */
2263 internal_error (_("bad switch"));
2265 upk
->offset
= offset
;
2271 /* Calculate the destination of a branch whose 16-bit opcode word is at PC,
2272 and having a signed 16-bit OFFSET. */
2275 add_offset_16 (CORE_ADDR pc
, int offset
)
2277 return pc
+ (offset
<< 1) + 2;
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);
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
);
2295 case 3: /* JAL , JALX - Watch out, these are 32 bit
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. */
2309 struct upk_mips16 upk
;
2311 unpack_mips16 (gdbarch
, pc
, extension
, insn
, ritype
, &upk
);
2312 reg
= regcache_raw_get_signed (regcache
, mips_reg3_to_reg
[upk
.regx
]);
2314 pc
= add_offset_16 (pc
, upk
.offset
);
2321 struct upk_mips16 upk
;
2323 unpack_mips16 (gdbarch
, pc
, extension
, insn
, ritype
, &upk
);
2324 reg
= regcache_raw_get_signed (regcache
, mips_reg3_to_reg
[upk
.regx
]);
2326 pc
= add_offset_16 (pc
, upk
.offset
);
2331 case 12: /* I8 Formats btez btnez */
2333 struct upk_mips16 upk
;
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
);
2346 case 29: /* RR Formats JR, JALR, JALR-RA */
2348 struct upk_mips16 upk
;
2349 /* upk.fmt = rrtype; */
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
];
2359 reg
= 31; /* Function return instruction. */
2360 pc
= regcache_raw_get_signed (regcache
, reg
);
2367 /* This is an instruction extension. Fetch the real instruction
2368 (which follows the extension) and decode things based on
2372 pc
= extended_mips16_next_pc (regcache
, pc
, insn
,
2373 fetch_mips_16 (gdbarch
, pc
));
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. */
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
);
2408 return mips32_next_pc (regcache
, pc
);
2411 /* Return non-zero if the MIPS16 instruction INSN is a compact branch
2415 mips16_instruction_is_compact_branch (unsigned short insn
)
2417 switch (insn
& 0xf800)
2420 return (insn
& 0x009f) == 0x80; /* JALRC/JRC */
2422 return (insn
& 0x0600) == 0; /* BTNEZ/BTEQZ */
2423 case 0x2800: /* BNEZ */
2424 case 0x2000: /* BEQZ */
2425 case 0x1000: /* B */
2432 /* Return non-zero if the microMIPS instruction INSN is a compact branch
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 */
2453 struct mips_frame_cache
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
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. */
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. */
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? */
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);
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. */
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;
2536 CORE_ADDR frame_addr
= 0; /* Value of $r17, used as frame pointer. */
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;
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
2555 if (this_frame
!= NULL
)
2556 sp
= get_frame_register_signed (this_frame
,
2557 gdbarch_num_regs (gdbarch
)
2562 if (limit_pc
> start_pc
+ 200)
2563 limit_pc
= start_pc
+ 200;
2566 /* Permit at most one non-prologue non-control-transfer instruction
2567 in the middle which may have been reordered by the compiler for
2569 for (cur_pc
= start_pc
; cur_pc
< limit_pc
; cur_pc
+= MIPS_INSN16_SIZE
)
2571 this_non_prologue_insn
= 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. */
2578 /* Fetch and decode the instruction. */
2579 inst
= (unsigned short) mips_fetch_instruction (gdbarch
, ISA_MIPS16
,
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
2587 if ((inst
& 0xf800) == 0xf000) /* extend */
2589 extend_bytes
= MIPS_INSN16_SIZE
;
2593 prev_extend_bytes
= extend_bytes
;
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
;
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. */
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 */
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
;
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. */
2674 if (mips16_instruction_has_delay_slot (inst
, 1))
2677 prev_extend_bytes
= MIPS_INSN16_SIZE
;
2678 cur_pc
+= MIPS_INSN16_SIZE
; /* 32-bit instruction */
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
))
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. */
2713 /* Now we can calculate what the SP must have been at the
2714 start of the function prologue. */
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. */
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
];
2764 warning (_("Invalid number of argument registers encoded in SAVE."));
2769 warning (_("Invalid number of static registers encoded in SAVE."));
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)
2778 frame_offset
+= frame_size
;
2780 /* Now we can calculate what the SP must have been at the
2781 start of the function prologue. */
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
);
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. */
2803 set_reg_offset (gdbarch
, this_cache
, 30, sp
+ offset
);
2804 offset
-= mips_abi_regsize (gdbarch
);
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
)
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
2885 if (start_addr
== 0)
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
);
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
,
2905 /* This marks the outermost frame. */
2906 if (info
->base
== 0)
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
,
2917 return trad_frame_get_prev_register (this_frame
, info
->saved_regs
, regnum
);
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
))
2931 static const struct frame_unwind_legacy
mips_insn16_frame_unwind (
2932 "mips insn16 prologue",
2935 default_frame_unwind_stop_reason
,
2936 mips_insn16_frame_this_id
,
2937 mips_insn16_frame_prev_register
,
2939 mips_insn16_frame_sniffer
2943 mips_insn16_frame_base_address (const frame_info_ptr
&this_frame
,
2946 struct mips_frame_cache
*info
= mips_insn16_frame_cache (this_frame
,
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
;
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. */
2975 micromips_decode_imm9 (int imm
)
2977 imm
= (imm
^ 0x100) - 0x100;
2978 if (imm
> -3 && imm
< 2)
2983 /* Analyze the function prologue from START_PC to LIMIT_PC. Return
2984 the address of the first instruction past the prologue. */
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;
3003 ULONGEST insn
; /* current instruction */
3007 long v1_off
= 0; /* The assumption is LUI will replace it. */
3018 /* Can be called when there's no process, and hence when there's no
3020 if (this_frame
!= NULL
)
3021 sp
= get_frame_register_signed (this_frame
,
3022 gdbarch_num_regs (gdbarch
)
3027 if (limit_pc
> start_pc
+ 200)
3028 limit_pc
= start_pc
+ 200;
3031 /* Permit at most one non-prologue non-control-transfer instruction
3032 in the middle which may have been reordered by the compiler for
3034 for (cur_pc
= start_pc
; cur_pc
< limit_pc
; cur_pc
+= loc
)
3036 this_non_prologue_insn
= 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
:
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
);
3061 /* SUBU: bits 000000 00111010000 */
3062 /* DSUBU: bits 010110 00111010000 */
3063 && dreg
== MIPS_SP_REGNUM
&& sreg
== MIPS_SP_REGNUM
3065 /* (D)SUBU $sp, $v1 */
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;
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
,
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
++);
3111 this_non_prologue_insn
= 1;
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 */
3124 else if (sreg
== MIPS_SP_REGNUM
&& dreg
== 30)
3125 /* (D)ADDIU $fp, $sp, imm */
3127 frame_adjust
= offset
;
3130 else if (sreg
!= 28 || dreg
!= 28)
3131 /* (D)ADDIU $gp, imm */
3132 this_non_prologue_insn
= 1;
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)
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)
3147 this_non_prologue_insn
= 1;
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)
3156 v1_off
|= b0s16_imm (insn
);
3158 this_non_prologue_insn
= 1;
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;
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
);
3178 this_non_prologue_insn
= 1;
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))
3187 this_non_prologue_insn
= 1;
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)
3203 else if ((sreg
& 0x1c) != 0x4)
3204 /* MOVE reg, $a0-$a3 */
3205 this_non_prologue_insn
= 1;
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
++);
3220 this_non_prologue_insn
= 1;
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;
3232 this_non_prologue_insn
= 1;
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
);
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))
3247 this_non_prologue_insn
= 1;
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
))
3264 prev_non_prologue_insn
= this_non_prologue_insn
;
3265 prev_delay_slot
= in_delay_slot
;
3269 if (this_cache
!= NULL
)
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. */
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
3320 if (start_addr
== 0)
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
);
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
,
3340 /* This marks the outermost frame. */
3341 if (info
->base
== 0)
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
,
3352 return trad_frame_get_prev_register (this_frame
, info
->saved_regs
, regnum
);
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
))
3367 static const struct frame_unwind_legacy
mips_micro_frame_unwind (
3368 "mips micro prologue",
3371 default_frame_unwind_stop_reason
,
3372 mips_micro_frame_this_id
,
3373 mips_micro_frame_prev_register
,
3375 mips_micro_frame_sniffer
3379 mips_micro_frame_base_address (const frame_info_ptr
&this_frame
,
3382 struct mips_frame_cache
*info
= mips_micro_frame_cache (this_frame
,
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
;
3407 /* Mark all the registers as unset in the saved_regs array
3408 of THIS_CACHE. Do nothing if THIS_CACHE is null. */
3411 reset_saved_regs (struct gdbarch
*gdbarch
, struct mips_frame_cache
*this_cache
)
3413 if (this_cache
== NULL
|| this_cache
->saved_regs
== NULL
)
3417 const int num_regs
= gdbarch_num_regs (gdbarch
);
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. */
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
3442 int prev_delay_slot
;
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;
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
3457 if (this_frame
!= NULL
)
3458 sp
= get_frame_register_signed (this_frame
,
3459 gdbarch_num_regs (gdbarch
)
3464 if (limit_pc
> start_pc
+ 200)
3465 limit_pc
= start_pc
+ 200;
3468 prev_non_prologue_insn
= 0;
3469 non_prologue_insns
= 0;
3470 prev_delay_slot
= 0;
3473 /* Permit at most one non-prologue non-control-transfer instruction
3474 in the middle which may have been reordered by the compiler for
3477 for (cur_pc
= start_pc
; cur_pc
< limit_pc
; cur_pc
+= MIPS_INSN32_SIZE
)
3479 unsigned long inst
, high_word
;
3483 this_non_prologue_insn
= 0;
3486 /* Fetch the instruction. */
3487 inst
= (unsigned long) mips_fetch_instruction (gdbarch
, ISA_MIPS
,
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
;
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. */
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
;
3529 frame_addr
= get_frame_register_signed
3530 (this_frame
, gdbarch_num_regs (gdbarch
) + 30);
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
3544 reset_saved_regs (gdbarch
, this_cache
);
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
;
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. */
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
3574 reset_saved_regs (gdbarch
, this_cache
);
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
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
))
3622 /* This instruction is not an instruction typically found
3623 in a prologue, so we must have reached the end of the
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)
3637 prev_non_prologue_insn
= this_non_prologue_insn
;
3638 prev_delay_slot
= in_delay_slot
;
3642 if (this_cache
!= NULL
)
3645 (get_frame_register_signed (this_frame
,
3646 gdbarch_num_regs (gdbarch
) + frame_reg
)
3648 /* FIXME: brobecker/2004-09-15: We should be able to get rid of
3649 this assignment below, eventually. But it's still needed
3651 this_cache
->saved_regs
[gdbarch_num_regs (gdbarch
)
3652 + mips_regnum (gdbarch
)->pc
]
3653 = this_cache
->saved_regs
[gdbarch_num_regs (gdbarch
)
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. */
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
3701 if (start_addr
== 0)
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
);
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
,
3721 /* This marks the outermost frame. */
3722 if (info
->base
== 0)
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
,
3733 return trad_frame_get_prev_register (this_frame
, info
->saved_regs
, regnum
);
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
))
3746 static const struct frame_unwind_legacy
mips_insn32_frame_unwind (
3747 "mips insn32 prologue",
3750 default_frame_unwind_stop_reason
,
3751 mips_insn32_frame_this_id
,
3752 mips_insn32_frame_prev_register
,
3754 mips_insn32_frame_sniffer
3758 mips_insn32_frame_base_address (const frame_info_ptr
&this_frame
,
3761 struct mips_frame_cache
*info
= mips_insn32_frame_cache (this_frame
,
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
;
3784 static struct trad_frame_cache
*
3785 mips_stub_frame_cache (const frame_info_ptr
&this_frame
, void **this_cache
)
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
3814 trad_frame_set_this_base (this_trad_cache
, stack_addr
);
3816 return this_trad_cache
;
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
);
3838 mips_stub_frame_sniffer (const struct frame_unwind
*self
,
3839 const frame_info_ptr
&this_frame
, void **this_cache
)
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)
3848 if (in_plt_section (pc
) || in_mips_stubs_section (pc
))
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."))
3862 static const struct frame_unwind_legacy
mips_stub_frame_unwind (
3866 default_frame_unwind_stop_reason
,
3867 mips_stub_frame_this_id
,
3868 mips_stub_frame_prev_register
,
3870 mips_stub_frame_sniffer
3874 mips_stub_frame_base_address (const frame_info_ptr
&this_frame
,
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
;
3899 /* mips_addr_bits_remove - remove useless address bits */
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
;
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
3933 /* Instructions used during single-stepping of atomic sequences, standard
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
};
3945 CORE_ADDR branch_bp
; /* Breakpoint at branch instruction's destination. */
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
)
3957 /* Assume that no atomic sequence is longer than "atomic_sequence_length"
3959 for (insn_count
= 0; insn_count
< atomic_sequence_length
; ++insn_count
)
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. */
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* */
3981 return {}; /* fallback to the standard single-step code. */
3988 case 22: /* BLEZL */
3989 case 23: /* BGTTL */
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 */
4000 is_branch
= (itype_rs (insn
) == 8); /* BCzF, BCzFL, BCzT, BCzTL */
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
;
4013 if (itype_op (insn
) == SC_OPCODE
|| itype_op (insn
) == SCD_OPCODE
)
4017 /* Assume that the atomic sequence ends with a sc/scd instruction. */
4018 if (itype_op (insn
) != SC_OPCODE
&& itype_op (insn
) != SCD_OPCODE
)
4021 loc
+= MIPS_INSN32_SIZE
;
4023 /* Insert a breakpoint right after the end of the atomic sequence. */
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
]);
4040 static std::vector
<CORE_ADDR
>
4041 micromips_deal_with_atomic_sequence (struct gdbarch
*gdbarch
,
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
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 */
4059 loc
+= MIPS_INSN16_SIZE
;
4061 insn
|= mips_fetch_instruction (gdbarch
, ISA_MICROMIPS
, loc
, NULL
);
4062 if ((b12s4_op (insn
) & 0xb) != 0x3) /* LL, LLD: bits 011000 0x11 */
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"
4069 for (insn_count
= 0;
4070 !sc_found
&& insn_count
< atomic_sequence_length
;
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 */
4107 case 0x25: /* BEQ: bits 100101 */
4108 case 0x2d: /* BNE: bits 101101 */
4110 insn
|= mips_fetch_instruction (gdbarch
,
4111 ISA_MICROMIPS
, loc
, NULL
);
4112 branch_bp
= (loc
+ MIPS_INSN16_SIZE
4113 + micromips_relative_offset16 (insn
));
4117 case 0x00: /* POOL32A: bits 000000 */
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 */
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 */
4141 loc
+= MIPS_INSN16_SIZE
;
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
);
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 */
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. */
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
;
4179 /* Insert a breakpoint right after the end of the atomic sequence. */
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
]);
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
);
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 ())
4224 next_pc
= mips_next_pc (regcache
, pc
);
4229 /* Test whether the PC points to the return instruction at the
4230 end of a function. */
4233 mips_about_to_return (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
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
);
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
4253 heuristic_proc_start (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
4259 struct inferior
*inf
;
4261 pc
= gdbarch_addr_bits_remove (gdbarch
, pc
);
4263 fence
= start_pc
- heuristic_fence_post
;
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
));
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. */
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\
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
));
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:
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
;
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 */
4345 else if ((inst
& 0xff00) == 0x6300 /* addiu sp */
4346 || (inst
& 0xff00) == 0xfb00) /* daddiu sp */
4351 else if (mips_pc_is_micromips (gdbarch
, start_pc
))
4359 /* On microMIPS, any one of the following is likely to be the
4360 start of a function:
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
);
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 */
4381 case 0x10: /* POOL32I: bits 010000 */
4382 if (b5s5_op (insn
) == 0xd
4383 /* LUI: bits 010000 001101 */
4384 && b0s5_reg (insn
>> 16) == 28)
4389 case 0x13: /* POOL16D: bits 010011 */
4390 if ((insn
& 0x1) == 0x1)
4391 /* ADDIUSP: bits 010011 1 */
4393 offset
= micromips_decode_imm9 (b1s9_imm (insn
));
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 */
4412 else if (mips_about_to_return (gdbarch
, start_pc
))
4414 /* Skip return and its delay slot. */
4415 start_pc
+= 2 * MIPS_INSN32_SIZE
;
4422 struct mips_objfile_private
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. */
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 ()
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. */
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)
4458 else if (typecode
== TYPE_CODE_STRUCT
)
4460 if (type
->num_fields () < 1)
4462 return mips_type_needs_double_align (type
->field (0).type ());
4464 else if (typecode
== TYPE_CODE_UNION
)
4468 n
= type
->num_fields ();
4469 for (i
= 0; i
< n
; i
++)
4470 if (mips_type_needs_double_align (type
->field (i
).type ()))
4477 /* Adjust the address downward (direction of stack growth) so that it
4478 is correctly aligned for a new stack frame. */
4480 mips_frame_align (struct gdbarch
*gdbarch
, CORE_ADDR addr
)
4482 return align_down (addr
, 16);
4485 /* Implement the "push_dummy_code" gdbarch method. */
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 };
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. */
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
)
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
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 (),
4563 sp
-= align_up (arg_space
, 16);
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
)
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
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 ();
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
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
,
4613 typecode
= TYPE_CODE_PTR
;
4617 gdb_printf (gdb_stdlog
, " push");
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))
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
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;
4659 /* Write the low word of the double to the even register(s). */
4660 regval
= extract_signed_integer (val
+ low_offset
,
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
,
4671 gdb_printf (gdb_stdlog
, " - fpreg=%d val=%s",
4672 float_argreg
, phex (regval
, 4));
4673 regcache_cooked_write_signed (regcache
, float_argreg
++, regval
);
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
);
4683 gdb_printf (gdb_stdlog
, " - fpreg=%d val=%s",
4684 float_argreg
, phex (regval
, len
));
4685 regcache_cooked_write_signed (regcache
, float_argreg
++, regval
);
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
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. */
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
);
4709 gdb_printf (gdb_stdlog
, " -- partial=%d",
4712 /* Write this portion of the argument to the stack. */
4713 if (argreg
> mips_last_arg_regnum (gdbarch
)
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;
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
;
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
;
4748 gdb_printf (gdb_stdlog
, " @%s ",
4749 paddress (gdbarch
, addr
));
4750 for (i
= 0; i
< partial_len
; i
++)
4752 gdb_printf (gdb_stdlog
, "%02x",
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
))
4768 extract_signed_integer (val
, partial_len
, byte_order
);
4771 gdb_printf (gdb_stdlog
, " - reg=%d val=%s",
4773 phex (regval
, abi_regsize
));
4774 regcache_cooked_write_signed (regcache
, argreg
, regval
);
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. */
4788 stack_offset
+= align_up (partial_len
, abi_regsize
);
4792 gdb_printf (gdb_stdlog
, "\n");
4795 regcache_cooked_write_signed (regcache
, MIPS_SP_REGNUM
, sp
);
4797 /* Return adjusted stack pointer. */
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
)
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
)
4835 /* A floating-point value belongs in the least significant part
4838 gdb_printf (gdb_stderr
, "Return float in $fp0\n");
4839 regnum
= mips_regnum (gdbarch
)->fp0
;
4843 /* An integer value goes in V0/V1. */
4845 gdb_printf (gdb_stderr
, "Return scalar in $v0\n");
4846 regnum
= MIPS_V0_REGNUM
;
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
,
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
4872 mips_n32n64_fp_arg_chunk_p (struct gdbarch
*gdbarch
, struct type
*arg_type
,
4877 if (arg_type
->code () != TYPE_CODE_STRUCT
)
4880 if (mips_get_fpu_type (gdbarch
) != MIPS_FPU_DOUBLE
)
4883 if (arg_type
->length () < offset
+ MIPS64_REGSIZE
)
4886 for (i
= 0; i
< arg_type
->num_fields (); i
++)
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)
4896 /* If we have gone past the offset, there is no double to pass. */
4897 pos
= arg_type
->field (i
).loc_bitpos () / 8;
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
)
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
)
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
);
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
)
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
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 (),
4957 sp
-= align_up (arg_space
, 16);
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
)
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 ();
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. */
5001 && fp_register_arg_p (gdbarch
, typecode
, arg_type
)
5002 && (float_argreg
& 1))
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
);
5016 gdb_printf (gdb_stdlog
, " - fpreg=%d val=%s",
5017 float_argreg
, phex (regval
, reglen
));
5018 regcache_cooked_write_unsigned (regcache
, float_argreg
, regval
);
5021 gdb_printf (gdb_stdlog
, " - reg=%d val=%s",
5022 argreg
, phex (regval
, reglen
));
5023 regcache_cooked_write_unsigned (regcache
, argreg
, regval
);
5028 regval
= extract_unsigned_integer (val
+ reglen
,
5029 reglen
, byte_order
);
5031 gdb_printf (gdb_stdlog
, " - fpreg=%d val=%s",
5032 float_argreg
, phex (regval
, reglen
));
5033 regcache_cooked_write_unsigned (regcache
, float_argreg
, regval
);
5036 gdb_printf (gdb_stdlog
, " - reg=%d val=%s",
5037 argreg
, phex (regval
, reglen
));
5038 regcache_cooked_write_unsigned (regcache
, argreg
, regval
);
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
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. */
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
);
5065 gdb_printf (gdb_stdlog
, " -- partial=%d",
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;
5079 if (gdbarch_byte_order (gdbarch
) == BFD_ENDIAN_BIG
)
5081 if ((typecode
== TYPE_CODE_INT
5082 || typecode
== TYPE_CODE_PTR
)
5084 longword_offset
= MIPS64_REGSIZE
- len
;
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
;
5100 gdb_printf (gdb_stdlog
, " @%s ",
5101 paddress (gdbarch
, addr
));
5102 for (i
= 0; i
< partial_len
; i
++)
5104 gdb_printf (gdb_stdlog
, "%02x",
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
))
5119 /* Sign extend pointers, 32-bit integers and signed
5120 16-bit and 8-bit integers; everything else is taken
5123 if ((partial_len
== 4
5124 && (typecode
== TYPE_CODE_PTR
5125 || typecode
== TYPE_CODE_INT
))
5127 && typecode
== TYPE_CODE_INT
5128 && !arg_type
->is_unsigned ()))
5129 regval
= extract_signed_integer (val
, partial_len
,
5132 regval
= extract_unsigned_integer (val
, partial_len
,
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
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
)
5152 gdb_printf (gdb_stdlog
, " - reg=%d val=%s",
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
))
5161 gdb_printf (gdb_stdlog
, " - fpreg=%d val=%s",
5163 phex (regval
, MIPS64_REGSIZE
));
5164 regcache_cooked_write_unsigned (regcache
, float_argreg
,
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. */
5182 stack_offset
+= align_up (partial_len
, MIPS64_REGSIZE
);
5186 gdb_printf (gdb_stdlog
, "\n");
5189 regcache_cooked_write_signed (regcache
, MIPS_SP_REGNUM
, sp
);
5191 /* Return adjusted stack pointer. */
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
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
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
5224 From MIPSpro Assembly Language Programmer's Guide, Document Number:
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. */
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
,
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. */
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
),
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 ()
5282 || (type
->num_fields () == 2
5283 && (check_typedef (type
->field (0).type ())->code ()
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). */
5293 for (field
= 0, regnum
= (tdep
->mips_fpu_type
!= MIPS_FPU_NONE
5294 ? mips_regnum (gdbarch
)->fp0
5296 field
< type
->num_fields (); field
++, regnum
+= 2)
5298 int offset
= type
->field (field
).loc_bitpos () / TARGET_CHAR_BIT
;
5300 gdb_printf (gdb_stderr
, "Return float struct+%d\n",
5302 if (type
->field (field
).type ()->length () == 16)
5304 /* A 16-byte long double field goes in two consecutive
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);
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
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
;
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
,
5350 return RETURN_VALUE_REGISTER_CONVENTION
;
5354 /* A scalar extract each part but least-significant-byte
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
;
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. */
5391 /* O32 ABI stuff. */
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
)
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
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);
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
)
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 ();
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))
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
;
5510 regval
= extract_unsigned_integer (val
, 4, byte_order
);
5512 gdb_printf (gdb_stdlog
, " - fpreg=%d val=%s",
5513 float_argreg
+ freg_offset
,
5515 regcache_cooked_write_unsigned (regcache
,
5516 float_argreg
++ + freg_offset
,
5519 gdb_printf (gdb_stdlog
, " - reg=%d val=%s",
5520 argreg
, phex (regval
, 4));
5521 regcache_cooked_write_unsigned (regcache
, argreg
++, regval
);
5524 regval
= extract_unsigned_integer (val
+ 4, 4, byte_order
);
5526 gdb_printf (gdb_stdlog
, " - fpreg=%d val=%s",
5527 float_argreg
- freg_offset
,
5529 regcache_cooked_write_unsigned (regcache
,
5530 float_argreg
++ - freg_offset
,
5533 gdb_printf (gdb_stdlog
, " - reg=%d val=%s",
5534 argreg
, phex (regval
, 4));
5535 regcache_cooked_write_unsigned (regcache
, argreg
++, regval
);
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
);
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
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
);
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
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
))
5579 stack_offset
+= MIPS32_REGSIZE
;
5584 int partial_len
= (len
< MIPS32_REGSIZE
? len
: MIPS32_REGSIZE
);
5587 gdb_printf (gdb_stdlog
, " -- partial=%d",
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;
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
;
5612 gdb_printf (gdb_stdlog
, " @%s ",
5613 paddress (gdbarch
, addr
));
5614 for (i
= 0; i
< partial_len
; i
++)
5616 gdb_printf (gdb_stdlog
, "%02x",
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
,
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
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
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
)
5667 gdb_printf (gdb_stdlog
, " - reg=%d val=%s",
5669 phex (regval
, MIPS32_REGSIZE
));
5670 regcache_cooked_write_unsigned (regcache
, argreg
, regval
);
5673 /* Prevent subsequent floating point arguments from
5674 being passed in floating point registers. */
5675 float_argreg
= mips_last_fp_arg_regnum (gdbarch
) + 1;
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
);
5693 gdb_printf (gdb_stdlog
, "\n");
5696 regcache_cooked_write_signed (regcache
, MIPS_SP_REGNUM
, sp
);
5698 /* Return adjusted stack pointer. */
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
);
5730 gdb_printf (gdb_stderr
, "Return float in $fp0\n");
5733 gdb_printf (gdb_stderr
, "Return float in $2\n");
5735 case mips_fval_both
:
5736 gdb_printf (gdb_stderr
, "Return float in $fp0 and $2\n");
5739 if (fval_reg
!= mips_fval_gpr
)
5740 mips_xfer_register (gdbarch
, regcache
,
5741 (gdbarch_num_regs (gdbarch
)
5742 + mips_regnum (gdbarch
)->fp0
),
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,
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
);
5768 gdb_printf (gdb_stderr
, "Return float in $fp1/$fp0\n");
5771 gdb_printf (gdb_stderr
, "Return float in $2/$3\n");
5773 case mips_fval_both
:
5774 gdb_printf (gdb_stderr
,
5775 "Return float in $fp1/$fp0 and $2/$3\n");
5778 if (fval_reg
!= mips_fval_gpr
)
5780 /* The most significant part goes in FP1, and the least significant
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);
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);
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
;
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 ())
5834 || (type
->num_fields () == 2
5835 && (TYPE_CODE (type
->field (0).type ())
5837 && (TYPE_CODE (type
->field (1).type ())
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
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
);
5851 gdb_printf (gdb_stderr
, "Return float struct+%d\n",
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
;
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
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
;
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
;
5890 /* A scalar extract each part but least-significant-byte
5891 justified. o32 thinks registers are 4 byte, regardless of
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
;
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
5918 mips_o64_push_dummy_call (struct gdbarch
*gdbarch
, struct value
*function
,
5919 struct regcache
*regcache
, CORE_ADDR bp_addr
,
5921 struct value
**args
, CORE_ADDR sp
,
5922 function_call_return_method return_method
, CORE_ADDR struct_addr
)
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
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);
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
)
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 ();
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
);
6014 gdb_printf (gdb_stdlog
, " - fpreg=%d val=%s",
6015 float_argreg
, phex (regval
, len
));
6016 regcache_cooked_write_unsigned (regcache
, float_argreg
++, regval
);
6018 gdb_printf (gdb_stdlog
, " - reg=%d val=%s",
6019 argreg
, phex (regval
, len
));
6020 regcache_cooked_write_unsigned (regcache
, argreg
, regval
);
6022 /* Reserve space for the FP register. */
6023 stack_offset
+= align_up (len
, MIPS64_REGSIZE
);
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);
6038 int partial_len
= (len
< MIPS64_REGSIZE
? len
: MIPS64_REGSIZE
);
6041 gdb_printf (gdb_stdlog
, " -- partial=%d",
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;
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
)
6058 longword_offset
= MIPS64_REGSIZE
- len
;
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
;
6074 gdb_printf (gdb_stdlog
, " @%s ",
6075 paddress (gdbarch
, addr
));
6076 for (i
= 0; i
< partial_len
; i
++)
6078 gdb_printf (gdb_stdlog
, "%02x",
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
,
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
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
)
6113 gdb_printf (gdb_stdlog
, " - reg=%d val=%s",
6115 phex (regval
, MIPS64_REGSIZE
));
6116 regcache_cooked_write_unsigned (regcache
, argreg
, regval
);
6119 /* Prevent subsequent floating point arguments from
6120 being passed in floating point registers. */
6121 float_argreg
= mips_last_fp_arg_regnum (gdbarch
) + 1;
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
);
6139 gdb_printf (gdb_stdlog
, "\n");
6142 regcache_cooked_write_signed (regcache
, MIPS_SP_REGNUM
, sp
);
6144 /* Return adjusted stack pointer. */
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
);
6174 gdb_printf (gdb_stderr
, "Return float in $fp0\n");
6177 gdb_printf (gdb_stderr
, "Return float in $2\n");
6179 case mips_fval_both
:
6180 gdb_printf (gdb_stderr
, "Return float in $fp0 and $2\n");
6183 if (fval_reg
!= mips_fval_gpr
)
6184 mips_xfer_register (gdbarch
, regcache
,
6185 (gdbarch_num_regs (gdbarch
)
6186 + mips_regnum (gdbarch
)->fp0
),
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,
6194 gdbarch_byte_order (gdbarch
),
6195 readbuf
, writebuf
, 0);
6196 return RETURN_VALUE_REGISTER_CONVENTION
;
6200 /* A scalar extract each part but least-significant-byte
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
;
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
6253 /* Copy a 32-bit single-precision value from the current frame
6254 into rare_buffer. */
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
));
6269 /* We have a 64-bit value for this register. Find the low-order
6273 if (gdbarch_byte_order (gdbarch
) == BFD_ENDIAN_BIG
)
6278 memcpy (rare_buffer
.data (), raw_buffer
.data () + offset
, 4);
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
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
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
));
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
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
);
6322 mips_read_fp_register_single (frame
, regno
, rare_buffer
);
6323 mips_read_fp_register_single (frame
, regno
+ 1,
6324 rare_buffer
.slice (4));
6330 mips_print_fp_register (struct ui_file
*file
, const frame_info_ptr
&frame
,
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
)),
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
,
6357 get_formatted_print_options (&opts
, 'x');
6358 print_scalar_formatted (raw_buffer
.data (),
6359 builtin_type (gdbarch
)->builtin_uint32
,
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
,
6370 gdb_printf (file
, " dbl: %s", dbl_str
.c_str ());
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
,
6382 mips_read_fp_register_double (frame
, regnum
, raw_buffer
);
6383 dbl_str
= target_float_to_string (raw_buffer
.data (), dbl_type
,
6386 get_formatted_print_options (&opts
, 'x');
6387 print_scalar_formatted (raw_buffer
.data (),
6388 builtin_type (gdbarch
)->builtin_uint64
,
6391 gdb_printf (file
, " flt: %s", flt_str
.c_str ());
6392 gdb_printf (file
, " dbl: %s", dbl_str
.c_str ());
6397 mips_print_register (struct ui_file
*file
, const frame_info_ptr
&frame
,
6400 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
6401 struct value_print_options opts
;
6404 if (mips_float_register_p (gdbarch
, regnum
))
6406 mips_print_fp_register (file
, frame
, regnum
);
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
);
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. */
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. */
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
);
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"
6467 if (type
== MIPS_FPU_NONE
)
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
);
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. */
6519 print_fp_register_row (struct ui_file
*file
, const frame_info_ptr
&frame
,
6522 gdb_printf (file
, " ");
6523 mips_print_fp_register (file
, frame
, regnum
);
6524 gdb_printf (file
, "\n");
6529 /* Print a row's worth of GP (int) registers, with name labels above. */
6532 print_gp_register_row (struct ui_file
*file
, const frame_info_ptr
&frame
,
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
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
);
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
))
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");
6565 gdb_printf (file
, " ");
6567 mips_abi_regsize (gdbarch
) == 8 ? "%17s" : "%9s",
6568 gdbarch_register_name (gdbarch
, 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
));
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
);
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>"));
6606 raw_buffer
= value
->contents_all ().data ();
6607 /* pad small registers */
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
)
6615 register_size (gdbarch
, regnum
) - register_size (gdbarch
, regnum
);
6616 byte
< register_size (gdbarch
, regnum
); byte
++)
6617 gdb_printf (file
, "%02x", raw_buffer
[byte
]);
6619 for (byte
= register_size (gdbarch
, regnum
) - 1;
6621 gdb_printf (file
, "%02x", raw_buffer
[byte
]);
6622 gdb_printf (file
, " ");
6625 if (col
> 0) /* ie. if we actually printed anything... */
6626 gdb_printf (file
, "\n");
6631 /* MIPS_DO_REGISTERS_INFO(): called by "info register" command. */
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");
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
);
6657 regnum
+= MIPS_NUMREGS
; /* Skip floating point regs. */
6660 regnum
= print_gp_register_row (file
, frame
, regnum
);
6666 mips_single_step_through_delay (struct gdbarch
*gdbarch
,
6667 const frame_info_ptr
&frame
)
6669 CORE_ADDR pc
= get_frame_pc (frame
);
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)))
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). */
6702 mips_skip_prologue (struct gdbarch
*gdbarch
, CORE_ADDR 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
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
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
);
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
);
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. */
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;
6754 for (; pc
< func_end
; pc
+= MIPS_INSN32_SIZE
)
6756 unsigned long high_word
;
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 */
6775 /* Implement the stack_frame_destroyed_p gdbarch method (microMIPS version).
6776 This is a helper function for mips_stack_frame_destroyed_p. */
6779 micromips_stack_frame_destroyed_p (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
6781 CORE_ADDR func_addr
= 0;
6782 CORE_ADDR func_end
= 0;
6790 if (!find_pc_partial_function (pc
, NULL
, &func_addr
, &func_end
))
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;
6801 for (; pc
< func_end
; pc
+= loc
)
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
:
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 */
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 */
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
))
6854 case 0x13: /* POOL16D: bits 010011 */
6855 offset
= micromips_decode_imm9 (b1s9_imm (insn
));
6856 if ((insn
& 0x1) == 0x1
6857 /* ADDIUSP: bits 010011 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. */
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;
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 */
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 */
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. */
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
);
6925 return mips32_stack_frame_destroyed_p (gdbarch
, pc
);
6928 /* Commands to show/set the MIPS FPU type. */
6931 show_mipsfpu_command (const char *args
, int from_tty
)
6935 if (gdbarch_bfd_arch_info (current_inferior ()->arch ())->arch
6939 ("The MIPS floating-point coprocessor is unknown "
6940 "because the current architecture is not MIPS.\n");
6944 switch (mips_get_fpu_type (current_inferior ()->arch ()))
6946 case MIPS_FPU_SINGLE
:
6947 fpu
= "single-precision";
6949 case MIPS_FPU_DOUBLE
:
6950 fpu
= "double-precision";
6953 fpu
= "absent (none)";
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",
6964 ("The MIPS floating-point coprocessor is assumed to be %s\n", fpu
);
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"));
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"));
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"));
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. */
7017 reinit_frame_cache_sfunc (const char *args
, int from_tty
,
7018 struct cmd_list_element
*c
)
7020 reinit_frame_cache ();
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
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. */
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
))
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
;
7068 return MIPS_BP_KIND_MICROMIPS32
;
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
);
7083 case MIPS_BP_KIND_MIPS16
:
7085 static gdb_byte mips16_big_breakpoint
[] = { 0xe8, 0xa5 };
7086 static gdb_byte mips16_little_breakpoint
[] = { 0xa5, 0xe8 };
7089 if (byte_order_for_code
== BFD_ENDIAN_BIG
)
7090 return mips16_big_breakpoint
;
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 };
7101 if (byte_order_for_code
== BFD_ENDIAN_BIG
)
7102 return micromips16_big_breakpoint
;
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 };
7112 if (byte_order_for_code
== BFD_ENDIAN_BIG
)
7113 return micromips32_big_breakpoint
;
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 };
7123 if (byte_order_for_code
== BFD_ENDIAN_BIG
)
7124 return big_breakpoint
;
7126 return little_breakpoint
;
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. */
7138 mips32_instruction_has_delay_slot (struct gdbarch
*gdbarch
, ULONGEST inst
)
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 */
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 */
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 */
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). */
7187 mips32_insn_at_pc_has_delay_slot (struct gdbarch
*gdbarch
, CORE_ADDR addr
)
7192 insn
= mips_fetch_instruction (gdbarch
, ISA_MIPS
, addr
, &status
);
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. */
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 */
7217 case 0x11: /* POOL16C: bits 010001 */
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 */
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 */
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. */
7265 micromips_insn_at_pc_has_delay_slot (struct gdbarch
*gdbarch
,
7266 CORE_ADDR addr
, int mustbe32
)
7272 insn
= mips_fetch_instruction (gdbarch
, ISA_MICROMIPS
, addr
, &status
);
7275 size
= mips_insn_size (ISA_MICROMIPS
, insn
);
7277 if (size
== 2 * MIPS_INSN16_SIZE
)
7279 insn
|= mips_fetch_instruction (gdbarch
, ISA_MICROMIPS
, addr
, &status
);
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. */
7293 mips16_instruction_has_delay_slot (unsigned short inst
, int mustbe32
)
7295 if ((inst
& 0xf89f) == 0xe800) /* JR/JALR (16-bit instruction) */
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. */
7305 mips16_insn_at_pc_has_delay_slot (struct gdbarch
*gdbarch
,
7306 CORE_ADDR addr
, int mustbe32
)
7308 unsigned short insn
;
7311 insn
= mips_fetch_instruction (gdbarch
, ISA_MIPS16
, addr
, &status
);
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. */
7322 mips_segment_boundary (CORE_ADDR bpaddr
)
7324 CORE_ADDR mask
= CORE_ADDR_MAX
;
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)
7334 if (bpaddr
== (bfd_signed_vma
) (int32_t) bpaddr
)
7335 segsize
= 29; /* 32-bit compatibility segment */
7337 segsize
= 62; /* xkseg */
7339 case 2: /* xkphys */
7342 default: /* xksseg (1), xkuseg/kuseg (0) */
7346 else if (bpaddr
& 0x80000000) /* kernel segment */
7349 segsize
= 31; /* user segment */
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. */
7358 mips_adjust_breakpoint_address (struct gdbarch
*gdbarch
, CORE_ADDR bpaddr
)
7360 CORE_ADDR prev_addr
;
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
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
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
)
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
))
7414 int (*insn_at_pc_has_delay_slot
) (struct gdbarch
*, CORE_ADDR
, int);
7415 CORE_ADDR addr
, jmpaddr
;
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
);
7434 for (i
= 1; i
< 4; i
++)
7436 if (unmake_compact_addr (addr
) == boundary
)
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. */
7444 else if (i
> 1 && insn_at_pc_has_delay_slot (gdbarch
, addr
, 1))
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. */
7452 /* Looks like a JAL/JALX at [target-3], so any previously
7453 recorded JAL/JALX or JR/JALR must be wrong, because:
7456 -2: JAL-ext (can't be JAL/JALX)
7457 -1: bdslot (can't be JR/JALR)
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]:
7466 -2: bdslot (can't be jmp)
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. */
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. */
7492 mips_is_stub_suffix (const char *suffix
, int zero
)
7497 return zero
&& suffix
[1] == '\0';
7499 return suffix
[1] == '\0' || (suffix
[1] == '0' && suffix
[2] == '\0');
7504 return suffix
[1] == '\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. */
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:
7528 followed by (or interspersed with):
7535 addiu $25, $25, %lo(bar)
7538 ($1 may be used in old code; for robustness we accept any register)
7541 lui $28, %hi(_gp_disp)
7542 addiu $28, $28, %lo(_gp_disp)
7545 addiu $25, $25, %lo(bar)
7548 In the case of a __call_stub_bar stub, the sequence to set up
7549 arguments might look like this:
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:
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. */
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;
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
);
7595 switch (itype_op (inst
))
7597 case 0: /* SPECIAL */
7598 switch (rtype_funct (inst
))
7602 rs
= rtype_rs (inst
);
7603 if (rs
== MIPS_GP_REGNUM
)
7604 target_pc
= gp
; /* Hmm... */
7605 else if (rs
== addrreg
)
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
)))
7623 target_pc
= jtype_target (inst
) << 2;
7624 target_pc
+= ((pc
+ 4) & ~(CORE_ADDR
) 0x0fffffff);
7628 rt
= itype_rt (inst
);
7629 rs
= itype_rs (inst
);
7632 imm
= (itype_immediate (inst
) ^ 0x8000) - 0x8000;
7633 if (rt
== MIPS_GP_REGNUM
)
7635 else if (rt
== addrreg
)
7641 rt
= itype_rt (inst
);
7642 imm
= ((itype_immediate (inst
) ^ 0x8000) - 0x8000) << 16;
7643 if (rt
== MIPS_GP_REGNUM
)
7645 else if (rt
!= MIPS_ZERO_REGNUM
)
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
)
7660 memset (buf
, 0, sizeof (buf
));
7661 status
= target_read_memory (gp
+ imm
, buf
, sizeof (buf
));
7663 addr
= extract_signed_integer (buf
, sizeof (buf
), byte_order
);
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
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
;
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)
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
);
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
);
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
);
7761 /* This is the 'return' part of a call stub. The return address
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. */
7774 mips_in_return_stub (struct gdbarch
*gdbarch
, CORE_ADDR pc
, const char *name
)
7776 CORE_ADDR start_addr
;
7779 /* Find the starting address of the function containing the PC. */
7780 if (find_pc_partial_function (pc
, NULL
, &start_addr
, NULL
) == 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
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))
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)
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
7805 prefixlen
= strlen (mips_str_pic
);
7806 if (strncmp (name
, mips_str_pic
, prefixlen
) == 0)
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')
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. */
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
);
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."))
7842 /* A two-instruction header. */
7843 if (msym
.minsym
->size () == 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)
7851 for (i
= 0; i
< 4; i
++)
7852 stub_words
[i
] = extract_unsigned_integer (stub_code
+ i
* 4,
7855 /* A stub contains these instructions:
7858 addiu t9, t9, %lo(target)
7861 This works even for N64, since stubs are only generated with
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. */
7876 mips_skip_trampoline_code (const frame_info_ptr
&frame
, CORE_ADDR pc
)
7878 CORE_ADDR requested_pc
= pc
;
7879 CORE_ADDR target_pc
;
7886 new_pc
= mips_skip_mips16_trampoline_code (frame
, pc
);
7890 new_pc
= find_solib_trampoline_target (frame
, pc
);
7894 new_pc
= mips_skip_pic_trampoline_code (frame
, 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. */
7907 mips_stab_reg_to_regnum (struct gdbarch
*gdbarch
, int num
)
7910 if (num
>= 0 && num
< 32)
7912 else if (num
>= 38 && num
< 70)
7913 regnum
= num
+ mips_regnum (gdbarch
)->fp0
- 38;
7915 regnum
= mips_regnum (gdbarch
)->hi
;
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;
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. */
7930 mips_dwarf_dwarf2_ecoff_reg_to_regnum (struct gdbarch
*gdbarch
, int num
)
7933 if (num
>= 0 && num
< 32)
7935 else if (num
>= 32 && num
< 64)
7936 regnum
= num
+ mips_regnum (gdbarch
)->fp0
- 32;
7938 regnum
= mips_regnum (gdbarch
)->hi
;
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;
7945 return gdbarch_num_regs (gdbarch
) + regnum
;
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')
7960 return LEGACY_SIM_REGNO_IGNORE
;
7964 /* Convert an integer into an address. Extracting the value signed
7965 guarantees a correctly sign extended address. */
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. */
7981 mips_virtual_frame_pointer (struct gdbarch
*gdbarch
,
7982 CORE_ADDR pc
, int *reg
, LONGEST
*offset
)
7984 *reg
= MIPS_SP_REGNUM
;
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
)
7997 if (!startswith (name
, ".mdebug."))
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
;
8013 warning (_("unsupported ABI %s."), name
+ 8);
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"))
8024 else if (startswith (name
, ".gcc_compiled_long64"))
8026 else if (startswith (name
, ".gcc_compiled_long"))
8027 warning (_("unrecognized .gcc_compiled_longXX"));
8030 static enum mips_abi
8031 global_mips_abi (void)
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
8047 static enum mips_isa
8048 global_mips_compression (void)
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"));
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
)
8087 enum mips_abi mips_abi
, found_abi
, wanted_abi
;
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
;
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
;
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
;
8119 case EF_MIPS_ABI_O64
:
8120 found_abi
= MIPS_ABI_O64
;
8122 case EF_MIPS_ABI_EABI32
:
8123 found_abi
= MIPS_ABI_EABI32
;
8125 case EF_MIPS_ABI_EABI64
:
8126 found_abi
= MIPS_ABI_EABI64
;
8129 if ((elf_flags
& EF_MIPS_ABI2
))
8130 found_abi
= MIPS_ABI_N32
;
8132 found_abi
= MIPS_ABI_UNKNOWN
;
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
;
8159 case bfd_mach_mips4100
:
8160 case bfd_mach_mips5000
:
8161 found_abi
= MIPS_ABI_EABI64
;
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
;
8173 found_abi
= MIPS_ABI_N32
;
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
;
8186 gdb_printf (gdb_stdlog
, "mips_gdbarch_init: found_abi = %d\n",
8189 /* What has the user specified from the command line? */
8190 wanted_abi
= global_mips_abi ();
8192 gdb_printf (gdb_stdlog
, "mips_gdbarch_init: wanted_abi = %d\n",
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
;
8202 mips_abi
= MIPS_ABI_O32
;
8204 gdb_printf (gdb_stdlog
, "mips_gdbarch_init: mips_abi = %d\n",
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
;
8223 mips_isa
= global_mips_compression ();
8224 mips_compression_string
= mips_compression_strings
[mips_isa
];
8226 /* Also used when doing an architecture lookup. */
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. */
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
;
8250 case Val_GNU_MIPS_ABI_FP_SINGLE
:
8251 fpu_type
= MIPS_FPU_SINGLE
;
8253 case Val_GNU_MIPS_ABI_FP_SOFT
:
8255 /* Soft float or unknown. */
8256 fpu_type
= MIPS_FPU_NONE
;
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
;
8270 case bfd_mach_mips4650
:
8271 fpu_type
= MIPS_FPU_SINGLE
;
8274 fpu_type
= MIPS_FPU_DOUBLE
;
8277 else if (arches
!= NULL
)
8278 fpu_type
= mips_get_fpu_type (arches
->gdbarch
);
8280 fpu_type
= MIPS_FPU_DOUBLE
;
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
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
)
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;
8311 reg_names
= mips_linux_reg_names
;
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
;
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
;
8352 feature
= tdesc_find_feature (info
.target_desc
,
8353 "org.gnu.gdb.mips.cpu");
8354 if (feature
== NULL
)
8357 tdesc_data
= tdesc_data_alloc ();
8360 for (i
= MIPS_ZERO_REGNUM
; i
<= MIPS_RA_REGNUM
; i
++)
8361 valid_p
&= tdesc_numbered_register (feature
, tdesc_data
.get (), 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");
8375 feature
= tdesc_find_feature (info
.target_desc
,
8376 "org.gnu.gdb.mips.cp0");
8377 if (feature
== NULL
)
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");
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
)
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
,
8407 &= tdesc_numbered_register (feature
, tdesc_data
.get (),
8408 mips_regnum
.fp_implementation_revision
,
8414 num_regs
= mips_regnum
.fp_implementation_revision
+ 1;
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
)
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 (),
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. */
8456 /* Try to find a pre-existing architecture. */
8457 for (arches
= gdbarch_list_lookup_by_info (arches
, &info
);
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
)
8468 if (tdep
->mips_abi
!= mips_abi
)
8470 if (tdep
->mips_isa
!= mips_isa
)
8472 /* Need to be pedantic about which register virtual size is
8474 if (tdep
->mips64_transfers_32bit_regs_p
8475 != mips64_transfers_32bit_regs_p
)
8477 /* Be pedantic about which FPU is selected. */
8478 if (mips_get_fpu_type (arches
->gdbarch
) != fpu_type
)
8481 return arches
->gdbarch
;
8484 /* Need a new architecture. Fill in a target specific vector. */
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
;
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);
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);
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);
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);
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
);
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
);
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 --- -------- --------
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
)
8645 bfd_map_over_sections (info
.abfd
, mips_find_long_section
, &long_bit
);
8648 set_gdbarch_long_bit (gdbarch
, long_bit
);
8652 case MIPS_ABI_EABI32
:
8657 case MIPS_ABI_EABI64
:
8658 set_gdbarch_ptr_bit (gdbarch
, long_bit
);
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
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
);
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
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
);
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
);
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. */
8855 show_mips_abi (struct ui_file
*file
,
8857 struct cmd_list_element
*ignored_cmd
,
8858 const char *ignored_value
)
8860 if (gdbarch_bfd_arch_info (current_inferior ()->arch ())->arch
8864 "The MIPS ABI is unknown because the current architecture "
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
)
8875 "The MIPS ABI is set automatically (currently \"%s\").\n",
8877 else if (global_abi
== actual_abi
)
8880 "The MIPS ABI is assumed to be \"%s\" (due to user setting).\n",
8884 /* Probably shouldn't happen... */
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. */
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"),
8903 /* Return a textual name for MIPS FPU type FPU_TYPE. */
8906 mips_fpu_type_str (enum mips_fpu_type fpu_type
)
8912 case MIPS_FPU_SINGLE
:
8914 case MIPS_FPU_DOUBLE
:
8922 mips_dump_tdep (struct gdbarch
*gdbarch
, struct ui_file
*file
)
8924 mips_gdbarch_tdep
*tdep
= gdbarch_tdep
<mips_gdbarch_tdep
> (gdbarch
);
8928 int ef_mips_32bitmode
;
8929 /* Determine the ISA. */
8930 switch (tdep
->elf_flags
& EF_MIPS_ARCH
)
8932 case EF_MIPS_ARCH_1
:
8935 case EF_MIPS_ARCH_2
:
8938 case EF_MIPS_ARCH_3
:
8941 case EF_MIPS_ARCH_4
:
8948 /* Determine the size of a pointer. */
8949 ef_mips_32bitmode
= (tdep
->elf_flags
& EF_MIPS_32BITMODE
);
8951 "mips_dump_tdep: tdep->elf_flags = 0x%x\n",
8954 "mips_dump_tdep: ef_mips_32bitmode = %d\n",
8957 "mips_dump_tdep: ef_mips_arch = %d\n",
8960 "mips_dump_tdep: tdep->mips_abi = %d (%s)\n",
8961 tdep
->mips_abi
, mips_abi_strings
[tdep
->mips_abi
]);
8964 "mips_mask_address_p() %d (default %d)\n",
8965 mips_mask_address_p (tdep
),
8966 tdep
->default_mask_address_p
);
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
));
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 ();
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\
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\
9037 and is updated automatically from ELF file flags if available."),
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."),
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."),
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."),
9068 add_cmd ("mipsfpu", class_support
, show_mipsfpu_command
,
9069 _("Show current use of MIPS floating-point coprocessor target."),
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."),
9104 Show compatibility with 64-bit MIPS target that transfers 32-bit quantities."),
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
,
9118 Set mips debugging."), _("\
9119 Show mips debugging."), _("\
9120 When non-zero, mips specific debugging is enabled."),
9122 NULL
, /* FIXME: i18n: Mips debugging is
9124 &setdebuglist
, &showdebuglist
);