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