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