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