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