2012-03-08 Luis Machado <lgustavo@codesourcery.com>
[deliverable/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-2012 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 "gdb_string.h"
25 #include "gdb_assert.h"
26 #include "frame.h"
27 #include "inferior.h"
28 #include "symtab.h"
29 #include "value.h"
30 #include "gdbcmd.h"
31 #include "language.h"
32 #include "gdbcore.h"
33 #include "symfile.h"
34 #include "objfiles.h"
35 #include "gdbtypes.h"
36 #include "target.h"
37 #include "arch-utils.h"
38 #include "regcache.h"
39 #include "osabi.h"
40 #include "mips-tdep.h"
41 #include "block.h"
42 #include "reggroups.h"
43 #include "opcode/mips.h"
44 #include "elf/mips.h"
45 #include "elf-bfd.h"
46 #include "symcat.h"
47 #include "sim-regno.h"
48 #include "dis-asm.h"
49 #include "frame-unwind.h"
50 #include "frame-base.h"
51 #include "trad-frame.h"
52 #include "infcall.h"
53 #include "floatformat.h"
54 #include "remote.h"
55 #include "target-descriptions.h"
56 #include "dwarf2-frame.h"
57 #include "user-regs.h"
58 #include "valprint.h"
59 #include "ax.h"
60
61 static const struct objfile_data *mips_pdr_data;
62
63 static struct type *mips_register_type (struct gdbarch *gdbarch, int regnum);
64
65 /* A useful bit in the CP0 status register (MIPS_PS_REGNUM). */
66 /* This bit is set if we are emulating 32-bit FPRs on a 64-bit chip. */
67 #define ST0_FR (1 << 26)
68
69 /* The sizes of floating point registers. */
70
71 enum
72 {
73 MIPS_FPU_SINGLE_REGSIZE = 4,
74 MIPS_FPU_DOUBLE_REGSIZE = 8
75 };
76
77 enum
78 {
79 MIPS32_REGSIZE = 4,
80 MIPS64_REGSIZE = 8
81 };
82
83 static const char *mips_abi_string;
84
85 static const char *const mips_abi_strings[] = {
86 "auto",
87 "n32",
88 "o32",
89 "n64",
90 "o64",
91 "eabi32",
92 "eabi64",
93 NULL
94 };
95
96 /* The standard register names, and all the valid aliases for them. */
97 struct register_alias
98 {
99 const char *name;
100 int regnum;
101 };
102
103 /* Aliases for o32 and most other ABIs. */
104 const struct register_alias mips_o32_aliases[] = {
105 { "ta0", 12 },
106 { "ta1", 13 },
107 { "ta2", 14 },
108 { "ta3", 15 }
109 };
110
111 /* Aliases for n32 and n64. */
112 const struct register_alias mips_n32_n64_aliases[] = {
113 { "ta0", 8 },
114 { "ta1", 9 },
115 { "ta2", 10 },
116 { "ta3", 11 }
117 };
118
119 /* Aliases for ABI-independent registers. */
120 const struct register_alias mips_register_aliases[] = {
121 /* The architecture manuals specify these ABI-independent names for
122 the GPRs. */
123 #define R(n) { "r" #n, n }
124 R(0), R(1), R(2), R(3), R(4), R(5), R(6), R(7),
125 R(8), R(9), R(10), R(11), R(12), R(13), R(14), R(15),
126 R(16), R(17), R(18), R(19), R(20), R(21), R(22), R(23),
127 R(24), R(25), R(26), R(27), R(28), R(29), R(30), R(31),
128 #undef R
129
130 /* k0 and k1 are sometimes called these instead (for "kernel
131 temp"). */
132 { "kt0", 26 },
133 { "kt1", 27 },
134
135 /* This is the traditional GDB name for the CP0 status register. */
136 { "sr", MIPS_PS_REGNUM },
137
138 /* This is the traditional GDB name for the CP0 BadVAddr register. */
139 { "bad", MIPS_EMBED_BADVADDR_REGNUM },
140
141 /* This is the traditional GDB name for the FCSR. */
142 { "fsr", MIPS_EMBED_FP0_REGNUM + 32 }
143 };
144
145 const struct register_alias mips_numeric_register_aliases[] = {
146 #define R(n) { #n, n }
147 R(0), R(1), R(2), R(3), R(4), R(5), R(6), R(7),
148 R(8), R(9), R(10), R(11), R(12), R(13), R(14), R(15),
149 R(16), R(17), R(18), R(19), R(20), R(21), R(22), R(23),
150 R(24), R(25), R(26), R(27), R(28), R(29), R(30), R(31),
151 #undef R
152 };
153
154 #ifndef MIPS_DEFAULT_FPU_TYPE
155 #define MIPS_DEFAULT_FPU_TYPE MIPS_FPU_DOUBLE
156 #endif
157 static int mips_fpu_type_auto = 1;
158 static enum mips_fpu_type mips_fpu_type = MIPS_DEFAULT_FPU_TYPE;
159
160 static int mips_debug = 0;
161
162 /* Properties (for struct target_desc) describing the g/G packet
163 layout. */
164 #define PROPERTY_GP32 "internal: transfers-32bit-registers"
165 #define PROPERTY_GP64 "internal: transfers-64bit-registers"
166
167 struct target_desc *mips_tdesc_gp32;
168 struct target_desc *mips_tdesc_gp64;
169
170 const struct mips_regnum *
171 mips_regnum (struct gdbarch *gdbarch)
172 {
173 return gdbarch_tdep (gdbarch)->regnum;
174 }
175
176 static int
177 mips_fpa0_regnum (struct gdbarch *gdbarch)
178 {
179 return mips_regnum (gdbarch)->fp0 + 12;
180 }
181
182 #define MIPS_EABI(gdbarch) (gdbarch_tdep (gdbarch)->mips_abi \
183 == MIPS_ABI_EABI32 \
184 || gdbarch_tdep (gdbarch)->mips_abi == MIPS_ABI_EABI64)
185
186 #define MIPS_LAST_FP_ARG_REGNUM(gdbarch) \
187 (gdbarch_tdep (gdbarch)->mips_last_fp_arg_regnum)
188
189 #define MIPS_LAST_ARG_REGNUM(gdbarch) \
190 (gdbarch_tdep (gdbarch)->mips_last_arg_regnum)
191
192 #define MIPS_FPU_TYPE(gdbarch) (gdbarch_tdep (gdbarch)->mips_fpu_type)
193
194 /* MIPS16 function addresses are odd (bit 0 is set). Here are some
195 functions to test, set, or clear bit 0 of addresses. */
196
197 static CORE_ADDR
198 is_mips16_addr (CORE_ADDR addr)
199 {
200 return ((addr) & 1);
201 }
202
203 static CORE_ADDR
204 unmake_mips16_addr (CORE_ADDR addr)
205 {
206 return ((addr) & ~(CORE_ADDR) 1);
207 }
208
209 static CORE_ADDR
210 make_mips16_addr (CORE_ADDR addr)
211 {
212 return ((addr) | (CORE_ADDR) 1);
213 }
214
215 /* Return the MIPS ABI associated with GDBARCH. */
216 enum mips_abi
217 mips_abi (struct gdbarch *gdbarch)
218 {
219 return gdbarch_tdep (gdbarch)->mips_abi;
220 }
221
222 int
223 mips_isa_regsize (struct gdbarch *gdbarch)
224 {
225 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
226
227 /* If we know how big the registers are, use that size. */
228 if (tdep->register_size_valid_p)
229 return tdep->register_size;
230
231 /* Fall back to the previous behavior. */
232 return (gdbarch_bfd_arch_info (gdbarch)->bits_per_word
233 / gdbarch_bfd_arch_info (gdbarch)->bits_per_byte);
234 }
235
236 /* Return the currently configured (or set) saved register size. */
237
238 unsigned int
239 mips_abi_regsize (struct gdbarch *gdbarch)
240 {
241 switch (mips_abi (gdbarch))
242 {
243 case MIPS_ABI_EABI32:
244 case MIPS_ABI_O32:
245 return 4;
246 case MIPS_ABI_N32:
247 case MIPS_ABI_N64:
248 case MIPS_ABI_O64:
249 case MIPS_ABI_EABI64:
250 return 8;
251 case MIPS_ABI_UNKNOWN:
252 case MIPS_ABI_LAST:
253 default:
254 internal_error (__FILE__, __LINE__, _("bad switch"));
255 }
256 }
257
258 /* Functions for setting and testing a bit in a minimal symbol that
259 marks it as 16-bit function. The MSB of the minimal symbol's
260 "info" field is used for this purpose.
261
262 gdbarch_elf_make_msymbol_special tests whether an ELF symbol is "special",
263 i.e. refers to a 16-bit function, and sets a "special" bit in a
264 minimal symbol to mark it as a 16-bit function
265
266 MSYMBOL_IS_SPECIAL tests the "special" bit in a minimal symbol */
267
268 static void
269 mips_elf_make_msymbol_special (asymbol * sym, struct minimal_symbol *msym)
270 {
271 if (((elf_symbol_type *) (sym))->internal_elf_sym.st_other == STO_MIPS16)
272 {
273 MSYMBOL_TARGET_FLAG_1 (msym) = 1;
274 }
275 }
276
277 static int
278 msymbol_is_special (struct minimal_symbol *msym)
279 {
280 return MSYMBOL_TARGET_FLAG_1 (msym);
281 }
282
283 /* XFER a value from the big/little/left end of the register.
284 Depending on the size of the value it might occupy the entire
285 register or just part of it. Make an allowance for this, aligning
286 things accordingly. */
287
288 static void
289 mips_xfer_register (struct gdbarch *gdbarch, struct regcache *regcache,
290 int reg_num, int length,
291 enum bfd_endian endian, gdb_byte *in,
292 const gdb_byte *out, int buf_offset)
293 {
294 int reg_offset = 0;
295
296 gdb_assert (reg_num >= gdbarch_num_regs (gdbarch));
297 /* Need to transfer the left or right part of the register, based on
298 the targets byte order. */
299 switch (endian)
300 {
301 case BFD_ENDIAN_BIG:
302 reg_offset = register_size (gdbarch, reg_num) - length;
303 break;
304 case BFD_ENDIAN_LITTLE:
305 reg_offset = 0;
306 break;
307 case BFD_ENDIAN_UNKNOWN: /* Indicates no alignment. */
308 reg_offset = 0;
309 break;
310 default:
311 internal_error (__FILE__, __LINE__, _("bad switch"));
312 }
313 if (mips_debug)
314 fprintf_unfiltered (gdb_stderr,
315 "xfer $%d, reg offset %d, buf offset %d, length %d, ",
316 reg_num, reg_offset, buf_offset, length);
317 if (mips_debug && out != NULL)
318 {
319 int i;
320 fprintf_unfiltered (gdb_stdlog, "out ");
321 for (i = 0; i < length; i++)
322 fprintf_unfiltered (gdb_stdlog, "%02x", out[buf_offset + i]);
323 }
324 if (in != NULL)
325 regcache_cooked_read_part (regcache, reg_num, reg_offset, length,
326 in + buf_offset);
327 if (out != NULL)
328 regcache_cooked_write_part (regcache, reg_num, reg_offset, length,
329 out + buf_offset);
330 if (mips_debug && in != NULL)
331 {
332 int i;
333 fprintf_unfiltered (gdb_stdlog, "in ");
334 for (i = 0; i < length; i++)
335 fprintf_unfiltered (gdb_stdlog, "%02x", in[buf_offset + i]);
336 }
337 if (mips_debug)
338 fprintf_unfiltered (gdb_stdlog, "\n");
339 }
340
341 /* Determine if a MIPS3 or later cpu is operating in MIPS{1,2} FPU
342 compatiblity mode. A return value of 1 means that we have
343 physical 64-bit registers, but should treat them as 32-bit registers. */
344
345 static int
346 mips2_fp_compat (struct frame_info *frame)
347 {
348 struct gdbarch *gdbarch = get_frame_arch (frame);
349 /* MIPS1 and MIPS2 have only 32 bit FPRs, and the FR bit is not
350 meaningful. */
351 if (register_size (gdbarch, mips_regnum (gdbarch)->fp0) == 4)
352 return 0;
353
354 #if 0
355 /* FIXME drow 2002-03-10: This is disabled until we can do it consistently,
356 in all the places we deal with FP registers. PR gdb/413. */
357 /* Otherwise check the FR bit in the status register - it controls
358 the FP compatiblity mode. If it is clear we are in compatibility
359 mode. */
360 if ((get_frame_register_unsigned (frame, MIPS_PS_REGNUM) & ST0_FR) == 0)
361 return 1;
362 #endif
363
364 return 0;
365 }
366
367 #define VM_MIN_ADDRESS (CORE_ADDR)0x400000
368
369 static CORE_ADDR heuristic_proc_start (struct gdbarch *, CORE_ADDR);
370
371 static void reinit_frame_cache_sfunc (char *, int, struct cmd_list_element *);
372
373 /* The list of available "set mips " and "show mips " commands. */
374
375 static struct cmd_list_element *setmipscmdlist = NULL;
376 static struct cmd_list_element *showmipscmdlist = NULL;
377
378 /* Integer registers 0 thru 31 are handled explicitly by
379 mips_register_name(). Processor specific registers 32 and above
380 are listed in the following tables. */
381
382 enum
383 { NUM_MIPS_PROCESSOR_REGS = (90 - 32) };
384
385 /* Generic MIPS. */
386
387 static const char *mips_generic_reg_names[NUM_MIPS_PROCESSOR_REGS] = {
388 "sr", "lo", "hi", "bad", "cause", "pc",
389 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
390 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
391 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
392 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
393 "fsr", "fir",
394 };
395
396 /* Names of IDT R3041 registers. */
397
398 static const char *mips_r3041_reg_names[] = {
399 "sr", "lo", "hi", "bad", "cause", "pc",
400 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
401 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
402 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
403 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
404 "fsr", "fir", "", /*"fp" */ "",
405 "", "", "bus", "ccfg", "", "", "", "",
406 "", "", "port", "cmp", "", "", "epc", "prid",
407 };
408
409 /* Names of tx39 registers. */
410
411 static const char *mips_tx39_reg_names[NUM_MIPS_PROCESSOR_REGS] = {
412 "sr", "lo", "hi", "bad", "cause", "pc",
413 "", "", "", "", "", "", "", "",
414 "", "", "", "", "", "", "", "",
415 "", "", "", "", "", "", "", "",
416 "", "", "", "", "", "", "", "",
417 "", "", "", "",
418 "", "", "", "", "", "", "", "",
419 "", "", "config", "cache", "debug", "depc", "epc",
420 };
421
422 /* Names of IRIX registers. */
423 static const char *mips_irix_reg_names[NUM_MIPS_PROCESSOR_REGS] = {
424 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
425 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
426 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
427 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
428 "pc", "cause", "bad", "hi", "lo", "fsr", "fir"
429 };
430
431 /* Names of registers with Linux kernels. */
432 static const char *mips_linux_reg_names[NUM_MIPS_PROCESSOR_REGS] = {
433 "sr", "lo", "hi", "bad", "cause", "pc",
434 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
435 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
436 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
437 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
438 "fsr", "fir"
439 };
440
441
442 /* Return the name of the register corresponding to REGNO. */
443 static const char *
444 mips_register_name (struct gdbarch *gdbarch, int regno)
445 {
446 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
447 /* GPR names for all ABIs other than n32/n64. */
448 static char *mips_gpr_names[] = {
449 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
450 "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7",
451 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
452 "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra",
453 };
454
455 /* GPR names for n32 and n64 ABIs. */
456 static char *mips_n32_n64_gpr_names[] = {
457 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
458 "a4", "a5", "a6", "a7", "t0", "t1", "t2", "t3",
459 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
460 "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra"
461 };
462
463 enum mips_abi abi = mips_abi (gdbarch);
464
465 /* Map [gdbarch_num_regs .. 2*gdbarch_num_regs) onto the raw registers,
466 but then don't make the raw register names visible. This (upper)
467 range of user visible register numbers are the pseudo-registers.
468
469 This approach was adopted accommodate the following scenario:
470 It is possible to debug a 64-bit device using a 32-bit
471 programming model. In such instances, the raw registers are
472 configured to be 64-bits wide, while the pseudo registers are
473 configured to be 32-bits wide. The registers that the user
474 sees - the pseudo registers - match the users expectations
475 given the programming model being used. */
476 int rawnum = regno % gdbarch_num_regs (gdbarch);
477 if (regno < gdbarch_num_regs (gdbarch))
478 return "";
479
480 /* The MIPS integer registers are always mapped from 0 to 31. The
481 names of the registers (which reflects the conventions regarding
482 register use) vary depending on the ABI. */
483 if (0 <= rawnum && rawnum < 32)
484 {
485 if (abi == MIPS_ABI_N32 || abi == MIPS_ABI_N64)
486 return mips_n32_n64_gpr_names[rawnum];
487 else
488 return mips_gpr_names[rawnum];
489 }
490 else if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
491 return tdesc_register_name (gdbarch, rawnum);
492 else if (32 <= rawnum && rawnum < gdbarch_num_regs (gdbarch))
493 {
494 gdb_assert (rawnum - 32 < NUM_MIPS_PROCESSOR_REGS);
495 if (tdep->mips_processor_reg_names[rawnum - 32])
496 return tdep->mips_processor_reg_names[rawnum - 32];
497 return "";
498 }
499 else
500 internal_error (__FILE__, __LINE__,
501 _("mips_register_name: bad register number %d"), rawnum);
502 }
503
504 /* Return the groups that a MIPS register can be categorised into. */
505
506 static int
507 mips_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
508 struct reggroup *reggroup)
509 {
510 int vector_p;
511 int float_p;
512 int raw_p;
513 int rawnum = regnum % gdbarch_num_regs (gdbarch);
514 int pseudo = regnum / gdbarch_num_regs (gdbarch);
515 if (reggroup == all_reggroup)
516 return pseudo;
517 vector_p = TYPE_VECTOR (register_type (gdbarch, regnum));
518 float_p = TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT;
519 /* FIXME: cagney/2003-04-13: Can't yet use gdbarch_num_regs
520 (gdbarch), as not all architectures are multi-arch. */
521 raw_p = rawnum < gdbarch_num_regs (gdbarch);
522 if (gdbarch_register_name (gdbarch, regnum) == NULL
523 || gdbarch_register_name (gdbarch, regnum)[0] == '\0')
524 return 0;
525 if (reggroup == float_reggroup)
526 return float_p && pseudo;
527 if (reggroup == vector_reggroup)
528 return vector_p && pseudo;
529 if (reggroup == general_reggroup)
530 return (!vector_p && !float_p) && pseudo;
531 /* Save the pseudo registers. Need to make certain that any code
532 extracting register values from a saved register cache also uses
533 pseudo registers. */
534 if (reggroup == save_reggroup)
535 return raw_p && pseudo;
536 /* Restore the same pseudo register. */
537 if (reggroup == restore_reggroup)
538 return raw_p && pseudo;
539 return 0;
540 }
541
542 /* Return the groups that a MIPS register can be categorised into.
543 This version is only used if we have a target description which
544 describes real registers (and their groups). */
545
546 static int
547 mips_tdesc_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
548 struct reggroup *reggroup)
549 {
550 int rawnum = regnum % gdbarch_num_regs (gdbarch);
551 int pseudo = regnum / gdbarch_num_regs (gdbarch);
552 int ret;
553
554 /* Only save, restore, and display the pseudo registers. Need to
555 make certain that any code extracting register values from a
556 saved register cache also uses pseudo registers.
557
558 Note: saving and restoring the pseudo registers is slightly
559 strange; if we have 64 bits, we should save and restore all
560 64 bits. But this is hard and has little benefit. */
561 if (!pseudo)
562 return 0;
563
564 ret = tdesc_register_in_reggroup_p (gdbarch, rawnum, reggroup);
565 if (ret != -1)
566 return ret;
567
568 return mips_register_reggroup_p (gdbarch, regnum, reggroup);
569 }
570
571 /* Map the symbol table registers which live in the range [1 *
572 gdbarch_num_regs .. 2 * gdbarch_num_regs) back onto the corresponding raw
573 registers. Take care of alignment and size problems. */
574
575 static enum register_status
576 mips_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
577 int cookednum, gdb_byte *buf)
578 {
579 int rawnum = cookednum % gdbarch_num_regs (gdbarch);
580 gdb_assert (cookednum >= gdbarch_num_regs (gdbarch)
581 && cookednum < 2 * gdbarch_num_regs (gdbarch));
582 if (register_size (gdbarch, rawnum) == register_size (gdbarch, cookednum))
583 return regcache_raw_read (regcache, rawnum, buf);
584 else if (register_size (gdbarch, rawnum) >
585 register_size (gdbarch, cookednum))
586 {
587 if (gdbarch_tdep (gdbarch)->mips64_transfers_32bit_regs_p)
588 return regcache_raw_read_part (regcache, rawnum, 0, 4, buf);
589 else
590 {
591 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
592 LONGEST regval;
593 enum register_status status;
594
595 status = regcache_raw_read_signed (regcache, rawnum, &regval);
596 if (status == REG_VALID)
597 store_signed_integer (buf, 4, byte_order, regval);
598 return status;
599 }
600 }
601 else
602 internal_error (__FILE__, __LINE__, _("bad register size"));
603 }
604
605 static void
606 mips_pseudo_register_write (struct gdbarch *gdbarch,
607 struct regcache *regcache, int cookednum,
608 const gdb_byte *buf)
609 {
610 int rawnum = cookednum % gdbarch_num_regs (gdbarch);
611 gdb_assert (cookednum >= gdbarch_num_regs (gdbarch)
612 && cookednum < 2 * gdbarch_num_regs (gdbarch));
613 if (register_size (gdbarch, rawnum) == register_size (gdbarch, cookednum))
614 regcache_raw_write (regcache, rawnum, buf);
615 else if (register_size (gdbarch, rawnum) >
616 register_size (gdbarch, cookednum))
617 {
618 if (gdbarch_tdep (gdbarch)->mips64_transfers_32bit_regs_p)
619 regcache_raw_write_part (regcache, rawnum, 0, 4, buf);
620 else
621 {
622 /* Sign extend the shortened version of the register prior
623 to placing it in the raw register. This is required for
624 some mips64 parts in order to avoid unpredictable behavior. */
625 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
626 LONGEST regval = extract_signed_integer (buf, 4, byte_order);
627 regcache_raw_write_signed (regcache, rawnum, regval);
628 }
629 }
630 else
631 internal_error (__FILE__, __LINE__, _("bad register size"));
632 }
633
634 static int
635 mips_ax_pseudo_register_collect (struct gdbarch *gdbarch,
636 struct agent_expr *ax, int reg)
637 {
638 int rawnum = reg % gdbarch_num_regs (gdbarch);
639 gdb_assert (reg >= gdbarch_num_regs (gdbarch)
640 && reg < 2 * gdbarch_num_regs (gdbarch));
641
642 ax_reg_mask (ax, rawnum);
643
644 return 0;
645 }
646
647 static int
648 mips_ax_pseudo_register_push_stack (struct gdbarch *gdbarch,
649 struct agent_expr *ax, int reg)
650 {
651 int rawnum = reg % gdbarch_num_regs (gdbarch);
652 gdb_assert (reg >= gdbarch_num_regs (gdbarch)
653 && reg < 2 * gdbarch_num_regs (gdbarch));
654 if (register_size (gdbarch, rawnum) >= register_size (gdbarch, reg))
655 {
656 ax_reg (ax, rawnum);
657
658 if (register_size (gdbarch, rawnum) > register_size (gdbarch, reg))
659 {
660 if (!gdbarch_tdep (gdbarch)->mips64_transfers_32bit_regs_p
661 || gdbarch_byte_order (gdbarch) != BFD_ENDIAN_BIG)
662 {
663 ax_const_l (ax, 32);
664 ax_simple (ax, aop_lsh);
665 }
666 ax_const_l (ax, 32);
667 ax_simple (ax, aop_rsh_signed);
668 }
669 }
670 else
671 internal_error (__FILE__, __LINE__, _("bad register size"));
672
673 return 0;
674 }
675
676 /* Table to translate MIPS16 register field to actual register number. */
677 static int mips16_to_32_reg[8] = { 16, 17, 2, 3, 4, 5, 6, 7 };
678
679 /* Heuristic_proc_start may hunt through the text section for a long
680 time across a 2400 baud serial line. Allows the user to limit this
681 search. */
682
683 static unsigned int heuristic_fence_post = 0;
684
685 /* Number of bytes of storage in the actual machine representation for
686 register N. NOTE: This defines the pseudo register type so need to
687 rebuild the architecture vector. */
688
689 static int mips64_transfers_32bit_regs_p = 0;
690
691 static void
692 set_mips64_transfers_32bit_regs (char *args, int from_tty,
693 struct cmd_list_element *c)
694 {
695 struct gdbarch_info info;
696 gdbarch_info_init (&info);
697 /* FIXME: cagney/2003-11-15: Should be setting a field in "info"
698 instead of relying on globals. Doing that would let generic code
699 handle the search for this specific architecture. */
700 if (!gdbarch_update_p (info))
701 {
702 mips64_transfers_32bit_regs_p = 0;
703 error (_("32-bit compatibility mode not supported"));
704 }
705 }
706
707 /* Convert to/from a register and the corresponding memory value. */
708
709 /* This predicate tests for the case of an 8 byte floating point
710 value that is being transferred to or from a pair of floating point
711 registers each of which are (or are considered to be) only 4 bytes
712 wide. */
713 static int
714 mips_convert_register_float_case_p (struct gdbarch *gdbarch, int regnum,
715 struct type *type)
716 {
717 return (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
718 && register_size (gdbarch, regnum) == 4
719 && (regnum % gdbarch_num_regs (gdbarch))
720 >= mips_regnum (gdbarch)->fp0
721 && (regnum % gdbarch_num_regs (gdbarch))
722 < mips_regnum (gdbarch)->fp0 + 32
723 && TYPE_CODE (type) == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8);
724 }
725
726 /* This predicate tests for the case of a value of less than 8
727 bytes in width that is being transfered to or from an 8 byte
728 general purpose register. */
729 static int
730 mips_convert_register_gpreg_case_p (struct gdbarch *gdbarch, int regnum,
731 struct type *type)
732 {
733 int num_regs = gdbarch_num_regs (gdbarch);
734
735 return (register_size (gdbarch, regnum) == 8
736 && regnum % num_regs > 0 && regnum % num_regs < 32
737 && TYPE_LENGTH (type) < 8);
738 }
739
740 static int
741 mips_convert_register_p (struct gdbarch *gdbarch,
742 int regnum, struct type *type)
743 {
744 return mips_convert_register_float_case_p (gdbarch, regnum, type)
745 || mips_convert_register_gpreg_case_p (gdbarch, regnum, type);
746 }
747
748 static int
749 mips_register_to_value (struct frame_info *frame, int regnum,
750 struct type *type, gdb_byte *to,
751 int *optimizedp, int *unavailablep)
752 {
753 struct gdbarch *gdbarch = get_frame_arch (frame);
754
755 if (mips_convert_register_float_case_p (gdbarch, regnum, type))
756 {
757 get_frame_register (frame, regnum + 0, to + 4);
758 get_frame_register (frame, regnum + 1, to + 0);
759
760 if (!get_frame_register_bytes (frame, regnum + 0, 0, 4, to + 4,
761 optimizedp, unavailablep))
762 return 0;
763
764 if (!get_frame_register_bytes (frame, regnum + 1, 0, 4, to + 0,
765 optimizedp, unavailablep))
766 return 0;
767 *optimizedp = *unavailablep = 0;
768 return 1;
769 }
770 else if (mips_convert_register_gpreg_case_p (gdbarch, regnum, type))
771 {
772 int len = TYPE_LENGTH (type);
773 CORE_ADDR offset;
774
775 offset = gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG ? 8 - len : 0;
776 if (!get_frame_register_bytes (frame, regnum, offset, len, to,
777 optimizedp, unavailablep))
778 return 0;
779
780 *optimizedp = *unavailablep = 0;
781 return 1;
782 }
783 else
784 {
785 internal_error (__FILE__, __LINE__,
786 _("mips_register_to_value: unrecognized case"));
787 }
788 }
789
790 static void
791 mips_value_to_register (struct frame_info *frame, int regnum,
792 struct type *type, const gdb_byte *from)
793 {
794 struct gdbarch *gdbarch = get_frame_arch (frame);
795
796 if (mips_convert_register_float_case_p (gdbarch, regnum, type))
797 {
798 put_frame_register (frame, regnum + 0, from + 4);
799 put_frame_register (frame, regnum + 1, from + 0);
800 }
801 else if (mips_convert_register_gpreg_case_p (gdbarch, regnum, type))
802 {
803 gdb_byte fill[8];
804 int len = TYPE_LENGTH (type);
805
806 /* Sign extend values, irrespective of type, that are stored to
807 a 64-bit general purpose register. (32-bit unsigned values
808 are stored as signed quantities within a 64-bit register.
809 When performing an operation, in compiled code, that combines
810 a 32-bit unsigned value with a signed 64-bit value, a type
811 conversion is first performed that zeroes out the high 32 bits.) */
812 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
813 {
814 if (from[0] & 0x80)
815 store_signed_integer (fill, 8, BFD_ENDIAN_BIG, -1);
816 else
817 store_signed_integer (fill, 8, BFD_ENDIAN_BIG, 0);
818 put_frame_register_bytes (frame, regnum, 0, 8 - len, fill);
819 put_frame_register_bytes (frame, regnum, 8 - len, len, from);
820 }
821 else
822 {
823 if (from[len-1] & 0x80)
824 store_signed_integer (fill, 8, BFD_ENDIAN_LITTLE, -1);
825 else
826 store_signed_integer (fill, 8, BFD_ENDIAN_LITTLE, 0);
827 put_frame_register_bytes (frame, regnum, 0, len, from);
828 put_frame_register_bytes (frame, regnum, len, 8 - len, fill);
829 }
830 }
831 else
832 {
833 internal_error (__FILE__, __LINE__,
834 _("mips_value_to_register: unrecognized case"));
835 }
836 }
837
838 /* Return the GDB type object for the "standard" data type of data in
839 register REG. */
840
841 static struct type *
842 mips_register_type (struct gdbarch *gdbarch, int regnum)
843 {
844 gdb_assert (regnum >= 0 && regnum < 2 * gdbarch_num_regs (gdbarch));
845 if ((regnum % gdbarch_num_regs (gdbarch)) >= mips_regnum (gdbarch)->fp0
846 && (regnum % gdbarch_num_regs (gdbarch))
847 < mips_regnum (gdbarch)->fp0 + 32)
848 {
849 /* The floating-point registers raw, or cooked, always match
850 mips_isa_regsize(), and also map 1:1, byte for byte. */
851 if (mips_isa_regsize (gdbarch) == 4)
852 return builtin_type (gdbarch)->builtin_float;
853 else
854 return builtin_type (gdbarch)->builtin_double;
855 }
856 else if (regnum < gdbarch_num_regs (gdbarch))
857 {
858 /* The raw or ISA registers. These are all sized according to
859 the ISA regsize. */
860 if (mips_isa_regsize (gdbarch) == 4)
861 return builtin_type (gdbarch)->builtin_int32;
862 else
863 return builtin_type (gdbarch)->builtin_int64;
864 }
865 else
866 {
867 int rawnum = regnum - gdbarch_num_regs (gdbarch);
868
869 /* The cooked or ABI registers. These are sized according to
870 the ABI (with a few complications). */
871 if (rawnum == mips_regnum (gdbarch)->fp_control_status
872 || rawnum == mips_regnum (gdbarch)->fp_implementation_revision)
873 return builtin_type (gdbarch)->builtin_int32;
874 else if (gdbarch_osabi (gdbarch) != GDB_OSABI_IRIX
875 && gdbarch_osabi (gdbarch) != GDB_OSABI_LINUX
876 && rawnum >= MIPS_FIRST_EMBED_REGNUM
877 && rawnum <= MIPS_LAST_EMBED_REGNUM)
878 /* The pseudo/cooked view of the embedded registers is always
879 32-bit. The raw view is handled below. */
880 return builtin_type (gdbarch)->builtin_int32;
881 else if (gdbarch_tdep (gdbarch)->mips64_transfers_32bit_regs_p)
882 /* The target, while possibly using a 64-bit register buffer,
883 is only transfering 32-bits of each integer register.
884 Reflect this in the cooked/pseudo (ABI) register value. */
885 return builtin_type (gdbarch)->builtin_int32;
886 else if (mips_abi_regsize (gdbarch) == 4)
887 /* The ABI is restricted to 32-bit registers (the ISA could be
888 32- or 64-bit). */
889 return builtin_type (gdbarch)->builtin_int32;
890 else
891 /* 64-bit ABI. */
892 return builtin_type (gdbarch)->builtin_int64;
893 }
894 }
895
896 /* Return the GDB type for the pseudo register REGNUM, which is the
897 ABI-level view. This function is only called if there is a target
898 description which includes registers, so we know precisely the
899 types of hardware registers. */
900
901 static struct type *
902 mips_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
903 {
904 const int num_regs = gdbarch_num_regs (gdbarch);
905 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
906 int rawnum = regnum % num_regs;
907 struct type *rawtype;
908
909 gdb_assert (regnum >= num_regs && regnum < 2 * num_regs);
910
911 /* Absent registers are still absent. */
912 rawtype = gdbarch_register_type (gdbarch, rawnum);
913 if (TYPE_LENGTH (rawtype) == 0)
914 return rawtype;
915
916 if (rawnum >= mips_regnum (gdbarch)->fp0
917 && rawnum < mips_regnum (gdbarch)->fp0 + 32)
918 /* Present the floating point registers however the hardware did;
919 do not try to convert between FPU layouts. */
920 return rawtype;
921
922 /* Use pointer types for registers if we can. For n32 we can not,
923 since we do not have a 64-bit pointer type. */
924 if (mips_abi_regsize (gdbarch)
925 == TYPE_LENGTH (builtin_type (gdbarch)->builtin_data_ptr))
926 {
927 if (rawnum == MIPS_SP_REGNUM
928 || rawnum == mips_regnum (gdbarch)->badvaddr)
929 return builtin_type (gdbarch)->builtin_data_ptr;
930 else if (rawnum == mips_regnum (gdbarch)->pc)
931 return builtin_type (gdbarch)->builtin_func_ptr;
932 }
933
934 if (mips_abi_regsize (gdbarch) == 4 && TYPE_LENGTH (rawtype) == 8
935 && ((rawnum >= MIPS_ZERO_REGNUM && rawnum <= MIPS_PS_REGNUM)
936 || rawnum == mips_regnum (gdbarch)->lo
937 || rawnum == mips_regnum (gdbarch)->hi
938 || rawnum == mips_regnum (gdbarch)->badvaddr
939 || rawnum == mips_regnum (gdbarch)->cause
940 || rawnum == mips_regnum (gdbarch)->pc
941 || (mips_regnum (gdbarch)->dspacc != -1
942 && rawnum >= mips_regnum (gdbarch)->dspacc
943 && rawnum < mips_regnum (gdbarch)->dspacc + 6)))
944 return builtin_type (gdbarch)->builtin_int32;
945
946 if (gdbarch_osabi (gdbarch) != GDB_OSABI_IRIX
947 && gdbarch_osabi (gdbarch) != GDB_OSABI_LINUX
948 && rawnum >= MIPS_EMBED_FP0_REGNUM + 32
949 && rawnum <= MIPS_LAST_EMBED_REGNUM)
950 {
951 /* The pseudo/cooked view of embedded registers is always
952 32-bit, even if the target transfers 64-bit values for them.
953 New targets relying on XML descriptions should only transfer
954 the necessary 32 bits, but older versions of GDB expected 64,
955 so allow the target to provide 64 bits without interfering
956 with the displayed type. */
957 return builtin_type (gdbarch)->builtin_int32;
958 }
959
960 /* For all other registers, pass through the hardware type. */
961 return rawtype;
962 }
963
964 /* Should the upper word of 64-bit addresses be zeroed? */
965 enum auto_boolean mask_address_var = AUTO_BOOLEAN_AUTO;
966
967 static int
968 mips_mask_address_p (struct gdbarch_tdep *tdep)
969 {
970 switch (mask_address_var)
971 {
972 case AUTO_BOOLEAN_TRUE:
973 return 1;
974 case AUTO_BOOLEAN_FALSE:
975 return 0;
976 break;
977 case AUTO_BOOLEAN_AUTO:
978 return tdep->default_mask_address_p;
979 default:
980 internal_error (__FILE__, __LINE__,
981 _("mips_mask_address_p: bad switch"));
982 return -1;
983 }
984 }
985
986 static void
987 show_mask_address (struct ui_file *file, int from_tty,
988 struct cmd_list_element *c, const char *value)
989 {
990 struct gdbarch_tdep *tdep = gdbarch_tdep (target_gdbarch);
991
992 deprecated_show_value_hack (file, from_tty, c, value);
993 switch (mask_address_var)
994 {
995 case AUTO_BOOLEAN_TRUE:
996 printf_filtered ("The 32 bit mips address mask is enabled\n");
997 break;
998 case AUTO_BOOLEAN_FALSE:
999 printf_filtered ("The 32 bit mips address mask is disabled\n");
1000 break;
1001 case AUTO_BOOLEAN_AUTO:
1002 printf_filtered
1003 ("The 32 bit address mask is set automatically. Currently %s\n",
1004 mips_mask_address_p (tdep) ? "enabled" : "disabled");
1005 break;
1006 default:
1007 internal_error (__FILE__, __LINE__, _("show_mask_address: bad switch"));
1008 break;
1009 }
1010 }
1011
1012 /* Tell if the program counter value in MEMADDR is in a MIPS16 function. */
1013
1014 int
1015 mips_pc_is_mips16 (CORE_ADDR memaddr)
1016 {
1017 struct minimal_symbol *sym;
1018
1019 /* A flag indicating that this is a MIPS16 function is stored by
1020 elfread.c in the high bit of the info field. Use this to decide
1021 if the function is MIPS16 or normal MIPS. Otherwise if bit 0 of
1022 the address is set, assume this is a MIPS16 address. */
1023 sym = lookup_minimal_symbol_by_pc (memaddr);
1024 if (sym)
1025 return msymbol_is_special (sym);
1026 else
1027 return is_mips16_addr (memaddr);
1028 }
1029
1030 /* MIPS believes that the PC has a sign extended value. Perhaps the
1031 all registers should be sign extended for simplicity? */
1032
1033 static CORE_ADDR
1034 mips_read_pc (struct regcache *regcache)
1035 {
1036 ULONGEST pc;
1037 int regnum = mips_regnum (get_regcache_arch (regcache))->pc;
1038 regcache_cooked_read_signed (regcache, regnum, &pc);
1039 if (is_mips16_addr (pc))
1040 pc = unmake_mips16_addr (pc);
1041 return pc;
1042 }
1043
1044 static CORE_ADDR
1045 mips_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
1046 {
1047 ULONGEST pc;
1048
1049 pc = frame_unwind_register_signed
1050 (next_frame, gdbarch_num_regs (gdbarch) + mips_regnum (gdbarch)->pc);
1051 if (is_mips16_addr (pc))
1052 pc = unmake_mips16_addr (pc);
1053 return pc;
1054 }
1055
1056 static CORE_ADDR
1057 mips_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
1058 {
1059 return frame_unwind_register_signed
1060 (next_frame, gdbarch_num_regs (gdbarch) + MIPS_SP_REGNUM);
1061 }
1062
1063 /* Assuming THIS_FRAME is a dummy, return the frame ID of that
1064 dummy frame. The frame ID's base needs to match the TOS value
1065 saved by save_dummy_frame_tos(), and the PC match the dummy frame's
1066 breakpoint. */
1067
1068 static struct frame_id
1069 mips_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1070 {
1071 return frame_id_build
1072 (get_frame_register_signed (this_frame,
1073 gdbarch_num_regs (gdbarch)
1074 + MIPS_SP_REGNUM),
1075 get_frame_pc (this_frame));
1076 }
1077
1078 static void
1079 mips_write_pc (struct regcache *regcache, CORE_ADDR pc)
1080 {
1081 int regnum = mips_regnum (get_regcache_arch (regcache))->pc;
1082 if (mips_pc_is_mips16 (pc))
1083 regcache_cooked_write_unsigned (regcache, regnum, make_mips16_addr (pc));
1084 else
1085 regcache_cooked_write_unsigned (regcache, regnum, pc);
1086 }
1087
1088 /* Fetch and return instruction from the specified location. If the PC
1089 is odd, assume it's a MIPS16 instruction; otherwise MIPS32. */
1090
1091 static ULONGEST
1092 mips_fetch_instruction (struct gdbarch *gdbarch, CORE_ADDR addr)
1093 {
1094 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1095 gdb_byte buf[MIPS_INSN32_SIZE];
1096 int instlen;
1097 int status;
1098
1099 if (mips_pc_is_mips16 (addr))
1100 {
1101 instlen = MIPS_INSN16_SIZE;
1102 addr = unmake_mips16_addr (addr);
1103 }
1104 else
1105 instlen = MIPS_INSN32_SIZE;
1106 status = target_read_memory (addr, buf, instlen);
1107 if (status)
1108 memory_error (status, addr);
1109 return extract_unsigned_integer (buf, instlen, byte_order);
1110 }
1111
1112 /* These are the fields of 32 bit mips instructions. */
1113 #define mips32_op(x) (x >> 26)
1114 #define itype_op(x) (x >> 26)
1115 #define itype_rs(x) ((x >> 21) & 0x1f)
1116 #define itype_rt(x) ((x >> 16) & 0x1f)
1117 #define itype_immediate(x) (x & 0xffff)
1118
1119 #define jtype_op(x) (x >> 26)
1120 #define jtype_target(x) (x & 0x03ffffff)
1121
1122 #define rtype_op(x) (x >> 26)
1123 #define rtype_rs(x) ((x >> 21) & 0x1f)
1124 #define rtype_rt(x) ((x >> 16) & 0x1f)
1125 #define rtype_rd(x) ((x >> 11) & 0x1f)
1126 #define rtype_shamt(x) ((x >> 6) & 0x1f)
1127 #define rtype_funct(x) (x & 0x3f)
1128
1129 static LONGEST
1130 mips32_relative_offset (ULONGEST inst)
1131 {
1132 return ((itype_immediate (inst) ^ 0x8000) - 0x8000) << 2;
1133 }
1134
1135 /* Determine the address of the next instruction executed after the INST
1136 floating condition branch instruction at PC. COUNT specifies the
1137 number of the floating condition bits tested by the branch. */
1138
1139 static CORE_ADDR
1140 mips32_bc1_pc (struct gdbarch *gdbarch, struct frame_info *frame,
1141 ULONGEST inst, CORE_ADDR pc, int count)
1142 {
1143 int fcsr = mips_regnum (gdbarch)->fp_control_status;
1144 int cnum = (itype_rt (inst) >> 2) & (count - 1);
1145 int tf = itype_rt (inst) & 1;
1146 int mask = (1 << count) - 1;
1147 ULONGEST fcs;
1148 int cond;
1149
1150 if (fcsr == -1)
1151 /* No way to handle; it'll most likely trap anyway. */
1152 return pc;
1153
1154 fcs = get_frame_register_unsigned (frame, fcsr);
1155 cond = ((fcs >> 24) & 0xfe) | ((fcs >> 23) & 0x01);
1156
1157 if (((cond >> cnum) & mask) != mask * !tf)
1158 pc += mips32_relative_offset (inst);
1159 else
1160 pc += 4;
1161
1162 return pc;
1163 }
1164
1165 /* Determine where to set a single step breakpoint while considering
1166 branch prediction. */
1167 static CORE_ADDR
1168 mips32_next_pc (struct frame_info *frame, CORE_ADDR pc)
1169 {
1170 struct gdbarch *gdbarch = get_frame_arch (frame);
1171 unsigned long inst;
1172 int op;
1173 inst = mips_fetch_instruction (gdbarch, pc);
1174 if ((inst & 0xe0000000) != 0) /* Not a special, jump or branch
1175 instruction. */
1176 {
1177 if (itype_op (inst) >> 2 == 5)
1178 /* BEQL, BNEL, BLEZL, BGTZL: bits 0101xx */
1179 {
1180 op = (itype_op (inst) & 0x03);
1181 switch (op)
1182 {
1183 case 0: /* BEQL */
1184 goto equal_branch;
1185 case 1: /* BNEL */
1186 goto neq_branch;
1187 case 2: /* BLEZL */
1188 goto less_branch;
1189 case 3: /* BGTZL */
1190 goto greater_branch;
1191 default:
1192 pc += 4;
1193 }
1194 }
1195 else if (itype_op (inst) == 17 && itype_rs (inst) == 8)
1196 /* BC1F, BC1FL, BC1T, BC1TL: 010001 01000 */
1197 pc = mips32_bc1_pc (gdbarch, frame, inst, pc + 4, 1);
1198 else if (itype_op (inst) == 17 && itype_rs (inst) == 9
1199 && (itype_rt (inst) & 2) == 0)
1200 /* BC1ANY2F, BC1ANY2T: 010001 01001 xxx0x */
1201 pc = mips32_bc1_pc (gdbarch, frame, inst, pc + 4, 2);
1202 else if (itype_op (inst) == 17 && itype_rs (inst) == 10
1203 && (itype_rt (inst) & 2) == 0)
1204 /* BC1ANY4F, BC1ANY4T: 010001 01010 xxx0x */
1205 pc = mips32_bc1_pc (gdbarch, frame, inst, pc + 4, 4);
1206 else
1207 pc += 4; /* Not a branch, next instruction is easy. */
1208 }
1209 else
1210 { /* This gets way messy. */
1211
1212 /* Further subdivide into SPECIAL, REGIMM and other. */
1213 switch (op = itype_op (inst) & 0x07) /* Extract bits 28,27,26. */
1214 {
1215 case 0: /* SPECIAL */
1216 op = rtype_funct (inst);
1217 switch (op)
1218 {
1219 case 8: /* JR */
1220 case 9: /* JALR */
1221 /* Set PC to that address. */
1222 pc = get_frame_register_signed (frame, rtype_rs (inst));
1223 break;
1224 case 12: /* SYSCALL */
1225 {
1226 struct gdbarch_tdep *tdep;
1227
1228 tdep = gdbarch_tdep (get_frame_arch (frame));
1229 if (tdep->syscall_next_pc != NULL)
1230 pc = tdep->syscall_next_pc (frame);
1231 else
1232 pc += 4;
1233 }
1234 break;
1235 default:
1236 pc += 4;
1237 }
1238
1239 break; /* end SPECIAL */
1240 case 1: /* REGIMM */
1241 {
1242 op = itype_rt (inst); /* branch condition */
1243 switch (op)
1244 {
1245 case 0: /* BLTZ */
1246 case 2: /* BLTZL */
1247 case 16: /* BLTZAL */
1248 case 18: /* BLTZALL */
1249 less_branch:
1250 if (get_frame_register_signed (frame, itype_rs (inst)) < 0)
1251 pc += mips32_relative_offset (inst) + 4;
1252 else
1253 pc += 8; /* after the delay slot */
1254 break;
1255 case 1: /* BGEZ */
1256 case 3: /* BGEZL */
1257 case 17: /* BGEZAL */
1258 case 19: /* BGEZALL */
1259 if (get_frame_register_signed (frame, itype_rs (inst)) >= 0)
1260 pc += mips32_relative_offset (inst) + 4;
1261 else
1262 pc += 8; /* after the delay slot */
1263 break;
1264 case 0x1c: /* BPOSGE32 */
1265 case 0x1e: /* BPOSGE64 */
1266 pc += 4;
1267 if (itype_rs (inst) == 0)
1268 {
1269 unsigned int pos = (op & 2) ? 64 : 32;
1270 int dspctl = mips_regnum (gdbarch)->dspctl;
1271
1272 if (dspctl == -1)
1273 /* No way to handle; it'll most likely trap anyway. */
1274 break;
1275
1276 if ((get_frame_register_unsigned (frame,
1277 dspctl) & 0x7f) >= pos)
1278 pc += mips32_relative_offset (inst);
1279 else
1280 pc += 4;
1281 }
1282 break;
1283 /* All of the other instructions in the REGIMM category */
1284 default:
1285 pc += 4;
1286 }
1287 }
1288 break; /* end REGIMM */
1289 case 2: /* J */
1290 case 3: /* JAL */
1291 {
1292 unsigned long reg;
1293 reg = jtype_target (inst) << 2;
1294 /* Upper four bits get never changed... */
1295 pc = reg + ((pc + 4) & ~(CORE_ADDR) 0x0fffffff);
1296 }
1297 break;
1298 /* FIXME case JALX : */
1299 {
1300 unsigned long reg;
1301 reg = jtype_target (inst) << 2;
1302 pc = reg + ((pc + 4) & ~(CORE_ADDR) 0x0fffffff) + 1; /* yes, +1 */
1303 /* Add 1 to indicate 16 bit mode - Invert ISA mode */
1304 }
1305 break; /* The new PC will be alternate mode */
1306 case 4: /* BEQ, BEQL */
1307 equal_branch:
1308 if (get_frame_register_signed (frame, itype_rs (inst)) ==
1309 get_frame_register_signed (frame, itype_rt (inst)))
1310 pc += mips32_relative_offset (inst) + 4;
1311 else
1312 pc += 8;
1313 break;
1314 case 5: /* BNE, BNEL */
1315 neq_branch:
1316 if (get_frame_register_signed (frame, itype_rs (inst)) !=
1317 get_frame_register_signed (frame, itype_rt (inst)))
1318 pc += mips32_relative_offset (inst) + 4;
1319 else
1320 pc += 8;
1321 break;
1322 case 6: /* BLEZ, BLEZL */
1323 if (get_frame_register_signed (frame, itype_rs (inst)) <= 0)
1324 pc += mips32_relative_offset (inst) + 4;
1325 else
1326 pc += 8;
1327 break;
1328 case 7:
1329 default:
1330 greater_branch: /* BGTZ, BGTZL */
1331 if (get_frame_register_signed (frame, itype_rs (inst)) > 0)
1332 pc += mips32_relative_offset (inst) + 4;
1333 else
1334 pc += 8;
1335 break;
1336 } /* switch */
1337 } /* else */
1338 return pc;
1339 } /* mips32_next_pc */
1340
1341 /* Decoding the next place to set a breakpoint is irregular for the
1342 mips 16 variant, but fortunately, there fewer instructions. We have
1343 to cope ith extensions for 16 bit instructions and a pair of actual
1344 32 bit instructions. We dont want to set a single step instruction
1345 on the extend instruction either. */
1346
1347 /* Lots of mips16 instruction formats */
1348 /* Predicting jumps requires itype,ritype,i8type
1349 and their extensions extItype,extritype,extI8type. */
1350 enum mips16_inst_fmts
1351 {
1352 itype, /* 0 immediate 5,10 */
1353 ritype, /* 1 5,3,8 */
1354 rrtype, /* 2 5,3,3,5 */
1355 rritype, /* 3 5,3,3,5 */
1356 rrrtype, /* 4 5,3,3,3,2 */
1357 rriatype, /* 5 5,3,3,1,4 */
1358 shifttype, /* 6 5,3,3,3,2 */
1359 i8type, /* 7 5,3,8 */
1360 i8movtype, /* 8 5,3,3,5 */
1361 i8mov32rtype, /* 9 5,3,5,3 */
1362 i64type, /* 10 5,3,8 */
1363 ri64type, /* 11 5,3,3,5 */
1364 jalxtype, /* 12 5,1,5,5,16 - a 32 bit instruction */
1365 exiItype, /* 13 5,6,5,5,1,1,1,1,1,1,5 */
1366 extRitype, /* 14 5,6,5,5,3,1,1,1,5 */
1367 extRRItype, /* 15 5,5,5,5,3,3,5 */
1368 extRRIAtype, /* 16 5,7,4,5,3,3,1,4 */
1369 EXTshifttype, /* 17 5,5,1,1,1,1,1,1,5,3,3,1,1,1,2 */
1370 extI8type, /* 18 5,6,5,5,3,1,1,1,5 */
1371 extI64type, /* 19 5,6,5,5,3,1,1,1,5 */
1372 extRi64type, /* 20 5,6,5,5,3,3,5 */
1373 extshift64type /* 21 5,5,1,1,1,1,1,1,5,1,1,1,3,5 */
1374 };
1375 /* I am heaping all the fields of the formats into one structure and
1376 then, only the fields which are involved in instruction extension. */
1377 struct upk_mips16
1378 {
1379 CORE_ADDR offset;
1380 unsigned int regx; /* Function in i8 type. */
1381 unsigned int regy;
1382 };
1383
1384
1385 /* The EXT-I, EXT-ri nad EXT-I8 instructions all have the same format
1386 for the bits which make up the immediate extension. */
1387
1388 static CORE_ADDR
1389 extended_offset (unsigned int extension)
1390 {
1391 CORE_ADDR value;
1392
1393 value = (extension >> 16) & 0x1f; /* Extract 15:11. */
1394 value = value << 6;
1395 value |= (extension >> 21) & 0x3f; /* Extract 10:5. */
1396 value = value << 5;
1397 value |= extension & 0x1f; /* Extract 4:0. */
1398
1399 return value;
1400 }
1401
1402 /* Only call this function if you know that this is an extendable
1403 instruction. It won't malfunction, but why make excess remote memory
1404 references? If the immediate operands get sign extended or something,
1405 do it after the extension is performed. */
1406 /* FIXME: Every one of these cases needs to worry about sign extension
1407 when the offset is to be used in relative addressing. */
1408
1409 static unsigned int
1410 fetch_mips_16 (struct gdbarch *gdbarch, CORE_ADDR pc)
1411 {
1412 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1413 gdb_byte buf[8];
1414 pc &= 0xfffffffe; /* Clear the low order bit. */
1415 target_read_memory (pc, buf, 2);
1416 return extract_unsigned_integer (buf, 2, byte_order);
1417 }
1418
1419 static void
1420 unpack_mips16 (struct gdbarch *gdbarch, CORE_ADDR pc,
1421 unsigned int extension,
1422 unsigned int inst,
1423 enum mips16_inst_fmts insn_format, struct upk_mips16 *upk)
1424 {
1425 CORE_ADDR offset;
1426 int regx;
1427 int regy;
1428 switch (insn_format)
1429 {
1430 case itype:
1431 {
1432 CORE_ADDR value;
1433 if (extension)
1434 {
1435 value = extended_offset ((extension << 16) | inst);
1436 value = (value ^ 0x8000) - 0x8000; /* Sign-extend. */
1437 }
1438 else
1439 {
1440 value = inst & 0x7ff;
1441 value = (value ^ 0x400) - 0x400; /* Sign-extend. */
1442 }
1443 offset = value;
1444 regx = -1;
1445 regy = -1;
1446 }
1447 break;
1448 case ritype:
1449 case i8type:
1450 { /* A register identifier and an offset. */
1451 /* Most of the fields are the same as I type but the
1452 immediate value is of a different length. */
1453 CORE_ADDR value;
1454 if (extension)
1455 {
1456 value = extended_offset ((extension << 16) | inst);
1457 value = (value ^ 0x8000) - 0x8000; /* Sign-extend. */
1458 }
1459 else
1460 {
1461 value = inst & 0xff; /* 8 bits */
1462 value = (value ^ 0x80) - 0x80; /* Sign-extend. */
1463 }
1464 offset = value;
1465 regx = (inst >> 8) & 0x07; /* i8 funct */
1466 regy = -1;
1467 break;
1468 }
1469 case jalxtype:
1470 {
1471 unsigned long value;
1472 unsigned int nexthalf;
1473 value = ((inst & 0x1f) << 5) | ((inst >> 5) & 0x1f);
1474 value = value << 16;
1475 nexthalf = mips_fetch_instruction (gdbarch, pc + 2); /* low bit
1476 still set. */
1477 value |= nexthalf;
1478 offset = value;
1479 regx = -1;
1480 regy = -1;
1481 break;
1482 }
1483 default:
1484 internal_error (__FILE__, __LINE__, _("bad switch"));
1485 }
1486 upk->offset = offset;
1487 upk->regx = regx;
1488 upk->regy = regy;
1489 }
1490
1491
1492 static CORE_ADDR
1493 add_offset_16 (CORE_ADDR pc, int offset)
1494 {
1495 return ((offset << 2) | ((pc + 2) & (~(CORE_ADDR) 0x0fffffff)));
1496 }
1497
1498 static CORE_ADDR
1499 extended_mips16_next_pc (struct frame_info *frame, CORE_ADDR pc,
1500 unsigned int extension, unsigned int insn)
1501 {
1502 struct gdbarch *gdbarch = get_frame_arch (frame);
1503 int op = (insn >> 11);
1504 switch (op)
1505 {
1506 case 2: /* Branch */
1507 {
1508 CORE_ADDR offset;
1509 struct upk_mips16 upk;
1510 unpack_mips16 (gdbarch, pc, extension, insn, itype, &upk);
1511 pc += (upk.offset << 1) + 2;
1512 break;
1513 }
1514 case 3: /* JAL , JALX - Watch out, these are 32 bit
1515 instructions. */
1516 {
1517 struct upk_mips16 upk;
1518 unpack_mips16 (gdbarch, pc, extension, insn, jalxtype, &upk);
1519 pc = add_offset_16 (pc, upk.offset);
1520 if ((insn >> 10) & 0x01) /* Exchange mode */
1521 pc = pc & ~0x01; /* Clear low bit, indicate 32 bit mode. */
1522 else
1523 pc |= 0x01;
1524 break;
1525 }
1526 case 4: /* beqz */
1527 {
1528 struct upk_mips16 upk;
1529 int reg;
1530 unpack_mips16 (gdbarch, pc, extension, insn, ritype, &upk);
1531 reg = get_frame_register_signed (frame, mips16_to_32_reg[upk.regx]);
1532 if (reg == 0)
1533 pc += (upk.offset << 1) + 2;
1534 else
1535 pc += 2;
1536 break;
1537 }
1538 case 5: /* bnez */
1539 {
1540 struct upk_mips16 upk;
1541 int reg;
1542 unpack_mips16 (gdbarch, pc, extension, insn, ritype, &upk);
1543 reg = get_frame_register_signed (frame, mips16_to_32_reg[upk.regx]);
1544 if (reg != 0)
1545 pc += (upk.offset << 1) + 2;
1546 else
1547 pc += 2;
1548 break;
1549 }
1550 case 12: /* I8 Formats btez btnez */
1551 {
1552 struct upk_mips16 upk;
1553 int reg;
1554 unpack_mips16 (gdbarch, pc, extension, insn, i8type, &upk);
1555 /* upk.regx contains the opcode */
1556 reg = get_frame_register_signed (frame, 24); /* Test register is 24 */
1557 if (((upk.regx == 0) && (reg == 0)) /* BTEZ */
1558 || ((upk.regx == 1) && (reg != 0))) /* BTNEZ */
1559 /* pc = add_offset_16(pc,upk.offset) ; */
1560 pc += (upk.offset << 1) + 2;
1561 else
1562 pc += 2;
1563 break;
1564 }
1565 case 29: /* RR Formats JR, JALR, JALR-RA */
1566 {
1567 struct upk_mips16 upk;
1568 /* upk.fmt = rrtype; */
1569 op = insn & 0x1f;
1570 if (op == 0)
1571 {
1572 int reg;
1573 upk.regx = (insn >> 8) & 0x07;
1574 upk.regy = (insn >> 5) & 0x07;
1575 if ((upk.regy & 1) == 0)
1576 reg = mips16_to_32_reg[upk.regx];
1577 else
1578 reg = 31; /* Function return instruction. */
1579 pc = get_frame_register_signed (frame, reg);
1580 }
1581 else
1582 pc += 2;
1583 break;
1584 }
1585 case 30:
1586 /* This is an instruction extension. Fetch the real instruction
1587 (which follows the extension) and decode things based on
1588 that. */
1589 {
1590 pc += 2;
1591 pc = extended_mips16_next_pc (frame, pc, insn,
1592 fetch_mips_16 (gdbarch, pc));
1593 break;
1594 }
1595 default:
1596 {
1597 pc += 2;
1598 break;
1599 }
1600 }
1601 return pc;
1602 }
1603
1604 static CORE_ADDR
1605 mips16_next_pc (struct frame_info *frame, CORE_ADDR pc)
1606 {
1607 struct gdbarch *gdbarch = get_frame_arch (frame);
1608 unsigned int insn = fetch_mips_16 (gdbarch, pc);
1609 return extended_mips16_next_pc (frame, pc, 0, insn);
1610 }
1611
1612 /* The mips_next_pc function supports single_step when the remote
1613 target monitor or stub is not developed enough to do a single_step.
1614 It works by decoding the current instruction and predicting where a
1615 branch will go. This isnt hard because all the data is available.
1616 The MIPS32 and MIPS16 variants are quite different. */
1617 static CORE_ADDR
1618 mips_next_pc (struct frame_info *frame, CORE_ADDR pc)
1619 {
1620 if (mips_pc_is_mips16 (pc))
1621 return mips16_next_pc (frame, pc);
1622 else
1623 return mips32_next_pc (frame, pc);
1624 }
1625
1626 struct mips_frame_cache
1627 {
1628 CORE_ADDR base;
1629 struct trad_frame_saved_reg *saved_regs;
1630 };
1631
1632 /* Set a register's saved stack address in temp_saved_regs. If an
1633 address has already been set for this register, do nothing; this
1634 way we will only recognize the first save of a given register in a
1635 function prologue.
1636
1637 For simplicity, save the address in both [0 .. gdbarch_num_regs) and
1638 [gdbarch_num_regs .. 2*gdbarch_num_regs).
1639 Strictly speaking, only the second range is used as it is only second
1640 range (the ABI instead of ISA registers) that comes into play when finding
1641 saved registers in a frame. */
1642
1643 static void
1644 set_reg_offset (struct gdbarch *gdbarch, struct mips_frame_cache *this_cache,
1645 int regnum, CORE_ADDR offset)
1646 {
1647 if (this_cache != NULL
1648 && this_cache->saved_regs[regnum].addr == -1)
1649 {
1650 this_cache->saved_regs[regnum + 0 * gdbarch_num_regs (gdbarch)].addr
1651 = offset;
1652 this_cache->saved_regs[regnum + 1 * gdbarch_num_regs (gdbarch)].addr
1653 = offset;
1654 }
1655 }
1656
1657
1658 /* Fetch the immediate value from a MIPS16 instruction.
1659 If the previous instruction was an EXTEND, use it to extend
1660 the upper bits of the immediate value. This is a helper function
1661 for mips16_scan_prologue. */
1662
1663 static int
1664 mips16_get_imm (unsigned short prev_inst, /* previous instruction */
1665 unsigned short inst, /* current instruction */
1666 int nbits, /* number of bits in imm field */
1667 int scale, /* scale factor to be applied to imm */
1668 int is_signed) /* is the imm field signed? */
1669 {
1670 int offset;
1671
1672 if ((prev_inst & 0xf800) == 0xf000) /* prev instruction was EXTEND? */
1673 {
1674 offset = ((prev_inst & 0x1f) << 11) | (prev_inst & 0x7e0);
1675 if (offset & 0x8000) /* check for negative extend */
1676 offset = 0 - (0x10000 - (offset & 0xffff));
1677 return offset | (inst & 0x1f);
1678 }
1679 else
1680 {
1681 int max_imm = 1 << nbits;
1682 int mask = max_imm - 1;
1683 int sign_bit = max_imm >> 1;
1684
1685 offset = inst & mask;
1686 if (is_signed && (offset & sign_bit))
1687 offset = 0 - (max_imm - offset);
1688 return offset * scale;
1689 }
1690 }
1691
1692
1693 /* Analyze the function prologue from START_PC to LIMIT_PC. Builds
1694 the associated FRAME_CACHE if not null.
1695 Return the address of the first instruction past the prologue. */
1696
1697 static CORE_ADDR
1698 mips16_scan_prologue (struct gdbarch *gdbarch,
1699 CORE_ADDR start_pc, CORE_ADDR limit_pc,
1700 struct frame_info *this_frame,
1701 struct mips_frame_cache *this_cache)
1702 {
1703 CORE_ADDR cur_pc;
1704 CORE_ADDR frame_addr = 0; /* Value of $r17, used as frame pointer. */
1705 CORE_ADDR sp;
1706 long frame_offset = 0; /* Size of stack frame. */
1707 long frame_adjust = 0; /* Offset of FP from SP. */
1708 int frame_reg = MIPS_SP_REGNUM;
1709 unsigned short prev_inst = 0; /* saved copy of previous instruction. */
1710 unsigned inst = 0; /* current instruction */
1711 unsigned entry_inst = 0; /* the entry instruction */
1712 unsigned save_inst = 0; /* the save instruction */
1713 int reg, offset;
1714
1715 int extend_bytes = 0;
1716 int prev_extend_bytes;
1717 CORE_ADDR end_prologue_addr = 0;
1718
1719 /* Can be called when there's no process, and hence when there's no
1720 THIS_FRAME. */
1721 if (this_frame != NULL)
1722 sp = get_frame_register_signed (this_frame,
1723 gdbarch_num_regs (gdbarch)
1724 + MIPS_SP_REGNUM);
1725 else
1726 sp = 0;
1727
1728 if (limit_pc > start_pc + 200)
1729 limit_pc = start_pc + 200;
1730
1731 for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS_INSN16_SIZE)
1732 {
1733 /* Save the previous instruction. If it's an EXTEND, we'll extract
1734 the immediate offset extension from it in mips16_get_imm. */
1735 prev_inst = inst;
1736
1737 /* Fetch and decode the instruction. */
1738 inst = (unsigned short) mips_fetch_instruction (gdbarch, cur_pc);
1739
1740 /* Normally we ignore extend instructions. However, if it is
1741 not followed by a valid prologue instruction, then this
1742 instruction is not part of the prologue either. We must
1743 remember in this case to adjust the end_prologue_addr back
1744 over the extend. */
1745 if ((inst & 0xf800) == 0xf000) /* extend */
1746 {
1747 extend_bytes = MIPS_INSN16_SIZE;
1748 continue;
1749 }
1750
1751 prev_extend_bytes = extend_bytes;
1752 extend_bytes = 0;
1753
1754 if ((inst & 0xff00) == 0x6300 /* addiu sp */
1755 || (inst & 0xff00) == 0xfb00) /* daddiu sp */
1756 {
1757 offset = mips16_get_imm (prev_inst, inst, 8, 8, 1);
1758 if (offset < 0) /* Negative stack adjustment? */
1759 frame_offset -= offset;
1760 else
1761 /* Exit loop if a positive stack adjustment is found, which
1762 usually means that the stack cleanup code in the function
1763 epilogue is reached. */
1764 break;
1765 }
1766 else if ((inst & 0xf800) == 0xd000) /* sw reg,n($sp) */
1767 {
1768 offset = mips16_get_imm (prev_inst, inst, 8, 4, 0);
1769 reg = mips16_to_32_reg[(inst & 0x700) >> 8];
1770 set_reg_offset (gdbarch, this_cache, reg, sp + offset);
1771 }
1772 else if ((inst & 0xff00) == 0xf900) /* sd reg,n($sp) */
1773 {
1774 offset = mips16_get_imm (prev_inst, inst, 5, 8, 0);
1775 reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
1776 set_reg_offset (gdbarch, this_cache, reg, sp + offset);
1777 }
1778 else if ((inst & 0xff00) == 0x6200) /* sw $ra,n($sp) */
1779 {
1780 offset = mips16_get_imm (prev_inst, inst, 8, 4, 0);
1781 set_reg_offset (gdbarch, this_cache, MIPS_RA_REGNUM, sp + offset);
1782 }
1783 else if ((inst & 0xff00) == 0xfa00) /* sd $ra,n($sp) */
1784 {
1785 offset = mips16_get_imm (prev_inst, inst, 8, 8, 0);
1786 set_reg_offset (gdbarch, this_cache, MIPS_RA_REGNUM, sp + offset);
1787 }
1788 else if (inst == 0x673d) /* move $s1, $sp */
1789 {
1790 frame_addr = sp;
1791 frame_reg = 17;
1792 }
1793 else if ((inst & 0xff00) == 0x0100) /* addiu $s1,sp,n */
1794 {
1795 offset = mips16_get_imm (prev_inst, inst, 8, 4, 0);
1796 frame_addr = sp + offset;
1797 frame_reg = 17;
1798 frame_adjust = offset;
1799 }
1800 else if ((inst & 0xFF00) == 0xd900) /* sw reg,offset($s1) */
1801 {
1802 offset = mips16_get_imm (prev_inst, inst, 5, 4, 0);
1803 reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
1804 set_reg_offset (gdbarch, this_cache, reg, frame_addr + offset);
1805 }
1806 else if ((inst & 0xFF00) == 0x7900) /* sd reg,offset($s1) */
1807 {
1808 offset = mips16_get_imm (prev_inst, inst, 5, 8, 0);
1809 reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
1810 set_reg_offset (gdbarch, this_cache, reg, frame_addr + offset);
1811 }
1812 else if ((inst & 0xf81f) == 0xe809
1813 && (inst & 0x700) != 0x700) /* entry */
1814 entry_inst = inst; /* Save for later processing. */
1815 else if ((inst & 0xff80) == 0x6480) /* save */
1816 {
1817 save_inst = inst; /* Save for later processing. */
1818 if (prev_extend_bytes) /* extend */
1819 save_inst |= prev_inst << 16;
1820 }
1821 else if ((inst & 0xf800) == 0x1800) /* jal(x) */
1822 cur_pc += MIPS_INSN16_SIZE; /* 32-bit instruction */
1823 else if ((inst & 0xff1c) == 0x6704) /* move reg,$a0-$a3 */
1824 {
1825 /* This instruction is part of the prologue, but we don't
1826 need to do anything special to handle it. */
1827 }
1828 else
1829 {
1830 /* This instruction is not an instruction typically found
1831 in a prologue, so we must have reached the end of the
1832 prologue. */
1833 if (end_prologue_addr == 0)
1834 end_prologue_addr = cur_pc - prev_extend_bytes;
1835 }
1836 }
1837
1838 /* The entry instruction is typically the first instruction in a function,
1839 and it stores registers at offsets relative to the value of the old SP
1840 (before the prologue). But the value of the sp parameter to this
1841 function is the new SP (after the prologue has been executed). So we
1842 can't calculate those offsets until we've seen the entire prologue,
1843 and can calculate what the old SP must have been. */
1844 if (entry_inst != 0)
1845 {
1846 int areg_count = (entry_inst >> 8) & 7;
1847 int sreg_count = (entry_inst >> 6) & 3;
1848
1849 /* The entry instruction always subtracts 32 from the SP. */
1850 frame_offset += 32;
1851
1852 /* Now we can calculate what the SP must have been at the
1853 start of the function prologue. */
1854 sp += frame_offset;
1855
1856 /* Check if a0-a3 were saved in the caller's argument save area. */
1857 for (reg = 4, offset = 0; reg < areg_count + 4; reg++)
1858 {
1859 set_reg_offset (gdbarch, this_cache, reg, sp + offset);
1860 offset += mips_abi_regsize (gdbarch);
1861 }
1862
1863 /* Check if the ra register was pushed on the stack. */
1864 offset = -4;
1865 if (entry_inst & 0x20)
1866 {
1867 set_reg_offset (gdbarch, this_cache, MIPS_RA_REGNUM, sp + offset);
1868 offset -= mips_abi_regsize (gdbarch);
1869 }
1870
1871 /* Check if the s0 and s1 registers were pushed on the stack. */
1872 for (reg = 16; reg < sreg_count + 16; reg++)
1873 {
1874 set_reg_offset (gdbarch, this_cache, reg, sp + offset);
1875 offset -= mips_abi_regsize (gdbarch);
1876 }
1877 }
1878
1879 /* The SAVE instruction is similar to ENTRY, except that defined by the
1880 MIPS16e ASE of the MIPS Architecture. Unlike with ENTRY though, the
1881 size of the frame is specified as an immediate field of instruction
1882 and an extended variation exists which lets additional registers and
1883 frame space to be specified. The instruction always treats registers
1884 as 32-bit so its usefulness for 64-bit ABIs is questionable. */
1885 if (save_inst != 0 && mips_abi_regsize (gdbarch) == 4)
1886 {
1887 static int args_table[16] = {
1888 0, 0, 0, 0, 1, 1, 1, 1,
1889 2, 2, 2, 0, 3, 3, 4, -1,
1890 };
1891 static int astatic_table[16] = {
1892 0, 1, 2, 3, 0, 1, 2, 3,
1893 0, 1, 2, 4, 0, 1, 0, -1,
1894 };
1895 int aregs = (save_inst >> 16) & 0xf;
1896 int xsregs = (save_inst >> 24) & 0x7;
1897 int args = args_table[aregs];
1898 int astatic = astatic_table[aregs];
1899 long frame_size;
1900
1901 if (args < 0)
1902 {
1903 warning (_("Invalid number of argument registers encoded in SAVE."));
1904 args = 0;
1905 }
1906 if (astatic < 0)
1907 {
1908 warning (_("Invalid number of static registers encoded in SAVE."));
1909 astatic = 0;
1910 }
1911
1912 /* For standard SAVE the frame size of 0 means 128. */
1913 frame_size = ((save_inst >> 16) & 0xf0) | (save_inst & 0xf);
1914 if (frame_size == 0 && (save_inst >> 16) == 0)
1915 frame_size = 16;
1916 frame_size *= 8;
1917 frame_offset += frame_size;
1918
1919 /* Now we can calculate what the SP must have been at the
1920 start of the function prologue. */
1921 sp += frame_offset;
1922
1923 /* Check if A0-A3 were saved in the caller's argument save area. */
1924 for (reg = MIPS_A0_REGNUM, offset = 0; reg < args + 4; reg++)
1925 {
1926 set_reg_offset (gdbarch, this_cache, reg, sp + offset);
1927 offset += mips_abi_regsize (gdbarch);
1928 }
1929
1930 offset = -4;
1931
1932 /* Check if the RA register was pushed on the stack. */
1933 if (save_inst & 0x40)
1934 {
1935 set_reg_offset (gdbarch, this_cache, MIPS_RA_REGNUM, sp + offset);
1936 offset -= mips_abi_regsize (gdbarch);
1937 }
1938
1939 /* Check if the S8 register was pushed on the stack. */
1940 if (xsregs > 6)
1941 {
1942 set_reg_offset (gdbarch, this_cache, 30, sp + offset);
1943 offset -= mips_abi_regsize (gdbarch);
1944 xsregs--;
1945 }
1946 /* Check if S2-S7 were pushed on the stack. */
1947 for (reg = 18 + xsregs - 1; reg > 18 - 1; reg--)
1948 {
1949 set_reg_offset (gdbarch, this_cache, reg, sp + offset);
1950 offset -= mips_abi_regsize (gdbarch);
1951 }
1952
1953 /* Check if the S1 register was pushed on the stack. */
1954 if (save_inst & 0x10)
1955 {
1956 set_reg_offset (gdbarch, this_cache, 17, sp + offset);
1957 offset -= mips_abi_regsize (gdbarch);
1958 }
1959 /* Check if the S0 register was pushed on the stack. */
1960 if (save_inst & 0x20)
1961 {
1962 set_reg_offset (gdbarch, this_cache, 16, sp + offset);
1963 offset -= mips_abi_regsize (gdbarch);
1964 }
1965
1966 /* Check if A0-A3 were pushed on the stack. */
1967 for (reg = MIPS_A0_REGNUM + 3; reg > MIPS_A0_REGNUM + 3 - astatic; reg--)
1968 {
1969 set_reg_offset (gdbarch, this_cache, reg, sp + offset);
1970 offset -= mips_abi_regsize (gdbarch);
1971 }
1972 }
1973
1974 if (this_cache != NULL)
1975 {
1976 this_cache->base =
1977 (get_frame_register_signed (this_frame,
1978 gdbarch_num_regs (gdbarch) + frame_reg)
1979 + frame_offset - frame_adjust);
1980 /* FIXME: brobecker/2004-10-10: Just as in the mips32 case, we should
1981 be able to get rid of the assignment below, evetually. But it's
1982 still needed for now. */
1983 this_cache->saved_regs[gdbarch_num_regs (gdbarch)
1984 + mips_regnum (gdbarch)->pc]
1985 = this_cache->saved_regs[gdbarch_num_regs (gdbarch) + MIPS_RA_REGNUM];
1986 }
1987
1988 /* If we didn't reach the end of the prologue when scanning the function
1989 instructions, then set end_prologue_addr to the address of the
1990 instruction immediately after the last one we scanned. */
1991 if (end_prologue_addr == 0)
1992 end_prologue_addr = cur_pc;
1993
1994 return end_prologue_addr;
1995 }
1996
1997 /* Heuristic unwinder for 16-bit MIPS instruction set (aka MIPS16).
1998 Procedures that use the 32-bit instruction set are handled by the
1999 mips_insn32 unwinder. */
2000
2001 static struct mips_frame_cache *
2002 mips_insn16_frame_cache (struct frame_info *this_frame, void **this_cache)
2003 {
2004 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2005 struct mips_frame_cache *cache;
2006
2007 if ((*this_cache) != NULL)
2008 return (*this_cache);
2009 cache = FRAME_OBSTACK_ZALLOC (struct mips_frame_cache);
2010 (*this_cache) = cache;
2011 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2012
2013 /* Analyze the function prologue. */
2014 {
2015 const CORE_ADDR pc = get_frame_address_in_block (this_frame);
2016 CORE_ADDR start_addr;
2017
2018 find_pc_partial_function (pc, NULL, &start_addr, NULL);
2019 if (start_addr == 0)
2020 start_addr = heuristic_proc_start (gdbarch, pc);
2021 /* We can't analyze the prologue if we couldn't find the begining
2022 of the function. */
2023 if (start_addr == 0)
2024 return cache;
2025
2026 mips16_scan_prologue (gdbarch, start_addr, pc, this_frame, *this_cache);
2027 }
2028
2029 /* gdbarch_sp_regnum contains the value and not the address. */
2030 trad_frame_set_value (cache->saved_regs,
2031 gdbarch_num_regs (gdbarch) + MIPS_SP_REGNUM,
2032 cache->base);
2033
2034 return (*this_cache);
2035 }
2036
2037 static void
2038 mips_insn16_frame_this_id (struct frame_info *this_frame, void **this_cache,
2039 struct frame_id *this_id)
2040 {
2041 struct mips_frame_cache *info = mips_insn16_frame_cache (this_frame,
2042 this_cache);
2043 /* This marks the outermost frame. */
2044 if (info->base == 0)
2045 return;
2046 (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
2047 }
2048
2049 static struct value *
2050 mips_insn16_frame_prev_register (struct frame_info *this_frame,
2051 void **this_cache, int regnum)
2052 {
2053 struct mips_frame_cache *info = mips_insn16_frame_cache (this_frame,
2054 this_cache);
2055 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
2056 }
2057
2058 static int
2059 mips_insn16_frame_sniffer (const struct frame_unwind *self,
2060 struct frame_info *this_frame, void **this_cache)
2061 {
2062 CORE_ADDR pc = get_frame_pc (this_frame);
2063 if (mips_pc_is_mips16 (pc))
2064 return 1;
2065 return 0;
2066 }
2067
2068 static const struct frame_unwind mips_insn16_frame_unwind =
2069 {
2070 NORMAL_FRAME,
2071 default_frame_unwind_stop_reason,
2072 mips_insn16_frame_this_id,
2073 mips_insn16_frame_prev_register,
2074 NULL,
2075 mips_insn16_frame_sniffer
2076 };
2077
2078 static CORE_ADDR
2079 mips_insn16_frame_base_address (struct frame_info *this_frame,
2080 void **this_cache)
2081 {
2082 struct mips_frame_cache *info = mips_insn16_frame_cache (this_frame,
2083 this_cache);
2084 return info->base;
2085 }
2086
2087 static const struct frame_base mips_insn16_frame_base =
2088 {
2089 &mips_insn16_frame_unwind,
2090 mips_insn16_frame_base_address,
2091 mips_insn16_frame_base_address,
2092 mips_insn16_frame_base_address
2093 };
2094
2095 static const struct frame_base *
2096 mips_insn16_frame_base_sniffer (struct frame_info *this_frame)
2097 {
2098 CORE_ADDR pc = get_frame_pc (this_frame);
2099 if (mips_pc_is_mips16 (pc))
2100 return &mips_insn16_frame_base;
2101 else
2102 return NULL;
2103 }
2104
2105 /* Mark all the registers as unset in the saved_regs array
2106 of THIS_CACHE. Do nothing if THIS_CACHE is null. */
2107
2108 static void
2109 reset_saved_regs (struct gdbarch *gdbarch, struct mips_frame_cache *this_cache)
2110 {
2111 if (this_cache == NULL || this_cache->saved_regs == NULL)
2112 return;
2113
2114 {
2115 const int num_regs = gdbarch_num_regs (gdbarch);
2116 int i;
2117
2118 for (i = 0; i < num_regs; i++)
2119 {
2120 this_cache->saved_regs[i].addr = -1;
2121 }
2122 }
2123 }
2124
2125 /* Analyze the function prologue from START_PC to LIMIT_PC. Builds
2126 the associated FRAME_CACHE if not null.
2127 Return the address of the first instruction past the prologue. */
2128
2129 static CORE_ADDR
2130 mips32_scan_prologue (struct gdbarch *gdbarch,
2131 CORE_ADDR start_pc, CORE_ADDR limit_pc,
2132 struct frame_info *this_frame,
2133 struct mips_frame_cache *this_cache)
2134 {
2135 CORE_ADDR cur_pc;
2136 CORE_ADDR frame_addr = 0; /* Value of $r30. Used by gcc for
2137 frame-pointer. */
2138 CORE_ADDR sp;
2139 long frame_offset;
2140 int frame_reg = MIPS_SP_REGNUM;
2141
2142 CORE_ADDR end_prologue_addr = 0;
2143 int seen_sp_adjust = 0;
2144 int load_immediate_bytes = 0;
2145 int in_delay_slot = 0;
2146 int regsize_is_64_bits = (mips_abi_regsize (gdbarch) == 8);
2147
2148 /* Can be called when there's no process, and hence when there's no
2149 THIS_FRAME. */
2150 if (this_frame != NULL)
2151 sp = get_frame_register_signed (this_frame,
2152 gdbarch_num_regs (gdbarch)
2153 + MIPS_SP_REGNUM);
2154 else
2155 sp = 0;
2156
2157 if (limit_pc > start_pc + 200)
2158 limit_pc = start_pc + 200;
2159
2160 restart:
2161
2162 frame_offset = 0;
2163 for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS_INSN32_SIZE)
2164 {
2165 unsigned long inst, high_word, low_word;
2166 int reg;
2167
2168 /* Fetch the instruction. */
2169 inst = (unsigned long) mips_fetch_instruction (gdbarch, cur_pc);
2170
2171 /* Save some code by pre-extracting some useful fields. */
2172 high_word = (inst >> 16) & 0xffff;
2173 low_word = inst & 0xffff;
2174 reg = high_word & 0x1f;
2175
2176 if (high_word == 0x27bd /* addiu $sp,$sp,-i */
2177 || high_word == 0x23bd /* addi $sp,$sp,-i */
2178 || high_word == 0x67bd) /* daddiu $sp,$sp,-i */
2179 {
2180 if (low_word & 0x8000) /* Negative stack adjustment? */
2181 frame_offset += 0x10000 - low_word;
2182 else
2183 /* Exit loop if a positive stack adjustment is found, which
2184 usually means that the stack cleanup code in the function
2185 epilogue is reached. */
2186 break;
2187 seen_sp_adjust = 1;
2188 }
2189 else if (((high_word & 0xFFE0) == 0xafa0) /* sw reg,offset($sp) */
2190 && !regsize_is_64_bits)
2191 {
2192 set_reg_offset (gdbarch, this_cache, reg, sp + low_word);
2193 }
2194 else if (((high_word & 0xFFE0) == 0xffa0) /* sd reg,offset($sp) */
2195 && regsize_is_64_bits)
2196 {
2197 /* Irix 6.2 N32 ABI uses sd instructions for saving $gp and $ra. */
2198 set_reg_offset (gdbarch, this_cache, reg, sp + low_word);
2199 }
2200 else if (high_word == 0x27be) /* addiu $30,$sp,size */
2201 {
2202 /* Old gcc frame, r30 is virtual frame pointer. */
2203 if ((long) low_word != frame_offset)
2204 frame_addr = sp + low_word;
2205 else if (this_frame && frame_reg == MIPS_SP_REGNUM)
2206 {
2207 unsigned alloca_adjust;
2208
2209 frame_reg = 30;
2210 frame_addr = get_frame_register_signed
2211 (this_frame, gdbarch_num_regs (gdbarch) + 30);
2212
2213 alloca_adjust = (unsigned) (frame_addr - (sp + low_word));
2214 if (alloca_adjust > 0)
2215 {
2216 /* FP > SP + frame_size. This may be because of
2217 an alloca or somethings similar. Fix sp to
2218 "pre-alloca" value, and try again. */
2219 sp += alloca_adjust;
2220 /* Need to reset the status of all registers. Otherwise,
2221 we will hit a guard that prevents the new address
2222 for each register to be recomputed during the second
2223 pass. */
2224 reset_saved_regs (gdbarch, this_cache);
2225 goto restart;
2226 }
2227 }
2228 }
2229 /* move $30,$sp. With different versions of gas this will be either
2230 `addu $30,$sp,$zero' or `or $30,$sp,$zero' or `daddu 30,sp,$0'.
2231 Accept any one of these. */
2232 else if (inst == 0x03A0F021 || inst == 0x03a0f025 || inst == 0x03a0f02d)
2233 {
2234 /* New gcc frame, virtual frame pointer is at r30 + frame_size. */
2235 if (this_frame && frame_reg == MIPS_SP_REGNUM)
2236 {
2237 unsigned alloca_adjust;
2238
2239 frame_reg = 30;
2240 frame_addr = get_frame_register_signed
2241 (this_frame, gdbarch_num_regs (gdbarch) + 30);
2242
2243 alloca_adjust = (unsigned) (frame_addr - sp);
2244 if (alloca_adjust > 0)
2245 {
2246 /* FP > SP + frame_size. This may be because of
2247 an alloca or somethings similar. Fix sp to
2248 "pre-alloca" value, and try again. */
2249 sp = frame_addr;
2250 /* Need to reset the status of all registers. Otherwise,
2251 we will hit a guard that prevents the new address
2252 for each register to be recomputed during the second
2253 pass. */
2254 reset_saved_regs (gdbarch, this_cache);
2255 goto restart;
2256 }
2257 }
2258 }
2259 else if ((high_word & 0xFFE0) == 0xafc0 /* sw reg,offset($30) */
2260 && !regsize_is_64_bits)
2261 {
2262 set_reg_offset (gdbarch, this_cache, reg, frame_addr + low_word);
2263 }
2264 else if ((high_word & 0xFFE0) == 0xE7A0 /* swc1 freg,n($sp) */
2265 || (high_word & 0xF3E0) == 0xA3C0 /* sx reg,n($s8) */
2266 || (inst & 0xFF9F07FF) == 0x00800021 /* move reg,$a0-$a3 */
2267 || high_word == 0x3c1c /* lui $gp,n */
2268 || high_word == 0x279c /* addiu $gp,$gp,n */
2269 || inst == 0x0399e021 /* addu $gp,$gp,$t9 */
2270 || inst == 0x033ce021 /* addu $gp,$t9,$gp */
2271 )
2272 {
2273 /* These instructions are part of the prologue, but we don't
2274 need to do anything special to handle them. */
2275 }
2276 /* The instructions below load $at or $t0 with an immediate
2277 value in preparation for a stack adjustment via
2278 subu $sp,$sp,[$at,$t0]. These instructions could also
2279 initialize a local variable, so we accept them only before
2280 a stack adjustment instruction was seen. */
2281 else if (!seen_sp_adjust
2282 && (high_word == 0x3c01 /* lui $at,n */
2283 || high_word == 0x3c08 /* lui $t0,n */
2284 || high_word == 0x3421 /* ori $at,$at,n */
2285 || high_word == 0x3508 /* ori $t0,$t0,n */
2286 || high_word == 0x3401 /* ori $at,$zero,n */
2287 || high_word == 0x3408 /* ori $t0,$zero,n */
2288 ))
2289 {
2290 if (end_prologue_addr == 0)
2291 load_immediate_bytes += MIPS_INSN32_SIZE; /* FIXME! */
2292 }
2293 else
2294 {
2295 /* This instruction is not an instruction typically found
2296 in a prologue, so we must have reached the end of the
2297 prologue. */
2298 /* FIXME: brobecker/2004-10-10: Can't we just break out of this
2299 loop now? Why would we need to continue scanning the function
2300 instructions? */
2301 if (end_prologue_addr == 0)
2302 end_prologue_addr = cur_pc;
2303
2304 /* Check for branches and jumps. For now, only jump to
2305 register are caught (i.e. returns). */
2306 if ((itype_op (inst) & 0x07) == 0 && rtype_funct (inst) == 8)
2307 in_delay_slot = 1;
2308 }
2309
2310 /* If the previous instruction was a jump, we must have reached
2311 the end of the prologue by now. Stop scanning so that we do
2312 not go past the function return. */
2313 if (in_delay_slot)
2314 break;
2315 }
2316
2317 if (this_cache != NULL)
2318 {
2319 this_cache->base =
2320 (get_frame_register_signed (this_frame,
2321 gdbarch_num_regs (gdbarch) + frame_reg)
2322 + frame_offset);
2323 /* FIXME: brobecker/2004-09-15: We should be able to get rid of
2324 this assignment below, eventually. But it's still needed
2325 for now. */
2326 this_cache->saved_regs[gdbarch_num_regs (gdbarch)
2327 + mips_regnum (gdbarch)->pc]
2328 = this_cache->saved_regs[gdbarch_num_regs (gdbarch)
2329 + MIPS_RA_REGNUM];
2330 }
2331
2332 /* If we didn't reach the end of the prologue when scanning the function
2333 instructions, then set end_prologue_addr to the address of the
2334 instruction immediately after the last one we scanned. */
2335 /* brobecker/2004-10-10: I don't think this would ever happen, but
2336 we may as well be careful and do our best if we have a null
2337 end_prologue_addr. */
2338 if (end_prologue_addr == 0)
2339 end_prologue_addr = cur_pc;
2340
2341 /* In a frameless function, we might have incorrectly
2342 skipped some load immediate instructions. Undo the skipping
2343 if the load immediate was not followed by a stack adjustment. */
2344 if (load_immediate_bytes && !seen_sp_adjust)
2345 end_prologue_addr -= load_immediate_bytes;
2346
2347 return end_prologue_addr;
2348 }
2349
2350 /* Heuristic unwinder for procedures using 32-bit instructions (covers
2351 both 32-bit and 64-bit MIPS ISAs). Procedures using 16-bit
2352 instructions (a.k.a. MIPS16) are handled by the mips_insn16
2353 unwinder. */
2354
2355 static struct mips_frame_cache *
2356 mips_insn32_frame_cache (struct frame_info *this_frame, void **this_cache)
2357 {
2358 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2359 struct mips_frame_cache *cache;
2360
2361 if ((*this_cache) != NULL)
2362 return (*this_cache);
2363
2364 cache = FRAME_OBSTACK_ZALLOC (struct mips_frame_cache);
2365 (*this_cache) = cache;
2366 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
2367
2368 /* Analyze the function prologue. */
2369 {
2370 const CORE_ADDR pc = get_frame_address_in_block (this_frame);
2371 CORE_ADDR start_addr;
2372
2373 find_pc_partial_function (pc, NULL, &start_addr, NULL);
2374 if (start_addr == 0)
2375 start_addr = heuristic_proc_start (gdbarch, pc);
2376 /* We can't analyze the prologue if we couldn't find the begining
2377 of the function. */
2378 if (start_addr == 0)
2379 return cache;
2380
2381 mips32_scan_prologue (gdbarch, start_addr, pc, this_frame, *this_cache);
2382 }
2383
2384 /* gdbarch_sp_regnum contains the value and not the address. */
2385 trad_frame_set_value (cache->saved_regs,
2386 gdbarch_num_regs (gdbarch) + MIPS_SP_REGNUM,
2387 cache->base);
2388
2389 return (*this_cache);
2390 }
2391
2392 static void
2393 mips_insn32_frame_this_id (struct frame_info *this_frame, void **this_cache,
2394 struct frame_id *this_id)
2395 {
2396 struct mips_frame_cache *info = mips_insn32_frame_cache (this_frame,
2397 this_cache);
2398 /* This marks the outermost frame. */
2399 if (info->base == 0)
2400 return;
2401 (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
2402 }
2403
2404 static struct value *
2405 mips_insn32_frame_prev_register (struct frame_info *this_frame,
2406 void **this_cache, int regnum)
2407 {
2408 struct mips_frame_cache *info = mips_insn32_frame_cache (this_frame,
2409 this_cache);
2410 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
2411 }
2412
2413 static int
2414 mips_insn32_frame_sniffer (const struct frame_unwind *self,
2415 struct frame_info *this_frame, void **this_cache)
2416 {
2417 CORE_ADDR pc = get_frame_pc (this_frame);
2418 if (! mips_pc_is_mips16 (pc))
2419 return 1;
2420 return 0;
2421 }
2422
2423 static const struct frame_unwind mips_insn32_frame_unwind =
2424 {
2425 NORMAL_FRAME,
2426 default_frame_unwind_stop_reason,
2427 mips_insn32_frame_this_id,
2428 mips_insn32_frame_prev_register,
2429 NULL,
2430 mips_insn32_frame_sniffer
2431 };
2432
2433 static CORE_ADDR
2434 mips_insn32_frame_base_address (struct frame_info *this_frame,
2435 void **this_cache)
2436 {
2437 struct mips_frame_cache *info = mips_insn32_frame_cache (this_frame,
2438 this_cache);
2439 return info->base;
2440 }
2441
2442 static const struct frame_base mips_insn32_frame_base =
2443 {
2444 &mips_insn32_frame_unwind,
2445 mips_insn32_frame_base_address,
2446 mips_insn32_frame_base_address,
2447 mips_insn32_frame_base_address
2448 };
2449
2450 static const struct frame_base *
2451 mips_insn32_frame_base_sniffer (struct frame_info *this_frame)
2452 {
2453 CORE_ADDR pc = get_frame_pc (this_frame);
2454 if (! mips_pc_is_mips16 (pc))
2455 return &mips_insn32_frame_base;
2456 else
2457 return NULL;
2458 }
2459
2460 static struct trad_frame_cache *
2461 mips_stub_frame_cache (struct frame_info *this_frame, void **this_cache)
2462 {
2463 CORE_ADDR pc;
2464 CORE_ADDR start_addr;
2465 CORE_ADDR stack_addr;
2466 struct trad_frame_cache *this_trad_cache;
2467 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2468 int num_regs = gdbarch_num_regs (gdbarch);
2469
2470 if ((*this_cache) != NULL)
2471 return (*this_cache);
2472 this_trad_cache = trad_frame_cache_zalloc (this_frame);
2473 (*this_cache) = this_trad_cache;
2474
2475 /* The return address is in the link register. */
2476 trad_frame_set_reg_realreg (this_trad_cache,
2477 gdbarch_pc_regnum (gdbarch),
2478 num_regs + MIPS_RA_REGNUM);
2479
2480 /* Frame ID, since it's a frameless / stackless function, no stack
2481 space is allocated and SP on entry is the current SP. */
2482 pc = get_frame_pc (this_frame);
2483 find_pc_partial_function (pc, NULL, &start_addr, NULL);
2484 stack_addr = get_frame_register_signed (this_frame,
2485 num_regs + MIPS_SP_REGNUM);
2486 trad_frame_set_id (this_trad_cache, frame_id_build (stack_addr, start_addr));
2487
2488 /* Assume that the frame's base is the same as the
2489 stack-pointer. */
2490 trad_frame_set_this_base (this_trad_cache, stack_addr);
2491
2492 return this_trad_cache;
2493 }
2494
2495 static void
2496 mips_stub_frame_this_id (struct frame_info *this_frame, void **this_cache,
2497 struct frame_id *this_id)
2498 {
2499 struct trad_frame_cache *this_trad_cache
2500 = mips_stub_frame_cache (this_frame, this_cache);
2501 trad_frame_get_id (this_trad_cache, this_id);
2502 }
2503
2504 static struct value *
2505 mips_stub_frame_prev_register (struct frame_info *this_frame,
2506 void **this_cache, int regnum)
2507 {
2508 struct trad_frame_cache *this_trad_cache
2509 = mips_stub_frame_cache (this_frame, this_cache);
2510 return trad_frame_get_register (this_trad_cache, this_frame, regnum);
2511 }
2512
2513 static int
2514 mips_stub_frame_sniffer (const struct frame_unwind *self,
2515 struct frame_info *this_frame, void **this_cache)
2516 {
2517 gdb_byte dummy[4];
2518 struct obj_section *s;
2519 CORE_ADDR pc = get_frame_address_in_block (this_frame);
2520 struct minimal_symbol *msym;
2521
2522 /* Use the stub unwinder for unreadable code. */
2523 if (target_read_memory (get_frame_pc (this_frame), dummy, 4) != 0)
2524 return 1;
2525
2526 if (in_plt_section (pc, NULL))
2527 return 1;
2528
2529 /* Binutils for MIPS puts lazy resolution stubs into .MIPS.stubs. */
2530 s = find_pc_section (pc);
2531
2532 if (s != NULL
2533 && strcmp (bfd_get_section_name (s->objfile->obfd, s->the_bfd_section),
2534 ".MIPS.stubs") == 0)
2535 return 1;
2536
2537 /* Calling a PIC function from a non-PIC function passes through a
2538 stub. The stub for foo is named ".pic.foo". */
2539 msym = lookup_minimal_symbol_by_pc (pc);
2540 if (msym != NULL
2541 && SYMBOL_LINKAGE_NAME (msym) != NULL
2542 && strncmp (SYMBOL_LINKAGE_NAME (msym), ".pic.", 5) == 0)
2543 return 1;
2544
2545 return 0;
2546 }
2547
2548 static const struct frame_unwind mips_stub_frame_unwind =
2549 {
2550 NORMAL_FRAME,
2551 default_frame_unwind_stop_reason,
2552 mips_stub_frame_this_id,
2553 mips_stub_frame_prev_register,
2554 NULL,
2555 mips_stub_frame_sniffer
2556 };
2557
2558 static CORE_ADDR
2559 mips_stub_frame_base_address (struct frame_info *this_frame,
2560 void **this_cache)
2561 {
2562 struct trad_frame_cache *this_trad_cache
2563 = mips_stub_frame_cache (this_frame, this_cache);
2564 return trad_frame_get_this_base (this_trad_cache);
2565 }
2566
2567 static const struct frame_base mips_stub_frame_base =
2568 {
2569 &mips_stub_frame_unwind,
2570 mips_stub_frame_base_address,
2571 mips_stub_frame_base_address,
2572 mips_stub_frame_base_address
2573 };
2574
2575 static const struct frame_base *
2576 mips_stub_frame_base_sniffer (struct frame_info *this_frame)
2577 {
2578 if (mips_stub_frame_sniffer (&mips_stub_frame_unwind, this_frame, NULL))
2579 return &mips_stub_frame_base;
2580 else
2581 return NULL;
2582 }
2583
2584 /* mips_addr_bits_remove - remove useless address bits */
2585
2586 static CORE_ADDR
2587 mips_addr_bits_remove (struct gdbarch *gdbarch, CORE_ADDR addr)
2588 {
2589 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2590
2591 if (is_mips16_addr (addr))
2592 addr = unmake_mips16_addr (addr);
2593
2594 if (mips_mask_address_p (tdep) && (((ULONGEST) addr) >> 32 == 0xffffffffUL))
2595 /* This hack is a work-around for existing boards using PMON, the
2596 simulator, and any other 64-bit targets that doesn't have true
2597 64-bit addressing. On these targets, the upper 32 bits of
2598 addresses are ignored by the hardware. Thus, the PC or SP are
2599 likely to have been sign extended to all 1s by instruction
2600 sequences that load 32-bit addresses. For example, a typical
2601 piece of code that loads an address is this:
2602
2603 lui $r2, <upper 16 bits>
2604 ori $r2, <lower 16 bits>
2605
2606 But the lui sign-extends the value such that the upper 32 bits
2607 may be all 1s. The workaround is simply to mask off these
2608 bits. In the future, gcc may be changed to support true 64-bit
2609 addressing, and this masking will have to be disabled. */
2610 return addr &= 0xffffffffUL;
2611 else
2612 return addr;
2613 }
2614
2615 /* Instructions used during single-stepping of atomic sequences. */
2616 #define LL_OPCODE 0x30
2617 #define LLD_OPCODE 0x34
2618 #define SC_OPCODE 0x38
2619 #define SCD_OPCODE 0x3c
2620
2621 /* Checks for an atomic sequence of instructions beginning with a LL/LLD
2622 instruction and ending with a SC/SCD instruction. If such a sequence
2623 is found, attempt to step through it. A breakpoint is placed at the end of
2624 the sequence. */
2625
2626 static int
2627 deal_with_atomic_sequence (struct gdbarch *gdbarch,
2628 struct address_space *aspace, CORE_ADDR pc)
2629 {
2630 CORE_ADDR breaks[2] = {-1, -1};
2631 CORE_ADDR loc = pc;
2632 CORE_ADDR branch_bp; /* Breakpoint at branch instruction's destination. */
2633 unsigned long insn;
2634 int insn_count;
2635 int index;
2636 int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed). */
2637 const int atomic_sequence_length = 16; /* Instruction sequence length. */
2638
2639 if (pc & 0x01)
2640 return 0;
2641
2642 insn = mips_fetch_instruction (gdbarch, loc);
2643 /* Assume all atomic sequences start with a ll/lld instruction. */
2644 if (itype_op (insn) != LL_OPCODE && itype_op (insn) != LLD_OPCODE)
2645 return 0;
2646
2647 /* Assume that no atomic sequence is longer than "atomic_sequence_length"
2648 instructions. */
2649 for (insn_count = 0; insn_count < atomic_sequence_length; ++insn_count)
2650 {
2651 int is_branch = 0;
2652 loc += MIPS_INSN32_SIZE;
2653 insn = mips_fetch_instruction (gdbarch, loc);
2654
2655 /* Assume that there is at most one branch in the atomic
2656 sequence. If a branch is found, put a breakpoint in its
2657 destination address. */
2658 switch (itype_op (insn))
2659 {
2660 case 0: /* SPECIAL */
2661 if (rtype_funct (insn) >> 1 == 4) /* JR, JALR */
2662 return 0; /* fallback to the standard single-step code. */
2663 break;
2664 case 1: /* REGIMM */
2665 is_branch = ((itype_rt (insn) & 0xc) == 0 /* B{LT,GE}Z* */
2666 || ((itype_rt (insn) & 0x1e) == 0
2667 && itype_rs (insn) == 0)); /* BPOSGE* */
2668 break;
2669 case 2: /* J */
2670 case 3: /* JAL */
2671 return 0; /* fallback to the standard single-step code. */
2672 case 4: /* BEQ */
2673 case 5: /* BNE */
2674 case 6: /* BLEZ */
2675 case 7: /* BGTZ */
2676 case 20: /* BEQL */
2677 case 21: /* BNEL */
2678 case 22: /* BLEZL */
2679 case 23: /* BGTTL */
2680 is_branch = 1;
2681 break;
2682 case 17: /* COP1 */
2683 is_branch = ((itype_rs (insn) == 9 || itype_rs (insn) == 10)
2684 && (itype_rt (insn) & 0x2) == 0);
2685 if (is_branch) /* BC1ANY2F, BC1ANY2T, BC1ANY4F, BC1ANY4T */
2686 break;
2687 /* Fall through. */
2688 case 18: /* COP2 */
2689 case 19: /* COP3 */
2690 is_branch = (itype_rs (insn) == 8); /* BCzF, BCzFL, BCzT, BCzTL */
2691 break;
2692 }
2693 if (is_branch)
2694 {
2695 branch_bp = loc + mips32_relative_offset (insn) + 4;
2696 if (last_breakpoint >= 1)
2697 return 0; /* More than one branch found, fallback to the
2698 standard single-step code. */
2699 breaks[1] = branch_bp;
2700 last_breakpoint++;
2701 }
2702
2703 if (itype_op (insn) == SC_OPCODE || itype_op (insn) == SCD_OPCODE)
2704 break;
2705 }
2706
2707 /* Assume that the atomic sequence ends with a sc/scd instruction. */
2708 if (itype_op (insn) != SC_OPCODE && itype_op (insn) != SCD_OPCODE)
2709 return 0;
2710
2711 loc += MIPS_INSN32_SIZE;
2712
2713 /* Insert a breakpoint right after the end of the atomic sequence. */
2714 breaks[0] = loc;
2715
2716 /* Check for duplicated breakpoints. Check also for a breakpoint
2717 placed (branch instruction's destination) in the atomic sequence. */
2718 if (last_breakpoint && pc <= breaks[1] && breaks[1] <= breaks[0])
2719 last_breakpoint = 0;
2720
2721 /* Effectively inserts the breakpoints. */
2722 for (index = 0; index <= last_breakpoint; index++)
2723 insert_single_step_breakpoint (gdbarch, aspace, breaks[index]);
2724
2725 return 1;
2726 }
2727
2728 /* mips_software_single_step() is called just before we want to resume
2729 the inferior, if we want to single-step it but there is no hardware
2730 or kernel single-step support (MIPS on GNU/Linux for example). We find
2731 the target of the coming instruction and breakpoint it. */
2732
2733 int
2734 mips_software_single_step (struct frame_info *frame)
2735 {
2736 struct gdbarch *gdbarch = get_frame_arch (frame);
2737 struct address_space *aspace = get_frame_address_space (frame);
2738 CORE_ADDR pc, next_pc;
2739
2740 pc = get_frame_pc (frame);
2741 if (deal_with_atomic_sequence (gdbarch, aspace, pc))
2742 return 1;
2743
2744 next_pc = mips_next_pc (frame, pc);
2745
2746 insert_single_step_breakpoint (gdbarch, aspace, next_pc);
2747 return 1;
2748 }
2749
2750 /* Test whether the PC points to the return instruction at the
2751 end of a function. */
2752
2753 static int
2754 mips_about_to_return (struct gdbarch *gdbarch, CORE_ADDR pc)
2755 {
2756 if (mips_pc_is_mips16 (pc))
2757 /* This mips16 case isn't necessarily reliable. Sometimes the compiler
2758 generates a "jr $ra"; other times it generates code to load
2759 the return address from the stack to an accessible register (such
2760 as $a3), then a "jr" using that register. This second case
2761 is almost impossible to distinguish from an indirect jump
2762 used for switch statements, so we don't even try. */
2763 return mips_fetch_instruction (gdbarch, pc) == 0xe820; /* jr $ra */
2764 else
2765 return mips_fetch_instruction (gdbarch, pc) == 0x3e00008; /* jr $ra */
2766 }
2767
2768
2769 /* This fencepost looks highly suspicious to me. Removing it also
2770 seems suspicious as it could affect remote debugging across serial
2771 lines. */
2772
2773 static CORE_ADDR
2774 heuristic_proc_start (struct gdbarch *gdbarch, CORE_ADDR pc)
2775 {
2776 CORE_ADDR start_pc;
2777 CORE_ADDR fence;
2778 int instlen;
2779 int seen_adjsp = 0;
2780 struct inferior *inf;
2781
2782 pc = gdbarch_addr_bits_remove (gdbarch, pc);
2783 start_pc = pc;
2784 fence = start_pc - heuristic_fence_post;
2785 if (start_pc == 0)
2786 return 0;
2787
2788 if (heuristic_fence_post == UINT_MAX || fence < VM_MIN_ADDRESS)
2789 fence = VM_MIN_ADDRESS;
2790
2791 instlen = mips_pc_is_mips16 (pc) ? MIPS_INSN16_SIZE : MIPS_INSN32_SIZE;
2792
2793 inf = current_inferior ();
2794
2795 /* Search back for previous return. */
2796 for (start_pc -= instlen;; start_pc -= instlen)
2797 if (start_pc < fence)
2798 {
2799 /* It's not clear to me why we reach this point when
2800 stop_soon, but with this test, at least we
2801 don't print out warnings for every child forked (eg, on
2802 decstation). 22apr93 rich@cygnus.com. */
2803 if (inf->control.stop_soon == NO_STOP_QUIETLY)
2804 {
2805 static int blurb_printed = 0;
2806
2807 warning (_("GDB can't find the start of the function at %s."),
2808 paddress (gdbarch, pc));
2809
2810 if (!blurb_printed)
2811 {
2812 /* This actually happens frequently in embedded
2813 development, when you first connect to a board
2814 and your stack pointer and pc are nowhere in
2815 particular. This message needs to give people
2816 in that situation enough information to
2817 determine that it's no big deal. */
2818 printf_filtered ("\n\
2819 GDB is unable to find the start of the function at %s\n\
2820 and thus can't determine the size of that function's stack frame.\n\
2821 This means that GDB may be unable to access that stack frame, or\n\
2822 the frames below it.\n\
2823 This problem is most likely caused by an invalid program counter or\n\
2824 stack pointer.\n\
2825 However, if you think GDB should simply search farther back\n\
2826 from %s for code which looks like the beginning of a\n\
2827 function, you can increase the range of the search using the `set\n\
2828 heuristic-fence-post' command.\n",
2829 paddress (gdbarch, pc), paddress (gdbarch, pc));
2830 blurb_printed = 1;
2831 }
2832 }
2833
2834 return 0;
2835 }
2836 else if (mips_pc_is_mips16 (start_pc))
2837 {
2838 unsigned short inst;
2839
2840 /* On MIPS16, any one of the following is likely to be the
2841 start of a function:
2842 extend save
2843 save
2844 entry
2845 addiu sp,-n
2846 daddiu sp,-n
2847 extend -n followed by 'addiu sp,+n' or 'daddiu sp,+n'. */
2848 inst = mips_fetch_instruction (gdbarch, start_pc);
2849 if ((inst & 0xff80) == 0x6480) /* save */
2850 {
2851 if (start_pc - instlen >= fence)
2852 {
2853 inst = mips_fetch_instruction (gdbarch, start_pc - instlen);
2854 if ((inst & 0xf800) == 0xf000) /* extend */
2855 start_pc -= instlen;
2856 }
2857 break;
2858 }
2859 else if (((inst & 0xf81f) == 0xe809
2860 && (inst & 0x700) != 0x700) /* entry */
2861 || (inst & 0xff80) == 0x6380 /* addiu sp,-n */
2862 || (inst & 0xff80) == 0xfb80 /* daddiu sp,-n */
2863 || ((inst & 0xf810) == 0xf010 && seen_adjsp)) /* extend -n */
2864 break;
2865 else if ((inst & 0xff00) == 0x6300 /* addiu sp */
2866 || (inst & 0xff00) == 0xfb00) /* daddiu sp */
2867 seen_adjsp = 1;
2868 else
2869 seen_adjsp = 0;
2870 }
2871 else if (mips_about_to_return (gdbarch, start_pc))
2872 {
2873 /* Skip return and its delay slot. */
2874 start_pc += 2 * MIPS_INSN32_SIZE;
2875 break;
2876 }
2877
2878 return start_pc;
2879 }
2880
2881 struct mips_objfile_private
2882 {
2883 bfd_size_type size;
2884 char *contents;
2885 };
2886
2887 /* According to the current ABI, should the type be passed in a
2888 floating-point register (assuming that there is space)? When there
2889 is no FPU, FP are not even considered as possible candidates for
2890 FP registers and, consequently this returns false - forces FP
2891 arguments into integer registers. */
2892
2893 static int
2894 fp_register_arg_p (struct gdbarch *gdbarch, enum type_code typecode,
2895 struct type *arg_type)
2896 {
2897 return ((typecode == TYPE_CODE_FLT
2898 || (MIPS_EABI (gdbarch)
2899 && (typecode == TYPE_CODE_STRUCT
2900 || typecode == TYPE_CODE_UNION)
2901 && TYPE_NFIELDS (arg_type) == 1
2902 && TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (arg_type, 0)))
2903 == TYPE_CODE_FLT))
2904 && MIPS_FPU_TYPE(gdbarch) != MIPS_FPU_NONE);
2905 }
2906
2907 /* On o32, argument passing in GPRs depends on the alignment of the type being
2908 passed. Return 1 if this type must be aligned to a doubleword boundary. */
2909
2910 static int
2911 mips_type_needs_double_align (struct type *type)
2912 {
2913 enum type_code typecode = TYPE_CODE (type);
2914
2915 if (typecode == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8)
2916 return 1;
2917 else if (typecode == TYPE_CODE_STRUCT)
2918 {
2919 if (TYPE_NFIELDS (type) < 1)
2920 return 0;
2921 return mips_type_needs_double_align (TYPE_FIELD_TYPE (type, 0));
2922 }
2923 else if (typecode == TYPE_CODE_UNION)
2924 {
2925 int i, n;
2926
2927 n = TYPE_NFIELDS (type);
2928 for (i = 0; i < n; i++)
2929 if (mips_type_needs_double_align (TYPE_FIELD_TYPE (type, i)))
2930 return 1;
2931 return 0;
2932 }
2933 return 0;
2934 }
2935
2936 /* Adjust the address downward (direction of stack growth) so that it
2937 is correctly aligned for a new stack frame. */
2938 static CORE_ADDR
2939 mips_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
2940 {
2941 return align_down (addr, 16);
2942 }
2943
2944 static CORE_ADDR
2945 mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
2946 struct regcache *regcache, CORE_ADDR bp_addr,
2947 int nargs, struct value **args, CORE_ADDR sp,
2948 int struct_return, CORE_ADDR struct_addr)
2949 {
2950 int argreg;
2951 int float_argreg;
2952 int argnum;
2953 int len = 0;
2954 int stack_offset = 0;
2955 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2956 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2957 CORE_ADDR func_addr = find_function_addr (function, NULL);
2958 int regsize = mips_abi_regsize (gdbarch);
2959
2960 /* For shared libraries, "t9" needs to point at the function
2961 address. */
2962 regcache_cooked_write_signed (regcache, MIPS_T9_REGNUM, func_addr);
2963
2964 /* Set the return address register to point to the entry point of
2965 the program, where a breakpoint lies in wait. */
2966 regcache_cooked_write_signed (regcache, MIPS_RA_REGNUM, bp_addr);
2967
2968 /* First ensure that the stack and structure return address (if any)
2969 are properly aligned. The stack has to be at least 64-bit
2970 aligned even on 32-bit machines, because doubles must be 64-bit
2971 aligned. For n32 and n64, stack frames need to be 128-bit
2972 aligned, so we round to this widest known alignment. */
2973
2974 sp = align_down (sp, 16);
2975 struct_addr = align_down (struct_addr, 16);
2976
2977 /* Now make space on the stack for the args. We allocate more
2978 than necessary for EABI, because the first few arguments are
2979 passed in registers, but that's OK. */
2980 for (argnum = 0; argnum < nargs; argnum++)
2981 len += align_up (TYPE_LENGTH (value_type (args[argnum])), regsize);
2982 sp -= align_up (len, 16);
2983
2984 if (mips_debug)
2985 fprintf_unfiltered (gdb_stdlog,
2986 "mips_eabi_push_dummy_call: sp=%s allocated %ld\n",
2987 paddress (gdbarch, sp), (long) align_up (len, 16));
2988
2989 /* Initialize the integer and float register pointers. */
2990 argreg = MIPS_A0_REGNUM;
2991 float_argreg = mips_fpa0_regnum (gdbarch);
2992
2993 /* The struct_return pointer occupies the first parameter-passing reg. */
2994 if (struct_return)
2995 {
2996 if (mips_debug)
2997 fprintf_unfiltered (gdb_stdlog,
2998 "mips_eabi_push_dummy_call: "
2999 "struct_return reg=%d %s\n",
3000 argreg, paddress (gdbarch, struct_addr));
3001 regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
3002 }
3003
3004 /* Now load as many as possible of the first arguments into
3005 registers, and push the rest onto the stack. Loop thru args
3006 from first to last. */
3007 for (argnum = 0; argnum < nargs; argnum++)
3008 {
3009 const gdb_byte *val;
3010 gdb_byte valbuf[MAX_REGISTER_SIZE];
3011 struct value *arg = args[argnum];
3012 struct type *arg_type = check_typedef (value_type (arg));
3013 int len = TYPE_LENGTH (arg_type);
3014 enum type_code typecode = TYPE_CODE (arg_type);
3015
3016 if (mips_debug)
3017 fprintf_unfiltered (gdb_stdlog,
3018 "mips_eabi_push_dummy_call: %d len=%d type=%d",
3019 argnum + 1, len, (int) typecode);
3020
3021 /* Function pointer arguments to mips16 code need to be made into
3022 mips16 pointers. */
3023 if (typecode == TYPE_CODE_PTR
3024 && TYPE_CODE (TYPE_TARGET_TYPE (arg_type)) == TYPE_CODE_FUNC)
3025 {
3026 CORE_ADDR addr = extract_signed_integer (value_contents (arg),
3027 len, byte_order);
3028 if (mips_pc_is_mips16 (addr))
3029 {
3030 store_signed_integer (valbuf, len, byte_order,
3031 make_mips16_addr (addr));
3032 val = valbuf;
3033 }
3034 else
3035 val = value_contents (arg);
3036 }
3037 /* The EABI passes structures that do not fit in a register by
3038 reference. */
3039 else if (len > regsize
3040 && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION))
3041 {
3042 store_unsigned_integer (valbuf, regsize, byte_order,
3043 value_address (arg));
3044 typecode = TYPE_CODE_PTR;
3045 len = regsize;
3046 val = valbuf;
3047 if (mips_debug)
3048 fprintf_unfiltered (gdb_stdlog, " push");
3049 }
3050 else
3051 val = value_contents (arg);
3052
3053 /* 32-bit ABIs always start floating point arguments in an
3054 even-numbered floating point register. Round the FP register
3055 up before the check to see if there are any FP registers
3056 left. Non MIPS_EABI targets also pass the FP in the integer
3057 registers so also round up normal registers. */
3058 if (regsize < 8 && fp_register_arg_p (gdbarch, typecode, arg_type))
3059 {
3060 if ((float_argreg & 1))
3061 float_argreg++;
3062 }
3063
3064 /* Floating point arguments passed in registers have to be
3065 treated specially. On 32-bit architectures, doubles
3066 are passed in register pairs; the even register gets
3067 the low word, and the odd register gets the high word.
3068 On non-EABI processors, the first two floating point arguments are
3069 also copied to general registers, because MIPS16 functions
3070 don't use float registers for arguments. This duplication of
3071 arguments in general registers can't hurt non-MIPS16 functions
3072 because those registers are normally skipped. */
3073 /* MIPS_EABI squeezes a struct that contains a single floating
3074 point value into an FP register instead of pushing it onto the
3075 stack. */
3076 if (fp_register_arg_p (gdbarch, typecode, arg_type)
3077 && float_argreg <= MIPS_LAST_FP_ARG_REGNUM (gdbarch))
3078 {
3079 /* EABI32 will pass doubles in consecutive registers, even on
3080 64-bit cores. At one time, we used to check the size of
3081 `float_argreg' to determine whether or not to pass doubles
3082 in consecutive registers, but this is not sufficient for
3083 making the ABI determination. */
3084 if (len == 8 && mips_abi (gdbarch) == MIPS_ABI_EABI32)
3085 {
3086 int low_offset = gdbarch_byte_order (gdbarch)
3087 == BFD_ENDIAN_BIG ? 4 : 0;
3088 long regval;
3089
3090 /* Write the low word of the double to the even register(s). */
3091 regval = extract_signed_integer (val + low_offset,
3092 4, byte_order);
3093 if (mips_debug)
3094 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3095 float_argreg, phex (regval, 4));
3096 regcache_cooked_write_signed (regcache, float_argreg++, regval);
3097
3098 /* Write the high word of the double to the odd register(s). */
3099 regval = extract_signed_integer (val + 4 - low_offset,
3100 4, byte_order);
3101 if (mips_debug)
3102 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3103 float_argreg, phex (regval, 4));
3104 regcache_cooked_write_signed (regcache, float_argreg++, regval);
3105 }
3106 else
3107 {
3108 /* This is a floating point value that fits entirely
3109 in a single register. */
3110 /* On 32 bit ABI's the float_argreg is further adjusted
3111 above to ensure that it is even register aligned. */
3112 LONGEST regval = extract_signed_integer (val, len, byte_order);
3113 if (mips_debug)
3114 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3115 float_argreg, phex (regval, len));
3116 regcache_cooked_write_signed (regcache, float_argreg++, regval);
3117 }
3118 }
3119 else
3120 {
3121 /* Copy the argument to general registers or the stack in
3122 register-sized pieces. Large arguments are split between
3123 registers and stack. */
3124 /* Note: structs whose size is not a multiple of regsize
3125 are treated specially: Irix cc passes
3126 them in registers where gcc sometimes puts them on the
3127 stack. For maximum compatibility, we will put them in
3128 both places. */
3129 int odd_sized_struct = (len > regsize && len % regsize != 0);
3130
3131 /* Note: Floating-point values that didn't fit into an FP
3132 register are only written to memory. */
3133 while (len > 0)
3134 {
3135 /* Remember if the argument was written to the stack. */
3136 int stack_used_p = 0;
3137 int partial_len = (len < regsize ? len : regsize);
3138
3139 if (mips_debug)
3140 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
3141 partial_len);
3142
3143 /* Write this portion of the argument to the stack. */
3144 if (argreg > MIPS_LAST_ARG_REGNUM (gdbarch)
3145 || odd_sized_struct
3146 || fp_register_arg_p (gdbarch, typecode, arg_type))
3147 {
3148 /* Should shorter than int integer values be
3149 promoted to int before being stored? */
3150 int longword_offset = 0;
3151 CORE_ADDR addr;
3152 stack_used_p = 1;
3153 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
3154 {
3155 if (regsize == 8
3156 && (typecode == TYPE_CODE_INT
3157 || typecode == TYPE_CODE_PTR
3158 || typecode == TYPE_CODE_FLT) && len <= 4)
3159 longword_offset = regsize - len;
3160 else if ((typecode == TYPE_CODE_STRUCT
3161 || typecode == TYPE_CODE_UNION)
3162 && TYPE_LENGTH (arg_type) < regsize)
3163 longword_offset = regsize - len;
3164 }
3165
3166 if (mips_debug)
3167 {
3168 fprintf_unfiltered (gdb_stdlog, " - stack_offset=%s",
3169 paddress (gdbarch, stack_offset));
3170 fprintf_unfiltered (gdb_stdlog, " longword_offset=%s",
3171 paddress (gdbarch, longword_offset));
3172 }
3173
3174 addr = sp + stack_offset + longword_offset;
3175
3176 if (mips_debug)
3177 {
3178 int i;
3179 fprintf_unfiltered (gdb_stdlog, " @%s ",
3180 paddress (gdbarch, addr));
3181 for (i = 0; i < partial_len; i++)
3182 {
3183 fprintf_unfiltered (gdb_stdlog, "%02x",
3184 val[i] & 0xff);
3185 }
3186 }
3187 write_memory (addr, val, partial_len);
3188 }
3189
3190 /* Note!!! This is NOT an else clause. Odd sized
3191 structs may go thru BOTH paths. Floating point
3192 arguments will not. */
3193 /* Write this portion of the argument to a general
3194 purpose register. */
3195 if (argreg <= MIPS_LAST_ARG_REGNUM (gdbarch)
3196 && !fp_register_arg_p (gdbarch, typecode, arg_type))
3197 {
3198 LONGEST regval =
3199 extract_signed_integer (val, partial_len, byte_order);
3200
3201 if (mips_debug)
3202 fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
3203 argreg,
3204 phex (regval, regsize));
3205 regcache_cooked_write_signed (regcache, argreg, regval);
3206 argreg++;
3207 }
3208
3209 len -= partial_len;
3210 val += partial_len;
3211
3212 /* Compute the offset into the stack at which we will
3213 copy the next parameter.
3214
3215 In the new EABI (and the NABI32), the stack_offset
3216 only needs to be adjusted when it has been used. */
3217
3218 if (stack_used_p)
3219 stack_offset += align_up (partial_len, regsize);
3220 }
3221 }
3222 if (mips_debug)
3223 fprintf_unfiltered (gdb_stdlog, "\n");
3224 }
3225
3226 regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
3227
3228 /* Return adjusted stack pointer. */
3229 return sp;
3230 }
3231
3232 /* Determine the return value convention being used. */
3233
3234 static enum return_value_convention
3235 mips_eabi_return_value (struct gdbarch *gdbarch, struct type *func_type,
3236 struct type *type, struct regcache *regcache,
3237 gdb_byte *readbuf, const gdb_byte *writebuf)
3238 {
3239 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3240 int fp_return_type = 0;
3241 int offset, regnum, xfer;
3242
3243 if (TYPE_LENGTH (type) > 2 * mips_abi_regsize (gdbarch))
3244 return RETURN_VALUE_STRUCT_CONVENTION;
3245
3246 /* Floating point type? */
3247 if (tdep->mips_fpu_type != MIPS_FPU_NONE)
3248 {
3249 if (TYPE_CODE (type) == TYPE_CODE_FLT)
3250 fp_return_type = 1;
3251 /* Structs with a single field of float type
3252 are returned in a floating point register. */
3253 if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
3254 || TYPE_CODE (type) == TYPE_CODE_UNION)
3255 && TYPE_NFIELDS (type) == 1)
3256 {
3257 struct type *fieldtype = TYPE_FIELD_TYPE (type, 0);
3258
3259 if (TYPE_CODE (check_typedef (fieldtype)) == TYPE_CODE_FLT)
3260 fp_return_type = 1;
3261 }
3262 }
3263
3264 if (fp_return_type)
3265 {
3266 /* A floating-point value belongs in the least significant part
3267 of FP0/FP1. */
3268 if (mips_debug)
3269 fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
3270 regnum = mips_regnum (gdbarch)->fp0;
3271 }
3272 else
3273 {
3274 /* An integer value goes in V0/V1. */
3275 if (mips_debug)
3276 fprintf_unfiltered (gdb_stderr, "Return scalar in $v0\n");
3277 regnum = MIPS_V0_REGNUM;
3278 }
3279 for (offset = 0;
3280 offset < TYPE_LENGTH (type);
3281 offset += mips_abi_regsize (gdbarch), regnum++)
3282 {
3283 xfer = mips_abi_regsize (gdbarch);
3284 if (offset + xfer > TYPE_LENGTH (type))
3285 xfer = TYPE_LENGTH (type) - offset;
3286 mips_xfer_register (gdbarch, regcache,
3287 gdbarch_num_regs (gdbarch) + regnum, xfer,
3288 gdbarch_byte_order (gdbarch), readbuf, writebuf,
3289 offset);
3290 }
3291
3292 return RETURN_VALUE_REGISTER_CONVENTION;
3293 }
3294
3295
3296 /* N32/N64 ABI stuff. */
3297
3298 /* Search for a naturally aligned double at OFFSET inside a struct
3299 ARG_TYPE. The N32 / N64 ABIs pass these in floating point
3300 registers. */
3301
3302 static int
3303 mips_n32n64_fp_arg_chunk_p (struct gdbarch *gdbarch, struct type *arg_type,
3304 int offset)
3305 {
3306 int i;
3307
3308 if (TYPE_CODE (arg_type) != TYPE_CODE_STRUCT)
3309 return 0;
3310
3311 if (MIPS_FPU_TYPE (gdbarch) != MIPS_FPU_DOUBLE)
3312 return 0;
3313
3314 if (TYPE_LENGTH (arg_type) < offset + MIPS64_REGSIZE)
3315 return 0;
3316
3317 for (i = 0; i < TYPE_NFIELDS (arg_type); i++)
3318 {
3319 int pos;
3320 struct type *field_type;
3321
3322 /* We're only looking at normal fields. */
3323 if (field_is_static (&TYPE_FIELD (arg_type, i))
3324 || (TYPE_FIELD_BITPOS (arg_type, i) % 8) != 0)
3325 continue;
3326
3327 /* If we have gone past the offset, there is no double to pass. */
3328 pos = TYPE_FIELD_BITPOS (arg_type, i) / 8;
3329 if (pos > offset)
3330 return 0;
3331
3332 field_type = check_typedef (TYPE_FIELD_TYPE (arg_type, i));
3333
3334 /* If this field is entirely before the requested offset, go
3335 on to the next one. */
3336 if (pos + TYPE_LENGTH (field_type) <= offset)
3337 continue;
3338
3339 /* If this is our special aligned double, we can stop. */
3340 if (TYPE_CODE (field_type) == TYPE_CODE_FLT
3341 && TYPE_LENGTH (field_type) == MIPS64_REGSIZE)
3342 return 1;
3343
3344 /* This field starts at or before the requested offset, and
3345 overlaps it. If it is a structure, recurse inwards. */
3346 return mips_n32n64_fp_arg_chunk_p (gdbarch, field_type, offset - pos);
3347 }
3348
3349 return 0;
3350 }
3351
3352 static CORE_ADDR
3353 mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
3354 struct regcache *regcache, CORE_ADDR bp_addr,
3355 int nargs, struct value **args, CORE_ADDR sp,
3356 int struct_return, CORE_ADDR struct_addr)
3357 {
3358 int argreg;
3359 int float_argreg;
3360 int argnum;
3361 int len = 0;
3362 int stack_offset = 0;
3363 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3364 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3365 CORE_ADDR func_addr = find_function_addr (function, NULL);
3366
3367 /* For shared libraries, "t9" needs to point at the function
3368 address. */
3369 regcache_cooked_write_signed (regcache, MIPS_T9_REGNUM, func_addr);
3370
3371 /* Set the return address register to point to the entry point of
3372 the program, where a breakpoint lies in wait. */
3373 regcache_cooked_write_signed (regcache, MIPS_RA_REGNUM, bp_addr);
3374
3375 /* First ensure that the stack and structure return address (if any)
3376 are properly aligned. The stack has to be at least 64-bit
3377 aligned even on 32-bit machines, because doubles must be 64-bit
3378 aligned. For n32 and n64, stack frames need to be 128-bit
3379 aligned, so we round to this widest known alignment. */
3380
3381 sp = align_down (sp, 16);
3382 struct_addr = align_down (struct_addr, 16);
3383
3384 /* Now make space on the stack for the args. */
3385 for (argnum = 0; argnum < nargs; argnum++)
3386 len += align_up (TYPE_LENGTH (value_type (args[argnum])), MIPS64_REGSIZE);
3387 sp -= align_up (len, 16);
3388
3389 if (mips_debug)
3390 fprintf_unfiltered (gdb_stdlog,
3391 "mips_n32n64_push_dummy_call: sp=%s allocated %ld\n",
3392 paddress (gdbarch, sp), (long) align_up (len, 16));
3393
3394 /* Initialize the integer and float register pointers. */
3395 argreg = MIPS_A0_REGNUM;
3396 float_argreg = mips_fpa0_regnum (gdbarch);
3397
3398 /* The struct_return pointer occupies the first parameter-passing reg. */
3399 if (struct_return)
3400 {
3401 if (mips_debug)
3402 fprintf_unfiltered (gdb_stdlog,
3403 "mips_n32n64_push_dummy_call: "
3404 "struct_return reg=%d %s\n",
3405 argreg, paddress (gdbarch, struct_addr));
3406 regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
3407 }
3408
3409 /* Now load as many as possible of the first arguments into
3410 registers, and push the rest onto the stack. Loop thru args
3411 from first to last. */
3412 for (argnum = 0; argnum < nargs; argnum++)
3413 {
3414 const gdb_byte *val;
3415 struct value *arg = args[argnum];
3416 struct type *arg_type = check_typedef (value_type (arg));
3417 int len = TYPE_LENGTH (arg_type);
3418 enum type_code typecode = TYPE_CODE (arg_type);
3419
3420 if (mips_debug)
3421 fprintf_unfiltered (gdb_stdlog,
3422 "mips_n32n64_push_dummy_call: %d len=%d type=%d",
3423 argnum + 1, len, (int) typecode);
3424
3425 val = value_contents (arg);
3426
3427 /* A 128-bit long double value requires an even-odd pair of
3428 floating-point registers. */
3429 if (len == 16
3430 && fp_register_arg_p (gdbarch, typecode, arg_type)
3431 && (float_argreg & 1))
3432 {
3433 float_argreg++;
3434 argreg++;
3435 }
3436
3437 if (fp_register_arg_p (gdbarch, typecode, arg_type)
3438 && argreg <= MIPS_LAST_ARG_REGNUM (gdbarch))
3439 {
3440 /* This is a floating point value that fits entirely
3441 in a single register or a pair of registers. */
3442 int reglen = (len <= MIPS64_REGSIZE ? len : MIPS64_REGSIZE);
3443 LONGEST regval = extract_unsigned_integer (val, reglen, byte_order);
3444 if (mips_debug)
3445 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3446 float_argreg, phex (regval, reglen));
3447 regcache_cooked_write_unsigned (regcache, float_argreg, regval);
3448
3449 if (mips_debug)
3450 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
3451 argreg, phex (regval, reglen));
3452 regcache_cooked_write_unsigned (regcache, argreg, regval);
3453 float_argreg++;
3454 argreg++;
3455 if (len == 16)
3456 {
3457 regval = extract_unsigned_integer (val + reglen,
3458 reglen, byte_order);
3459 if (mips_debug)
3460 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3461 float_argreg, phex (regval, reglen));
3462 regcache_cooked_write_unsigned (regcache, float_argreg, regval);
3463
3464 if (mips_debug)
3465 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
3466 argreg, phex (regval, reglen));
3467 regcache_cooked_write_unsigned (regcache, argreg, regval);
3468 float_argreg++;
3469 argreg++;
3470 }
3471 }
3472 else
3473 {
3474 /* Copy the argument to general registers or the stack in
3475 register-sized pieces. Large arguments are split between
3476 registers and stack. */
3477 /* For N32/N64, structs, unions, or other composite types are
3478 treated as a sequence of doublewords, and are passed in integer
3479 or floating point registers as though they were simple scalar
3480 parameters to the extent that they fit, with any excess on the
3481 stack packed according to the normal memory layout of the
3482 object.
3483 The caller does not reserve space for the register arguments;
3484 the callee is responsible for reserving it if required. */
3485 /* Note: Floating-point values that didn't fit into an FP
3486 register are only written to memory. */
3487 while (len > 0)
3488 {
3489 /* Remember if the argument was written to the stack. */
3490 int stack_used_p = 0;
3491 int partial_len = (len < MIPS64_REGSIZE ? len : MIPS64_REGSIZE);
3492
3493 if (mips_debug)
3494 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
3495 partial_len);
3496
3497 if (fp_register_arg_p (gdbarch, typecode, arg_type))
3498 gdb_assert (argreg > MIPS_LAST_ARG_REGNUM (gdbarch));
3499
3500 /* Write this portion of the argument to the stack. */
3501 if (argreg > MIPS_LAST_ARG_REGNUM (gdbarch))
3502 {
3503 /* Should shorter than int integer values be
3504 promoted to int before being stored? */
3505 int longword_offset = 0;
3506 CORE_ADDR addr;
3507 stack_used_p = 1;
3508 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
3509 {
3510 if ((typecode == TYPE_CODE_INT
3511 || typecode == TYPE_CODE_PTR)
3512 && len <= 4)
3513 longword_offset = MIPS64_REGSIZE - len;
3514 }
3515
3516 if (mips_debug)
3517 {
3518 fprintf_unfiltered (gdb_stdlog, " - stack_offset=%s",
3519 paddress (gdbarch, stack_offset));
3520 fprintf_unfiltered (gdb_stdlog, " longword_offset=%s",
3521 paddress (gdbarch, longword_offset));
3522 }
3523
3524 addr = sp + stack_offset + longword_offset;
3525
3526 if (mips_debug)
3527 {
3528 int i;
3529 fprintf_unfiltered (gdb_stdlog, " @%s ",
3530 paddress (gdbarch, addr));
3531 for (i = 0; i < partial_len; i++)
3532 {
3533 fprintf_unfiltered (gdb_stdlog, "%02x",
3534 val[i] & 0xff);
3535 }
3536 }
3537 write_memory (addr, val, partial_len);
3538 }
3539
3540 /* Note!!! This is NOT an else clause. Odd sized
3541 structs may go thru BOTH paths. */
3542 /* Write this portion of the argument to a general
3543 purpose register. */
3544 if (argreg <= MIPS_LAST_ARG_REGNUM (gdbarch))
3545 {
3546 LONGEST regval;
3547
3548 /* Sign extend pointers, 32-bit integers and signed
3549 16-bit and 8-bit integers; everything else is taken
3550 as is. */
3551
3552 if ((partial_len == 4
3553 && (typecode == TYPE_CODE_PTR
3554 || typecode == TYPE_CODE_INT))
3555 || (partial_len < 4
3556 && typecode == TYPE_CODE_INT
3557 && !TYPE_UNSIGNED (arg_type)))
3558 regval = extract_signed_integer (val, partial_len,
3559 byte_order);
3560 else
3561 regval = extract_unsigned_integer (val, partial_len,
3562 byte_order);
3563
3564 /* A non-floating-point argument being passed in a
3565 general register. If a struct or union, and if
3566 the remaining length is smaller than the register
3567 size, we have to adjust the register value on
3568 big endian targets.
3569
3570 It does not seem to be necessary to do the
3571 same for integral types. */
3572
3573 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
3574 && partial_len < MIPS64_REGSIZE
3575 && (typecode == TYPE_CODE_STRUCT
3576 || typecode == TYPE_CODE_UNION))
3577 regval <<= ((MIPS64_REGSIZE - partial_len)
3578 * TARGET_CHAR_BIT);
3579
3580 if (mips_debug)
3581 fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
3582 argreg,
3583 phex (regval, MIPS64_REGSIZE));
3584 regcache_cooked_write_unsigned (regcache, argreg, regval);
3585
3586 if (mips_n32n64_fp_arg_chunk_p (gdbarch, arg_type,
3587 TYPE_LENGTH (arg_type) - len))
3588 {
3589 if (mips_debug)
3590 fprintf_filtered (gdb_stdlog, " - fpreg=%d val=%s",
3591 float_argreg,
3592 phex (regval, MIPS64_REGSIZE));
3593 regcache_cooked_write_unsigned (regcache, float_argreg,
3594 regval);
3595 }
3596
3597 float_argreg++;
3598 argreg++;
3599 }
3600
3601 len -= partial_len;
3602 val += partial_len;
3603
3604 /* Compute the offset into the stack at which we will
3605 copy the next parameter.
3606
3607 In N32 (N64?), the stack_offset only needs to be
3608 adjusted when it has been used. */
3609
3610 if (stack_used_p)
3611 stack_offset += align_up (partial_len, MIPS64_REGSIZE);
3612 }
3613 }
3614 if (mips_debug)
3615 fprintf_unfiltered (gdb_stdlog, "\n");
3616 }
3617
3618 regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
3619
3620 /* Return adjusted stack pointer. */
3621 return sp;
3622 }
3623
3624 static enum return_value_convention
3625 mips_n32n64_return_value (struct gdbarch *gdbarch, struct type *func_type,
3626 struct type *type, struct regcache *regcache,
3627 gdb_byte *readbuf, const gdb_byte *writebuf)
3628 {
3629 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3630
3631 /* From MIPSpro N32 ABI Handbook, Document Number: 007-2816-004
3632
3633 Function results are returned in $2 (and $3 if needed), or $f0 (and $f2
3634 if needed), as appropriate for the type. Composite results (struct,
3635 union, or array) are returned in $2/$f0 and $3/$f2 according to the
3636 following rules:
3637
3638 * A struct with only one or two floating point fields is returned in $f0
3639 (and $f2 if necessary). This is a generalization of the Fortran COMPLEX
3640 case.
3641
3642 * Any other composite results of at most 128 bits are returned in
3643 $2 (first 64 bits) and $3 (remainder, if necessary).
3644
3645 * Larger composite results are handled by converting the function to a
3646 procedure with an implicit first parameter, which is a pointer to an area
3647 reserved by the caller to receive the result. [The o32-bit ABI requires
3648 that all composite results be handled by conversion to implicit first
3649 parameters. The MIPS/SGI Fortran implementation has always made a
3650 specific exception to return COMPLEX results in the floating point
3651 registers.] */
3652
3653 if (TYPE_LENGTH (type) > 2 * MIPS64_REGSIZE)
3654 return RETURN_VALUE_STRUCT_CONVENTION;
3655 else if (TYPE_CODE (type) == TYPE_CODE_FLT
3656 && TYPE_LENGTH (type) == 16
3657 && tdep->mips_fpu_type != MIPS_FPU_NONE)
3658 {
3659 /* A 128-bit floating-point value fills both $f0 and $f2. The
3660 two registers are used in the same as memory order, so the
3661 eight bytes with the lower memory address are in $f0. */
3662 if (mips_debug)
3663 fprintf_unfiltered (gdb_stderr, "Return float in $f0 and $f2\n");
3664 mips_xfer_register (gdbarch, regcache,
3665 gdbarch_num_regs (gdbarch)
3666 + mips_regnum (gdbarch)->fp0,
3667 8, gdbarch_byte_order (gdbarch),
3668 readbuf, writebuf, 0);
3669 mips_xfer_register (gdbarch, regcache,
3670 gdbarch_num_regs (gdbarch)
3671 + mips_regnum (gdbarch)->fp0 + 2,
3672 8, gdbarch_byte_order (gdbarch),
3673 readbuf ? readbuf + 8 : readbuf,
3674 writebuf ? writebuf + 8 : writebuf, 0);
3675 return RETURN_VALUE_REGISTER_CONVENTION;
3676 }
3677 else if (TYPE_CODE (type) == TYPE_CODE_FLT
3678 && tdep->mips_fpu_type != MIPS_FPU_NONE)
3679 {
3680 /* A single or double floating-point value that fits in FP0. */
3681 if (mips_debug)
3682 fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
3683 mips_xfer_register (gdbarch, regcache,
3684 gdbarch_num_regs (gdbarch)
3685 + mips_regnum (gdbarch)->fp0,
3686 TYPE_LENGTH (type),
3687 gdbarch_byte_order (gdbarch),
3688 readbuf, writebuf, 0);
3689 return RETURN_VALUE_REGISTER_CONVENTION;
3690 }
3691 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
3692 && TYPE_NFIELDS (type) <= 2
3693 && TYPE_NFIELDS (type) >= 1
3694 && ((TYPE_NFIELDS (type) == 1
3695 && (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 0)))
3696 == TYPE_CODE_FLT))
3697 || (TYPE_NFIELDS (type) == 2
3698 && (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 0)))
3699 == TYPE_CODE_FLT)
3700 && (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 1)))
3701 == TYPE_CODE_FLT))))
3702 {
3703 /* A struct that contains one or two floats. Each value is part
3704 in the least significant part of their floating point
3705 register (or GPR, for soft float). */
3706 int regnum;
3707 int field;
3708 for (field = 0, regnum = (tdep->mips_fpu_type != MIPS_FPU_NONE
3709 ? mips_regnum (gdbarch)->fp0
3710 : MIPS_V0_REGNUM);
3711 field < TYPE_NFIELDS (type); field++, regnum += 2)
3712 {
3713 int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field])
3714 / TARGET_CHAR_BIT);
3715 if (mips_debug)
3716 fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",
3717 offset);
3718 if (TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)) == 16)
3719 {
3720 /* A 16-byte long double field goes in two consecutive
3721 registers. */
3722 mips_xfer_register (gdbarch, regcache,
3723 gdbarch_num_regs (gdbarch) + regnum,
3724 8,
3725 gdbarch_byte_order (gdbarch),
3726 readbuf, writebuf, offset);
3727 mips_xfer_register (gdbarch, regcache,
3728 gdbarch_num_regs (gdbarch) + regnum + 1,
3729 8,
3730 gdbarch_byte_order (gdbarch),
3731 readbuf, writebuf, offset + 8);
3732 }
3733 else
3734 mips_xfer_register (gdbarch, regcache,
3735 gdbarch_num_regs (gdbarch) + regnum,
3736 TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)),
3737 gdbarch_byte_order (gdbarch),
3738 readbuf, writebuf, offset);
3739 }
3740 return RETURN_VALUE_REGISTER_CONVENTION;
3741 }
3742 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
3743 || TYPE_CODE (type) == TYPE_CODE_UNION
3744 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
3745 {
3746 /* A composite type. Extract the left justified value,
3747 regardless of the byte order. I.e. DO NOT USE
3748 mips_xfer_lower. */
3749 int offset;
3750 int regnum;
3751 for (offset = 0, regnum = MIPS_V0_REGNUM;
3752 offset < TYPE_LENGTH (type);
3753 offset += register_size (gdbarch, regnum), regnum++)
3754 {
3755 int xfer = register_size (gdbarch, regnum);
3756 if (offset + xfer > TYPE_LENGTH (type))
3757 xfer = TYPE_LENGTH (type) - offset;
3758 if (mips_debug)
3759 fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n",
3760 offset, xfer, regnum);
3761 mips_xfer_register (gdbarch, regcache,
3762 gdbarch_num_regs (gdbarch) + regnum,
3763 xfer, BFD_ENDIAN_UNKNOWN, readbuf, writebuf,
3764 offset);
3765 }
3766 return RETURN_VALUE_REGISTER_CONVENTION;
3767 }
3768 else
3769 {
3770 /* A scalar extract each part but least-significant-byte
3771 justified. */
3772 int offset;
3773 int regnum;
3774 for (offset = 0, regnum = MIPS_V0_REGNUM;
3775 offset < TYPE_LENGTH (type);
3776 offset += register_size (gdbarch, regnum), regnum++)
3777 {
3778 int xfer = register_size (gdbarch, regnum);
3779 if (offset + xfer > TYPE_LENGTH (type))
3780 xfer = TYPE_LENGTH (type) - offset;
3781 if (mips_debug)
3782 fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
3783 offset, xfer, regnum);
3784 mips_xfer_register (gdbarch, regcache,
3785 gdbarch_num_regs (gdbarch) + regnum,
3786 xfer, gdbarch_byte_order (gdbarch),
3787 readbuf, writebuf, offset);
3788 }
3789 return RETURN_VALUE_REGISTER_CONVENTION;
3790 }
3791 }
3792
3793 /* O32 ABI stuff. */
3794
3795 static CORE_ADDR
3796 mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
3797 struct regcache *regcache, CORE_ADDR bp_addr,
3798 int nargs, struct value **args, CORE_ADDR sp,
3799 int struct_return, CORE_ADDR struct_addr)
3800 {
3801 int argreg;
3802 int float_argreg;
3803 int argnum;
3804 int len = 0;
3805 int stack_offset = 0;
3806 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3807 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3808 CORE_ADDR func_addr = find_function_addr (function, NULL);
3809
3810 /* For shared libraries, "t9" needs to point at the function
3811 address. */
3812 regcache_cooked_write_signed (regcache, MIPS_T9_REGNUM, func_addr);
3813
3814 /* Set the return address register to point to the entry point of
3815 the program, where a breakpoint lies in wait. */
3816 regcache_cooked_write_signed (regcache, MIPS_RA_REGNUM, bp_addr);
3817
3818 /* First ensure that the stack and structure return address (if any)
3819 are properly aligned. The stack has to be at least 64-bit
3820 aligned even on 32-bit machines, because doubles must be 64-bit
3821 aligned. For n32 and n64, stack frames need to be 128-bit
3822 aligned, so we round to this widest known alignment. */
3823
3824 sp = align_down (sp, 16);
3825 struct_addr = align_down (struct_addr, 16);
3826
3827 /* Now make space on the stack for the args. */
3828 for (argnum = 0; argnum < nargs; argnum++)
3829 {
3830 struct type *arg_type = check_typedef (value_type (args[argnum]));
3831 int arglen = TYPE_LENGTH (arg_type);
3832
3833 /* Align to double-word if necessary. */
3834 if (mips_type_needs_double_align (arg_type))
3835 len = align_up (len, MIPS32_REGSIZE * 2);
3836 /* Allocate space on the stack. */
3837 len += align_up (arglen, MIPS32_REGSIZE);
3838 }
3839 sp -= align_up (len, 16);
3840
3841 if (mips_debug)
3842 fprintf_unfiltered (gdb_stdlog,
3843 "mips_o32_push_dummy_call: sp=%s allocated %ld\n",
3844 paddress (gdbarch, sp), (long) align_up (len, 16));
3845
3846 /* Initialize the integer and float register pointers. */
3847 argreg = MIPS_A0_REGNUM;
3848 float_argreg = mips_fpa0_regnum (gdbarch);
3849
3850 /* The struct_return pointer occupies the first parameter-passing reg. */
3851 if (struct_return)
3852 {
3853 if (mips_debug)
3854 fprintf_unfiltered (gdb_stdlog,
3855 "mips_o32_push_dummy_call: "
3856 "struct_return reg=%d %s\n",
3857 argreg, paddress (gdbarch, struct_addr));
3858 regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
3859 stack_offset += MIPS32_REGSIZE;
3860 }
3861
3862 /* Now load as many as possible of the first arguments into
3863 registers, and push the rest onto the stack. Loop thru args
3864 from first to last. */
3865 for (argnum = 0; argnum < nargs; argnum++)
3866 {
3867 const gdb_byte *val;
3868 struct value *arg = args[argnum];
3869 struct type *arg_type = check_typedef (value_type (arg));
3870 int len = TYPE_LENGTH (arg_type);
3871 enum type_code typecode = TYPE_CODE (arg_type);
3872
3873 if (mips_debug)
3874 fprintf_unfiltered (gdb_stdlog,
3875 "mips_o32_push_dummy_call: %d len=%d type=%d",
3876 argnum + 1, len, (int) typecode);
3877
3878 val = value_contents (arg);
3879
3880 /* 32-bit ABIs always start floating point arguments in an
3881 even-numbered floating point register. Round the FP register
3882 up before the check to see if there are any FP registers
3883 left. O32/O64 targets also pass the FP in the integer
3884 registers so also round up normal registers. */
3885 if (fp_register_arg_p (gdbarch, typecode, arg_type))
3886 {
3887 if ((float_argreg & 1))
3888 float_argreg++;
3889 }
3890
3891 /* Floating point arguments passed in registers have to be
3892 treated specially. On 32-bit architectures, doubles
3893 are passed in register pairs; the even register gets
3894 the low word, and the odd register gets the high word.
3895 On O32/O64, the first two floating point arguments are
3896 also copied to general registers, because MIPS16 functions
3897 don't use float registers for arguments. This duplication of
3898 arguments in general registers can't hurt non-MIPS16 functions
3899 because those registers are normally skipped. */
3900
3901 if (fp_register_arg_p (gdbarch, typecode, arg_type)
3902 && float_argreg <= MIPS_LAST_FP_ARG_REGNUM (gdbarch))
3903 {
3904 if (register_size (gdbarch, float_argreg) < 8 && len == 8)
3905 {
3906 int low_offset = gdbarch_byte_order (gdbarch)
3907 == BFD_ENDIAN_BIG ? 4 : 0;
3908 unsigned long regval;
3909
3910 /* Write the low word of the double to the even register(s). */
3911 regval = extract_unsigned_integer (val + low_offset,
3912 4, byte_order);
3913 if (mips_debug)
3914 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3915 float_argreg, phex (regval, 4));
3916 regcache_cooked_write_unsigned (regcache,
3917 float_argreg++, regval);
3918 if (mips_debug)
3919 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
3920 argreg, phex (regval, 4));
3921 regcache_cooked_write_unsigned (regcache, argreg++, regval);
3922
3923 /* Write the high word of the double to the odd register(s). */
3924 regval = extract_unsigned_integer (val + 4 - low_offset,
3925 4, byte_order);
3926 if (mips_debug)
3927 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3928 float_argreg, phex (regval, 4));
3929 regcache_cooked_write_unsigned (regcache,
3930 float_argreg++, regval);
3931
3932 if (mips_debug)
3933 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
3934 argreg, phex (regval, 4));
3935 regcache_cooked_write_unsigned (regcache, argreg++, regval);
3936 }
3937 else
3938 {
3939 /* This is a floating point value that fits entirely
3940 in a single register. */
3941 /* On 32 bit ABI's the float_argreg is further adjusted
3942 above to ensure that it is even register aligned. */
3943 LONGEST regval = extract_unsigned_integer (val, len, byte_order);
3944 if (mips_debug)
3945 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3946 float_argreg, phex (regval, len));
3947 regcache_cooked_write_unsigned (regcache,
3948 float_argreg++, regval);
3949 /* Although two FP registers are reserved for each
3950 argument, only one corresponding integer register is
3951 reserved. */
3952 if (mips_debug)
3953 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
3954 argreg, phex (regval, len));
3955 regcache_cooked_write_unsigned (regcache, argreg++, regval);
3956 }
3957 /* Reserve space for the FP register. */
3958 stack_offset += align_up (len, MIPS32_REGSIZE);
3959 }
3960 else
3961 {
3962 /* Copy the argument to general registers or the stack in
3963 register-sized pieces. Large arguments are split between
3964 registers and stack. */
3965 /* Note: structs whose size is not a multiple of MIPS32_REGSIZE
3966 are treated specially: Irix cc passes
3967 them in registers where gcc sometimes puts them on the
3968 stack. For maximum compatibility, we will put them in
3969 both places. */
3970 int odd_sized_struct = (len > MIPS32_REGSIZE
3971 && len % MIPS32_REGSIZE != 0);
3972 /* Structures should be aligned to eight bytes (even arg registers)
3973 on MIPS_ABI_O32, if their first member has double precision. */
3974 if (mips_type_needs_double_align (arg_type))
3975 {
3976 if ((argreg & 1))
3977 {
3978 argreg++;
3979 stack_offset += MIPS32_REGSIZE;
3980 }
3981 }
3982 while (len > 0)
3983 {
3984 /* Remember if the argument was written to the stack. */
3985 int stack_used_p = 0;
3986 int partial_len = (len < MIPS32_REGSIZE ? len : MIPS32_REGSIZE);
3987
3988 if (mips_debug)
3989 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
3990 partial_len);
3991
3992 /* Write this portion of the argument to the stack. */
3993 if (argreg > MIPS_LAST_ARG_REGNUM (gdbarch)
3994 || odd_sized_struct)
3995 {
3996 /* Should shorter than int integer values be
3997 promoted to int before being stored? */
3998 int longword_offset = 0;
3999 CORE_ADDR addr;
4000 stack_used_p = 1;
4001
4002 if (mips_debug)
4003 {
4004 fprintf_unfiltered (gdb_stdlog, " - stack_offset=%s",
4005 paddress (gdbarch, stack_offset));
4006 fprintf_unfiltered (gdb_stdlog, " longword_offset=%s",
4007 paddress (gdbarch, longword_offset));
4008 }
4009
4010 addr = sp + stack_offset + longword_offset;
4011
4012 if (mips_debug)
4013 {
4014 int i;
4015 fprintf_unfiltered (gdb_stdlog, " @%s ",
4016 paddress (gdbarch, addr));
4017 for (i = 0; i < partial_len; i++)
4018 {
4019 fprintf_unfiltered (gdb_stdlog, "%02x",
4020 val[i] & 0xff);
4021 }
4022 }
4023 write_memory (addr, val, partial_len);
4024 }
4025
4026 /* Note!!! This is NOT an else clause. Odd sized
4027 structs may go thru BOTH paths. */
4028 /* Write this portion of the argument to a general
4029 purpose register. */
4030 if (argreg <= MIPS_LAST_ARG_REGNUM (gdbarch))
4031 {
4032 LONGEST regval = extract_signed_integer (val, partial_len,
4033 byte_order);
4034 /* Value may need to be sign extended, because
4035 mips_isa_regsize() != mips_abi_regsize(). */
4036
4037 /* A non-floating-point argument being passed in a
4038 general register. If a struct or union, and if
4039 the remaining length is smaller than the register
4040 size, we have to adjust the register value on
4041 big endian targets.
4042
4043 It does not seem to be necessary to do the
4044 same for integral types.
4045
4046 Also don't do this adjustment on O64 binaries.
4047
4048 cagney/2001-07-23: gdb/179: Also, GCC, when
4049 outputting LE O32 with sizeof (struct) <
4050 mips_abi_regsize(), generates a left shift
4051 as part of storing the argument in a register
4052 (the left shift isn't generated when
4053 sizeof (struct) >= mips_abi_regsize()). Since
4054 it is quite possible that this is GCC
4055 contradicting the LE/O32 ABI, GDB has not been
4056 adjusted to accommodate this. Either someone
4057 needs to demonstrate that the LE/O32 ABI
4058 specifies such a left shift OR this new ABI gets
4059 identified as such and GDB gets tweaked
4060 accordingly. */
4061
4062 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
4063 && partial_len < MIPS32_REGSIZE
4064 && (typecode == TYPE_CODE_STRUCT
4065 || typecode == TYPE_CODE_UNION))
4066 regval <<= ((MIPS32_REGSIZE - partial_len)
4067 * TARGET_CHAR_BIT);
4068
4069 if (mips_debug)
4070 fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
4071 argreg,
4072 phex (regval, MIPS32_REGSIZE));
4073 regcache_cooked_write_unsigned (regcache, argreg, regval);
4074 argreg++;
4075
4076 /* Prevent subsequent floating point arguments from
4077 being passed in floating point registers. */
4078 float_argreg = MIPS_LAST_FP_ARG_REGNUM (gdbarch) + 1;
4079 }
4080
4081 len -= partial_len;
4082 val += partial_len;
4083
4084 /* Compute the offset into the stack at which we will
4085 copy the next parameter.
4086
4087 In older ABIs, the caller reserved space for
4088 registers that contained arguments. This was loosely
4089 refered to as their "home". Consequently, space is
4090 always allocated. */
4091
4092 stack_offset += align_up (partial_len, MIPS32_REGSIZE);
4093 }
4094 }
4095 if (mips_debug)
4096 fprintf_unfiltered (gdb_stdlog, "\n");
4097 }
4098
4099 regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
4100
4101 /* Return adjusted stack pointer. */
4102 return sp;
4103 }
4104
4105 static enum return_value_convention
4106 mips_o32_return_value (struct gdbarch *gdbarch, struct type *func_type,
4107 struct type *type, struct regcache *regcache,
4108 gdb_byte *readbuf, const gdb_byte *writebuf)
4109 {
4110 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4111
4112 if (TYPE_CODE (type) == TYPE_CODE_STRUCT
4113 || TYPE_CODE (type) == TYPE_CODE_UNION
4114 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
4115 return RETURN_VALUE_STRUCT_CONVENTION;
4116 else if (TYPE_CODE (type) == TYPE_CODE_FLT
4117 && TYPE_LENGTH (type) == 4 && tdep->mips_fpu_type != MIPS_FPU_NONE)
4118 {
4119 /* A single-precision floating-point value. It fits in the
4120 least significant part of FP0. */
4121 if (mips_debug)
4122 fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
4123 mips_xfer_register (gdbarch, regcache,
4124 gdbarch_num_regs (gdbarch)
4125 + mips_regnum (gdbarch)->fp0,
4126 TYPE_LENGTH (type),
4127 gdbarch_byte_order (gdbarch),
4128 readbuf, writebuf, 0);
4129 return RETURN_VALUE_REGISTER_CONVENTION;
4130 }
4131 else if (TYPE_CODE (type) == TYPE_CODE_FLT
4132 && TYPE_LENGTH (type) == 8 && tdep->mips_fpu_type != MIPS_FPU_NONE)
4133 {
4134 /* A double-precision floating-point value. The most
4135 significant part goes in FP1, and the least significant in
4136 FP0. */
4137 if (mips_debug)
4138 fprintf_unfiltered (gdb_stderr, "Return float in $fp1/$fp0\n");
4139 switch (gdbarch_byte_order (gdbarch))
4140 {
4141 case BFD_ENDIAN_LITTLE:
4142 mips_xfer_register (gdbarch, regcache,
4143 gdbarch_num_regs (gdbarch)
4144 + mips_regnum (gdbarch)->fp0 +
4145 0, 4, gdbarch_byte_order (gdbarch),
4146 readbuf, writebuf, 0);
4147 mips_xfer_register (gdbarch, regcache,
4148 gdbarch_num_regs (gdbarch)
4149 + mips_regnum (gdbarch)->fp0 + 1,
4150 4, gdbarch_byte_order (gdbarch),
4151 readbuf, writebuf, 4);
4152 break;
4153 case BFD_ENDIAN_BIG:
4154 mips_xfer_register (gdbarch, regcache,
4155 gdbarch_num_regs (gdbarch)
4156 + mips_regnum (gdbarch)->fp0 + 1,
4157 4, gdbarch_byte_order (gdbarch),
4158 readbuf, writebuf, 0);
4159 mips_xfer_register (gdbarch, regcache,
4160 gdbarch_num_regs (gdbarch)
4161 + mips_regnum (gdbarch)->fp0 + 0,
4162 4, gdbarch_byte_order (gdbarch),
4163 readbuf, writebuf, 4);
4164 break;
4165 default:
4166 internal_error (__FILE__, __LINE__, _("bad switch"));
4167 }
4168 return RETURN_VALUE_REGISTER_CONVENTION;
4169 }
4170 #if 0
4171 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
4172 && TYPE_NFIELDS (type) <= 2
4173 && TYPE_NFIELDS (type) >= 1
4174 && ((TYPE_NFIELDS (type) == 1
4175 && (TYPE_CODE (TYPE_FIELD_TYPE (type, 0))
4176 == TYPE_CODE_FLT))
4177 || (TYPE_NFIELDS (type) == 2
4178 && (TYPE_CODE (TYPE_FIELD_TYPE (type, 0))
4179 == TYPE_CODE_FLT)
4180 && (TYPE_CODE (TYPE_FIELD_TYPE (type, 1))
4181 == TYPE_CODE_FLT)))
4182 && tdep->mips_fpu_type != MIPS_FPU_NONE)
4183 {
4184 /* A struct that contains one or two floats. Each value is part
4185 in the least significant part of their floating point
4186 register.. */
4187 gdb_byte reg[MAX_REGISTER_SIZE];
4188 int regnum;
4189 int field;
4190 for (field = 0, regnum = mips_regnum (gdbarch)->fp0;
4191 field < TYPE_NFIELDS (type); field++, regnum += 2)
4192 {
4193 int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field])
4194 / TARGET_CHAR_BIT);
4195 if (mips_debug)
4196 fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",
4197 offset);
4198 mips_xfer_register (gdbarch, regcache,
4199 gdbarch_num_regs (gdbarch) + regnum,
4200 TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)),
4201 gdbarch_byte_order (gdbarch),
4202 readbuf, writebuf, offset);
4203 }
4204 return RETURN_VALUE_REGISTER_CONVENTION;
4205 }
4206 #endif
4207 #if 0
4208 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
4209 || TYPE_CODE (type) == TYPE_CODE_UNION)
4210 {
4211 /* A structure or union. Extract the left justified value,
4212 regardless of the byte order. I.e. DO NOT USE
4213 mips_xfer_lower. */
4214 int offset;
4215 int regnum;
4216 for (offset = 0, regnum = MIPS_V0_REGNUM;
4217 offset < TYPE_LENGTH (type);
4218 offset += register_size (gdbarch, regnum), regnum++)
4219 {
4220 int xfer = register_size (gdbarch, regnum);
4221 if (offset + xfer > TYPE_LENGTH (type))
4222 xfer = TYPE_LENGTH (type) - offset;
4223 if (mips_debug)
4224 fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n",
4225 offset, xfer, regnum);
4226 mips_xfer_register (gdbarch, regcache,
4227 gdbarch_num_regs (gdbarch) + regnum, xfer,
4228 BFD_ENDIAN_UNKNOWN, readbuf, writebuf, offset);
4229 }
4230 return RETURN_VALUE_REGISTER_CONVENTION;
4231 }
4232 #endif
4233 else
4234 {
4235 /* A scalar extract each part but least-significant-byte
4236 justified. o32 thinks registers are 4 byte, regardless of
4237 the ISA. */
4238 int offset;
4239 int regnum;
4240 for (offset = 0, regnum = MIPS_V0_REGNUM;
4241 offset < TYPE_LENGTH (type);
4242 offset += MIPS32_REGSIZE, regnum++)
4243 {
4244 int xfer = MIPS32_REGSIZE;
4245 if (offset + xfer > TYPE_LENGTH (type))
4246 xfer = TYPE_LENGTH (type) - offset;
4247 if (mips_debug)
4248 fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
4249 offset, xfer, regnum);
4250 mips_xfer_register (gdbarch, regcache,
4251 gdbarch_num_regs (gdbarch) + regnum, xfer,
4252 gdbarch_byte_order (gdbarch),
4253 readbuf, writebuf, offset);
4254 }
4255 return RETURN_VALUE_REGISTER_CONVENTION;
4256 }
4257 }
4258
4259 /* O64 ABI. This is a hacked up kind of 64-bit version of the o32
4260 ABI. */
4261
4262 static CORE_ADDR
4263 mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
4264 struct regcache *regcache, CORE_ADDR bp_addr,
4265 int nargs,
4266 struct value **args, CORE_ADDR sp,
4267 int struct_return, CORE_ADDR struct_addr)
4268 {
4269 int argreg;
4270 int float_argreg;
4271 int argnum;
4272 int len = 0;
4273 int stack_offset = 0;
4274 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4275 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4276 CORE_ADDR func_addr = find_function_addr (function, NULL);
4277
4278 /* For shared libraries, "t9" needs to point at the function
4279 address. */
4280 regcache_cooked_write_signed (regcache, MIPS_T9_REGNUM, func_addr);
4281
4282 /* Set the return address register to point to the entry point of
4283 the program, where a breakpoint lies in wait. */
4284 regcache_cooked_write_signed (regcache, MIPS_RA_REGNUM, bp_addr);
4285
4286 /* First ensure that the stack and structure return address (if any)
4287 are properly aligned. The stack has to be at least 64-bit
4288 aligned even on 32-bit machines, because doubles must be 64-bit
4289 aligned. For n32 and n64, stack frames need to be 128-bit
4290 aligned, so we round to this widest known alignment. */
4291
4292 sp = align_down (sp, 16);
4293 struct_addr = align_down (struct_addr, 16);
4294
4295 /* Now make space on the stack for the args. */
4296 for (argnum = 0; argnum < nargs; argnum++)
4297 {
4298 struct type *arg_type = check_typedef (value_type (args[argnum]));
4299 int arglen = TYPE_LENGTH (arg_type);
4300
4301 /* Allocate space on the stack. */
4302 len += align_up (arglen, MIPS64_REGSIZE);
4303 }
4304 sp -= align_up (len, 16);
4305
4306 if (mips_debug)
4307 fprintf_unfiltered (gdb_stdlog,
4308 "mips_o64_push_dummy_call: sp=%s allocated %ld\n",
4309 paddress (gdbarch, sp), (long) align_up (len, 16));
4310
4311 /* Initialize the integer and float register pointers. */
4312 argreg = MIPS_A0_REGNUM;
4313 float_argreg = mips_fpa0_regnum (gdbarch);
4314
4315 /* The struct_return pointer occupies the first parameter-passing reg. */
4316 if (struct_return)
4317 {
4318 if (mips_debug)
4319 fprintf_unfiltered (gdb_stdlog,
4320 "mips_o64_push_dummy_call: "
4321 "struct_return reg=%d %s\n",
4322 argreg, paddress (gdbarch, struct_addr));
4323 regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
4324 stack_offset += MIPS64_REGSIZE;
4325 }
4326
4327 /* Now load as many as possible of the first arguments into
4328 registers, and push the rest onto the stack. Loop thru args
4329 from first to last. */
4330 for (argnum = 0; argnum < nargs; argnum++)
4331 {
4332 const gdb_byte *val;
4333 gdb_byte valbuf[MAX_REGISTER_SIZE];
4334 struct value *arg = args[argnum];
4335 struct type *arg_type = check_typedef (value_type (arg));
4336 int len = TYPE_LENGTH (arg_type);
4337 enum type_code typecode = TYPE_CODE (arg_type);
4338
4339 if (mips_debug)
4340 fprintf_unfiltered (gdb_stdlog,
4341 "mips_o64_push_dummy_call: %d len=%d type=%d",
4342 argnum + 1, len, (int) typecode);
4343
4344 val = value_contents (arg);
4345
4346 /* Function pointer arguments to mips16 code need to be made into
4347 mips16 pointers. */
4348 if (typecode == TYPE_CODE_PTR
4349 && TYPE_CODE (TYPE_TARGET_TYPE (arg_type)) == TYPE_CODE_FUNC)
4350 {
4351 CORE_ADDR addr = extract_signed_integer (value_contents (arg),
4352 len, byte_order);
4353 if (mips_pc_is_mips16 (addr))
4354 {
4355 store_signed_integer (valbuf, len, byte_order,
4356 make_mips16_addr (addr));
4357 val = valbuf;
4358 }
4359 }
4360
4361 /* Floating point arguments passed in registers have to be
4362 treated specially. On 32-bit architectures, doubles
4363 are passed in register pairs; the even register gets
4364 the low word, and the odd register gets the high word.
4365 On O32/O64, the first two floating point arguments are
4366 also copied to general registers, because MIPS16 functions
4367 don't use float registers for arguments. This duplication of
4368 arguments in general registers can't hurt non-MIPS16 functions
4369 because those registers are normally skipped. */
4370
4371 if (fp_register_arg_p (gdbarch, typecode, arg_type)
4372 && float_argreg <= MIPS_LAST_FP_ARG_REGNUM (gdbarch))
4373 {
4374 LONGEST regval = extract_unsigned_integer (val, len, byte_order);
4375 if (mips_debug)
4376 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
4377 float_argreg, phex (regval, len));
4378 regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
4379 if (mips_debug)
4380 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
4381 argreg, phex (regval, len));
4382 regcache_cooked_write_unsigned (regcache, argreg, regval);
4383 argreg++;
4384 /* Reserve space for the FP register. */
4385 stack_offset += align_up (len, MIPS64_REGSIZE);
4386 }
4387 else
4388 {
4389 /* Copy the argument to general registers or the stack in
4390 register-sized pieces. Large arguments are split between
4391 registers and stack. */
4392 /* Note: structs whose size is not a multiple of MIPS64_REGSIZE
4393 are treated specially: Irix cc passes them in registers
4394 where gcc sometimes puts them on the stack. For maximum
4395 compatibility, we will put them in both places. */
4396 int odd_sized_struct = (len > MIPS64_REGSIZE
4397 && len % MIPS64_REGSIZE != 0);
4398 while (len > 0)
4399 {
4400 /* Remember if the argument was written to the stack. */
4401 int stack_used_p = 0;
4402 int partial_len = (len < MIPS64_REGSIZE ? len : MIPS64_REGSIZE);
4403
4404 if (mips_debug)
4405 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
4406 partial_len);
4407
4408 /* Write this portion of the argument to the stack. */
4409 if (argreg > MIPS_LAST_ARG_REGNUM (gdbarch)
4410 || odd_sized_struct)
4411 {
4412 /* Should shorter than int integer values be
4413 promoted to int before being stored? */
4414 int longword_offset = 0;
4415 CORE_ADDR addr;
4416 stack_used_p = 1;
4417 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
4418 {
4419 if ((typecode == TYPE_CODE_INT
4420 || typecode == TYPE_CODE_PTR
4421 || typecode == TYPE_CODE_FLT)
4422 && len <= 4)
4423 longword_offset = MIPS64_REGSIZE - len;
4424 }
4425
4426 if (mips_debug)
4427 {
4428 fprintf_unfiltered (gdb_stdlog, " - stack_offset=%s",
4429 paddress (gdbarch, stack_offset));
4430 fprintf_unfiltered (gdb_stdlog, " longword_offset=%s",
4431 paddress (gdbarch, longword_offset));
4432 }
4433
4434 addr = sp + stack_offset + longword_offset;
4435
4436 if (mips_debug)
4437 {
4438 int i;
4439 fprintf_unfiltered (gdb_stdlog, " @%s ",
4440 paddress (gdbarch, addr));
4441 for (i = 0; i < partial_len; i++)
4442 {
4443 fprintf_unfiltered (gdb_stdlog, "%02x",
4444 val[i] & 0xff);
4445 }
4446 }
4447 write_memory (addr, val, partial_len);
4448 }
4449
4450 /* Note!!! This is NOT an else clause. Odd sized
4451 structs may go thru BOTH paths. */
4452 /* Write this portion of the argument to a general
4453 purpose register. */
4454 if (argreg <= MIPS_LAST_ARG_REGNUM (gdbarch))
4455 {
4456 LONGEST regval = extract_signed_integer (val, partial_len,
4457 byte_order);
4458 /* Value may need to be sign extended, because
4459 mips_isa_regsize() != mips_abi_regsize(). */
4460
4461 /* A non-floating-point argument being passed in a
4462 general register. If a struct or union, and if
4463 the remaining length is smaller than the register
4464 size, we have to adjust the register value on
4465 big endian targets.
4466
4467 It does not seem to be necessary to do the
4468 same for integral types. */
4469
4470 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
4471 && partial_len < MIPS64_REGSIZE
4472 && (typecode == TYPE_CODE_STRUCT
4473 || typecode == TYPE_CODE_UNION))
4474 regval <<= ((MIPS64_REGSIZE - partial_len)
4475 * TARGET_CHAR_BIT);
4476
4477 if (mips_debug)
4478 fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
4479 argreg,
4480 phex (regval, MIPS64_REGSIZE));
4481 regcache_cooked_write_unsigned (regcache, argreg, regval);
4482 argreg++;
4483
4484 /* Prevent subsequent floating point arguments from
4485 being passed in floating point registers. */
4486 float_argreg = MIPS_LAST_FP_ARG_REGNUM (gdbarch) + 1;
4487 }
4488
4489 len -= partial_len;
4490 val += partial_len;
4491
4492 /* Compute the offset into the stack at which we will
4493 copy the next parameter.
4494
4495 In older ABIs, the caller reserved space for
4496 registers that contained arguments. This was loosely
4497 refered to as their "home". Consequently, space is
4498 always allocated. */
4499
4500 stack_offset += align_up (partial_len, MIPS64_REGSIZE);
4501 }
4502 }
4503 if (mips_debug)
4504 fprintf_unfiltered (gdb_stdlog, "\n");
4505 }
4506
4507 regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
4508
4509 /* Return adjusted stack pointer. */
4510 return sp;
4511 }
4512
4513 static enum return_value_convention
4514 mips_o64_return_value (struct gdbarch *gdbarch, struct type *func_type,
4515 struct type *type, struct regcache *regcache,
4516 gdb_byte *readbuf, const gdb_byte *writebuf)
4517 {
4518 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4519
4520 if (TYPE_CODE (type) == TYPE_CODE_STRUCT
4521 || TYPE_CODE (type) == TYPE_CODE_UNION
4522 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
4523 return RETURN_VALUE_STRUCT_CONVENTION;
4524 else if (fp_register_arg_p (gdbarch, TYPE_CODE (type), type))
4525 {
4526 /* A floating-point value. It fits in the least significant
4527 part of FP0. */
4528 if (mips_debug)
4529 fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
4530 mips_xfer_register (gdbarch, regcache,
4531 gdbarch_num_regs (gdbarch)
4532 + mips_regnum (gdbarch)->fp0,
4533 TYPE_LENGTH (type),
4534 gdbarch_byte_order (gdbarch),
4535 readbuf, writebuf, 0);
4536 return RETURN_VALUE_REGISTER_CONVENTION;
4537 }
4538 else
4539 {
4540 /* A scalar extract each part but least-significant-byte
4541 justified. */
4542 int offset;
4543 int regnum;
4544 for (offset = 0, regnum = MIPS_V0_REGNUM;
4545 offset < TYPE_LENGTH (type);
4546 offset += MIPS64_REGSIZE, regnum++)
4547 {
4548 int xfer = MIPS64_REGSIZE;
4549 if (offset + xfer > TYPE_LENGTH (type))
4550 xfer = TYPE_LENGTH (type) - offset;
4551 if (mips_debug)
4552 fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
4553 offset, xfer, regnum);
4554 mips_xfer_register (gdbarch, regcache,
4555 gdbarch_num_regs (gdbarch) + regnum,
4556 xfer, gdbarch_byte_order (gdbarch),
4557 readbuf, writebuf, offset);
4558 }
4559 return RETURN_VALUE_REGISTER_CONVENTION;
4560 }
4561 }
4562
4563 /* Floating point register management.
4564
4565 Background: MIPS1 & 2 fp registers are 32 bits wide. To support
4566 64bit operations, these early MIPS cpus treat fp register pairs
4567 (f0,f1) as a single register (d0). Later MIPS cpu's have 64 bit fp
4568 registers and offer a compatibility mode that emulates the MIPS2 fp
4569 model. When operating in MIPS2 fp compat mode, later cpu's split
4570 double precision floats into two 32-bit chunks and store them in
4571 consecutive fp regs. To display 64-bit floats stored in this
4572 fashion, we have to combine 32 bits from f0 and 32 bits from f1.
4573 Throw in user-configurable endianness and you have a real mess.
4574
4575 The way this works is:
4576 - If we are in 32-bit mode or on a 32-bit processor, then a 64-bit
4577 double-precision value will be split across two logical registers.
4578 The lower-numbered logical register will hold the low-order bits,
4579 regardless of the processor's endianness.
4580 - If we are on a 64-bit processor, and we are looking for a
4581 single-precision value, it will be in the low ordered bits
4582 of a 64-bit GPR (after mfc1, for example) or a 64-bit register
4583 save slot in memory.
4584 - If we are in 64-bit mode, everything is straightforward.
4585
4586 Note that this code only deals with "live" registers at the top of the
4587 stack. We will attempt to deal with saved registers later, when
4588 the raw/cooked register interface is in place. (We need a general
4589 interface that can deal with dynamic saved register sizes -- fp
4590 regs could be 32 bits wide in one frame and 64 on the frame above
4591 and below). */
4592
4593 /* Copy a 32-bit single-precision value from the current frame
4594 into rare_buffer. */
4595
4596 static void
4597 mips_read_fp_register_single (struct frame_info *frame, int regno,
4598 gdb_byte *rare_buffer)
4599 {
4600 struct gdbarch *gdbarch = get_frame_arch (frame);
4601 int raw_size = register_size (gdbarch, regno);
4602 gdb_byte *raw_buffer = alloca (raw_size);
4603
4604 if (!frame_register_read (frame, regno, raw_buffer))
4605 error (_("can't read register %d (%s)"),
4606 regno, gdbarch_register_name (gdbarch, regno));
4607 if (raw_size == 8)
4608 {
4609 /* We have a 64-bit value for this register. Find the low-order
4610 32 bits. */
4611 int offset;
4612
4613 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
4614 offset = 4;
4615 else
4616 offset = 0;
4617
4618 memcpy (rare_buffer, raw_buffer + offset, 4);
4619 }
4620 else
4621 {
4622 memcpy (rare_buffer, raw_buffer, 4);
4623 }
4624 }
4625
4626 /* Copy a 64-bit double-precision value from the current frame into
4627 rare_buffer. This may include getting half of it from the next
4628 register. */
4629
4630 static void
4631 mips_read_fp_register_double (struct frame_info *frame, int regno,
4632 gdb_byte *rare_buffer)
4633 {
4634 struct gdbarch *gdbarch = get_frame_arch (frame);
4635 int raw_size = register_size (gdbarch, regno);
4636
4637 if (raw_size == 8 && !mips2_fp_compat (frame))
4638 {
4639 /* We have a 64-bit value for this register, and we should use
4640 all 64 bits. */
4641 if (!frame_register_read (frame, regno, rare_buffer))
4642 error (_("can't read register %d (%s)"),
4643 regno, gdbarch_register_name (gdbarch, regno));
4644 }
4645 else
4646 {
4647 int rawnum = regno % gdbarch_num_regs (gdbarch);
4648
4649 if ((rawnum - mips_regnum (gdbarch)->fp0) & 1)
4650 internal_error (__FILE__, __LINE__,
4651 _("mips_read_fp_register_double: bad access to "
4652 "odd-numbered FP register"));
4653
4654 /* mips_read_fp_register_single will find the correct 32 bits from
4655 each register. */
4656 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
4657 {
4658 mips_read_fp_register_single (frame, regno, rare_buffer + 4);
4659 mips_read_fp_register_single (frame, regno + 1, rare_buffer);
4660 }
4661 else
4662 {
4663 mips_read_fp_register_single (frame, regno, rare_buffer);
4664 mips_read_fp_register_single (frame, regno + 1, rare_buffer + 4);
4665 }
4666 }
4667 }
4668
4669 static void
4670 mips_print_fp_register (struct ui_file *file, struct frame_info *frame,
4671 int regnum)
4672 { /* Do values for FP (float) regs. */
4673 struct gdbarch *gdbarch = get_frame_arch (frame);
4674 gdb_byte *raw_buffer;
4675 double doub, flt1; /* Doubles extracted from raw hex data. */
4676 int inv1, inv2;
4677
4678 raw_buffer = alloca (2 * register_size (gdbarch,
4679 mips_regnum (gdbarch)->fp0));
4680
4681 fprintf_filtered (file, "%s:", gdbarch_register_name (gdbarch, regnum));
4682 fprintf_filtered (file, "%*s",
4683 4 - (int) strlen (gdbarch_register_name (gdbarch, regnum)),
4684 "");
4685
4686 if (register_size (gdbarch, regnum) == 4 || mips2_fp_compat (frame))
4687 {
4688 struct value_print_options opts;
4689
4690 /* 4-byte registers: Print hex and floating. Also print even
4691 numbered registers as doubles. */
4692 mips_read_fp_register_single (frame, regnum, raw_buffer);
4693 flt1 = unpack_double (builtin_type (gdbarch)->builtin_float,
4694 raw_buffer, &inv1);
4695
4696 get_formatted_print_options (&opts, 'x');
4697 print_scalar_formatted (raw_buffer,
4698 builtin_type (gdbarch)->builtin_uint32,
4699 &opts, 'w', file);
4700
4701 fprintf_filtered (file, " flt: ");
4702 if (inv1)
4703 fprintf_filtered (file, " <invalid float> ");
4704 else
4705 fprintf_filtered (file, "%-17.9g", flt1);
4706
4707 if ((regnum - gdbarch_num_regs (gdbarch)) % 2 == 0)
4708 {
4709 mips_read_fp_register_double (frame, regnum, raw_buffer);
4710 doub = unpack_double (builtin_type (gdbarch)->builtin_double,
4711 raw_buffer, &inv2);
4712
4713 fprintf_filtered (file, " dbl: ");
4714 if (inv2)
4715 fprintf_filtered (file, "<invalid double>");
4716 else
4717 fprintf_filtered (file, "%-24.17g", doub);
4718 }
4719 }
4720 else
4721 {
4722 struct value_print_options opts;
4723
4724 /* Eight byte registers: print each one as hex, float and double. */
4725 mips_read_fp_register_single (frame, regnum, raw_buffer);
4726 flt1 = unpack_double (builtin_type (gdbarch)->builtin_float,
4727 raw_buffer, &inv1);
4728
4729 mips_read_fp_register_double (frame, regnum, raw_buffer);
4730 doub = unpack_double (builtin_type (gdbarch)->builtin_double,
4731 raw_buffer, &inv2);
4732
4733 get_formatted_print_options (&opts, 'x');
4734 print_scalar_formatted (raw_buffer,
4735 builtin_type (gdbarch)->builtin_uint64,
4736 &opts, 'g', file);
4737
4738 fprintf_filtered (file, " flt: ");
4739 if (inv1)
4740 fprintf_filtered (file, "<invalid float>");
4741 else
4742 fprintf_filtered (file, "%-17.9g", flt1);
4743
4744 fprintf_filtered (file, " dbl: ");
4745 if (inv2)
4746 fprintf_filtered (file, "<invalid double>");
4747 else
4748 fprintf_filtered (file, "%-24.17g", doub);
4749 }
4750 }
4751
4752 static void
4753 mips_print_register (struct ui_file *file, struct frame_info *frame,
4754 int regnum)
4755 {
4756 struct gdbarch *gdbarch = get_frame_arch (frame);
4757 int offset;
4758 struct value_print_options opts;
4759 struct value *val;
4760
4761 if (TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT)
4762 {
4763 mips_print_fp_register (file, frame, regnum);
4764 return;
4765 }
4766
4767 val = get_frame_register_value (frame, regnum);
4768 if (value_optimized_out (val))
4769 {
4770 fprintf_filtered (file, "%s: [Invalid]",
4771 gdbarch_register_name (gdbarch, regnum));
4772 return;
4773 }
4774
4775 fputs_filtered (gdbarch_register_name (gdbarch, regnum), file);
4776
4777 /* The problem with printing numeric register names (r26, etc.) is that
4778 the user can't use them on input. Probably the best solution is to
4779 fix it so that either the numeric or the funky (a2, etc.) names
4780 are accepted on input. */
4781 if (regnum < MIPS_NUMREGS)
4782 fprintf_filtered (file, "(r%d): ", regnum);
4783 else
4784 fprintf_filtered (file, ": ");
4785
4786 get_formatted_print_options (&opts, 'x');
4787 val_print_scalar_formatted (value_type (val),
4788 value_contents_for_printing (val),
4789 value_embedded_offset (val),
4790 val,
4791 &opts, 0, file);
4792 }
4793
4794 /* Replacement for generic do_registers_info.
4795 Print regs in pretty columns. */
4796
4797 static int
4798 print_fp_register_row (struct ui_file *file, struct frame_info *frame,
4799 int regnum)
4800 {
4801 fprintf_filtered (file, " ");
4802 mips_print_fp_register (file, frame, regnum);
4803 fprintf_filtered (file, "\n");
4804 return regnum + 1;
4805 }
4806
4807
4808 /* Print a row's worth of GP (int) registers, with name labels above. */
4809
4810 static int
4811 print_gp_register_row (struct ui_file *file, struct frame_info *frame,
4812 int start_regnum)
4813 {
4814 struct gdbarch *gdbarch = get_frame_arch (frame);
4815 /* Do values for GP (int) regs. */
4816 gdb_byte raw_buffer[MAX_REGISTER_SIZE];
4817 int ncols = (mips_abi_regsize (gdbarch) == 8 ? 4 : 8); /* display cols
4818 per row. */
4819 int col, byte;
4820 int regnum;
4821
4822 /* For GP registers, we print a separate row of names above the vals. */
4823 for (col = 0, regnum = start_regnum;
4824 col < ncols && regnum < gdbarch_num_regs (gdbarch)
4825 + gdbarch_num_pseudo_regs (gdbarch);
4826 regnum++)
4827 {
4828 if (*gdbarch_register_name (gdbarch, regnum) == '\0')
4829 continue; /* unused register */
4830 if (TYPE_CODE (register_type (gdbarch, regnum)) ==
4831 TYPE_CODE_FLT)
4832 break; /* End the row: reached FP register. */
4833 /* Large registers are handled separately. */
4834 if (register_size (gdbarch, regnum) > mips_abi_regsize (gdbarch))
4835 {
4836 if (col > 0)
4837 break; /* End the row before this register. */
4838
4839 /* Print this register on a row by itself. */
4840 mips_print_register (file, frame, regnum);
4841 fprintf_filtered (file, "\n");
4842 return regnum + 1;
4843 }
4844 if (col == 0)
4845 fprintf_filtered (file, " ");
4846 fprintf_filtered (file,
4847 mips_abi_regsize (gdbarch) == 8 ? "%17s" : "%9s",
4848 gdbarch_register_name (gdbarch, regnum));
4849 col++;
4850 }
4851
4852 if (col == 0)
4853 return regnum;
4854
4855 /* Print the R0 to R31 names. */
4856 if ((start_regnum % gdbarch_num_regs (gdbarch)) < MIPS_NUMREGS)
4857 fprintf_filtered (file, "\n R%-4d",
4858 start_regnum % gdbarch_num_regs (gdbarch));
4859 else
4860 fprintf_filtered (file, "\n ");
4861
4862 /* Now print the values in hex, 4 or 8 to the row. */
4863 for (col = 0, regnum = start_regnum;
4864 col < ncols && regnum < gdbarch_num_regs (gdbarch)
4865 + gdbarch_num_pseudo_regs (gdbarch);
4866 regnum++)
4867 {
4868 if (*gdbarch_register_name (gdbarch, regnum) == '\0')
4869 continue; /* unused register */
4870 if (TYPE_CODE (register_type (gdbarch, regnum)) ==
4871 TYPE_CODE_FLT)
4872 break; /* End row: reached FP register. */
4873 if (register_size (gdbarch, regnum) > mips_abi_regsize (gdbarch))
4874 break; /* End row: large register. */
4875
4876 /* OK: get the data in raw format. */
4877 if (!frame_register_read (frame, regnum, raw_buffer))
4878 error (_("can't read register %d (%s)"),
4879 regnum, gdbarch_register_name (gdbarch, regnum));
4880 /* pad small registers */
4881 for (byte = 0;
4882 byte < (mips_abi_regsize (gdbarch)
4883 - register_size (gdbarch, regnum)); byte++)
4884 printf_filtered (" ");
4885 /* Now print the register value in hex, endian order. */
4886 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
4887 for (byte =
4888 register_size (gdbarch, regnum) - register_size (gdbarch, regnum);
4889 byte < register_size (gdbarch, regnum); byte++)
4890 fprintf_filtered (file, "%02x", raw_buffer[byte]);
4891 else
4892 for (byte = register_size (gdbarch, regnum) - 1;
4893 byte >= 0; byte--)
4894 fprintf_filtered (file, "%02x", raw_buffer[byte]);
4895 fprintf_filtered (file, " ");
4896 col++;
4897 }
4898 if (col > 0) /* ie. if we actually printed anything... */
4899 fprintf_filtered (file, "\n");
4900
4901 return regnum;
4902 }
4903
4904 /* MIPS_DO_REGISTERS_INFO(): called by "info register" command. */
4905
4906 static void
4907 mips_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
4908 struct frame_info *frame, int regnum, int all)
4909 {
4910 if (regnum != -1) /* Do one specified register. */
4911 {
4912 gdb_assert (regnum >= gdbarch_num_regs (gdbarch));
4913 if (*(gdbarch_register_name (gdbarch, regnum)) == '\0')
4914 error (_("Not a valid register for the current processor type"));
4915
4916 mips_print_register (file, frame, regnum);
4917 fprintf_filtered (file, "\n");
4918 }
4919 else
4920 /* Do all (or most) registers. */
4921 {
4922 regnum = gdbarch_num_regs (gdbarch);
4923 while (regnum < gdbarch_num_regs (gdbarch)
4924 + gdbarch_num_pseudo_regs (gdbarch))
4925 {
4926 if (TYPE_CODE (register_type (gdbarch, regnum)) ==
4927 TYPE_CODE_FLT)
4928 {
4929 if (all) /* True for "INFO ALL-REGISTERS" command. */
4930 regnum = print_fp_register_row (file, frame, regnum);
4931 else
4932 regnum += MIPS_NUMREGS; /* Skip floating point regs. */
4933 }
4934 else
4935 regnum = print_gp_register_row (file, frame, regnum);
4936 }
4937 }
4938 }
4939
4940 /* Is this a branch with a delay slot? */
4941
4942 static int
4943 is_delayed (unsigned long insn)
4944 {
4945 int i;
4946 for (i = 0; i < NUMOPCODES; ++i)
4947 if (mips_opcodes[i].pinfo != INSN_MACRO
4948 && (insn & mips_opcodes[i].mask) == mips_opcodes[i].match)
4949 break;
4950 return (i < NUMOPCODES
4951 && (mips_opcodes[i].pinfo & (INSN_UNCOND_BRANCH_DELAY
4952 | INSN_COND_BRANCH_DELAY
4953 | INSN_COND_BRANCH_LIKELY)));
4954 }
4955
4956 static int
4957 mips_single_step_through_delay (struct gdbarch *gdbarch,
4958 struct frame_info *frame)
4959 {
4960 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4961 CORE_ADDR pc = get_frame_pc (frame);
4962 gdb_byte buf[MIPS_INSN32_SIZE];
4963
4964 /* There is no branch delay slot on MIPS16. */
4965 if (mips_pc_is_mips16 (pc))
4966 return 0;
4967
4968 if (!breakpoint_here_p (get_frame_address_space (frame), pc + 4))
4969 return 0;
4970
4971 if (!safe_frame_unwind_memory (frame, pc, buf, sizeof buf))
4972 /* If error reading memory, guess that it is not a delayed
4973 branch. */
4974 return 0;
4975 return is_delayed (extract_unsigned_integer (buf, sizeof buf, byte_order));
4976 }
4977
4978 /* To skip prologues, I use this predicate. Returns either PC itself
4979 if the code at PC does not look like a function prologue; otherwise
4980 returns an address that (if we're lucky) follows the prologue. If
4981 LENIENT, then we must skip everything which is involved in setting
4982 up the frame (it's OK to skip more, just so long as we don't skip
4983 anything which might clobber the registers which are being saved.
4984 We must skip more in the case where part of the prologue is in the
4985 delay slot of a non-prologue instruction). */
4986
4987 static CORE_ADDR
4988 mips_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
4989 {
4990 CORE_ADDR limit_pc;
4991 CORE_ADDR func_addr;
4992
4993 /* See if we can determine the end of the prologue via the symbol table.
4994 If so, then return either PC, or the PC after the prologue, whichever
4995 is greater. */
4996 if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
4997 {
4998 CORE_ADDR post_prologue_pc
4999 = skip_prologue_using_sal (gdbarch, func_addr);
5000 if (post_prologue_pc != 0)
5001 return max (pc, post_prologue_pc);
5002 }
5003
5004 /* Can't determine prologue from the symbol table, need to examine
5005 instructions. */
5006
5007 /* Find an upper limit on the function prologue using the debug
5008 information. If the debug information could not be used to provide
5009 that bound, then use an arbitrary large number as the upper bound. */
5010 limit_pc = skip_prologue_using_sal (gdbarch, pc);
5011 if (limit_pc == 0)
5012 limit_pc = pc + 100; /* Magic. */
5013
5014 if (mips_pc_is_mips16 (pc))
5015 return mips16_scan_prologue (gdbarch, pc, limit_pc, NULL, NULL);
5016 else
5017 return mips32_scan_prologue (gdbarch, pc, limit_pc, NULL, NULL);
5018 }
5019
5020 /* Check whether the PC is in a function epilogue (32-bit version).
5021 This is a helper function for mips_in_function_epilogue_p. */
5022 static int
5023 mips32_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
5024 {
5025 CORE_ADDR func_addr = 0, func_end = 0;
5026
5027 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
5028 {
5029 /* The MIPS epilogue is max. 12 bytes long. */
5030 CORE_ADDR addr = func_end - 12;
5031
5032 if (addr < func_addr + 4)
5033 addr = func_addr + 4;
5034 if (pc < addr)
5035 return 0;
5036
5037 for (; pc < func_end; pc += MIPS_INSN32_SIZE)
5038 {
5039 unsigned long high_word;
5040 unsigned long inst;
5041
5042 inst = mips_fetch_instruction (gdbarch, pc);
5043 high_word = (inst >> 16) & 0xffff;
5044
5045 if (high_word != 0x27bd /* addiu $sp,$sp,offset */
5046 && high_word != 0x67bd /* daddiu $sp,$sp,offset */
5047 && inst != 0x03e00008 /* jr $ra */
5048 && inst != 0x00000000) /* nop */
5049 return 0;
5050 }
5051
5052 return 1;
5053 }
5054
5055 return 0;
5056 }
5057
5058 /* Check whether the PC is in a function epilogue (16-bit version).
5059 This is a helper function for mips_in_function_epilogue_p. */
5060 static int
5061 mips16_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
5062 {
5063 CORE_ADDR func_addr = 0, func_end = 0;
5064
5065 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
5066 {
5067 /* The MIPS epilogue is max. 12 bytes long. */
5068 CORE_ADDR addr = func_end - 12;
5069
5070 if (addr < func_addr + 4)
5071 addr = func_addr + 4;
5072 if (pc < addr)
5073 return 0;
5074
5075 for (; pc < func_end; pc += MIPS_INSN16_SIZE)
5076 {
5077 unsigned short inst;
5078
5079 inst = mips_fetch_instruction (gdbarch, pc);
5080
5081 if ((inst & 0xf800) == 0xf000) /* extend */
5082 continue;
5083
5084 if (inst != 0x6300 /* addiu $sp,offset */
5085 && inst != 0xfb00 /* daddiu $sp,$sp,offset */
5086 && inst != 0xe820 /* jr $ra */
5087 && inst != 0xe8a0 /* jrc $ra */
5088 && inst != 0x6500) /* nop */
5089 return 0;
5090 }
5091
5092 return 1;
5093 }
5094
5095 return 0;
5096 }
5097
5098 /* The epilogue is defined here as the area at the end of a function,
5099 after an instruction which destroys the function's stack frame. */
5100 static int
5101 mips_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
5102 {
5103 if (mips_pc_is_mips16 (pc))
5104 return mips16_in_function_epilogue_p (gdbarch, pc);
5105 else
5106 return mips32_in_function_epilogue_p (gdbarch, pc);
5107 }
5108
5109 /* Root of all "set mips "/"show mips " commands. This will eventually be
5110 used for all MIPS-specific commands. */
5111
5112 static void
5113 show_mips_command (char *args, int from_tty)
5114 {
5115 help_list (showmipscmdlist, "show mips ", all_commands, gdb_stdout);
5116 }
5117
5118 static void
5119 set_mips_command (char *args, int from_tty)
5120 {
5121 printf_unfiltered
5122 ("\"set mips\" must be followed by an appropriate subcommand.\n");
5123 help_list (setmipscmdlist, "set mips ", all_commands, gdb_stdout);
5124 }
5125
5126 /* Commands to show/set the MIPS FPU type. */
5127
5128 static void
5129 show_mipsfpu_command (char *args, int from_tty)
5130 {
5131 char *fpu;
5132
5133 if (gdbarch_bfd_arch_info (target_gdbarch)->arch != bfd_arch_mips)
5134 {
5135 printf_unfiltered
5136 ("The MIPS floating-point coprocessor is unknown "
5137 "because the current architecture is not MIPS.\n");
5138 return;
5139 }
5140
5141 switch (MIPS_FPU_TYPE (target_gdbarch))
5142 {
5143 case MIPS_FPU_SINGLE:
5144 fpu = "single-precision";
5145 break;
5146 case MIPS_FPU_DOUBLE:
5147 fpu = "double-precision";
5148 break;
5149 case MIPS_FPU_NONE:
5150 fpu = "absent (none)";
5151 break;
5152 default:
5153 internal_error (__FILE__, __LINE__, _("bad switch"));
5154 }
5155 if (mips_fpu_type_auto)
5156 printf_unfiltered ("The MIPS floating-point coprocessor "
5157 "is set automatically (currently %s)\n",
5158 fpu);
5159 else
5160 printf_unfiltered
5161 ("The MIPS floating-point coprocessor is assumed to be %s\n", fpu);
5162 }
5163
5164
5165 static void
5166 set_mipsfpu_command (char *args, int from_tty)
5167 {
5168 printf_unfiltered ("\"set mipsfpu\" must be followed by \"double\", "
5169 "\"single\",\"none\" or \"auto\".\n");
5170 show_mipsfpu_command (args, from_tty);
5171 }
5172
5173 static void
5174 set_mipsfpu_single_command (char *args, int from_tty)
5175 {
5176 struct gdbarch_info info;
5177 gdbarch_info_init (&info);
5178 mips_fpu_type = MIPS_FPU_SINGLE;
5179 mips_fpu_type_auto = 0;
5180 /* FIXME: cagney/2003-11-15: Should be setting a field in "info"
5181 instead of relying on globals. Doing that would let generic code
5182 handle the search for this specific architecture. */
5183 if (!gdbarch_update_p (info))
5184 internal_error (__FILE__, __LINE__, _("set mipsfpu failed"));
5185 }
5186
5187 static void
5188 set_mipsfpu_double_command (char *args, int from_tty)
5189 {
5190 struct gdbarch_info info;
5191 gdbarch_info_init (&info);
5192 mips_fpu_type = MIPS_FPU_DOUBLE;
5193 mips_fpu_type_auto = 0;
5194 /* FIXME: cagney/2003-11-15: Should be setting a field in "info"
5195 instead of relying on globals. Doing that would let generic code
5196 handle the search for this specific architecture. */
5197 if (!gdbarch_update_p (info))
5198 internal_error (__FILE__, __LINE__, _("set mipsfpu failed"));
5199 }
5200
5201 static void
5202 set_mipsfpu_none_command (char *args, int from_tty)
5203 {
5204 struct gdbarch_info info;
5205 gdbarch_info_init (&info);
5206 mips_fpu_type = MIPS_FPU_NONE;
5207 mips_fpu_type_auto = 0;
5208 /* FIXME: cagney/2003-11-15: Should be setting a field in "info"
5209 instead of relying on globals. Doing that would let generic code
5210 handle the search for this specific architecture. */
5211 if (!gdbarch_update_p (info))
5212 internal_error (__FILE__, __LINE__, _("set mipsfpu failed"));
5213 }
5214
5215 static void
5216 set_mipsfpu_auto_command (char *args, int from_tty)
5217 {
5218 mips_fpu_type_auto = 1;
5219 }
5220
5221 /* Attempt to identify the particular processor model by reading the
5222 processor id. NOTE: cagney/2003-11-15: Firstly it isn't clear that
5223 the relevant processor still exists (it dates back to '94) and
5224 secondly this is not the way to do this. The processor type should
5225 be set by forcing an architecture change. */
5226
5227 void
5228 deprecated_mips_set_processor_regs_hack (void)
5229 {
5230 struct regcache *regcache = get_current_regcache ();
5231 struct gdbarch *gdbarch = get_regcache_arch (regcache);
5232 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
5233 ULONGEST prid;
5234
5235 regcache_cooked_read_unsigned (regcache, MIPS_PRID_REGNUM, &prid);
5236 if ((prid & ~0xf) == 0x700)
5237 tdep->mips_processor_reg_names = mips_r3041_reg_names;
5238 }
5239
5240 /* Just like reinit_frame_cache, but with the right arguments to be
5241 callable as an sfunc. */
5242
5243 static void
5244 reinit_frame_cache_sfunc (char *args, int from_tty,
5245 struct cmd_list_element *c)
5246 {
5247 reinit_frame_cache ();
5248 }
5249
5250 static int
5251 gdb_print_insn_mips (bfd_vma memaddr, struct disassemble_info *info)
5252 {
5253 /* FIXME: cagney/2003-06-26: Is this even necessary? The
5254 disassembler needs to be able to locally determine the ISA, and
5255 not rely on GDB. Otherwize the stand-alone 'objdump -d' will not
5256 work. */
5257 if (mips_pc_is_mips16 (memaddr))
5258 info->mach = bfd_mach_mips16;
5259
5260 /* Round down the instruction address to the appropriate boundary. */
5261 memaddr &= (info->mach == bfd_mach_mips16 ? ~1 : ~3);
5262
5263 /* Set the disassembler options. */
5264 if (!info->disassembler_options)
5265 /* This string is not recognized explicitly by the disassembler,
5266 but it tells the disassembler to not try to guess the ABI from
5267 the bfd elf headers, such that, if the user overrides the ABI
5268 of a program linked as NewABI, the disassembly will follow the
5269 register naming conventions specified by the user. */
5270 info->disassembler_options = "gpr-names=32";
5271
5272 /* Call the appropriate disassembler based on the target endian-ness. */
5273 if (info->endian == BFD_ENDIAN_BIG)
5274 return print_insn_big_mips (memaddr, info);
5275 else
5276 return print_insn_little_mips (memaddr, info);
5277 }
5278
5279 static int
5280 gdb_print_insn_mips_n32 (bfd_vma memaddr, struct disassemble_info *info)
5281 {
5282 /* Set up the disassembler info, so that we get the right
5283 register names from libopcodes. */
5284 info->disassembler_options = "gpr-names=n32";
5285 info->flavour = bfd_target_elf_flavour;
5286
5287 return gdb_print_insn_mips (memaddr, info);
5288 }
5289
5290 static int
5291 gdb_print_insn_mips_n64 (bfd_vma memaddr, struct disassemble_info *info)
5292 {
5293 /* Set up the disassembler info, so that we get the right
5294 register names from libopcodes. */
5295 info->disassembler_options = "gpr-names=64";
5296 info->flavour = bfd_target_elf_flavour;
5297
5298 return gdb_print_insn_mips (memaddr, info);
5299 }
5300
5301 /* This function implements gdbarch_breakpoint_from_pc. It uses the
5302 program counter value to determine whether a 16- or 32-bit breakpoint
5303 should be used. It returns a pointer to a string of bytes that encode a
5304 breakpoint instruction, stores the length of the string to *lenptr, and
5305 adjusts pc (if necessary) to point to the actual memory location where
5306 the breakpoint should be inserted. */
5307
5308 static const gdb_byte *
5309 mips_breakpoint_from_pc (struct gdbarch *gdbarch,
5310 CORE_ADDR *pcptr, int *lenptr)
5311 {
5312 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
5313 {
5314 if (mips_pc_is_mips16 (*pcptr))
5315 {
5316 static gdb_byte mips16_big_breakpoint[] = { 0xe8, 0xa5 };
5317 *pcptr = unmake_mips16_addr (*pcptr);
5318 *lenptr = sizeof (mips16_big_breakpoint);
5319 return mips16_big_breakpoint;
5320 }
5321 else
5322 {
5323 /* The IDT board uses an unusual breakpoint value, and
5324 sometimes gets confused when it sees the usual MIPS
5325 breakpoint instruction. */
5326 static gdb_byte big_breakpoint[] = { 0, 0x5, 0, 0xd };
5327 static gdb_byte pmon_big_breakpoint[] = { 0, 0, 0, 0xd };
5328 static gdb_byte idt_big_breakpoint[] = { 0, 0, 0x0a, 0xd };
5329 /* Likewise, IRIX appears to expect a different breakpoint,
5330 although this is not apparent until you try to use pthreads. */
5331 static gdb_byte irix_big_breakpoint[] = { 0, 0, 0, 0xd };
5332
5333 *lenptr = sizeof (big_breakpoint);
5334
5335 if (strcmp (target_shortname, "mips") == 0)
5336 return idt_big_breakpoint;
5337 else if (strcmp (target_shortname, "ddb") == 0
5338 || strcmp (target_shortname, "pmon") == 0
5339 || strcmp (target_shortname, "lsi") == 0)
5340 return pmon_big_breakpoint;
5341 else if (gdbarch_osabi (gdbarch) == GDB_OSABI_IRIX)
5342 return irix_big_breakpoint;
5343 else
5344 return big_breakpoint;
5345 }
5346 }
5347 else
5348 {
5349 if (mips_pc_is_mips16 (*pcptr))
5350 {
5351 static gdb_byte mips16_little_breakpoint[] = { 0xa5, 0xe8 };
5352 *pcptr = unmake_mips16_addr (*pcptr);
5353 *lenptr = sizeof (mips16_little_breakpoint);
5354 return mips16_little_breakpoint;
5355 }
5356 else
5357 {
5358 static gdb_byte little_breakpoint[] = { 0xd, 0, 0x5, 0 };
5359 static gdb_byte pmon_little_breakpoint[] = { 0xd, 0, 0, 0 };
5360 static gdb_byte idt_little_breakpoint[] = { 0xd, 0x0a, 0, 0 };
5361
5362 *lenptr = sizeof (little_breakpoint);
5363
5364 if (strcmp (target_shortname, "mips") == 0)
5365 return idt_little_breakpoint;
5366 else if (strcmp (target_shortname, "ddb") == 0
5367 || strcmp (target_shortname, "pmon") == 0
5368 || strcmp (target_shortname, "lsi") == 0)
5369 return pmon_little_breakpoint;
5370 else
5371 return little_breakpoint;
5372 }
5373 }
5374 }
5375
5376 /* Return non-zero if the ADDR instruction has a branch delay slot
5377 (i.e. it is a jump or branch instruction). This function is based
5378 on mips32_next_pc. */
5379
5380 static int
5381 mips32_instruction_has_delay_slot (struct gdbarch *gdbarch, CORE_ADDR addr)
5382 {
5383 gdb_byte buf[MIPS_INSN32_SIZE];
5384 unsigned long inst;
5385 int status;
5386 int op;
5387 int rs;
5388 int rt;
5389
5390 status = target_read_memory (addr, buf, MIPS_INSN32_SIZE);
5391 if (status)
5392 return 0;
5393
5394 inst = mips_fetch_instruction (gdbarch, addr);
5395 op = itype_op (inst);
5396 if ((inst & 0xe0000000) != 0)
5397 {
5398 rs = itype_rs (inst);
5399 rt = itype_rt (inst);
5400 return (op >> 2 == 5 /* BEQL, BNEL, BLEZL, BGTZL: bits 0101xx */
5401 || op == 29 /* JALX: bits 011101 */
5402 || (op == 17
5403 && (rs == 8
5404 /* BC1F, BC1FL, BC1T, BC1TL: 010001 01000 */
5405 || (rs == 9 && (rt & 0x2) == 0)
5406 /* BC1ANY2F, BC1ANY2T: bits 010001 01001 */
5407 || (rs == 10 && (rt & 0x2) == 0))));
5408 /* BC1ANY4F, BC1ANY4T: bits 010001 01010 */
5409 }
5410 else
5411 switch (op & 0x07) /* extract bits 28,27,26 */
5412 {
5413 case 0: /* SPECIAL */
5414 op = rtype_funct (inst);
5415 return (op == 8 /* JR */
5416 || op == 9); /* JALR */
5417 break; /* end SPECIAL */
5418 case 1: /* REGIMM */
5419 rs = itype_rs (inst);
5420 rt = itype_rt (inst); /* branch condition */
5421 return ((rt & 0xc) == 0
5422 /* BLTZ, BLTZL, BGEZ, BGEZL: bits 000xx */
5423 /* BLTZAL, BLTZALL, BGEZAL, BGEZALL: 100xx */
5424 || ((rt & 0x1e) == 0x1c && rs == 0));
5425 /* BPOSGE32, BPOSGE64: bits 1110x */
5426 break; /* end REGIMM */
5427 default: /* J, JAL, BEQ, BNE, BLEZ, BGTZ */
5428 return 1;
5429 break;
5430 }
5431 }
5432
5433 /* Return non-zero if the ADDR instruction, which must be a 32-bit
5434 instruction if MUSTBE32 is set or can be any instruction otherwise,
5435 has a branch delay slot (i.e. it is a non-compact jump instruction). */
5436
5437 static int
5438 mips16_instruction_has_delay_slot (struct gdbarch *gdbarch, CORE_ADDR addr,
5439 int mustbe32)
5440 {
5441 gdb_byte buf[MIPS_INSN16_SIZE];
5442 unsigned short inst;
5443 int status;
5444
5445 status = target_read_memory (addr, buf, MIPS_INSN16_SIZE);
5446 if (status)
5447 return 0;
5448
5449 inst = mips_fetch_instruction (gdbarch, addr);
5450 if (!mustbe32)
5451 return (inst & 0xf89f) == 0xe800; /* JR/JALR (16-bit instruction) */
5452 return (inst & 0xf800) == 0x1800; /* JAL/JALX (32-bit instruction) */
5453 }
5454
5455 /* Calculate the starting address of the MIPS memory segment BPADDR is in.
5456 This assumes KSSEG exists. */
5457
5458 static CORE_ADDR
5459 mips_segment_boundary (CORE_ADDR bpaddr)
5460 {
5461 CORE_ADDR mask = CORE_ADDR_MAX;
5462 int segsize;
5463
5464 if (sizeof (CORE_ADDR) == 8)
5465 /* Get the topmost two bits of bpaddr in a 32-bit safe manner (avoid
5466 a compiler warning produced where CORE_ADDR is a 32-bit type even
5467 though in that case this is dead code). */
5468 switch (bpaddr >> ((sizeof (CORE_ADDR) << 3) - 2) & 3)
5469 {
5470 case 3:
5471 if (bpaddr == (bfd_signed_vma) (int32_t) bpaddr)
5472 segsize = 29; /* 32-bit compatibility segment */
5473 else
5474 segsize = 62; /* xkseg */
5475 break;
5476 case 2: /* xkphys */
5477 segsize = 59;
5478 break;
5479 default: /* xksseg (1), xkuseg/kuseg (0) */
5480 segsize = 62;
5481 break;
5482 }
5483 else if (bpaddr & 0x80000000) /* kernel segment */
5484 segsize = 29;
5485 else
5486 segsize = 31; /* user segment */
5487 mask <<= segsize;
5488 return bpaddr & mask;
5489 }
5490
5491 /* Move the breakpoint at BPADDR out of any branch delay slot by shifting
5492 it backwards if necessary. Return the address of the new location. */
5493
5494 static CORE_ADDR
5495 mips_adjust_breakpoint_address (struct gdbarch *gdbarch, CORE_ADDR bpaddr)
5496 {
5497 CORE_ADDR prev_addr, next_addr;
5498 CORE_ADDR boundary;
5499 CORE_ADDR func_addr;
5500
5501 /* If a breakpoint is set on the instruction in a branch delay slot,
5502 GDB gets confused. When the breakpoint is hit, the PC isn't on
5503 the instruction in the branch delay slot, the PC will point to
5504 the branch instruction. Since the PC doesn't match any known
5505 breakpoints, GDB reports a trap exception.
5506
5507 There are two possible fixes for this problem.
5508
5509 1) When the breakpoint gets hit, see if the BD bit is set in the
5510 Cause register (which indicates the last exception occurred in a
5511 branch delay slot). If the BD bit is set, fix the PC to point to
5512 the instruction in the branch delay slot.
5513
5514 2) When the user sets the breakpoint, don't allow him to set the
5515 breakpoint on the instruction in the branch delay slot. Instead
5516 move the breakpoint to the branch instruction (which will have
5517 the same result).
5518
5519 The problem with the first solution is that if the user then
5520 single-steps the processor, the branch instruction will get
5521 skipped (since GDB thinks the PC is on the instruction in the
5522 branch delay slot).
5523
5524 So, we'll use the second solution. To do this we need to know if
5525 the instruction we're trying to set the breakpoint on is in the
5526 branch delay slot. */
5527
5528 boundary = mips_segment_boundary (bpaddr);
5529
5530 /* Make sure we don't scan back before the beginning of the current
5531 function, since we may fetch constant data or insns that look like
5532 a jump. Of course we might do that anyway if the compiler has
5533 moved constants inline. :-( */
5534 if (find_pc_partial_function (bpaddr, NULL, &func_addr, NULL)
5535 && func_addr > boundary && func_addr <= bpaddr)
5536 boundary = func_addr;
5537
5538 if (!mips_pc_is_mips16 (bpaddr))
5539 {
5540 if (bpaddr == boundary)
5541 return bpaddr;
5542
5543 /* If the previous instruction has a branch delay slot, we have
5544 to move the breakpoint to the branch instruction. */
5545 prev_addr = bpaddr - 4;
5546 if (mips32_instruction_has_delay_slot (gdbarch, prev_addr))
5547 bpaddr = prev_addr;
5548 }
5549 else
5550 {
5551 struct minimal_symbol *sym;
5552 CORE_ADDR addr, jmpaddr;
5553 int i;
5554
5555 boundary = unmake_mips16_addr (boundary);
5556
5557 /* The only MIPS16 instructions with delay slots are JAL, JALX,
5558 JALR and JR. An absolute JAL/JALX is always 4 bytes long,
5559 so try for that first, then try the 2 byte JALR/JR.
5560 FIXME: We have to assume that bpaddr is not the second half
5561 of an extended instruction. */
5562
5563 jmpaddr = 0;
5564 addr = bpaddr;
5565 for (i = 1; i < 4; i++)
5566 {
5567 if (unmake_mips16_addr (addr) == boundary)
5568 break;
5569 addr -= 2;
5570 if (i == 1 && mips16_instruction_has_delay_slot (gdbarch, addr, 0))
5571 /* Looks like a JR/JALR at [target-1], but it could be
5572 the second word of a previous JAL/JALX, so record it
5573 and check back one more. */
5574 jmpaddr = addr;
5575 else if (i > 1
5576 && mips16_instruction_has_delay_slot (gdbarch, addr, 1))
5577 {
5578 if (i == 2)
5579 /* Looks like a JAL/JALX at [target-2], but it could also
5580 be the second word of a previous JAL/JALX, record it,
5581 and check back one more. */
5582 jmpaddr = addr;
5583 else
5584 /* Looks like a JAL/JALX at [target-3], so any previously
5585 recorded JAL/JALX or JR/JALR must be wrong, because:
5586
5587 >-3: JAL
5588 -2: JAL-ext (can't be JAL/JALX)
5589 -1: bdslot (can't be JR/JALR)
5590 0: target insn
5591
5592 Of course it could be another JAL-ext which looks
5593 like a JAL, but in that case we'd have broken out
5594 of this loop at [target-2]:
5595
5596 -4: JAL
5597 >-3: JAL-ext
5598 -2: bdslot (can't be jmp)
5599 -1: JR/JALR
5600 0: target insn */
5601 jmpaddr = 0;
5602 }
5603 else
5604 {
5605 /* Not a jump instruction: if we're at [target-1] this
5606 could be the second word of a JAL/JALX, so continue;
5607 otherwise we're done. */
5608 if (i > 1)
5609 break;
5610 }
5611 }
5612
5613 if (jmpaddr)
5614 bpaddr = jmpaddr;
5615 }
5616
5617 return bpaddr;
5618 }
5619
5620 /* If PC is in a mips16 call or return stub, return the address of the target
5621 PC, which is either the callee or the caller. There are several
5622 cases which must be handled:
5623
5624 * If the PC is in __mips16_ret_{d,s}f, this is a return stub and the
5625 target PC is in $31 ($ra).
5626 * If the PC is in __mips16_call_stub_{1..10}, this is a call stub
5627 and the target PC is in $2.
5628 * If the PC at the start of __mips16_call_stub_{s,d}f_{0..10}, i.e.
5629 before the jal instruction, this is effectively a call stub
5630 and the target PC is in $2. Otherwise this is effectively
5631 a return stub and the target PC is in $18.
5632
5633 See the source code for the stubs in gcc/config/mips/mips16.S for
5634 gory details. */
5635
5636 static CORE_ADDR
5637 mips_skip_mips16_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
5638 {
5639 struct gdbarch *gdbarch = get_frame_arch (frame);
5640 const char *name;
5641 CORE_ADDR start_addr;
5642
5643 /* Find the starting address and name of the function containing the PC. */
5644 if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
5645 return 0;
5646
5647 /* If the PC is in __mips16_ret_{d,s}f, this is a return stub and the
5648 target PC is in $31 ($ra). */
5649 if (strcmp (name, "__mips16_ret_sf") == 0
5650 || strcmp (name, "__mips16_ret_df") == 0)
5651 return get_frame_register_signed (frame, MIPS_RA_REGNUM);
5652
5653 if (strncmp (name, "__mips16_call_stub_", 19) == 0)
5654 {
5655 /* If the PC is in __mips16_call_stub_{1..10}, this is a call stub
5656 and the target PC is in $2. */
5657 if (name[19] >= '0' && name[19] <= '9')
5658 return get_frame_register_signed (frame, 2);
5659
5660 /* If the PC at the start of __mips16_call_stub_{s,d}f_{0..10}, i.e.
5661 before the jal instruction, this is effectively a call stub
5662 and the target PC is in $2. Otherwise this is effectively
5663 a return stub and the target PC is in $18. */
5664 else if (name[19] == 's' || name[19] == 'd')
5665 {
5666 if (pc == start_addr)
5667 {
5668 /* Check if the target of the stub is a compiler-generated
5669 stub. Such a stub for a function bar might have a name
5670 like __fn_stub_bar, and might look like this:
5671 mfc1 $4,$f13
5672 mfc1 $5,$f12
5673 mfc1 $6,$f15
5674 mfc1 $7,$f14
5675 la $1,bar (becomes a lui/addiu pair)
5676 jr $1
5677 So scan down to the lui/addi and extract the target
5678 address from those two instructions. */
5679
5680 CORE_ADDR target_pc = get_frame_register_signed (frame, 2);
5681 int i;
5682
5683 /* See if the name of the target function is __fn_stub_*. */
5684 if (find_pc_partial_function (target_pc, &name, NULL, NULL) ==
5685 0)
5686 return target_pc;
5687 if (strncmp (name, "__fn_stub_", 10) != 0
5688 && strcmp (name, "etext") != 0
5689 && strcmp (name, "_etext") != 0)
5690 return target_pc;
5691
5692 /* Scan through this _fn_stub_ code for the lui/addiu pair.
5693 The limit on the search is arbitrarily set to 20
5694 instructions. FIXME. */
5695 for (i = 0, pc = 0; i < 20; i++, target_pc += MIPS_INSN32_SIZE)
5696 {
5697 ULONGEST inst = mips_fetch_instruction (gdbarch, target_pc);
5698 CORE_ADDR addr = inst;
5699
5700 if ((inst & 0xffff0000) == 0x3c010000) /* lui $at */
5701 pc = (((addr & 0xffff) ^ 0x8000) - 0x8000) << 16;
5702 /* high word */
5703 else if ((inst & 0xffff0000) == 0x24210000) /* addiu $at */
5704 return pc + ((addr & 0xffff) ^ 0x8000) - 0x8000;
5705 /* low word */
5706 }
5707
5708 /* Couldn't find the lui/addui pair, so return stub address. */
5709 return target_pc;
5710 }
5711 else
5712 /* This is the 'return' part of a call stub. The return
5713 address is in $r18. */
5714 return get_frame_register_signed (frame, 18);
5715 }
5716 }
5717 return 0; /* not a stub */
5718 }
5719
5720 /* If the current PC is the start of a non-PIC-to-PIC stub, return the
5721 PC of the stub target. The stub just loads $t9 and jumps to it,
5722 so that $t9 has the correct value at function entry. */
5723
5724 static CORE_ADDR
5725 mips_skip_pic_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
5726 {
5727 struct gdbarch *gdbarch = get_frame_arch (frame);
5728 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5729 struct minimal_symbol *msym;
5730 int i;
5731 gdb_byte stub_code[16];
5732 int32_t stub_words[4];
5733
5734 /* The stub for foo is named ".pic.foo", and is either two
5735 instructions inserted before foo or a three instruction sequence
5736 which jumps to foo. */
5737 msym = lookup_minimal_symbol_by_pc (pc);
5738 if (msym == NULL
5739 || SYMBOL_VALUE_ADDRESS (msym) != pc
5740 || SYMBOL_LINKAGE_NAME (msym) == NULL
5741 || strncmp (SYMBOL_LINKAGE_NAME (msym), ".pic.", 5) != 0)
5742 return 0;
5743
5744 /* A two-instruction header. */
5745 if (MSYMBOL_SIZE (msym) == 8)
5746 return pc + 8;
5747
5748 /* A three-instruction (plus delay slot) trampoline. */
5749 if (MSYMBOL_SIZE (msym) == 16)
5750 {
5751 if (target_read_memory (pc, stub_code, 16) != 0)
5752 return 0;
5753 for (i = 0; i < 4; i++)
5754 stub_words[i] = extract_unsigned_integer (stub_code + i * 4,
5755 4, byte_order);
5756
5757 /* A stub contains these instructions:
5758 lui t9, %hi(target)
5759 j target
5760 addiu t9, t9, %lo(target)
5761 nop
5762
5763 This works even for N64, since stubs are only generated with
5764 -msym32. */
5765 if ((stub_words[0] & 0xffff0000U) == 0x3c190000
5766 && (stub_words[1] & 0xfc000000U) == 0x08000000
5767 && (stub_words[2] & 0xffff0000U) == 0x27390000
5768 && stub_words[3] == 0x00000000)
5769 return (((stub_words[0] & 0x0000ffff) << 16)
5770 + (stub_words[2] & 0x0000ffff));
5771 }
5772
5773 /* Not a recognized stub. */
5774 return 0;
5775 }
5776
5777 static CORE_ADDR
5778 mips_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
5779 {
5780 CORE_ADDR target_pc;
5781
5782 target_pc = mips_skip_mips16_trampoline_code (frame, pc);
5783 if (target_pc)
5784 return target_pc;
5785
5786 target_pc = find_solib_trampoline_target (frame, pc);
5787 if (target_pc)
5788 return target_pc;
5789
5790 target_pc = mips_skip_pic_trampoline_code (frame, pc);
5791 if (target_pc)
5792 return target_pc;
5793
5794 return 0;
5795 }
5796
5797 /* Convert a dbx stab register number (from `r' declaration) to a GDB
5798 [1 * gdbarch_num_regs .. 2 * gdbarch_num_regs) REGNUM. */
5799
5800 static int
5801 mips_stab_reg_to_regnum (struct gdbarch *gdbarch, int num)
5802 {
5803 int regnum;
5804 if (num >= 0 && num < 32)
5805 regnum = num;
5806 else if (num >= 38 && num < 70)
5807 regnum = num + mips_regnum (gdbarch)->fp0 - 38;
5808 else if (num == 70)
5809 regnum = mips_regnum (gdbarch)->hi;
5810 else if (num == 71)
5811 regnum = mips_regnum (gdbarch)->lo;
5812 else if (mips_regnum (gdbarch)->dspacc != -1 && num >= 72 && num < 78)
5813 regnum = num + mips_regnum (gdbarch)->dspacc - 72;
5814 else
5815 /* This will hopefully (eventually) provoke a warning. Should
5816 we be calling complaint() here? */
5817 return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
5818 return gdbarch_num_regs (gdbarch) + regnum;
5819 }
5820
5821
5822 /* Convert a dwarf, dwarf2, or ecoff register number to a GDB [1 *
5823 gdbarch_num_regs .. 2 * gdbarch_num_regs) REGNUM. */
5824
5825 static int
5826 mips_dwarf_dwarf2_ecoff_reg_to_regnum (struct gdbarch *gdbarch, int num)
5827 {
5828 int regnum;
5829 if (num >= 0 && num < 32)
5830 regnum = num;
5831 else if (num >= 32 && num < 64)
5832 regnum = num + mips_regnum (gdbarch)->fp0 - 32;
5833 else if (num == 64)
5834 regnum = mips_regnum (gdbarch)->hi;
5835 else if (num == 65)
5836 regnum = mips_regnum (gdbarch)->lo;
5837 else if (mips_regnum (gdbarch)->dspacc != -1 && num >= 66 && num < 72)
5838 regnum = num + mips_regnum (gdbarch)->dspacc - 66;
5839 else
5840 /* This will hopefully (eventually) provoke a warning. Should we
5841 be calling complaint() here? */
5842 return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
5843 return gdbarch_num_regs (gdbarch) + regnum;
5844 }
5845
5846 static int
5847 mips_register_sim_regno (struct gdbarch *gdbarch, int regnum)
5848 {
5849 /* Only makes sense to supply raw registers. */
5850 gdb_assert (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch));
5851 /* FIXME: cagney/2002-05-13: Need to look at the pseudo register to
5852 decide if it is valid. Should instead define a standard sim/gdb
5853 register numbering scheme. */
5854 if (gdbarch_register_name (gdbarch,
5855 gdbarch_num_regs (gdbarch) + regnum) != NULL
5856 && gdbarch_register_name (gdbarch,
5857 gdbarch_num_regs (gdbarch)
5858 + regnum)[0] != '\0')
5859 return regnum;
5860 else
5861 return LEGACY_SIM_REGNO_IGNORE;
5862 }
5863
5864
5865 /* Convert an integer into an address. Extracting the value signed
5866 guarantees a correctly sign extended address. */
5867
5868 static CORE_ADDR
5869 mips_integer_to_address (struct gdbarch *gdbarch,
5870 struct type *type, const gdb_byte *buf)
5871 {
5872 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
5873 return extract_signed_integer (buf, TYPE_LENGTH (type), byte_order);
5874 }
5875
5876 /* Dummy virtual frame pointer method. This is no more or less accurate
5877 than most other architectures; we just need to be explicit about it,
5878 because the pseudo-register gdbarch_sp_regnum will otherwise lead to
5879 an assertion failure. */
5880
5881 static void
5882 mips_virtual_frame_pointer (struct gdbarch *gdbarch,
5883 CORE_ADDR pc, int *reg, LONGEST *offset)
5884 {
5885 *reg = MIPS_SP_REGNUM;
5886 *offset = 0;
5887 }
5888
5889 static void
5890 mips_find_abi_section (bfd *abfd, asection *sect, void *obj)
5891 {
5892 enum mips_abi *abip = (enum mips_abi *) obj;
5893 const char *name = bfd_get_section_name (abfd, sect);
5894
5895 if (*abip != MIPS_ABI_UNKNOWN)
5896 return;
5897
5898 if (strncmp (name, ".mdebug.", 8) != 0)
5899 return;
5900
5901 if (strcmp (name, ".mdebug.abi32") == 0)
5902 *abip = MIPS_ABI_O32;
5903 else if (strcmp (name, ".mdebug.abiN32") == 0)
5904 *abip = MIPS_ABI_N32;
5905 else if (strcmp (name, ".mdebug.abi64") == 0)
5906 *abip = MIPS_ABI_N64;
5907 else if (strcmp (name, ".mdebug.abiO64") == 0)
5908 *abip = MIPS_ABI_O64;
5909 else if (strcmp (name, ".mdebug.eabi32") == 0)
5910 *abip = MIPS_ABI_EABI32;
5911 else if (strcmp (name, ".mdebug.eabi64") == 0)
5912 *abip = MIPS_ABI_EABI64;
5913 else
5914 warning (_("unsupported ABI %s."), name + 8);
5915 }
5916
5917 static void
5918 mips_find_long_section (bfd *abfd, asection *sect, void *obj)
5919 {
5920 int *lbp = (int *) obj;
5921 const char *name = bfd_get_section_name (abfd, sect);
5922
5923 if (strncmp (name, ".gcc_compiled_long32", 20) == 0)
5924 *lbp = 32;
5925 else if (strncmp (name, ".gcc_compiled_long64", 20) == 0)
5926 *lbp = 64;
5927 else if (strncmp (name, ".gcc_compiled_long", 18) == 0)
5928 warning (_("unrecognized .gcc_compiled_longXX"));
5929 }
5930
5931 static enum mips_abi
5932 global_mips_abi (void)
5933 {
5934 int i;
5935
5936 for (i = 0; mips_abi_strings[i] != NULL; i++)
5937 if (mips_abi_strings[i] == mips_abi_string)
5938 return (enum mips_abi) i;
5939
5940 internal_error (__FILE__, __LINE__, _("unknown ABI string"));
5941 }
5942
5943 static void
5944 mips_register_g_packet_guesses (struct gdbarch *gdbarch)
5945 {
5946 /* If the size matches the set of 32-bit or 64-bit integer registers,
5947 assume that's what we've got. */
5948 register_remote_g_packet_guess (gdbarch, 38 * 4, mips_tdesc_gp32);
5949 register_remote_g_packet_guess (gdbarch, 38 * 8, mips_tdesc_gp64);
5950
5951 /* If the size matches the full set of registers GDB traditionally
5952 knows about, including floating point, for either 32-bit or
5953 64-bit, assume that's what we've got. */
5954 register_remote_g_packet_guess (gdbarch, 90 * 4, mips_tdesc_gp32);
5955 register_remote_g_packet_guess (gdbarch, 90 * 8, mips_tdesc_gp64);
5956
5957 /* Otherwise we don't have a useful guess. */
5958 }
5959
5960 static struct value *
5961 value_of_mips_user_reg (struct frame_info *frame, const void *baton)
5962 {
5963 const int *reg_p = baton;
5964 return value_of_register (*reg_p, frame);
5965 }
5966
5967 static struct gdbarch *
5968 mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
5969 {
5970 struct gdbarch *gdbarch;
5971 struct gdbarch_tdep *tdep;
5972 int elf_flags;
5973 enum mips_abi mips_abi, found_abi, wanted_abi;
5974 int i, num_regs;
5975 enum mips_fpu_type fpu_type;
5976 struct tdesc_arch_data *tdesc_data = NULL;
5977 int elf_fpu_type = 0;
5978 const char **reg_names;
5979 struct mips_regnum mips_regnum, *regnum;
5980 int dspacc;
5981 int dspctl;
5982
5983 /* Fill in the OS dependent register numbers and names. */
5984 if (info.osabi == GDB_OSABI_IRIX)
5985 {
5986 mips_regnum.fp0 = 32;
5987 mips_regnum.pc = 64;
5988 mips_regnum.cause = 65;
5989 mips_regnum.badvaddr = 66;
5990 mips_regnum.hi = 67;
5991 mips_regnum.lo = 68;
5992 mips_regnum.fp_control_status = 69;
5993 mips_regnum.fp_implementation_revision = 70;
5994 mips_regnum.dspacc = dspacc = -1;
5995 mips_regnum.dspctl = dspctl = -1;
5996 num_regs = 71;
5997 reg_names = mips_irix_reg_names;
5998 }
5999 else if (info.osabi == GDB_OSABI_LINUX)
6000 {
6001 mips_regnum.fp0 = 38;
6002 mips_regnum.pc = 37;
6003 mips_regnum.cause = 36;
6004 mips_regnum.badvaddr = 35;
6005 mips_regnum.hi = 34;
6006 mips_regnum.lo = 33;
6007 mips_regnum.fp_control_status = 70;
6008 mips_regnum.fp_implementation_revision = 71;
6009 mips_regnum.dspacc = -1;
6010 mips_regnum.dspctl = -1;
6011 dspacc = 72;
6012 dspctl = 78;
6013 num_regs = 79;
6014 reg_names = mips_linux_reg_names;
6015 }
6016 else
6017 {
6018 mips_regnum.lo = MIPS_EMBED_LO_REGNUM;
6019 mips_regnum.hi = MIPS_EMBED_HI_REGNUM;
6020 mips_regnum.badvaddr = MIPS_EMBED_BADVADDR_REGNUM;
6021 mips_regnum.cause = MIPS_EMBED_CAUSE_REGNUM;
6022 mips_regnum.pc = MIPS_EMBED_PC_REGNUM;
6023 mips_regnum.fp0 = MIPS_EMBED_FP0_REGNUM;
6024 mips_regnum.fp_control_status = 70;
6025 mips_regnum.fp_implementation_revision = 71;
6026 mips_regnum.dspacc = dspacc = -1;
6027 mips_regnum.dspctl = dspctl = -1;
6028 num_regs = MIPS_LAST_EMBED_REGNUM + 1;
6029 if (info.bfd_arch_info != NULL
6030 && info.bfd_arch_info->mach == bfd_mach_mips3900)
6031 reg_names = mips_tx39_reg_names;
6032 else
6033 reg_names = mips_generic_reg_names;
6034 }
6035
6036 /* Check any target description for validity. */
6037 if (tdesc_has_registers (info.target_desc))
6038 {
6039 static const char *const mips_gprs[] = {
6040 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
6041 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
6042 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
6043 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31"
6044 };
6045 static const char *const mips_fprs[] = {
6046 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
6047 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
6048 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
6049 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
6050 };
6051
6052 const struct tdesc_feature *feature;
6053 int valid_p;
6054
6055 feature = tdesc_find_feature (info.target_desc,
6056 "org.gnu.gdb.mips.cpu");
6057 if (feature == NULL)
6058 return NULL;
6059
6060 tdesc_data = tdesc_data_alloc ();
6061
6062 valid_p = 1;
6063 for (i = MIPS_ZERO_REGNUM; i <= MIPS_RA_REGNUM; i++)
6064 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
6065 mips_gprs[i]);
6066
6067
6068 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6069 mips_regnum.lo, "lo");
6070 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6071 mips_regnum.hi, "hi");
6072 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6073 mips_regnum.pc, "pc");
6074
6075 if (!valid_p)
6076 {
6077 tdesc_data_cleanup (tdesc_data);
6078 return NULL;
6079 }
6080
6081 feature = tdesc_find_feature (info.target_desc,
6082 "org.gnu.gdb.mips.cp0");
6083 if (feature == NULL)
6084 {
6085 tdesc_data_cleanup (tdesc_data);
6086 return NULL;
6087 }
6088
6089 valid_p = 1;
6090 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6091 mips_regnum.badvaddr, "badvaddr");
6092 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6093 MIPS_PS_REGNUM, "status");
6094 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6095 mips_regnum.cause, "cause");
6096
6097 if (!valid_p)
6098 {
6099 tdesc_data_cleanup (tdesc_data);
6100 return NULL;
6101 }
6102
6103 /* FIXME drow/2007-05-17: The FPU should be optional. The MIPS
6104 backend is not prepared for that, though. */
6105 feature = tdesc_find_feature (info.target_desc,
6106 "org.gnu.gdb.mips.fpu");
6107 if (feature == NULL)
6108 {
6109 tdesc_data_cleanup (tdesc_data);
6110 return NULL;
6111 }
6112
6113 valid_p = 1;
6114 for (i = 0; i < 32; i++)
6115 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6116 i + mips_regnum.fp0, mips_fprs[i]);
6117
6118 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6119 mips_regnum.fp_control_status,
6120 "fcsr");
6121 valid_p
6122 &= tdesc_numbered_register (feature, tdesc_data,
6123 mips_regnum.fp_implementation_revision,
6124 "fir");
6125
6126 if (!valid_p)
6127 {
6128 tdesc_data_cleanup (tdesc_data);
6129 return NULL;
6130 }
6131
6132 if (dspacc >= 0)
6133 {
6134 feature = tdesc_find_feature (info.target_desc,
6135 "org.gnu.gdb.mips.dsp");
6136 /* The DSP registers are optional; it's OK if they are absent. */
6137 if (feature != NULL)
6138 {
6139 i = 0;
6140 valid_p = 1;
6141 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6142 dspacc + i++, "hi1");
6143 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6144 dspacc + i++, "lo1");
6145 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6146 dspacc + i++, "hi2");
6147 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6148 dspacc + i++, "lo2");
6149 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6150 dspacc + i++, "hi3");
6151 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6152 dspacc + i++, "lo3");
6153
6154 valid_p &= tdesc_numbered_register (feature, tdesc_data,
6155 dspctl, "dspctl");
6156
6157 if (!valid_p)
6158 {
6159 tdesc_data_cleanup (tdesc_data);
6160 return NULL;
6161 }
6162
6163 mips_regnum.dspacc = dspacc;
6164 mips_regnum.dspctl = dspctl;
6165 }
6166 }
6167
6168 /* It would be nice to detect an attempt to use a 64-bit ABI
6169 when only 32-bit registers are provided. */
6170 reg_names = NULL;
6171 }
6172
6173 /* First of all, extract the elf_flags, if available. */
6174 if (info.abfd && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
6175 elf_flags = elf_elfheader (info.abfd)->e_flags;
6176 else if (arches != NULL)
6177 elf_flags = gdbarch_tdep (arches->gdbarch)->elf_flags;
6178 else
6179 elf_flags = 0;
6180 if (gdbarch_debug)
6181 fprintf_unfiltered (gdb_stdlog,
6182 "mips_gdbarch_init: elf_flags = 0x%08x\n", elf_flags);
6183
6184 /* Check ELF_FLAGS to see if it specifies the ABI being used. */
6185 switch ((elf_flags & EF_MIPS_ABI))
6186 {
6187 case E_MIPS_ABI_O32:
6188 found_abi = MIPS_ABI_O32;
6189 break;
6190 case E_MIPS_ABI_O64:
6191 found_abi = MIPS_ABI_O64;
6192 break;
6193 case E_MIPS_ABI_EABI32:
6194 found_abi = MIPS_ABI_EABI32;
6195 break;
6196 case E_MIPS_ABI_EABI64:
6197 found_abi = MIPS_ABI_EABI64;
6198 break;
6199 default:
6200 if ((elf_flags & EF_MIPS_ABI2))
6201 found_abi = MIPS_ABI_N32;
6202 else
6203 found_abi = MIPS_ABI_UNKNOWN;
6204 break;
6205 }
6206
6207 /* GCC creates a pseudo-section whose name describes the ABI. */
6208 if (found_abi == MIPS_ABI_UNKNOWN && info.abfd != NULL)
6209 bfd_map_over_sections (info.abfd, mips_find_abi_section, &found_abi);
6210
6211 /* If we have no useful BFD information, use the ABI from the last
6212 MIPS architecture (if there is one). */
6213 if (found_abi == MIPS_ABI_UNKNOWN && info.abfd == NULL && arches != NULL)
6214 found_abi = gdbarch_tdep (arches->gdbarch)->found_abi;
6215
6216 /* Try the architecture for any hint of the correct ABI. */
6217 if (found_abi == MIPS_ABI_UNKNOWN
6218 && info.bfd_arch_info != NULL
6219 && info.bfd_arch_info->arch == bfd_arch_mips)
6220 {
6221 switch (info.bfd_arch_info->mach)
6222 {
6223 case bfd_mach_mips3900:
6224 found_abi = MIPS_ABI_EABI32;
6225 break;
6226 case bfd_mach_mips4100:
6227 case bfd_mach_mips5000:
6228 found_abi = MIPS_ABI_EABI64;
6229 break;
6230 case bfd_mach_mips8000:
6231 case bfd_mach_mips10000:
6232 /* On Irix, ELF64 executables use the N64 ABI. The
6233 pseudo-sections which describe the ABI aren't present
6234 on IRIX. (Even for executables created by gcc.) */
6235 if (bfd_get_flavour (info.abfd) == bfd_target_elf_flavour
6236 && elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6237 found_abi = MIPS_ABI_N64;
6238 else
6239 found_abi = MIPS_ABI_N32;
6240 break;
6241 }
6242 }
6243
6244 /* Default 64-bit objects to N64 instead of O32. */
6245 if (found_abi == MIPS_ABI_UNKNOWN
6246 && info.abfd != NULL
6247 && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour
6248 && elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6249 found_abi = MIPS_ABI_N64;
6250
6251 if (gdbarch_debug)
6252 fprintf_unfiltered (gdb_stdlog, "mips_gdbarch_init: found_abi = %d\n",
6253 found_abi);
6254
6255 /* What has the user specified from the command line? */
6256 wanted_abi = global_mips_abi ();
6257 if (gdbarch_debug)
6258 fprintf_unfiltered (gdb_stdlog, "mips_gdbarch_init: wanted_abi = %d\n",
6259 wanted_abi);
6260
6261 /* Now that we have found what the ABI for this binary would be,
6262 check whether the user is overriding it. */
6263 if (wanted_abi != MIPS_ABI_UNKNOWN)
6264 mips_abi = wanted_abi;
6265 else if (found_abi != MIPS_ABI_UNKNOWN)
6266 mips_abi = found_abi;
6267 else
6268 mips_abi = MIPS_ABI_O32;
6269 if (gdbarch_debug)
6270 fprintf_unfiltered (gdb_stdlog, "mips_gdbarch_init: mips_abi = %d\n",
6271 mips_abi);
6272
6273 /* Also used when doing an architecture lookup. */
6274 if (gdbarch_debug)
6275 fprintf_unfiltered (gdb_stdlog,
6276 "mips_gdbarch_init: "
6277 "mips64_transfers_32bit_regs_p = %d\n",
6278 mips64_transfers_32bit_regs_p);
6279
6280 /* Determine the MIPS FPU type. */
6281 #ifdef HAVE_ELF
6282 if (info.abfd
6283 && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
6284 elf_fpu_type = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
6285 Tag_GNU_MIPS_ABI_FP);
6286 #endif /* HAVE_ELF */
6287
6288 if (!mips_fpu_type_auto)
6289 fpu_type = mips_fpu_type;
6290 else if (elf_fpu_type != 0)
6291 {
6292 switch (elf_fpu_type)
6293 {
6294 case 1:
6295 fpu_type = MIPS_FPU_DOUBLE;
6296 break;
6297 case 2:
6298 fpu_type = MIPS_FPU_SINGLE;
6299 break;
6300 case 3:
6301 default:
6302 /* Soft float or unknown. */
6303 fpu_type = MIPS_FPU_NONE;
6304 break;
6305 }
6306 }
6307 else if (info.bfd_arch_info != NULL
6308 && info.bfd_arch_info->arch == bfd_arch_mips)
6309 switch (info.bfd_arch_info->mach)
6310 {
6311 case bfd_mach_mips3900:
6312 case bfd_mach_mips4100:
6313 case bfd_mach_mips4111:
6314 case bfd_mach_mips4120:
6315 fpu_type = MIPS_FPU_NONE;
6316 break;
6317 case bfd_mach_mips4650:
6318 fpu_type = MIPS_FPU_SINGLE;
6319 break;
6320 default:
6321 fpu_type = MIPS_FPU_DOUBLE;
6322 break;
6323 }
6324 else if (arches != NULL)
6325 fpu_type = gdbarch_tdep (arches->gdbarch)->mips_fpu_type;
6326 else
6327 fpu_type = MIPS_FPU_DOUBLE;
6328 if (gdbarch_debug)
6329 fprintf_unfiltered (gdb_stdlog,
6330 "mips_gdbarch_init: fpu_type = %d\n", fpu_type);
6331
6332 /* Check for blatant incompatibilities. */
6333
6334 /* If we have only 32-bit registers, then we can't debug a 64-bit
6335 ABI. */
6336 if (info.target_desc
6337 && tdesc_property (info.target_desc, PROPERTY_GP32) != NULL
6338 && mips_abi != MIPS_ABI_EABI32
6339 && mips_abi != MIPS_ABI_O32)
6340 {
6341 if (tdesc_data != NULL)
6342 tdesc_data_cleanup (tdesc_data);
6343 return NULL;
6344 }
6345
6346 /* Try to find a pre-existing architecture. */
6347 for (arches = gdbarch_list_lookup_by_info (arches, &info);
6348 arches != NULL;
6349 arches = gdbarch_list_lookup_by_info (arches->next, &info))
6350 {
6351 /* MIPS needs to be pedantic about which ABI the object is
6352 using. */
6353 if (gdbarch_tdep (arches->gdbarch)->elf_flags != elf_flags)
6354 continue;
6355 if (gdbarch_tdep (arches->gdbarch)->mips_abi != mips_abi)
6356 continue;
6357 /* Need to be pedantic about which register virtual size is
6358 used. */
6359 if (gdbarch_tdep (arches->gdbarch)->mips64_transfers_32bit_regs_p
6360 != mips64_transfers_32bit_regs_p)
6361 continue;
6362 /* Be pedantic about which FPU is selected. */
6363 if (gdbarch_tdep (arches->gdbarch)->mips_fpu_type != fpu_type)
6364 continue;
6365
6366 if (tdesc_data != NULL)
6367 tdesc_data_cleanup (tdesc_data);
6368 return arches->gdbarch;
6369 }
6370
6371 /* Need a new architecture. Fill in a target specific vector. */
6372 tdep = (struct gdbarch_tdep *) xmalloc (sizeof (struct gdbarch_tdep));
6373 gdbarch = gdbarch_alloc (&info, tdep);
6374 tdep->elf_flags = elf_flags;
6375 tdep->mips64_transfers_32bit_regs_p = mips64_transfers_32bit_regs_p;
6376 tdep->found_abi = found_abi;
6377 tdep->mips_abi = mips_abi;
6378 tdep->mips_fpu_type = fpu_type;
6379 tdep->register_size_valid_p = 0;
6380 tdep->register_size = 0;
6381 tdep->gregset = NULL;
6382 tdep->gregset64 = NULL;
6383 tdep->fpregset = NULL;
6384 tdep->fpregset64 = NULL;
6385
6386 if (info.target_desc)
6387 {
6388 /* Some useful properties can be inferred from the target. */
6389 if (tdesc_property (info.target_desc, PROPERTY_GP32) != NULL)
6390 {
6391 tdep->register_size_valid_p = 1;
6392 tdep->register_size = 4;
6393 }
6394 else if (tdesc_property (info.target_desc, PROPERTY_GP64) != NULL)
6395 {
6396 tdep->register_size_valid_p = 1;
6397 tdep->register_size = 8;
6398 }
6399 }
6400
6401 /* Initially set everything according to the default ABI/ISA. */
6402 set_gdbarch_short_bit (gdbarch, 16);
6403 set_gdbarch_int_bit (gdbarch, 32);
6404 set_gdbarch_float_bit (gdbarch, 32);
6405 set_gdbarch_double_bit (gdbarch, 64);
6406 set_gdbarch_long_double_bit (gdbarch, 64);
6407 set_gdbarch_register_reggroup_p (gdbarch, mips_register_reggroup_p);
6408 set_gdbarch_pseudo_register_read (gdbarch, mips_pseudo_register_read);
6409 set_gdbarch_pseudo_register_write (gdbarch, mips_pseudo_register_write);
6410
6411 set_gdbarch_ax_pseudo_register_collect (gdbarch,
6412 mips_ax_pseudo_register_collect);
6413 set_gdbarch_ax_pseudo_register_push_stack
6414 (gdbarch, mips_ax_pseudo_register_push_stack);
6415
6416 set_gdbarch_elf_make_msymbol_special (gdbarch,
6417 mips_elf_make_msymbol_special);
6418
6419 regnum = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct mips_regnum);
6420 *regnum = mips_regnum;
6421 set_gdbarch_fp0_regnum (gdbarch, regnum->fp0);
6422 set_gdbarch_num_regs (gdbarch, num_regs);
6423 set_gdbarch_num_pseudo_regs (gdbarch, num_regs);
6424 set_gdbarch_register_name (gdbarch, mips_register_name);
6425 set_gdbarch_virtual_frame_pointer (gdbarch, mips_virtual_frame_pointer);
6426 tdep->mips_processor_reg_names = reg_names;
6427 tdep->regnum = regnum;
6428
6429 switch (mips_abi)
6430 {
6431 case MIPS_ABI_O32:
6432 set_gdbarch_push_dummy_call (gdbarch, mips_o32_push_dummy_call);
6433 set_gdbarch_return_value (gdbarch, mips_o32_return_value);
6434 tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 4 - 1;
6435 tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 4 - 1;
6436 tdep->default_mask_address_p = 0;
6437 set_gdbarch_long_bit (gdbarch, 32);
6438 set_gdbarch_ptr_bit (gdbarch, 32);
6439 set_gdbarch_long_long_bit (gdbarch, 64);
6440 break;
6441 case MIPS_ABI_O64:
6442 set_gdbarch_push_dummy_call (gdbarch, mips_o64_push_dummy_call);
6443 set_gdbarch_return_value (gdbarch, mips_o64_return_value);
6444 tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 4 - 1;
6445 tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 4 - 1;
6446 tdep->default_mask_address_p = 0;
6447 set_gdbarch_long_bit (gdbarch, 32);
6448 set_gdbarch_ptr_bit (gdbarch, 32);
6449 set_gdbarch_long_long_bit (gdbarch, 64);
6450 break;
6451 case MIPS_ABI_EABI32:
6452 set_gdbarch_push_dummy_call (gdbarch, mips_eabi_push_dummy_call);
6453 set_gdbarch_return_value (gdbarch, mips_eabi_return_value);
6454 tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 8 - 1;
6455 tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 8 - 1;
6456 tdep->default_mask_address_p = 0;
6457 set_gdbarch_long_bit (gdbarch, 32);
6458 set_gdbarch_ptr_bit (gdbarch, 32);
6459 set_gdbarch_long_long_bit (gdbarch, 64);
6460 break;
6461 case MIPS_ABI_EABI64:
6462 set_gdbarch_push_dummy_call (gdbarch, mips_eabi_push_dummy_call);
6463 set_gdbarch_return_value (gdbarch, mips_eabi_return_value);
6464 tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 8 - 1;
6465 tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 8 - 1;
6466 tdep->default_mask_address_p = 0;
6467 set_gdbarch_long_bit (gdbarch, 64);
6468 set_gdbarch_ptr_bit (gdbarch, 64);
6469 set_gdbarch_long_long_bit (gdbarch, 64);
6470 break;
6471 case MIPS_ABI_N32:
6472 set_gdbarch_push_dummy_call (gdbarch, mips_n32n64_push_dummy_call);
6473 set_gdbarch_return_value (gdbarch, mips_n32n64_return_value);
6474 tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 8 - 1;
6475 tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 8 - 1;
6476 tdep->default_mask_address_p = 0;
6477 set_gdbarch_long_bit (gdbarch, 32);
6478 set_gdbarch_ptr_bit (gdbarch, 32);
6479 set_gdbarch_long_long_bit (gdbarch, 64);
6480 set_gdbarch_long_double_bit (gdbarch, 128);
6481 set_gdbarch_long_double_format (gdbarch, floatformats_ibm_long_double);
6482 break;
6483 case MIPS_ABI_N64:
6484 set_gdbarch_push_dummy_call (gdbarch, mips_n32n64_push_dummy_call);
6485 set_gdbarch_return_value (gdbarch, mips_n32n64_return_value);
6486 tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 8 - 1;
6487 tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 8 - 1;
6488 tdep->default_mask_address_p = 0;
6489 set_gdbarch_long_bit (gdbarch, 64);
6490 set_gdbarch_ptr_bit (gdbarch, 64);
6491 set_gdbarch_long_long_bit (gdbarch, 64);
6492 set_gdbarch_long_double_bit (gdbarch, 128);
6493 set_gdbarch_long_double_format (gdbarch, floatformats_ibm_long_double);
6494 break;
6495 default:
6496 internal_error (__FILE__, __LINE__, _("unknown ABI in switch"));
6497 }
6498
6499 /* GCC creates a pseudo-section whose name specifies the size of
6500 longs, since -mlong32 or -mlong64 may be used independent of
6501 other options. How those options affect pointer sizes is ABI and
6502 architecture dependent, so use them to override the default sizes
6503 set by the ABI. This table shows the relationship between ABI,
6504 -mlongXX, and size of pointers:
6505
6506 ABI -mlongXX ptr bits
6507 --- -------- --------
6508 o32 32 32
6509 o32 64 32
6510 n32 32 32
6511 n32 64 64
6512 o64 32 32
6513 o64 64 64
6514 n64 32 32
6515 n64 64 64
6516 eabi32 32 32
6517 eabi32 64 32
6518 eabi64 32 32
6519 eabi64 64 64
6520
6521 Note that for o32 and eabi32, pointers are always 32 bits
6522 regardless of any -mlongXX option. For all others, pointers and
6523 longs are the same, as set by -mlongXX or set by defaults. */
6524
6525 if (info.abfd != NULL)
6526 {
6527 int long_bit = 0;
6528
6529 bfd_map_over_sections (info.abfd, mips_find_long_section, &long_bit);
6530 if (long_bit)
6531 {
6532 set_gdbarch_long_bit (gdbarch, long_bit);
6533 switch (mips_abi)
6534 {
6535 case MIPS_ABI_O32:
6536 case MIPS_ABI_EABI32:
6537 break;
6538 case MIPS_ABI_N32:
6539 case MIPS_ABI_O64:
6540 case MIPS_ABI_N64:
6541 case MIPS_ABI_EABI64:
6542 set_gdbarch_ptr_bit (gdbarch, long_bit);
6543 break;
6544 default:
6545 internal_error (__FILE__, __LINE__, _("unknown ABI in switch"));
6546 }
6547 }
6548 }
6549
6550 /* FIXME: jlarmour/2000-04-07: There *is* a flag EF_MIPS_32BIT_MODE
6551 that could indicate -gp32 BUT gas/config/tc-mips.c contains the
6552 comment:
6553
6554 ``We deliberately don't allow "-gp32" to set the MIPS_32BITMODE
6555 flag in object files because to do so would make it impossible to
6556 link with libraries compiled without "-gp32". This is
6557 unnecessarily restrictive.
6558
6559 We could solve this problem by adding "-gp32" multilibs to gcc,
6560 but to set this flag before gcc is built with such multilibs will
6561 break too many systems.''
6562
6563 But even more unhelpfully, the default linker output target for
6564 mips64-elf is elf32-bigmips, and has EF_MIPS_32BIT_MODE set, even
6565 for 64-bit programs - you need to change the ABI to change this,
6566 and not all gcc targets support that currently. Therefore using
6567 this flag to detect 32-bit mode would do the wrong thing given
6568 the current gcc - it would make GDB treat these 64-bit programs
6569 as 32-bit programs by default. */
6570
6571 set_gdbarch_read_pc (gdbarch, mips_read_pc);
6572 set_gdbarch_write_pc (gdbarch, mips_write_pc);
6573
6574 /* Add/remove bits from an address. The MIPS needs be careful to
6575 ensure that all 32 bit addresses are sign extended to 64 bits. */
6576 set_gdbarch_addr_bits_remove (gdbarch, mips_addr_bits_remove);
6577
6578 /* Unwind the frame. */
6579 set_gdbarch_unwind_pc (gdbarch, mips_unwind_pc);
6580 set_gdbarch_unwind_sp (gdbarch, mips_unwind_sp);
6581 set_gdbarch_dummy_id (gdbarch, mips_dummy_id);
6582
6583 /* Map debug register numbers onto internal register numbers. */
6584 set_gdbarch_stab_reg_to_regnum (gdbarch, mips_stab_reg_to_regnum);
6585 set_gdbarch_ecoff_reg_to_regnum (gdbarch,
6586 mips_dwarf_dwarf2_ecoff_reg_to_regnum);
6587 set_gdbarch_dwarf2_reg_to_regnum (gdbarch,
6588 mips_dwarf_dwarf2_ecoff_reg_to_regnum);
6589 set_gdbarch_register_sim_regno (gdbarch, mips_register_sim_regno);
6590
6591 /* MIPS version of CALL_DUMMY. */
6592
6593 /* NOTE: cagney/2003-08-05: Eventually call dummy location will be
6594 replaced by a command, and all targets will default to on stack
6595 (regardless of the stack's execute status). */
6596 set_gdbarch_call_dummy_location (gdbarch, AT_SYMBOL);
6597 set_gdbarch_frame_align (gdbarch, mips_frame_align);
6598
6599 set_gdbarch_convert_register_p (gdbarch, mips_convert_register_p);
6600 set_gdbarch_register_to_value (gdbarch, mips_register_to_value);
6601 set_gdbarch_value_to_register (gdbarch, mips_value_to_register);
6602
6603 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
6604 set_gdbarch_breakpoint_from_pc (gdbarch, mips_breakpoint_from_pc);
6605 set_gdbarch_adjust_breakpoint_address (gdbarch,
6606 mips_adjust_breakpoint_address);
6607
6608 set_gdbarch_skip_prologue (gdbarch, mips_skip_prologue);
6609
6610 set_gdbarch_in_function_epilogue_p (gdbarch, mips_in_function_epilogue_p);
6611
6612 set_gdbarch_pointer_to_address (gdbarch, signed_pointer_to_address);
6613 set_gdbarch_address_to_pointer (gdbarch, address_to_signed_pointer);
6614 set_gdbarch_integer_to_address (gdbarch, mips_integer_to_address);
6615
6616 set_gdbarch_register_type (gdbarch, mips_register_type);
6617
6618 set_gdbarch_print_registers_info (gdbarch, mips_print_registers_info);
6619
6620 if (mips_abi == MIPS_ABI_N32)
6621 set_gdbarch_print_insn (gdbarch, gdb_print_insn_mips_n32);
6622 else if (mips_abi == MIPS_ABI_N64)
6623 set_gdbarch_print_insn (gdbarch, gdb_print_insn_mips_n64);
6624 else
6625 set_gdbarch_print_insn (gdbarch, gdb_print_insn_mips);
6626
6627 /* FIXME: cagney/2003-08-29: The macros target_have_steppable_watchpoint,
6628 HAVE_NONSTEPPABLE_WATCHPOINT, and target_have_continuable_watchpoint
6629 need to all be folded into the target vector. Since they are
6630 being used as guards for target_stopped_by_watchpoint, why not have
6631 target_stopped_by_watchpoint return the type of watchpoint that the code
6632 is sitting on? */
6633 set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
6634
6635 set_gdbarch_skip_trampoline_code (gdbarch, mips_skip_trampoline_code);
6636
6637 set_gdbarch_single_step_through_delay (gdbarch,
6638 mips_single_step_through_delay);
6639
6640 /* Virtual tables. */
6641 set_gdbarch_vbit_in_delta (gdbarch, 1);
6642
6643 mips_register_g_packet_guesses (gdbarch);
6644
6645 /* Hook in OS ABI-specific overrides, if they have been registered. */
6646 info.tdep_info = (void *) tdesc_data;
6647 gdbarch_init_osabi (info, gdbarch);
6648
6649 /* The hook may have adjusted num_regs, fetch the final value and
6650 set pc_regnum and sp_regnum now that it has been fixed. */
6651 /* FIXME: cagney/2003-11-15: For MIPS, hasn't gdbarch_pc_regnum been
6652 replaced by gdbarch_read_pc? */
6653 num_regs = gdbarch_num_regs (gdbarch);
6654 set_gdbarch_pc_regnum (gdbarch, regnum->pc + num_regs);
6655 set_gdbarch_sp_regnum (gdbarch, MIPS_SP_REGNUM + num_regs);
6656
6657 /* Unwind the frame. */
6658 dwarf2_append_unwinders (gdbarch);
6659 frame_unwind_append_unwinder (gdbarch, &mips_stub_frame_unwind);
6660 frame_unwind_append_unwinder (gdbarch, &mips_insn16_frame_unwind);
6661 frame_unwind_append_unwinder (gdbarch, &mips_insn32_frame_unwind);
6662 frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
6663 frame_base_append_sniffer (gdbarch, mips_stub_frame_base_sniffer);
6664 frame_base_append_sniffer (gdbarch, mips_insn16_frame_base_sniffer);
6665 frame_base_append_sniffer (gdbarch, mips_insn32_frame_base_sniffer);
6666
6667 if (tdesc_data)
6668 {
6669 set_tdesc_pseudo_register_type (gdbarch, mips_pseudo_register_type);
6670 tdesc_use_registers (gdbarch, info.target_desc, tdesc_data);
6671
6672 /* Override the normal target description methods to handle our
6673 dual real and pseudo registers. */
6674 set_gdbarch_register_name (gdbarch, mips_register_name);
6675 set_gdbarch_register_reggroup_p (gdbarch,
6676 mips_tdesc_register_reggroup_p);
6677
6678 num_regs = gdbarch_num_regs (gdbarch);
6679 set_gdbarch_num_pseudo_regs (gdbarch, num_regs);
6680 set_gdbarch_pc_regnum (gdbarch, tdep->regnum->pc + num_regs);
6681 set_gdbarch_sp_regnum (gdbarch, MIPS_SP_REGNUM + num_regs);
6682 }
6683
6684 /* Add ABI-specific aliases for the registers. */
6685 if (mips_abi == MIPS_ABI_N32 || mips_abi == MIPS_ABI_N64)
6686 for (i = 0; i < ARRAY_SIZE (mips_n32_n64_aliases); i++)
6687 user_reg_add (gdbarch, mips_n32_n64_aliases[i].name,
6688 value_of_mips_user_reg, &mips_n32_n64_aliases[i].regnum);
6689 else
6690 for (i = 0; i < ARRAY_SIZE (mips_o32_aliases); i++)
6691 user_reg_add (gdbarch, mips_o32_aliases[i].name,
6692 value_of_mips_user_reg, &mips_o32_aliases[i].regnum);
6693
6694 /* Add some other standard aliases. */
6695 for (i = 0; i < ARRAY_SIZE (mips_register_aliases); i++)
6696 user_reg_add (gdbarch, mips_register_aliases[i].name,
6697 value_of_mips_user_reg, &mips_register_aliases[i].regnum);
6698
6699 for (i = 0; i < ARRAY_SIZE (mips_numeric_register_aliases); i++)
6700 user_reg_add (gdbarch, mips_numeric_register_aliases[i].name,
6701 value_of_mips_user_reg,
6702 &mips_numeric_register_aliases[i].regnum);
6703
6704 return gdbarch;
6705 }
6706
6707 static void
6708 mips_abi_update (char *ignore_args, int from_tty, struct cmd_list_element *c)
6709 {
6710 struct gdbarch_info info;
6711
6712 /* Force the architecture to update, and (if it's a MIPS architecture)
6713 mips_gdbarch_init will take care of the rest. */
6714 gdbarch_info_init (&info);
6715 gdbarch_update_p (info);
6716 }
6717
6718 /* Print out which MIPS ABI is in use. */
6719
6720 static void
6721 show_mips_abi (struct ui_file *file,
6722 int from_tty,
6723 struct cmd_list_element *ignored_cmd,
6724 const char *ignored_value)
6725 {
6726 if (gdbarch_bfd_arch_info (target_gdbarch)->arch != bfd_arch_mips)
6727 fprintf_filtered
6728 (file,
6729 "The MIPS ABI is unknown because the current architecture "
6730 "is not MIPS.\n");
6731 else
6732 {
6733 enum mips_abi global_abi = global_mips_abi ();
6734 enum mips_abi actual_abi = mips_abi (target_gdbarch);
6735 const char *actual_abi_str = mips_abi_strings[actual_abi];
6736
6737 if (global_abi == MIPS_ABI_UNKNOWN)
6738 fprintf_filtered
6739 (file,
6740 "The MIPS ABI is set automatically (currently \"%s\").\n",
6741 actual_abi_str);
6742 else if (global_abi == actual_abi)
6743 fprintf_filtered
6744 (file,
6745 "The MIPS ABI is assumed to be \"%s\" (due to user setting).\n",
6746 actual_abi_str);
6747 else
6748 {
6749 /* Probably shouldn't happen... */
6750 fprintf_filtered (file,
6751 "The (auto detected) MIPS ABI \"%s\" is in use "
6752 "even though the user setting was \"%s\".\n",
6753 actual_abi_str, mips_abi_strings[global_abi]);
6754 }
6755 }
6756 }
6757
6758 static void
6759 mips_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
6760 {
6761 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
6762 if (tdep != NULL)
6763 {
6764 int ef_mips_arch;
6765 int ef_mips_32bitmode;
6766 /* Determine the ISA. */
6767 switch (tdep->elf_flags & EF_MIPS_ARCH)
6768 {
6769 case E_MIPS_ARCH_1:
6770 ef_mips_arch = 1;
6771 break;
6772 case E_MIPS_ARCH_2:
6773 ef_mips_arch = 2;
6774 break;
6775 case E_MIPS_ARCH_3:
6776 ef_mips_arch = 3;
6777 break;
6778 case E_MIPS_ARCH_4:
6779 ef_mips_arch = 4;
6780 break;
6781 default:
6782 ef_mips_arch = 0;
6783 break;
6784 }
6785 /* Determine the size of a pointer. */
6786 ef_mips_32bitmode = (tdep->elf_flags & EF_MIPS_32BITMODE);
6787 fprintf_unfiltered (file,
6788 "mips_dump_tdep: tdep->elf_flags = 0x%x\n",
6789 tdep->elf_flags);
6790 fprintf_unfiltered (file,
6791 "mips_dump_tdep: ef_mips_32bitmode = %d\n",
6792 ef_mips_32bitmode);
6793 fprintf_unfiltered (file,
6794 "mips_dump_tdep: ef_mips_arch = %d\n",
6795 ef_mips_arch);
6796 fprintf_unfiltered (file,
6797 "mips_dump_tdep: tdep->mips_abi = %d (%s)\n",
6798 tdep->mips_abi, mips_abi_strings[tdep->mips_abi]);
6799 fprintf_unfiltered (file,
6800 "mips_dump_tdep: "
6801 "mips_mask_address_p() %d (default %d)\n",
6802 mips_mask_address_p (tdep),
6803 tdep->default_mask_address_p);
6804 }
6805 fprintf_unfiltered (file,
6806 "mips_dump_tdep: MIPS_DEFAULT_FPU_TYPE = %d (%s)\n",
6807 MIPS_DEFAULT_FPU_TYPE,
6808 (MIPS_DEFAULT_FPU_TYPE == MIPS_FPU_NONE ? "none"
6809 : MIPS_DEFAULT_FPU_TYPE == MIPS_FPU_SINGLE ? "single"
6810 : MIPS_DEFAULT_FPU_TYPE == MIPS_FPU_DOUBLE ? "double"
6811 : "???"));
6812 fprintf_unfiltered (file, "mips_dump_tdep: MIPS_EABI = %d\n",
6813 MIPS_EABI (gdbarch));
6814 fprintf_unfiltered (file,
6815 "mips_dump_tdep: MIPS_FPU_TYPE = %d (%s)\n",
6816 MIPS_FPU_TYPE (gdbarch),
6817 (MIPS_FPU_TYPE (gdbarch) == MIPS_FPU_NONE ? "none"
6818 : MIPS_FPU_TYPE (gdbarch) == MIPS_FPU_SINGLE ? "single"
6819 : MIPS_FPU_TYPE (gdbarch) == MIPS_FPU_DOUBLE ? "double"
6820 : "???"));
6821 }
6822
6823 extern initialize_file_ftype _initialize_mips_tdep; /* -Wmissing-prototypes */
6824
6825 void
6826 _initialize_mips_tdep (void)
6827 {
6828 static struct cmd_list_element *mipsfpulist = NULL;
6829 struct cmd_list_element *c;
6830
6831 mips_abi_string = mips_abi_strings[MIPS_ABI_UNKNOWN];
6832 if (MIPS_ABI_LAST + 1
6833 != sizeof (mips_abi_strings) / sizeof (mips_abi_strings[0]))
6834 internal_error (__FILE__, __LINE__, _("mips_abi_strings out of sync"));
6835
6836 gdbarch_register (bfd_arch_mips, mips_gdbarch_init, mips_dump_tdep);
6837
6838 mips_pdr_data = register_objfile_data ();
6839
6840 /* Create feature sets with the appropriate properties. The values
6841 are not important. */
6842 mips_tdesc_gp32 = allocate_target_description ();
6843 set_tdesc_property (mips_tdesc_gp32, PROPERTY_GP32, "");
6844
6845 mips_tdesc_gp64 = allocate_target_description ();
6846 set_tdesc_property (mips_tdesc_gp64, PROPERTY_GP64, "");
6847
6848 /* Add root prefix command for all "set mips"/"show mips" commands. */
6849 add_prefix_cmd ("mips", no_class, set_mips_command,
6850 _("Various MIPS specific commands."),
6851 &setmipscmdlist, "set mips ", 0, &setlist);
6852
6853 add_prefix_cmd ("mips", no_class, show_mips_command,
6854 _("Various MIPS specific commands."),
6855 &showmipscmdlist, "show mips ", 0, &showlist);
6856
6857 /* Allow the user to override the ABI. */
6858 add_setshow_enum_cmd ("abi", class_obscure, mips_abi_strings,
6859 &mips_abi_string, _("\
6860 Set the MIPS ABI used by this program."), _("\
6861 Show the MIPS ABI used by this program."), _("\
6862 This option can be set to one of:\n\
6863 auto - the default ABI associated with the current binary\n\
6864 o32\n\
6865 o64\n\
6866 n32\n\
6867 n64\n\
6868 eabi32\n\
6869 eabi64"),
6870 mips_abi_update,
6871 show_mips_abi,
6872 &setmipscmdlist, &showmipscmdlist);
6873
6874 /* Let the user turn off floating point and set the fence post for
6875 heuristic_proc_start. */
6876
6877 add_prefix_cmd ("mipsfpu", class_support, set_mipsfpu_command,
6878 _("Set use of MIPS floating-point coprocessor."),
6879 &mipsfpulist, "set mipsfpu ", 0, &setlist);
6880 add_cmd ("single", class_support, set_mipsfpu_single_command,
6881 _("Select single-precision MIPS floating-point coprocessor."),
6882 &mipsfpulist);
6883 add_cmd ("double", class_support, set_mipsfpu_double_command,
6884 _("Select double-precision MIPS floating-point coprocessor."),
6885 &mipsfpulist);
6886 add_alias_cmd ("on", "double", class_support, 1, &mipsfpulist);
6887 add_alias_cmd ("yes", "double", class_support, 1, &mipsfpulist);
6888 add_alias_cmd ("1", "double", class_support, 1, &mipsfpulist);
6889 add_cmd ("none", class_support, set_mipsfpu_none_command,
6890 _("Select no MIPS floating-point coprocessor."), &mipsfpulist);
6891 add_alias_cmd ("off", "none", class_support, 1, &mipsfpulist);
6892 add_alias_cmd ("no", "none", class_support, 1, &mipsfpulist);
6893 add_alias_cmd ("0", "none", class_support, 1, &mipsfpulist);
6894 add_cmd ("auto", class_support, set_mipsfpu_auto_command,
6895 _("Select MIPS floating-point coprocessor automatically."),
6896 &mipsfpulist);
6897 add_cmd ("mipsfpu", class_support, show_mipsfpu_command,
6898 _("Show current use of MIPS floating-point coprocessor target."),
6899 &showlist);
6900
6901 /* We really would like to have both "0" and "unlimited" work, but
6902 command.c doesn't deal with that. So make it a var_zinteger
6903 because the user can always use "999999" or some such for unlimited. */
6904 add_setshow_zinteger_cmd ("heuristic-fence-post", class_support,
6905 &heuristic_fence_post, _("\
6906 Set the distance searched for the start of a function."), _("\
6907 Show the distance searched for the start of a function."), _("\
6908 If you are debugging a stripped executable, GDB needs to search through the\n\
6909 program for the start of a function. This command sets the distance of the\n\
6910 search. The only need to set it is when debugging a stripped executable."),
6911 reinit_frame_cache_sfunc,
6912 NULL, /* FIXME: i18n: The distance searched for
6913 the start of a function is %s. */
6914 &setlist, &showlist);
6915
6916 /* Allow the user to control whether the upper bits of 64-bit
6917 addresses should be zeroed. */
6918 add_setshow_auto_boolean_cmd ("mask-address", no_class,
6919 &mask_address_var, _("\
6920 Set zeroing of upper 32 bits of 64-bit addresses."), _("\
6921 Show zeroing of upper 32 bits of 64-bit addresses."), _("\
6922 Use \"on\" to enable the masking, \"off\" to disable it and \"auto\" to\n\
6923 allow GDB to determine the correct value."),
6924 NULL, show_mask_address,
6925 &setmipscmdlist, &showmipscmdlist);
6926
6927 /* Allow the user to control the size of 32 bit registers within the
6928 raw remote packet. */
6929 add_setshow_boolean_cmd ("remote-mips64-transfers-32bit-regs", class_obscure,
6930 &mips64_transfers_32bit_regs_p, _("\
6931 Set compatibility with 64-bit MIPS target that transfers 32-bit quantities."),
6932 _("\
6933 Show compatibility with 64-bit MIPS target that transfers 32-bit quantities."),
6934 _("\
6935 Use \"on\" to enable backward compatibility with older MIPS 64 GDB+target\n\
6936 that would transfer 32 bits for some registers (e.g. SR, FSR) and\n\
6937 64 bits for others. Use \"off\" to disable compatibility mode"),
6938 set_mips64_transfers_32bit_regs,
6939 NULL, /* FIXME: i18n: Compatibility with 64-bit
6940 MIPS target that transfers 32-bit
6941 quantities is %s. */
6942 &setlist, &showlist);
6943
6944 /* Debug this files internals. */
6945 add_setshow_zinteger_cmd ("mips", class_maintenance,
6946 &mips_debug, _("\
6947 Set mips debugging."), _("\
6948 Show mips debugging."), _("\
6949 When non-zero, mips specific debugging is enabled."),
6950 NULL,
6951 NULL, /* FIXME: i18n: Mips debugging is
6952 currently %s. */
6953 &setdebuglist, &showdebuglist);
6954 }
This page took 0.176713 seconds and 4 git commands to generate.