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