2008-06-03 Michael Snyder <msnyder@redhat.com>
[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
b8a22b94 890/* Assuming THIS_FRAME is a dummy, return the frame ID of that
edfae063
AC
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
b8a22b94 896mips_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
edfae063 897{
f57d151a 898 return frame_id_build
b8a22b94
DJ
899 (get_frame_register_signed (this_frame,
900 gdbarch_num_regs (gdbarch)
901 + MIPS_SP_REGNUM),
902 get_frame_pc (this_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;
8defab1a 929 status = target_read_memory (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,
b8a22b94 1491 struct frame_info *this_frame,
29639122
JB
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;
b8a22b94 1509 struct gdbarch *gdbarch = get_frame_arch (this_frame);
a343eb3c 1510
29639122 1511 /* Can be called when there's no process, and hence when there's no
b8a22b94
DJ
1512 THIS_FRAME. */
1513 if (this_frame != NULL)
1514 sp = get_frame_register_signed (this_frame,
1515 gdbarch_num_regs (gdbarch)
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 =
b8a22b94
DJ
1769 (get_frame_register_signed (this_frame,
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 *
b8a22b94 1794mips_insn16_frame_cache (struct frame_info *this_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;
b8a22b94 1802 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
eec63939 1803
29639122
JB
1804 /* Analyze the function prologue. */
1805 {
b8a22b94 1806 const CORE_ADDR pc = get_frame_address_in_block (this_frame);
29639122 1807 CORE_ADDR start_addr;
eec63939 1808
29639122
JB
1809 find_pc_partial_function (pc, NULL, &start_addr, NULL);
1810 if (start_addr == 0)
1811 start_addr = heuristic_proc_start (pc);
1812 /* We can't analyze the prologue if we couldn't find the begining
1813 of the function. */
1814 if (start_addr == 0)
1815 return cache;
eec63939 1816
b8a22b94 1817 mips16_scan_prologue (start_addr, pc, this_frame, *this_cache);
29639122
JB
1818 }
1819
3e8c568d 1820 /* gdbarch_sp_regnum contains the value and not the address. */
72a155b4 1821 trad_frame_set_value (cache->saved_regs,
b8a22b94
DJ
1822 gdbarch_num_regs (get_frame_arch (this_frame))
1823 + MIPS_SP_REGNUM,
72a155b4 1824 cache->base);
eec63939 1825
29639122 1826 return (*this_cache);
eec63939
AC
1827}
1828
1829static void
b8a22b94 1830mips_insn16_frame_this_id (struct frame_info *this_frame, void **this_cache,
29639122 1831 struct frame_id *this_id)
eec63939 1832{
b8a22b94 1833 struct mips_frame_cache *info = mips_insn16_frame_cache (this_frame,
29639122 1834 this_cache);
b8a22b94 1835 (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
eec63939
AC
1836}
1837
b8a22b94
DJ
1838static struct value *
1839mips_insn16_frame_prev_register (struct frame_info *this_frame,
1840 void **this_cache, int regnum)
eec63939 1841{
b8a22b94 1842 struct mips_frame_cache *info = mips_insn16_frame_cache (this_frame,
29639122 1843 this_cache);
b8a22b94
DJ
1844 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
1845}
1846
1847static int
1848mips_insn16_frame_sniffer (const struct frame_unwind *self,
1849 struct frame_info *this_frame, void **this_cache)
1850{
1851 CORE_ADDR pc = get_frame_pc (this_frame);
1852 if (mips_pc_is_mips16 (pc))
1853 return 1;
1854 return 0;
eec63939
AC
1855}
1856
29639122 1857static const struct frame_unwind mips_insn16_frame_unwind =
eec63939
AC
1858{
1859 NORMAL_FRAME,
29639122 1860 mips_insn16_frame_this_id,
b8a22b94
DJ
1861 mips_insn16_frame_prev_register,
1862 NULL,
1863 mips_insn16_frame_sniffer
eec63939
AC
1864};
1865
eec63939 1866static CORE_ADDR
b8a22b94 1867mips_insn16_frame_base_address (struct frame_info *this_frame,
29639122 1868 void **this_cache)
eec63939 1869{
b8a22b94 1870 struct mips_frame_cache *info = mips_insn16_frame_cache (this_frame,
29639122
JB
1871 this_cache);
1872 return info->base;
eec63939
AC
1873}
1874
29639122 1875static const struct frame_base mips_insn16_frame_base =
eec63939 1876{
29639122
JB
1877 &mips_insn16_frame_unwind,
1878 mips_insn16_frame_base_address,
1879 mips_insn16_frame_base_address,
1880 mips_insn16_frame_base_address
eec63939
AC
1881};
1882
1883static const struct frame_base *
b8a22b94 1884mips_insn16_frame_base_sniffer (struct frame_info *this_frame)
eec63939 1885{
b8a22b94
DJ
1886 CORE_ADDR pc = get_frame_pc (this_frame);
1887 if (mips_pc_is_mips16 (pc))
29639122 1888 return &mips_insn16_frame_base;
eec63939
AC
1889 else
1890 return NULL;
edfae063
AC
1891}
1892
29639122
JB
1893/* Mark all the registers as unset in the saved_regs array
1894 of THIS_CACHE. Do nothing if THIS_CACHE is null. */
1895
1896void
1897reset_saved_regs (struct mips_frame_cache *this_cache)
c906108c 1898{
29639122
JB
1899 if (this_cache == NULL || this_cache->saved_regs == NULL)
1900 return;
1901
1902 {
f57d151a 1903 const int num_regs = gdbarch_num_regs (current_gdbarch);
29639122 1904 int i;
64159455 1905
29639122
JB
1906 for (i = 0; i < num_regs; i++)
1907 {
1908 this_cache->saved_regs[i].addr = -1;
1909 }
1910 }
c906108c
SS
1911}
1912
29639122
JB
1913/* Analyze the function prologue from START_PC to LIMIT_PC. Builds
1914 the associated FRAME_CACHE if not null.
1915 Return the address of the first instruction past the prologue. */
c906108c 1916
875e1767 1917static CORE_ADDR
29639122 1918mips32_scan_prologue (CORE_ADDR start_pc, CORE_ADDR limit_pc,
b8a22b94 1919 struct frame_info *this_frame,
29639122 1920 struct mips_frame_cache *this_cache)
c906108c 1921{
29639122
JB
1922 CORE_ADDR cur_pc;
1923 CORE_ADDR frame_addr = 0; /* Value of $r30. Used by gcc for frame-pointer */
1924 CORE_ADDR sp;
1925 long frame_offset;
1926 int frame_reg = MIPS_SP_REGNUM;
8fa9cfa1 1927
29639122
JB
1928 CORE_ADDR end_prologue_addr = 0;
1929 int seen_sp_adjust = 0;
1930 int load_immediate_bytes = 0;
b8a22b94 1931 struct gdbarch *gdbarch = get_frame_arch (this_frame);
7d1e6fb8 1932 int regsize_is_64_bits = (mips_abi_regsize (gdbarch) == 8);
8fa9cfa1 1933
29639122 1934 /* Can be called when there's no process, and hence when there's no
b8a22b94
DJ
1935 THIS_FRAME. */
1936 if (this_frame != NULL)
1937 sp = get_frame_register_signed (this_frame,
1938 gdbarch_num_regs (gdbarch)
1939 + MIPS_SP_REGNUM);
8fa9cfa1 1940 else
29639122 1941 sp = 0;
9022177c 1942
29639122
JB
1943 if (limit_pc > start_pc + 200)
1944 limit_pc = start_pc + 200;
9022177c 1945
29639122 1946restart:
9022177c 1947
29639122 1948 frame_offset = 0;
95ac2dcf 1949 for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS_INSN32_SIZE)
9022177c 1950 {
29639122
JB
1951 unsigned long inst, high_word, low_word;
1952 int reg;
9022177c 1953
29639122
JB
1954 /* Fetch the instruction. */
1955 inst = (unsigned long) mips_fetch_instruction (cur_pc);
9022177c 1956
29639122
JB
1957 /* Save some code by pre-extracting some useful fields. */
1958 high_word = (inst >> 16) & 0xffff;
1959 low_word = inst & 0xffff;
1960 reg = high_word & 0x1f;
fe29b929 1961
29639122
JB
1962 if (high_word == 0x27bd /* addiu $sp,$sp,-i */
1963 || high_word == 0x23bd /* addi $sp,$sp,-i */
1964 || high_word == 0x67bd) /* daddiu $sp,$sp,-i */
1965 {
1966 if (low_word & 0x8000) /* negative stack adjustment? */
1967 frame_offset += 0x10000 - low_word;
1968 else
1969 /* Exit loop if a positive stack adjustment is found, which
1970 usually means that the stack cleanup code in the function
1971 epilogue is reached. */
1972 break;
1973 seen_sp_adjust = 1;
1974 }
7d1e6fb8
KB
1975 else if (((high_word & 0xFFE0) == 0xafa0) /* sw reg,offset($sp) */
1976 && !regsize_is_64_bits)
29639122
JB
1977 {
1978 set_reg_offset (this_cache, reg, sp + low_word);
1979 }
7d1e6fb8
KB
1980 else if (((high_word & 0xFFE0) == 0xffa0) /* sd reg,offset($sp) */
1981 && regsize_is_64_bits)
29639122
JB
1982 {
1983 /* Irix 6.2 N32 ABI uses sd instructions for saving $gp and $ra. */
1984 set_reg_offset (this_cache, reg, sp + low_word);
1985 }
1986 else if (high_word == 0x27be) /* addiu $30,$sp,size */
1987 {
1988 /* Old gcc frame, r30 is virtual frame pointer. */
1989 if ((long) low_word != frame_offset)
1990 frame_addr = sp + low_word;
b8a22b94 1991 else if (this_frame && frame_reg == MIPS_SP_REGNUM)
29639122
JB
1992 {
1993 unsigned alloca_adjust;
a4b8ebc8 1994
29639122 1995 frame_reg = 30;
b8a22b94
DJ
1996 frame_addr = get_frame_register_signed
1997 (this_frame, gdbarch_num_regs (gdbarch) + 30);
d2ca4222 1998
29639122
JB
1999 alloca_adjust = (unsigned) (frame_addr - (sp + low_word));
2000 if (alloca_adjust > 0)
2001 {
2002 /* FP > SP + frame_size. This may be because of
2003 an alloca or somethings similar. Fix sp to
2004 "pre-alloca" value, and try again. */
2005 sp += alloca_adjust;
2006 /* Need to reset the status of all registers. Otherwise,
2007 we will hit a guard that prevents the new address
2008 for each register to be recomputed during the second
2009 pass. */
2010 reset_saved_regs (this_cache);
2011 goto restart;
2012 }
2013 }
2014 }
2015 /* move $30,$sp. With different versions of gas this will be either
2016 `addu $30,$sp,$zero' or `or $30,$sp,$zero' or `daddu 30,sp,$0'.
2017 Accept any one of these. */
2018 else if (inst == 0x03A0F021 || inst == 0x03a0f025 || inst == 0x03a0f02d)
2019 {
2020 /* New gcc frame, virtual frame pointer is at r30 + frame_size. */
b8a22b94 2021 if (this_frame && frame_reg == MIPS_SP_REGNUM)
29639122
JB
2022 {
2023 unsigned alloca_adjust;
c906108c 2024
29639122 2025 frame_reg = 30;
b8a22b94
DJ
2026 frame_addr = get_frame_register_signed
2027 (this_frame, gdbarch_num_regs (gdbarch) + 30);
d2ca4222 2028
29639122
JB
2029 alloca_adjust = (unsigned) (frame_addr - sp);
2030 if (alloca_adjust > 0)
2031 {
2032 /* FP > SP + frame_size. This may be because of
2033 an alloca or somethings similar. Fix sp to
2034 "pre-alloca" value, and try again. */
2035 sp = frame_addr;
2036 /* Need to reset the status of all registers. Otherwise,
2037 we will hit a guard that prevents the new address
2038 for each register to be recomputed during the second
2039 pass. */
2040 reset_saved_regs (this_cache);
2041 goto restart;
2042 }
2043 }
2044 }
7d1e6fb8
KB
2045 else if ((high_word & 0xFFE0) == 0xafc0 /* sw reg,offset($30) */
2046 && !regsize_is_64_bits)
29639122
JB
2047 {
2048 set_reg_offset (this_cache, reg, frame_addr + low_word);
2049 }
2050 else if ((high_word & 0xFFE0) == 0xE7A0 /* swc1 freg,n($sp) */
2051 || (high_word & 0xF3E0) == 0xA3C0 /* sx reg,n($s8) */
2052 || (inst & 0xFF9F07FF) == 0x00800021 /* move reg,$a0-$a3 */
2053 || high_word == 0x3c1c /* lui $gp,n */
2054 || high_word == 0x279c /* addiu $gp,$gp,n */
2055 || inst == 0x0399e021 /* addu $gp,$gp,$t9 */
2056 || inst == 0x033ce021 /* addu $gp,$t9,$gp */
2057 )
2058 {
2059 /* These instructions are part of the prologue, but we don't
2060 need to do anything special to handle them. */
2061 }
2062 /* The instructions below load $at or $t0 with an immediate
2063 value in preparation for a stack adjustment via
2064 subu $sp,$sp,[$at,$t0]. These instructions could also
2065 initialize a local variable, so we accept them only before
2066 a stack adjustment instruction was seen. */
2067 else if (!seen_sp_adjust
2068 && (high_word == 0x3c01 /* lui $at,n */
2069 || high_word == 0x3c08 /* lui $t0,n */
2070 || high_word == 0x3421 /* ori $at,$at,n */
2071 || high_word == 0x3508 /* ori $t0,$t0,n */
2072 || high_word == 0x3401 /* ori $at,$zero,n */
2073 || high_word == 0x3408 /* ori $t0,$zero,n */
2074 ))
2075 {
95ac2dcf 2076 load_immediate_bytes += MIPS_INSN32_SIZE; /* FIXME! */
29639122
JB
2077 }
2078 else
2079 {
2080 /* This instruction is not an instruction typically found
2081 in a prologue, so we must have reached the end of the
2082 prologue. */
2083 /* FIXME: brobecker/2004-10-10: Can't we just break out of this
2084 loop now? Why would we need to continue scanning the function
2085 instructions? */
2086 if (end_prologue_addr == 0)
2087 end_prologue_addr = cur_pc;
2088 }
a4b8ebc8 2089 }
c906108c 2090
29639122
JB
2091 if (this_cache != NULL)
2092 {
2093 this_cache->base =
b8a22b94
DJ
2094 (get_frame_register_signed (this_frame,
2095 gdbarch_num_regs (gdbarch) + frame_reg)
29639122
JB
2096 + frame_offset);
2097 /* FIXME: brobecker/2004-09-15: We should be able to get rid of
2098 this assignment below, eventually. But it's still needed
2099 for now. */
72a155b4
UW
2100 this_cache->saved_regs[gdbarch_num_regs (gdbarch)
2101 + mips_regnum (gdbarch)->pc]
2102 = this_cache->saved_regs[gdbarch_num_regs (gdbarch)
f57d151a 2103 + MIPS_RA_REGNUM];
29639122 2104 }
c906108c 2105
29639122
JB
2106 /* If we didn't reach the end of the prologue when scanning the function
2107 instructions, then set end_prologue_addr to the address of the
2108 instruction immediately after the last one we scanned. */
2109 /* brobecker/2004-10-10: I don't think this would ever happen, but
2110 we may as well be careful and do our best if we have a null
2111 end_prologue_addr. */
2112 if (end_prologue_addr == 0)
2113 end_prologue_addr = cur_pc;
2114
2115 /* In a frameless function, we might have incorrectly
2116 skipped some load immediate instructions. Undo the skipping
2117 if the load immediate was not followed by a stack adjustment. */
2118 if (load_immediate_bytes && !seen_sp_adjust)
2119 end_prologue_addr -= load_immediate_bytes;
c906108c 2120
29639122 2121 return end_prologue_addr;
c906108c
SS
2122}
2123
29639122
JB
2124/* Heuristic unwinder for procedures using 32-bit instructions (covers
2125 both 32-bit and 64-bit MIPS ISAs). Procedures using 16-bit
2126 instructions (a.k.a. MIPS16) are handled by the mips_insn16
2127 unwinder. */
c906108c 2128
29639122 2129static struct mips_frame_cache *
b8a22b94 2130mips_insn32_frame_cache (struct frame_info *this_frame, void **this_cache)
c906108c 2131{
29639122 2132 struct mips_frame_cache *cache;
c906108c 2133
29639122
JB
2134 if ((*this_cache) != NULL)
2135 return (*this_cache);
c5aa993b 2136
29639122
JB
2137 cache = FRAME_OBSTACK_ZALLOC (struct mips_frame_cache);
2138 (*this_cache) = cache;
b8a22b94 2139 cache->saved_regs = trad_frame_alloc_saved_regs (this_frame);
c5aa993b 2140
29639122
JB
2141 /* Analyze the function prologue. */
2142 {
b8a22b94 2143 const CORE_ADDR pc = get_frame_address_in_block (this_frame);
29639122 2144 CORE_ADDR start_addr;
c906108c 2145
29639122
JB
2146 find_pc_partial_function (pc, NULL, &start_addr, NULL);
2147 if (start_addr == 0)
2148 start_addr = heuristic_proc_start (pc);
2149 /* We can't analyze the prologue if we couldn't find the begining
2150 of the function. */
2151 if (start_addr == 0)
2152 return cache;
c5aa993b 2153
b8a22b94 2154 mips32_scan_prologue (start_addr, pc, this_frame, *this_cache);
29639122
JB
2155 }
2156
3e8c568d 2157 /* gdbarch_sp_regnum contains the value and not the address. */
f57d151a 2158 trad_frame_set_value (cache->saved_regs,
b8a22b94
DJ
2159 gdbarch_num_regs (get_frame_arch (this_frame))
2160 + MIPS_SP_REGNUM,
f57d151a 2161 cache->base);
c5aa993b 2162
29639122 2163 return (*this_cache);
c906108c
SS
2164}
2165
29639122 2166static void
b8a22b94 2167mips_insn32_frame_this_id (struct frame_info *this_frame, void **this_cache,
29639122 2168 struct frame_id *this_id)
c906108c 2169{
b8a22b94 2170 struct mips_frame_cache *info = mips_insn32_frame_cache (this_frame,
29639122 2171 this_cache);
b8a22b94 2172 (*this_id) = frame_id_build (info->base, get_frame_func (this_frame));
29639122 2173}
c906108c 2174
b8a22b94
DJ
2175static struct value *
2176mips_insn32_frame_prev_register (struct frame_info *this_frame,
2177 void **this_cache, int regnum)
29639122 2178{
b8a22b94 2179 struct mips_frame_cache *info = mips_insn32_frame_cache (this_frame,
29639122 2180 this_cache);
b8a22b94
DJ
2181 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
2182}
2183
2184static int
2185mips_insn32_frame_sniffer (const struct frame_unwind *self,
2186 struct frame_info *this_frame, void **this_cache)
2187{
2188 CORE_ADDR pc = get_frame_pc (this_frame);
2189 if (! mips_pc_is_mips16 (pc))
2190 return 1;
2191 return 0;
c906108c
SS
2192}
2193
29639122
JB
2194static const struct frame_unwind mips_insn32_frame_unwind =
2195{
2196 NORMAL_FRAME,
2197 mips_insn32_frame_this_id,
b8a22b94
DJ
2198 mips_insn32_frame_prev_register,
2199 NULL,
2200 mips_insn32_frame_sniffer
29639122 2201};
c906108c 2202
1c645fec 2203static CORE_ADDR
b8a22b94 2204mips_insn32_frame_base_address (struct frame_info *this_frame,
29639122 2205 void **this_cache)
c906108c 2206{
b8a22b94 2207 struct mips_frame_cache *info = mips_insn32_frame_cache (this_frame,
29639122
JB
2208 this_cache);
2209 return info->base;
2210}
c906108c 2211
29639122
JB
2212static const struct frame_base mips_insn32_frame_base =
2213{
2214 &mips_insn32_frame_unwind,
2215 mips_insn32_frame_base_address,
2216 mips_insn32_frame_base_address,
2217 mips_insn32_frame_base_address
2218};
1c645fec 2219
29639122 2220static const struct frame_base *
b8a22b94 2221mips_insn32_frame_base_sniffer (struct frame_info *this_frame)
29639122 2222{
b8a22b94
DJ
2223 CORE_ADDR pc = get_frame_pc (this_frame);
2224 if (! mips_pc_is_mips16 (pc))
29639122 2225 return &mips_insn32_frame_base;
a65bbe44 2226 else
29639122
JB
2227 return NULL;
2228}
a65bbe44 2229
29639122 2230static struct trad_frame_cache *
b8a22b94 2231mips_stub_frame_cache (struct frame_info *this_frame, void **this_cache)
29639122
JB
2232{
2233 CORE_ADDR pc;
2234 CORE_ADDR start_addr;
2235 CORE_ADDR stack_addr;
2236 struct trad_frame_cache *this_trad_cache;
b8a22b94
DJ
2237 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2238 int num_regs = gdbarch_num_regs (gdbarch);
c906108c 2239
29639122
JB
2240 if ((*this_cache) != NULL)
2241 return (*this_cache);
b8a22b94 2242 this_trad_cache = trad_frame_cache_zalloc (this_frame);
29639122 2243 (*this_cache) = this_trad_cache;
1c645fec 2244
29639122 2245 /* The return address is in the link register. */
3e8c568d 2246 trad_frame_set_reg_realreg (this_trad_cache,
72a155b4 2247 gdbarch_pc_regnum (gdbarch),
b8a22b94 2248 num_regs + MIPS_RA_REGNUM);
1c645fec 2249
29639122
JB
2250 /* Frame ID, since it's a frameless / stackless function, no stack
2251 space is allocated and SP on entry is the current SP. */
b8a22b94 2252 pc = get_frame_pc (this_frame);
29639122 2253 find_pc_partial_function (pc, NULL, &start_addr, NULL);
b8a22b94
DJ
2254 stack_addr = get_frame_register_signed (this_frame,
2255 num_regs + MIPS_SP_REGNUM);
aa6c981f 2256 trad_frame_set_id (this_trad_cache, frame_id_build (stack_addr, start_addr));
1c645fec 2257
29639122
JB
2258 /* Assume that the frame's base is the same as the
2259 stack-pointer. */
2260 trad_frame_set_this_base (this_trad_cache, stack_addr);
c906108c 2261
29639122
JB
2262 return this_trad_cache;
2263}
c906108c 2264
29639122 2265static void
b8a22b94 2266mips_stub_frame_this_id (struct frame_info *this_frame, void **this_cache,
29639122
JB
2267 struct frame_id *this_id)
2268{
2269 struct trad_frame_cache *this_trad_cache
b8a22b94 2270 = mips_stub_frame_cache (this_frame, this_cache);
29639122
JB
2271 trad_frame_get_id (this_trad_cache, this_id);
2272}
c906108c 2273
b8a22b94
DJ
2274static struct value *
2275mips_stub_frame_prev_register (struct frame_info *this_frame,
2276 void **this_cache, int regnum)
29639122
JB
2277{
2278 struct trad_frame_cache *this_trad_cache
b8a22b94
DJ
2279 = mips_stub_frame_cache (this_frame, this_cache);
2280 return trad_frame_get_register (this_trad_cache, this_frame, regnum);
29639122 2281}
c906108c 2282
b8a22b94
DJ
2283static int
2284mips_stub_frame_sniffer (const struct frame_unwind *self,
2285 struct frame_info *this_frame, void **this_cache)
29639122 2286{
aa6c981f 2287 gdb_byte dummy[4];
979b38e0 2288 struct obj_section *s;
b8a22b94 2289 CORE_ADDR pc = get_frame_address_in_block (this_frame);
979b38e0 2290
aa6c981f 2291 /* Use the stub unwinder for unreadable code. */
b8a22b94
DJ
2292 if (target_read_memory (get_frame_pc (this_frame), dummy, 4) != 0)
2293 return 1;
aa6c981f 2294
29639122 2295 if (in_plt_section (pc, NULL))
b8a22b94 2296 return 1;
979b38e0
DJ
2297
2298 /* Binutils for MIPS puts lazy resolution stubs into .MIPS.stubs. */
2299 s = find_pc_section (pc);
2300
2301 if (s != NULL
2302 && strcmp (bfd_get_section_name (s->objfile->obfd, s->the_bfd_section),
2303 ".MIPS.stubs") == 0)
b8a22b94 2304 return 1;
979b38e0 2305
b8a22b94 2306 return 0;
29639122 2307}
c906108c 2308
b8a22b94
DJ
2309static const struct frame_unwind mips_stub_frame_unwind =
2310{
2311 NORMAL_FRAME,
2312 mips_stub_frame_this_id,
2313 mips_stub_frame_prev_register,
2314 NULL,
2315 mips_stub_frame_sniffer
2316};
2317
29639122 2318static CORE_ADDR
b8a22b94 2319mips_stub_frame_base_address (struct frame_info *this_frame,
29639122
JB
2320 void **this_cache)
2321{
2322 struct trad_frame_cache *this_trad_cache
b8a22b94 2323 = mips_stub_frame_cache (this_frame, this_cache);
29639122
JB
2324 return trad_frame_get_this_base (this_trad_cache);
2325}
0fce0821 2326
29639122
JB
2327static const struct frame_base mips_stub_frame_base =
2328{
2329 &mips_stub_frame_unwind,
2330 mips_stub_frame_base_address,
2331 mips_stub_frame_base_address,
2332 mips_stub_frame_base_address
2333};
2334
2335static const struct frame_base *
b8a22b94 2336mips_stub_frame_base_sniffer (struct frame_info *this_frame)
29639122 2337{
b8a22b94 2338 if (mips_stub_frame_sniffer (&mips_stub_frame_unwind, this_frame, NULL))
29639122
JB
2339 return &mips_stub_frame_base;
2340 else
2341 return NULL;
2342}
2343
29639122 2344/* mips_addr_bits_remove - remove useless address bits */
65596487 2345
29639122
JB
2346static CORE_ADDR
2347mips_addr_bits_remove (CORE_ADDR addr)
65596487 2348{
29639122
JB
2349 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
2350 if (mips_mask_address_p (tdep) && (((ULONGEST) addr) >> 32 == 0xffffffffUL))
2351 /* This hack is a work-around for existing boards using PMON, the
2352 simulator, and any other 64-bit targets that doesn't have true
2353 64-bit addressing. On these targets, the upper 32 bits of
2354 addresses are ignored by the hardware. Thus, the PC or SP are
2355 likely to have been sign extended to all 1s by instruction
2356 sequences that load 32-bit addresses. For example, a typical
2357 piece of code that loads an address is this:
65596487 2358
29639122
JB
2359 lui $r2, <upper 16 bits>
2360 ori $r2, <lower 16 bits>
65596487 2361
29639122
JB
2362 But the lui sign-extends the value such that the upper 32 bits
2363 may be all 1s. The workaround is simply to mask off these
2364 bits. In the future, gcc may be changed to support true 64-bit
2365 addressing, and this masking will have to be disabled. */
2366 return addr &= 0xffffffffUL;
2367 else
2368 return addr;
65596487
JB
2369}
2370
3d5f6d12
DJ
2371/* Instructions used during single-stepping of atomic sequences. */
2372#define LL_OPCODE 0x30
2373#define LLD_OPCODE 0x34
2374#define SC_OPCODE 0x38
2375#define SCD_OPCODE 0x3c
2376
2377/* Checks for an atomic sequence of instructions beginning with a LL/LLD
2378 instruction and ending with a SC/SCD instruction. If such a sequence
2379 is found, attempt to step through it. A breakpoint is placed at the end of
2380 the sequence. */
2381
2382static int
2383deal_with_atomic_sequence (CORE_ADDR pc)
2384{
2385 CORE_ADDR breaks[2] = {-1, -1};
2386 CORE_ADDR loc = pc;
2387 CORE_ADDR branch_bp; /* Breakpoint at branch instruction's destination. */
2388 unsigned long insn;
2389 int insn_count;
2390 int index;
2391 int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed). */
2392 const int atomic_sequence_length = 16; /* Instruction sequence length. */
2393
2394 if (pc & 0x01)
2395 return 0;
2396
2397 insn = mips_fetch_instruction (loc);
2398 /* Assume all atomic sequences start with a ll/lld instruction. */
2399 if (itype_op (insn) != LL_OPCODE && itype_op (insn) != LLD_OPCODE)
2400 return 0;
2401
2402 /* Assume that no atomic sequence is longer than "atomic_sequence_length"
2403 instructions. */
2404 for (insn_count = 0; insn_count < atomic_sequence_length; ++insn_count)
2405 {
2406 int is_branch = 0;
2407 loc += MIPS_INSN32_SIZE;
2408 insn = mips_fetch_instruction (loc);
2409
2410 /* Assume that there is at most one branch in the atomic
2411 sequence. If a branch is found, put a breakpoint in its
2412 destination address. */
2413 switch (itype_op (insn))
2414 {
2415 case 0: /* SPECIAL */
2416 if (rtype_funct (insn) >> 1 == 4) /* JR, JALR */
2417 return 0; /* fallback to the standard single-step code. */
2418 break;
2419 case 1: /* REGIMM */
2420 is_branch = ((itype_rt (insn) & 0xc0) == 0); /* B{LT,GE}Z* */
2421 break;
2422 case 2: /* J */
2423 case 3: /* JAL */
2424 return 0; /* fallback to the standard single-step code. */
2425 case 4: /* BEQ */
2426 case 5: /* BNE */
2427 case 6: /* BLEZ */
2428 case 7: /* BGTZ */
2429 case 20: /* BEQL */
2430 case 21: /* BNEL */
2431 case 22: /* BLEZL */
2432 case 23: /* BGTTL */
2433 is_branch = 1;
2434 break;
2435 case 17: /* COP1 */
2436 case 18: /* COP2 */
2437 case 19: /* COP3 */
2438 is_branch = (itype_rs (insn) == 8); /* BCzF, BCzFL, BCzT, BCzTL */
2439 break;
2440 }
2441 if (is_branch)
2442 {
2443 branch_bp = loc + mips32_relative_offset (insn) + 4;
2444 if (last_breakpoint >= 1)
2445 return 0; /* More than one branch found, fallback to the
2446 standard single-step code. */
2447 breaks[1] = branch_bp;
2448 last_breakpoint++;
2449 }
2450
2451 if (itype_op (insn) == SC_OPCODE || itype_op (insn) == SCD_OPCODE)
2452 break;
2453 }
2454
2455 /* Assume that the atomic sequence ends with a sc/scd instruction. */
2456 if (itype_op (insn) != SC_OPCODE && itype_op (insn) != SCD_OPCODE)
2457 return 0;
2458
2459 loc += MIPS_INSN32_SIZE;
2460
2461 /* Insert a breakpoint right after the end of the atomic sequence. */
2462 breaks[0] = loc;
2463
2464 /* Check for duplicated breakpoints. Check also for a breakpoint
2465 placed (branch instruction's destination) in the atomic sequence */
2466 if (last_breakpoint && pc <= breaks[1] && breaks[1] <= breaks[0])
2467 last_breakpoint = 0;
2468
2469 /* Effectively inserts the breakpoints. */
2470 for (index = 0; index <= last_breakpoint; index++)
2471 insert_single_step_breakpoint (breaks[index]);
2472
2473 return 1;
2474}
2475
29639122
JB
2476/* mips_software_single_step() is called just before we want to resume
2477 the inferior, if we want to single-step it but there is no hardware
2478 or kernel single-step support (MIPS on GNU/Linux for example). We find
e0cd558a 2479 the target of the coming instruction and breakpoint it. */
29639122 2480
e6590a1b 2481int
0b1b3e42 2482mips_software_single_step (struct frame_info *frame)
c906108c 2483{
8181d85f 2484 CORE_ADDR pc, next_pc;
65596487 2485
0b1b3e42 2486 pc = get_frame_pc (frame);
3d5f6d12
DJ
2487 if (deal_with_atomic_sequence (pc))
2488 return 1;
2489
0b1b3e42 2490 next_pc = mips_next_pc (frame, pc);
e6590a1b 2491
e0cd558a 2492 insert_single_step_breakpoint (next_pc);
e6590a1b 2493 return 1;
29639122 2494}
a65bbe44 2495
29639122
JB
2496/* Test whether the PC points to the return instruction at the
2497 end of a function. */
65596487 2498
29639122
JB
2499static int
2500mips_about_to_return (CORE_ADDR pc)
2501{
0fe7e7c8 2502 if (mips_pc_is_mips16 (pc))
29639122
JB
2503 /* This mips16 case isn't necessarily reliable. Sometimes the compiler
2504 generates a "jr $ra"; other times it generates code to load
2505 the return address from the stack to an accessible register (such
2506 as $a3), then a "jr" using that register. This second case
2507 is almost impossible to distinguish from an indirect jump
2508 used for switch statements, so we don't even try. */
2509 return mips_fetch_instruction (pc) == 0xe820; /* jr $ra */
2510 else
2511 return mips_fetch_instruction (pc) == 0x3e00008; /* jr $ra */
2512}
c906108c 2513
c906108c 2514
29639122
JB
2515/* This fencepost looks highly suspicious to me. Removing it also
2516 seems suspicious as it could affect remote debugging across serial
2517 lines. */
c906108c 2518
29639122
JB
2519static CORE_ADDR
2520heuristic_proc_start (CORE_ADDR pc)
2521{
2522 CORE_ADDR start_pc;
2523 CORE_ADDR fence;
2524 int instlen;
2525 int seen_adjsp = 0;
65596487 2526
bf6ae464 2527 pc = gdbarch_addr_bits_remove (current_gdbarch, pc);
29639122
JB
2528 start_pc = pc;
2529 fence = start_pc - heuristic_fence_post;
2530 if (start_pc == 0)
2531 return 0;
65596487 2532
29639122
JB
2533 if (heuristic_fence_post == UINT_MAX || fence < VM_MIN_ADDRESS)
2534 fence = VM_MIN_ADDRESS;
65596487 2535
95ac2dcf 2536 instlen = mips_pc_is_mips16 (pc) ? MIPS_INSN16_SIZE : MIPS_INSN32_SIZE;
98b4dd94 2537
29639122
JB
2538 /* search back for previous return */
2539 for (start_pc -= instlen;; start_pc -= instlen)
2540 if (start_pc < fence)
2541 {
2542 /* It's not clear to me why we reach this point when
2543 stop_soon, but with this test, at least we
2544 don't print out warnings for every child forked (eg, on
2545 decstation). 22apr93 rich@cygnus.com. */
2546 if (stop_soon == NO_STOP_QUIETLY)
2547 {
2548 static int blurb_printed = 0;
98b4dd94 2549
8a3fe4f8 2550 warning (_("GDB can't find the start of the function at 0x%s."),
29639122
JB
2551 paddr_nz (pc));
2552
2553 if (!blurb_printed)
2554 {
2555 /* This actually happens frequently in embedded
2556 development, when you first connect to a board
2557 and your stack pointer and pc are nowhere in
2558 particular. This message needs to give people
2559 in that situation enough information to
2560 determine that it's no big deal. */
2561 printf_filtered ("\n\
2562 GDB is unable to find the start of the function at 0x%s\n\
2563and thus can't determine the size of that function's stack frame.\n\
2564This means that GDB may be unable to access that stack frame, or\n\
2565the frames below it.\n\
2566 This problem is most likely caused by an invalid program counter or\n\
2567stack pointer.\n\
2568 However, if you think GDB should simply search farther back\n\
2569from 0x%s for code which looks like the beginning of a\n\
2570function, you can increase the range of the search using the `set\n\
2571heuristic-fence-post' command.\n", paddr_nz (pc), paddr_nz (pc));
2572 blurb_printed = 1;
2573 }
2574 }
2575
2576 return 0;
2577 }
0fe7e7c8 2578 else if (mips_pc_is_mips16 (start_pc))
29639122
JB
2579 {
2580 unsigned short inst;
2581
2582 /* On MIPS16, any one of the following is likely to be the
2583 start of a function:
193774b3
MR
2584 extend save
2585 save
29639122
JB
2586 entry
2587 addiu sp,-n
2588 daddiu sp,-n
2589 extend -n followed by 'addiu sp,+n' or 'daddiu sp,+n' */
2590 inst = mips_fetch_instruction (start_pc);
193774b3
MR
2591 if ((inst & 0xff80) == 0x6480) /* save */
2592 {
2593 if (start_pc - instlen >= fence)
2594 {
2595 inst = mips_fetch_instruction (start_pc - instlen);
2596 if ((inst & 0xf800) == 0xf000) /* extend */
2597 start_pc -= instlen;
2598 }
2599 break;
2600 }
2601 else if (((inst & 0xf81f) == 0xe809
2602 && (inst & 0x700) != 0x700) /* entry */
2603 || (inst & 0xff80) == 0x6380 /* addiu sp,-n */
2604 || (inst & 0xff80) == 0xfb80 /* daddiu sp,-n */
2605 || ((inst & 0xf810) == 0xf010 && seen_adjsp)) /* extend -n */
29639122
JB
2606 break;
2607 else if ((inst & 0xff00) == 0x6300 /* addiu sp */
2608 || (inst & 0xff00) == 0xfb00) /* daddiu sp */
2609 seen_adjsp = 1;
2610 else
2611 seen_adjsp = 0;
2612 }
2613 else if (mips_about_to_return (start_pc))
2614 {
4c7d22cb 2615 /* Skip return and its delay slot. */
95ac2dcf 2616 start_pc += 2 * MIPS_INSN32_SIZE;
29639122
JB
2617 break;
2618 }
2619
2620 return start_pc;
c906108c
SS
2621}
2622
6c0d6680
DJ
2623struct mips_objfile_private
2624{
2625 bfd_size_type size;
2626 char *contents;
2627};
2628
f09ded24
AC
2629/* According to the current ABI, should the type be passed in a
2630 floating-point register (assuming that there is space)? When there
a1f5b845 2631 is no FPU, FP are not even considered as possible candidates for
f09ded24
AC
2632 FP registers and, consequently this returns false - forces FP
2633 arguments into integer registers. */
2634
2635static int
2636fp_register_arg_p (enum type_code typecode, struct type *arg_type)
2637{
2638 return ((typecode == TYPE_CODE_FLT
2639 || (MIPS_EABI
6d82d43b
AC
2640 && (typecode == TYPE_CODE_STRUCT
2641 || typecode == TYPE_CODE_UNION)
f09ded24 2642 && TYPE_NFIELDS (arg_type) == 1
b2d6f210
MS
2643 && TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (arg_type, 0)))
2644 == TYPE_CODE_FLT))
c86b5b38 2645 && MIPS_FPU_TYPE != MIPS_FPU_NONE);
f09ded24
AC
2646}
2647
49e790b0
DJ
2648/* On o32, argument passing in GPRs depends on the alignment of the type being
2649 passed. Return 1 if this type must be aligned to a doubleword boundary. */
2650
2651static int
2652mips_type_needs_double_align (struct type *type)
2653{
2654 enum type_code typecode = TYPE_CODE (type);
361d1df0 2655
49e790b0
DJ
2656 if (typecode == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8)
2657 return 1;
2658 else if (typecode == TYPE_CODE_STRUCT)
2659 {
2660 if (TYPE_NFIELDS (type) < 1)
2661 return 0;
2662 return mips_type_needs_double_align (TYPE_FIELD_TYPE (type, 0));
2663 }
2664 else if (typecode == TYPE_CODE_UNION)
2665 {
361d1df0 2666 int i, n;
49e790b0
DJ
2667
2668 n = TYPE_NFIELDS (type);
2669 for (i = 0; i < n; i++)
2670 if (mips_type_needs_double_align (TYPE_FIELD_TYPE (type, i)))
2671 return 1;
2672 return 0;
2673 }
2674 return 0;
2675}
2676
dc604539
AC
2677/* Adjust the address downward (direction of stack growth) so that it
2678 is correctly aligned for a new stack frame. */
2679static CORE_ADDR
2680mips_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
2681{
5b03f266 2682 return align_down (addr, 16);
dc604539
AC
2683}
2684
f7ab6ec6 2685static CORE_ADDR
7d9b040b 2686mips_eabi_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
6d82d43b
AC
2687 struct regcache *regcache, CORE_ADDR bp_addr,
2688 int nargs, struct value **args, CORE_ADDR sp,
2689 int struct_return, CORE_ADDR struct_addr)
c906108c
SS
2690{
2691 int argreg;
2692 int float_argreg;
2693 int argnum;
2694 int len = 0;
2695 int stack_offset = 0;
480d3dd2 2696 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7d9b040b 2697 CORE_ADDR func_addr = find_function_addr (function, NULL);
1a69e1e4 2698 int regsize = mips_abi_regsize (gdbarch);
c906108c 2699
25ab4790
AC
2700 /* For shared libraries, "t9" needs to point at the function
2701 address. */
4c7d22cb 2702 regcache_cooked_write_signed (regcache, MIPS_T9_REGNUM, func_addr);
25ab4790
AC
2703
2704 /* Set the return address register to point to the entry point of
2705 the program, where a breakpoint lies in wait. */
4c7d22cb 2706 regcache_cooked_write_signed (regcache, MIPS_RA_REGNUM, bp_addr);
25ab4790 2707
c906108c 2708 /* First ensure that the stack and structure return address (if any)
cb3d25d1
MS
2709 are properly aligned. The stack has to be at least 64-bit
2710 aligned even on 32-bit machines, because doubles must be 64-bit
2711 aligned. For n32 and n64, stack frames need to be 128-bit
2712 aligned, so we round to this widest known alignment. */
2713
5b03f266
AC
2714 sp = align_down (sp, 16);
2715 struct_addr = align_down (struct_addr, 16);
c5aa993b 2716
46e0f506 2717 /* Now make space on the stack for the args. We allocate more
c906108c 2718 than necessary for EABI, because the first few arguments are
46e0f506 2719 passed in registers, but that's OK. */
c906108c 2720 for (argnum = 0; argnum < nargs; argnum++)
1a69e1e4 2721 len += align_up (TYPE_LENGTH (value_type (args[argnum])), regsize);
5b03f266 2722 sp -= align_up (len, 16);
c906108c 2723
9ace0497 2724 if (mips_debug)
6d82d43b 2725 fprintf_unfiltered (gdb_stdlog,
5b03f266
AC
2726 "mips_eabi_push_dummy_call: sp=0x%s allocated %ld\n",
2727 paddr_nz (sp), (long) align_up (len, 16));
9ace0497 2728
c906108c 2729 /* Initialize the integer and float register pointers. */
4c7d22cb 2730 argreg = MIPS_A0_REGNUM;
72a155b4 2731 float_argreg = mips_fpa0_regnum (gdbarch);
c906108c 2732
46e0f506 2733 /* The struct_return pointer occupies the first parameter-passing reg. */
c906108c 2734 if (struct_return)
9ace0497
AC
2735 {
2736 if (mips_debug)
2737 fprintf_unfiltered (gdb_stdlog,
25ab4790 2738 "mips_eabi_push_dummy_call: struct_return reg=%d 0x%s\n",
cb3d25d1 2739 argreg, paddr_nz (struct_addr));
9c9acae0 2740 regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
9ace0497 2741 }
c906108c
SS
2742
2743 /* Now load as many as possible of the first arguments into
2744 registers, and push the rest onto the stack. Loop thru args
2745 from first to last. */
2746 for (argnum = 0; argnum < nargs; argnum++)
2747 {
47a35522
MK
2748 const gdb_byte *val;
2749 gdb_byte valbuf[MAX_REGISTER_SIZE];
ea7c478f 2750 struct value *arg = args[argnum];
4991999e 2751 struct type *arg_type = check_typedef (value_type (arg));
c906108c
SS
2752 int len = TYPE_LENGTH (arg_type);
2753 enum type_code typecode = TYPE_CODE (arg_type);
2754
9ace0497
AC
2755 if (mips_debug)
2756 fprintf_unfiltered (gdb_stdlog,
25ab4790 2757 "mips_eabi_push_dummy_call: %d len=%d type=%d",
acdb74a0 2758 argnum + 1, len, (int) typecode);
9ace0497 2759
c906108c 2760 /* The EABI passes structures that do not fit in a register by
46e0f506 2761 reference. */
1a69e1e4 2762 if (len > regsize
9ace0497 2763 && (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION))
c906108c 2764 {
1a69e1e4 2765 store_unsigned_integer (valbuf, regsize, VALUE_ADDRESS (arg));
c906108c 2766 typecode = TYPE_CODE_PTR;
1a69e1e4 2767 len = regsize;
c906108c 2768 val = valbuf;
9ace0497
AC
2769 if (mips_debug)
2770 fprintf_unfiltered (gdb_stdlog, " push");
c906108c
SS
2771 }
2772 else
47a35522 2773 val = value_contents (arg);
c906108c
SS
2774
2775 /* 32-bit ABIs always start floating point arguments in an
acdb74a0
AC
2776 even-numbered floating point register. Round the FP register
2777 up before the check to see if there are any FP registers
46e0f506
MS
2778 left. Non MIPS_EABI targets also pass the FP in the integer
2779 registers so also round up normal registers. */
1a69e1e4 2780 if (regsize < 8 && fp_register_arg_p (typecode, arg_type))
acdb74a0
AC
2781 {
2782 if ((float_argreg & 1))
2783 float_argreg++;
2784 }
c906108c
SS
2785
2786 /* Floating point arguments passed in registers have to be
2787 treated specially. On 32-bit architectures, doubles
c5aa993b
JM
2788 are passed in register pairs; the even register gets
2789 the low word, and the odd register gets the high word.
2790 On non-EABI processors, the first two floating point arguments are
2791 also copied to general registers, because MIPS16 functions
2792 don't use float registers for arguments. This duplication of
2793 arguments in general registers can't hurt non-MIPS16 functions
2794 because those registers are normally skipped. */
1012bd0e
EZ
2795 /* MIPS_EABI squeezes a struct that contains a single floating
2796 point value into an FP register instead of pushing it onto the
46e0f506 2797 stack. */
f09ded24
AC
2798 if (fp_register_arg_p (typecode, arg_type)
2799 && float_argreg <= MIPS_LAST_FP_ARG_REGNUM)
c906108c 2800 {
6da397e0
KB
2801 /* EABI32 will pass doubles in consecutive registers, even on
2802 64-bit cores. At one time, we used to check the size of
2803 `float_argreg' to determine whether or not to pass doubles
2804 in consecutive registers, but this is not sufficient for
2805 making the ABI determination. */
2806 if (len == 8 && mips_abi (gdbarch) == MIPS_ABI_EABI32)
c906108c 2807 {
72a155b4 2808 int low_offset = gdbarch_byte_order (gdbarch)
4c6b5505 2809 == BFD_ENDIAN_BIG ? 4 : 0;
c906108c
SS
2810 unsigned long regval;
2811
2812 /* Write the low word of the double to the even register(s). */
c5aa993b 2813 regval = extract_unsigned_integer (val + low_offset, 4);
9ace0497 2814 if (mips_debug)
acdb74a0 2815 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
9ace0497 2816 float_argreg, phex (regval, 4));
9c9acae0 2817 regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
c906108c
SS
2818
2819 /* Write the high word of the double to the odd register(s). */
c5aa993b 2820 regval = extract_unsigned_integer (val + 4 - low_offset, 4);
9ace0497 2821 if (mips_debug)
acdb74a0 2822 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
9ace0497 2823 float_argreg, phex (regval, 4));
9c9acae0 2824 regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
c906108c
SS
2825 }
2826 else
2827 {
2828 /* This is a floating point value that fits entirely
2829 in a single register. */
53a5351d 2830 /* On 32 bit ABI's the float_argreg is further adjusted
6d82d43b 2831 above to ensure that it is even register aligned. */
9ace0497
AC
2832 LONGEST regval = extract_unsigned_integer (val, len);
2833 if (mips_debug)
acdb74a0 2834 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
9ace0497 2835 float_argreg, phex (regval, len));
9c9acae0 2836 regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
c906108c
SS
2837 }
2838 }
2839 else
2840 {
2841 /* Copy the argument to general registers or the stack in
2842 register-sized pieces. Large arguments are split between
2843 registers and stack. */
1a69e1e4
DJ
2844 /* Note: structs whose size is not a multiple of regsize
2845 are treated specially: Irix cc passes
d5ac5a39
AC
2846 them in registers where gcc sometimes puts them on the
2847 stack. For maximum compatibility, we will put them in
2848 both places. */
1a69e1e4 2849 int odd_sized_struct = (len > regsize && len % regsize != 0);
46e0f506 2850
f09ded24 2851 /* Note: Floating-point values that didn't fit into an FP
6d82d43b 2852 register are only written to memory. */
c906108c
SS
2853 while (len > 0)
2854 {
ebafbe83 2855 /* Remember if the argument was written to the stack. */
566f0f7a 2856 int stack_used_p = 0;
1a69e1e4 2857 int partial_len = (len < regsize ? len : regsize);
c906108c 2858
acdb74a0
AC
2859 if (mips_debug)
2860 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
2861 partial_len);
2862
566f0f7a 2863 /* Write this portion of the argument to the stack. */
f09ded24
AC
2864 if (argreg > MIPS_LAST_ARG_REGNUM
2865 || odd_sized_struct
2866 || fp_register_arg_p (typecode, arg_type))
c906108c 2867 {
c906108c
SS
2868 /* Should shorter than int integer values be
2869 promoted to int before being stored? */
c906108c 2870 int longword_offset = 0;
9ace0497 2871 CORE_ADDR addr;
566f0f7a 2872 stack_used_p = 1;
72a155b4 2873 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
7a292a7a 2874 {
1a69e1e4 2875 if (regsize == 8
480d3dd2
AC
2876 && (typecode == TYPE_CODE_INT
2877 || typecode == TYPE_CODE_PTR
6d82d43b 2878 || typecode == TYPE_CODE_FLT) && len <= 4)
1a69e1e4 2879 longword_offset = regsize - len;
480d3dd2
AC
2880 else if ((typecode == TYPE_CODE_STRUCT
2881 || typecode == TYPE_CODE_UNION)
1a69e1e4
DJ
2882 && TYPE_LENGTH (arg_type) < regsize)
2883 longword_offset = regsize - len;
7a292a7a 2884 }
c5aa993b 2885
9ace0497
AC
2886 if (mips_debug)
2887 {
cb3d25d1
MS
2888 fprintf_unfiltered (gdb_stdlog, " - stack_offset=0x%s",
2889 paddr_nz (stack_offset));
2890 fprintf_unfiltered (gdb_stdlog, " longword_offset=0x%s",
2891 paddr_nz (longword_offset));
9ace0497 2892 }
361d1df0 2893
9ace0497
AC
2894 addr = sp + stack_offset + longword_offset;
2895
2896 if (mips_debug)
2897 {
2898 int i;
6d82d43b 2899 fprintf_unfiltered (gdb_stdlog, " @0x%s ",
cb3d25d1 2900 paddr_nz (addr));
9ace0497
AC
2901 for (i = 0; i < partial_len; i++)
2902 {
6d82d43b 2903 fprintf_unfiltered (gdb_stdlog, "%02x",
cb3d25d1 2904 val[i] & 0xff);
9ace0497
AC
2905 }
2906 }
2907 write_memory (addr, val, partial_len);
c906108c
SS
2908 }
2909
f09ded24
AC
2910 /* Note!!! This is NOT an else clause. Odd sized
2911 structs may go thru BOTH paths. Floating point
46e0f506 2912 arguments will not. */
566f0f7a 2913 /* Write this portion of the argument to a general
6d82d43b 2914 purpose register. */
f09ded24
AC
2915 if (argreg <= MIPS_LAST_ARG_REGNUM
2916 && !fp_register_arg_p (typecode, arg_type))
c906108c 2917 {
6d82d43b
AC
2918 LONGEST regval =
2919 extract_unsigned_integer (val, partial_len);
c906108c 2920
9ace0497 2921 if (mips_debug)
acdb74a0 2922 fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
9ace0497 2923 argreg,
1a69e1e4 2924 phex (regval, regsize));
9c9acae0 2925 regcache_cooked_write_unsigned (regcache, argreg, regval);
c906108c 2926 argreg++;
c906108c 2927 }
c5aa993b 2928
c906108c
SS
2929 len -= partial_len;
2930 val += partial_len;
2931
566f0f7a 2932 /* Compute the the offset into the stack at which we
6d82d43b 2933 will copy the next parameter.
566f0f7a 2934
566f0f7a 2935 In the new EABI (and the NABI32), the stack_offset
46e0f506 2936 only needs to be adjusted when it has been used. */
c906108c 2937
46e0f506 2938 if (stack_used_p)
1a69e1e4 2939 stack_offset += align_up (partial_len, regsize);
c906108c
SS
2940 }
2941 }
9ace0497
AC
2942 if (mips_debug)
2943 fprintf_unfiltered (gdb_stdlog, "\n");
c906108c
SS
2944 }
2945
f10683bb 2946 regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
310e9b6a 2947
0f71a2f6
JM
2948 /* Return adjusted stack pointer. */
2949 return sp;
2950}
2951
a1f5b845 2952/* Determine the return value convention being used. */
6d82d43b 2953
9c8fdbfa 2954static enum return_value_convention
c055b101 2955mips_eabi_return_value (struct gdbarch *gdbarch, struct type *func_type,
9c8fdbfa 2956 struct type *type, struct regcache *regcache,
47a35522 2957 gdb_byte *readbuf, const gdb_byte *writebuf)
6d82d43b 2958{
609ba780
JM
2959 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2960 int fp_return_type = 0;
2961 int offset, regnum, xfer;
2962
9c8fdbfa
AC
2963 if (TYPE_LENGTH (type) > 2 * mips_abi_regsize (gdbarch))
2964 return RETURN_VALUE_STRUCT_CONVENTION;
609ba780
JM
2965
2966 /* Floating point type? */
2967 if (tdep->mips_fpu_type != MIPS_FPU_NONE)
2968 {
2969 if (TYPE_CODE (type) == TYPE_CODE_FLT)
2970 fp_return_type = 1;
2971 /* Structs with a single field of float type
2972 are returned in a floating point register. */
2973 if ((TYPE_CODE (type) == TYPE_CODE_STRUCT
2974 || TYPE_CODE (type) == TYPE_CODE_UNION)
2975 && TYPE_NFIELDS (type) == 1)
2976 {
2977 struct type *fieldtype = TYPE_FIELD_TYPE (type, 0);
2978
2979 if (TYPE_CODE (check_typedef (fieldtype)) == TYPE_CODE_FLT)
2980 fp_return_type = 1;
2981 }
2982 }
2983
2984 if (fp_return_type)
2985 {
2986 /* A floating-point value belongs in the least significant part
2987 of FP0/FP1. */
2988 if (mips_debug)
2989 fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
2990 regnum = mips_regnum (gdbarch)->fp0;
2991 }
2992 else
2993 {
2994 /* An integer value goes in V0/V1. */
2995 if (mips_debug)
2996 fprintf_unfiltered (gdb_stderr, "Return scalar in $v0\n");
2997 regnum = MIPS_V0_REGNUM;
2998 }
2999 for (offset = 0;
3000 offset < TYPE_LENGTH (type);
3001 offset += mips_abi_regsize (gdbarch), regnum++)
3002 {
3003 xfer = mips_abi_regsize (gdbarch);
3004 if (offset + xfer > TYPE_LENGTH (type))
3005 xfer = TYPE_LENGTH (type) - offset;
3006 mips_xfer_register (gdbarch, regcache,
3007 gdbarch_num_regs (gdbarch) + regnum, xfer,
3008 gdbarch_byte_order (gdbarch), readbuf, writebuf,
3009 offset);
3010 }
3011
9c8fdbfa 3012 return RETURN_VALUE_REGISTER_CONVENTION;
6d82d43b
AC
3013}
3014
6d82d43b
AC
3015
3016/* N32/N64 ABI stuff. */
ebafbe83 3017
8d26208a
DJ
3018/* Search for a naturally aligned double at OFFSET inside a struct
3019 ARG_TYPE. The N32 / N64 ABIs pass these in floating point
3020 registers. */
3021
3022static int
3023mips_n32n64_fp_arg_chunk_p (struct type *arg_type, int offset)
3024{
3025 int i;
3026
3027 if (TYPE_CODE (arg_type) != TYPE_CODE_STRUCT)
3028 return 0;
3029
3030 if (MIPS_FPU_TYPE != MIPS_FPU_DOUBLE)
3031 return 0;
3032
3033 if (TYPE_LENGTH (arg_type) < offset + MIPS64_REGSIZE)
3034 return 0;
3035
3036 for (i = 0; i < TYPE_NFIELDS (arg_type); i++)
3037 {
3038 int pos;
3039 struct type *field_type;
3040
3041 /* We're only looking at normal fields. */
3042 if (TYPE_FIELD_STATIC (arg_type, i)
3043 || (TYPE_FIELD_BITPOS (arg_type, i) % 8) != 0)
3044 continue;
3045
3046 /* If we have gone past the offset, there is no double to pass. */
3047 pos = TYPE_FIELD_BITPOS (arg_type, i) / 8;
3048 if (pos > offset)
3049 return 0;
3050
3051 field_type = check_typedef (TYPE_FIELD_TYPE (arg_type, i));
3052
3053 /* If this field is entirely before the requested offset, go
3054 on to the next one. */
3055 if (pos + TYPE_LENGTH (field_type) <= offset)
3056 continue;
3057
3058 /* If this is our special aligned double, we can stop. */
3059 if (TYPE_CODE (field_type) == TYPE_CODE_FLT
3060 && TYPE_LENGTH (field_type) == MIPS64_REGSIZE)
3061 return 1;
3062
3063 /* This field starts at or before the requested offset, and
3064 overlaps it. If it is a structure, recurse inwards. */
3065 return mips_n32n64_fp_arg_chunk_p (field_type, offset - pos);
3066 }
3067
3068 return 0;
3069}
3070
f7ab6ec6 3071static CORE_ADDR
7d9b040b 3072mips_n32n64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
6d82d43b
AC
3073 struct regcache *regcache, CORE_ADDR bp_addr,
3074 int nargs, struct value **args, CORE_ADDR sp,
3075 int struct_return, CORE_ADDR struct_addr)
cb3d25d1
MS
3076{
3077 int argreg;
3078 int float_argreg;
3079 int argnum;
3080 int len = 0;
3081 int stack_offset = 0;
480d3dd2 3082 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7d9b040b 3083 CORE_ADDR func_addr = find_function_addr (function, NULL);
cb3d25d1 3084
25ab4790
AC
3085 /* For shared libraries, "t9" needs to point at the function
3086 address. */
4c7d22cb 3087 regcache_cooked_write_signed (regcache, MIPS_T9_REGNUM, func_addr);
25ab4790
AC
3088
3089 /* Set the return address register to point to the entry point of
3090 the program, where a breakpoint lies in wait. */
4c7d22cb 3091 regcache_cooked_write_signed (regcache, MIPS_RA_REGNUM, bp_addr);
25ab4790 3092
cb3d25d1
MS
3093 /* First ensure that the stack and structure return address (if any)
3094 are properly aligned. The stack has to be at least 64-bit
3095 aligned even on 32-bit machines, because doubles must be 64-bit
3096 aligned. For n32 and n64, stack frames need to be 128-bit
3097 aligned, so we round to this widest known alignment. */
3098
5b03f266
AC
3099 sp = align_down (sp, 16);
3100 struct_addr = align_down (struct_addr, 16);
cb3d25d1
MS
3101
3102 /* Now make space on the stack for the args. */
3103 for (argnum = 0; argnum < nargs; argnum++)
1a69e1e4 3104 len += align_up (TYPE_LENGTH (value_type (args[argnum])), MIPS64_REGSIZE);
5b03f266 3105 sp -= align_up (len, 16);
cb3d25d1
MS
3106
3107 if (mips_debug)
6d82d43b 3108 fprintf_unfiltered (gdb_stdlog,
5b03f266
AC
3109 "mips_n32n64_push_dummy_call: sp=0x%s allocated %ld\n",
3110 paddr_nz (sp), (long) align_up (len, 16));
cb3d25d1
MS
3111
3112 /* Initialize the integer and float register pointers. */
4c7d22cb 3113 argreg = MIPS_A0_REGNUM;
72a155b4 3114 float_argreg = mips_fpa0_regnum (gdbarch);
cb3d25d1 3115
46e0f506 3116 /* The struct_return pointer occupies the first parameter-passing reg. */
cb3d25d1
MS
3117 if (struct_return)
3118 {
3119 if (mips_debug)
3120 fprintf_unfiltered (gdb_stdlog,
25ab4790 3121 "mips_n32n64_push_dummy_call: struct_return reg=%d 0x%s\n",
cb3d25d1 3122 argreg, paddr_nz (struct_addr));
9c9acae0 3123 regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
cb3d25d1
MS
3124 }
3125
3126 /* Now load as many as possible of the first arguments into
3127 registers, and push the rest onto the stack. Loop thru args
3128 from first to last. */
3129 for (argnum = 0; argnum < nargs; argnum++)
3130 {
47a35522 3131 const gdb_byte *val;
cb3d25d1 3132 struct value *arg = args[argnum];
4991999e 3133 struct type *arg_type = check_typedef (value_type (arg));
cb3d25d1
MS
3134 int len = TYPE_LENGTH (arg_type);
3135 enum type_code typecode = TYPE_CODE (arg_type);
3136
3137 if (mips_debug)
3138 fprintf_unfiltered (gdb_stdlog,
25ab4790 3139 "mips_n32n64_push_dummy_call: %d len=%d type=%d",
cb3d25d1
MS
3140 argnum + 1, len, (int) typecode);
3141
47a35522 3142 val = value_contents (arg);
cb3d25d1
MS
3143
3144 if (fp_register_arg_p (typecode, arg_type)
8d26208a 3145 && argreg <= MIPS_LAST_ARG_REGNUM)
cb3d25d1
MS
3146 {
3147 /* This is a floating point value that fits entirely
3148 in a single register. */
cb3d25d1
MS
3149 LONGEST regval = extract_unsigned_integer (val, len);
3150 if (mips_debug)
3151 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3152 float_argreg, phex (regval, len));
8d26208a 3153 regcache_cooked_write_unsigned (regcache, float_argreg, regval);
cb3d25d1
MS
3154
3155 if (mips_debug)
3156 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
3157 argreg, phex (regval, len));
9c9acae0 3158 regcache_cooked_write_unsigned (regcache, argreg, regval);
8d26208a
DJ
3159 float_argreg++;
3160 argreg++;
cb3d25d1
MS
3161 }
3162 else
3163 {
3164 /* Copy the argument to general registers or the stack in
3165 register-sized pieces. Large arguments are split between
3166 registers and stack. */
ab2e1992
MR
3167 /* For N32/N64, structs, unions, or other composite types are
3168 treated as a sequence of doublewords, and are passed in integer
3169 or floating point registers as though they were simple scalar
3170 parameters to the extent that they fit, with any excess on the
3171 stack packed according to the normal memory layout of the
3172 object.
3173 The caller does not reserve space for the register arguments;
3174 the callee is responsible for reserving it if required. */
cb3d25d1 3175 /* Note: Floating-point values that didn't fit into an FP
6d82d43b 3176 register are only written to memory. */
cb3d25d1
MS
3177 while (len > 0)
3178 {
ad018eee 3179 /* Remember if the argument was written to the stack. */
cb3d25d1 3180 int stack_used_p = 0;
1a69e1e4 3181 int partial_len = (len < MIPS64_REGSIZE ? len : MIPS64_REGSIZE);
cb3d25d1
MS
3182
3183 if (mips_debug)
3184 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
3185 partial_len);
3186
8d26208a
DJ
3187 if (fp_register_arg_p (typecode, arg_type))
3188 gdb_assert (argreg > MIPS_LAST_ARG_REGNUM);
3189
cb3d25d1 3190 /* Write this portion of the argument to the stack. */
ab2e1992 3191 if (argreg > MIPS_LAST_ARG_REGNUM)
cb3d25d1
MS
3192 {
3193 /* Should shorter than int integer values be
3194 promoted to int before being stored? */
3195 int longword_offset = 0;
3196 CORE_ADDR addr;
3197 stack_used_p = 1;
72a155b4 3198 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
cb3d25d1 3199 {
1a69e1e4
DJ
3200 if ((typecode == TYPE_CODE_INT
3201 || typecode == TYPE_CODE_PTR
3202 || typecode == TYPE_CODE_FLT)
3203 && len <= 4)
3204 longword_offset = MIPS64_REGSIZE - len;
cb3d25d1
MS
3205 }
3206
3207 if (mips_debug)
3208 {
3209 fprintf_unfiltered (gdb_stdlog, " - stack_offset=0x%s",
3210 paddr_nz (stack_offset));
3211 fprintf_unfiltered (gdb_stdlog, " longword_offset=0x%s",
3212 paddr_nz (longword_offset));
3213 }
3214
3215 addr = sp + stack_offset + longword_offset;
3216
3217 if (mips_debug)
3218 {
3219 int i;
6d82d43b 3220 fprintf_unfiltered (gdb_stdlog, " @0x%s ",
cb3d25d1
MS
3221 paddr_nz (addr));
3222 for (i = 0; i < partial_len; i++)
3223 {
6d82d43b 3224 fprintf_unfiltered (gdb_stdlog, "%02x",
cb3d25d1
MS
3225 val[i] & 0xff);
3226 }
3227 }
3228 write_memory (addr, val, partial_len);
3229 }
3230
3231 /* Note!!! This is NOT an else clause. Odd sized
8d26208a 3232 structs may go thru BOTH paths. */
cb3d25d1 3233 /* Write this portion of the argument to a general
6d82d43b 3234 purpose register. */
8d26208a 3235 if (argreg <= MIPS_LAST_ARG_REGNUM)
cb3d25d1 3236 {
5863b5d5
MR
3237 LONGEST regval;
3238
3239 /* Sign extend pointers, 32-bit integers and signed
3240 16-bit and 8-bit integers; everything else is taken
3241 as is. */
3242
3243 if ((partial_len == 4
3244 && (typecode == TYPE_CODE_PTR
3245 || typecode == TYPE_CODE_INT))
3246 || (partial_len < 4
3247 && typecode == TYPE_CODE_INT
3248 && !TYPE_UNSIGNED (arg_type)))
3249 regval = extract_signed_integer (val, partial_len);
3250 else
3251 regval = extract_unsigned_integer (val, partial_len);
cb3d25d1
MS
3252
3253 /* A non-floating-point argument being passed in a
3254 general register. If a struct or union, and if
3255 the remaining length is smaller than the register
3256 size, we have to adjust the register value on
3257 big endian targets.
3258
3259 It does not seem to be necessary to do the
1a69e1e4 3260 same for integral types. */
cb3d25d1 3261
72a155b4 3262 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
1a69e1e4 3263 && partial_len < MIPS64_REGSIZE
06f9a1af
MR
3264 && (typecode == TYPE_CODE_STRUCT
3265 || typecode == TYPE_CODE_UNION))
1a69e1e4 3266 regval <<= ((MIPS64_REGSIZE - partial_len)
9ecf7166 3267 * TARGET_CHAR_BIT);
cb3d25d1
MS
3268
3269 if (mips_debug)
3270 fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
3271 argreg,
1a69e1e4 3272 phex (regval, MIPS64_REGSIZE));
9c9acae0 3273 regcache_cooked_write_unsigned (regcache, argreg, regval);
8d26208a
DJ
3274
3275 if (mips_n32n64_fp_arg_chunk_p (arg_type,
3276 TYPE_LENGTH (arg_type) - len))
3277 {
3278 if (mips_debug)
3279 fprintf_filtered (gdb_stdlog, " - fpreg=%d val=%s",
3280 float_argreg,
3281 phex (regval, MIPS64_REGSIZE));
3282 regcache_cooked_write_unsigned (regcache, float_argreg,
3283 regval);
3284 }
3285
3286 float_argreg++;
cb3d25d1
MS
3287 argreg++;
3288 }
3289
3290 len -= partial_len;
3291 val += partial_len;
3292
3293 /* Compute the the offset into the stack at which we
6d82d43b 3294 will copy the next parameter.
cb3d25d1
MS
3295
3296 In N32 (N64?), the stack_offset only needs to be
3297 adjusted when it has been used. */
3298
3299 if (stack_used_p)
1a69e1e4 3300 stack_offset += align_up (partial_len, MIPS64_REGSIZE);
cb3d25d1
MS
3301 }
3302 }
3303 if (mips_debug)
3304 fprintf_unfiltered (gdb_stdlog, "\n");
3305 }
3306
f10683bb 3307 regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
310e9b6a 3308
cb3d25d1
MS
3309 /* Return adjusted stack pointer. */
3310 return sp;
3311}
3312
6d82d43b 3313static enum return_value_convention
c055b101 3314mips_n32n64_return_value (struct gdbarch *gdbarch, struct type *func_type,
6d82d43b 3315 struct type *type, struct regcache *regcache,
47a35522 3316 gdb_byte *readbuf, const gdb_byte *writebuf)
ebafbe83 3317{
72a155b4 3318 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
b18bb924
MR
3319
3320 /* From MIPSpro N32 ABI Handbook, Document Number: 007-2816-004
3321
3322 Function results are returned in $2 (and $3 if needed), or $f0 (and $f2
3323 if needed), as appropriate for the type. Composite results (struct,
3324 union, or array) are returned in $2/$f0 and $3/$f2 according to the
3325 following rules:
3326
3327 * A struct with only one or two floating point fields is returned in $f0
3328 (and $f2 if necessary). This is a generalization of the Fortran COMPLEX
3329 case.
3330
3331 * Any other struct or union results of at most 128 bits are returned in
3332 $2 (first 64 bits) and $3 (remainder, if necessary).
3333
3334 * Larger composite results are handled by converting the function to a
3335 procedure with an implicit first parameter, which is a pointer to an area
3336 reserved by the caller to receive the result. [The o32-bit ABI requires
3337 that all composite results be handled by conversion to implicit first
3338 parameters. The MIPS/SGI Fortran implementation has always made a
3339 specific exception to return COMPLEX results in the floating point
3340 registers.] */
3341
3342 if (TYPE_CODE (type) == TYPE_CODE_ARRAY
1a69e1e4 3343 || TYPE_LENGTH (type) > 2 * MIPS64_REGSIZE)
6d82d43b 3344 return RETURN_VALUE_STRUCT_CONVENTION;
d05f6826
DJ
3345 else if (TYPE_CODE (type) == TYPE_CODE_FLT
3346 && TYPE_LENGTH (type) == 16
3347 && tdep->mips_fpu_type != MIPS_FPU_NONE)
3348 {
3349 /* A 128-bit floating-point value fills both $f0 and $f2. The
3350 two registers are used in the same as memory order, so the
3351 eight bytes with the lower memory address are in $f0. */
3352 if (mips_debug)
3353 fprintf_unfiltered (gdb_stderr, "Return float in $f0 and $f2\n");
ba32f989 3354 mips_xfer_register (gdbarch, regcache,
72a155b4
UW
3355 gdbarch_num_regs (gdbarch)
3356 + mips_regnum (gdbarch)->fp0,
3357 8, gdbarch_byte_order (gdbarch),
4c6b5505 3358 readbuf, writebuf, 0);
ba32f989 3359 mips_xfer_register (gdbarch, regcache,
72a155b4
UW
3360 gdbarch_num_regs (gdbarch)
3361 + mips_regnum (gdbarch)->fp0 + 2,
3362 8, gdbarch_byte_order (gdbarch),
4c6b5505 3363 readbuf ? readbuf + 8 : readbuf,
d05f6826
DJ
3364 writebuf ? writebuf + 8 : writebuf, 0);
3365 return RETURN_VALUE_REGISTER_CONVENTION;
3366 }
6d82d43b
AC
3367 else if (TYPE_CODE (type) == TYPE_CODE_FLT
3368 && tdep->mips_fpu_type != MIPS_FPU_NONE)
3369 {
59aa1faa 3370 /* A single or double floating-point value that fits in FP0. */
6d82d43b
AC
3371 if (mips_debug)
3372 fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
ba32f989 3373 mips_xfer_register (gdbarch, regcache,
72a155b4
UW
3374 gdbarch_num_regs (gdbarch)
3375 + mips_regnum (gdbarch)->fp0,
6d82d43b 3376 TYPE_LENGTH (type),
72a155b4 3377 gdbarch_byte_order (gdbarch),
4c6b5505 3378 readbuf, writebuf, 0);
6d82d43b
AC
3379 return RETURN_VALUE_REGISTER_CONVENTION;
3380 }
3381 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
3382 && TYPE_NFIELDS (type) <= 2
3383 && TYPE_NFIELDS (type) >= 1
3384 && ((TYPE_NFIELDS (type) == 1
b18bb924 3385 && (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 0)))
6d82d43b
AC
3386 == TYPE_CODE_FLT))
3387 || (TYPE_NFIELDS (type) == 2
b18bb924 3388 && (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 0)))
6d82d43b 3389 == TYPE_CODE_FLT)
b18bb924 3390 && (TYPE_CODE (check_typedef (TYPE_FIELD_TYPE (type, 1)))
6d82d43b
AC
3391 == TYPE_CODE_FLT)))
3392 && tdep->mips_fpu_type != MIPS_FPU_NONE)
3393 {
3394 /* A struct that contains one or two floats. Each value is part
3395 in the least significant part of their floating point
3396 register.. */
6d82d43b
AC
3397 int regnum;
3398 int field;
72a155b4 3399 for (field = 0, regnum = mips_regnum (gdbarch)->fp0;
6d82d43b
AC
3400 field < TYPE_NFIELDS (type); field++, regnum += 2)
3401 {
3402 int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field])
3403 / TARGET_CHAR_BIT);
3404 if (mips_debug)
3405 fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",
3406 offset);
ba32f989
DJ
3407 mips_xfer_register (gdbarch, regcache,
3408 gdbarch_num_regs (gdbarch) + regnum,
6d82d43b 3409 TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)),
72a155b4 3410 gdbarch_byte_order (gdbarch),
4c6b5505 3411 readbuf, writebuf, offset);
6d82d43b
AC
3412 }
3413 return RETURN_VALUE_REGISTER_CONVENTION;
3414 }
3415 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
3416 || TYPE_CODE (type) == TYPE_CODE_UNION)
3417 {
3418 /* A structure or union. Extract the left justified value,
3419 regardless of the byte order. I.e. DO NOT USE
3420 mips_xfer_lower. */
3421 int offset;
3422 int regnum;
4c7d22cb 3423 for (offset = 0, regnum = MIPS_V0_REGNUM;
6d82d43b 3424 offset < TYPE_LENGTH (type);
72a155b4 3425 offset += register_size (gdbarch, regnum), regnum++)
6d82d43b 3426 {
72a155b4 3427 int xfer = register_size (gdbarch, regnum);
6d82d43b
AC
3428 if (offset + xfer > TYPE_LENGTH (type))
3429 xfer = TYPE_LENGTH (type) - offset;
3430 if (mips_debug)
3431 fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n",
3432 offset, xfer, regnum);
ba32f989
DJ
3433 mips_xfer_register (gdbarch, regcache,
3434 gdbarch_num_regs (gdbarch) + regnum,
72a155b4
UW
3435 xfer, BFD_ENDIAN_UNKNOWN, readbuf, writebuf,
3436 offset);
6d82d43b
AC
3437 }
3438 return RETURN_VALUE_REGISTER_CONVENTION;
3439 }
3440 else
3441 {
3442 /* A scalar extract each part but least-significant-byte
3443 justified. */
3444 int offset;
3445 int regnum;
4c7d22cb 3446 for (offset = 0, regnum = MIPS_V0_REGNUM;
6d82d43b 3447 offset < TYPE_LENGTH (type);
72a155b4 3448 offset += register_size (gdbarch, regnum), regnum++)
6d82d43b 3449 {
72a155b4 3450 int xfer = register_size (gdbarch, regnum);
6d82d43b
AC
3451 if (offset + xfer > TYPE_LENGTH (type))
3452 xfer = TYPE_LENGTH (type) - offset;
3453 if (mips_debug)
3454 fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
3455 offset, xfer, regnum);
ba32f989
DJ
3456 mips_xfer_register (gdbarch, regcache,
3457 gdbarch_num_regs (gdbarch) + regnum,
72a155b4 3458 xfer, gdbarch_byte_order (gdbarch),
4c6b5505 3459 readbuf, writebuf, offset);
6d82d43b
AC
3460 }
3461 return RETURN_VALUE_REGISTER_CONVENTION;
3462 }
3463}
3464
3465/* O32 ABI stuff. */
3466
3467static CORE_ADDR
7d9b040b 3468mips_o32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
6d82d43b
AC
3469 struct regcache *regcache, CORE_ADDR bp_addr,
3470 int nargs, struct value **args, CORE_ADDR sp,
3471 int struct_return, CORE_ADDR struct_addr)
3472{
3473 int argreg;
3474 int float_argreg;
3475 int argnum;
3476 int len = 0;
3477 int stack_offset = 0;
3478 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7d9b040b 3479 CORE_ADDR func_addr = find_function_addr (function, NULL);
6d82d43b
AC
3480
3481 /* For shared libraries, "t9" needs to point at the function
3482 address. */
4c7d22cb 3483 regcache_cooked_write_signed (regcache, MIPS_T9_REGNUM, func_addr);
6d82d43b
AC
3484
3485 /* Set the return address register to point to the entry point of
3486 the program, where a breakpoint lies in wait. */
4c7d22cb 3487 regcache_cooked_write_signed (regcache, MIPS_RA_REGNUM, bp_addr);
6d82d43b
AC
3488
3489 /* First ensure that the stack and structure return address (if any)
3490 are properly aligned. The stack has to be at least 64-bit
3491 aligned even on 32-bit machines, because doubles must be 64-bit
ebafbe83
MS
3492 aligned. For n32 and n64, stack frames need to be 128-bit
3493 aligned, so we round to this widest known alignment. */
3494
5b03f266
AC
3495 sp = align_down (sp, 16);
3496 struct_addr = align_down (struct_addr, 16);
ebafbe83
MS
3497
3498 /* Now make space on the stack for the args. */
3499 for (argnum = 0; argnum < nargs; argnum++)
968b5391
MR
3500 {
3501 struct type *arg_type = check_typedef (value_type (args[argnum]));
3502 int arglen = TYPE_LENGTH (arg_type);
3503
3504 /* Align to double-word if necessary. */
2afd3f0a 3505 if (mips_type_needs_double_align (arg_type))
1a69e1e4 3506 len = align_up (len, MIPS32_REGSIZE * 2);
968b5391 3507 /* Allocate space on the stack. */
1a69e1e4 3508 len += align_up (arglen, MIPS32_REGSIZE);
968b5391 3509 }
5b03f266 3510 sp -= align_up (len, 16);
ebafbe83
MS
3511
3512 if (mips_debug)
6d82d43b 3513 fprintf_unfiltered (gdb_stdlog,
5b03f266
AC
3514 "mips_o32_push_dummy_call: sp=0x%s allocated %ld\n",
3515 paddr_nz (sp), (long) align_up (len, 16));
ebafbe83
MS
3516
3517 /* Initialize the integer and float register pointers. */
4c7d22cb 3518 argreg = MIPS_A0_REGNUM;
72a155b4 3519 float_argreg = mips_fpa0_regnum (gdbarch);
ebafbe83 3520
bcb0cc15 3521 /* The struct_return pointer occupies the first parameter-passing reg. */
ebafbe83
MS
3522 if (struct_return)
3523 {
3524 if (mips_debug)
3525 fprintf_unfiltered (gdb_stdlog,
25ab4790 3526 "mips_o32_push_dummy_call: struct_return reg=%d 0x%s\n",
ebafbe83 3527 argreg, paddr_nz (struct_addr));
9c9acae0 3528 regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
1a69e1e4 3529 stack_offset += MIPS32_REGSIZE;
ebafbe83
MS
3530 }
3531
3532 /* Now load as many as possible of the first arguments into
3533 registers, and push the rest onto the stack. Loop thru args
3534 from first to last. */
3535 for (argnum = 0; argnum < nargs; argnum++)
3536 {
47a35522 3537 const gdb_byte *val;
ebafbe83 3538 struct value *arg = args[argnum];
4991999e 3539 struct type *arg_type = check_typedef (value_type (arg));
ebafbe83
MS
3540 int len = TYPE_LENGTH (arg_type);
3541 enum type_code typecode = TYPE_CODE (arg_type);
3542
3543 if (mips_debug)
3544 fprintf_unfiltered (gdb_stdlog,
25ab4790 3545 "mips_o32_push_dummy_call: %d len=%d type=%d",
46cac009
AC
3546 argnum + 1, len, (int) typecode);
3547
47a35522 3548 val = value_contents (arg);
46cac009
AC
3549
3550 /* 32-bit ABIs always start floating point arguments in an
3551 even-numbered floating point register. Round the FP register
3552 up before the check to see if there are any FP registers
3553 left. O32/O64 targets also pass the FP in the integer
3554 registers so also round up normal registers. */
2afd3f0a 3555 if (fp_register_arg_p (typecode, arg_type))
46cac009
AC
3556 {
3557 if ((float_argreg & 1))
3558 float_argreg++;
3559 }
3560
3561 /* Floating point arguments passed in registers have to be
3562 treated specially. On 32-bit architectures, doubles
3563 are passed in register pairs; the even register gets
3564 the low word, and the odd register gets the high word.
3565 On O32/O64, the first two floating point arguments are
3566 also copied to general registers, because MIPS16 functions
3567 don't use float registers for arguments. This duplication of
3568 arguments in general registers can't hurt non-MIPS16 functions
3569 because those registers are normally skipped. */
3570
3571 if (fp_register_arg_p (typecode, arg_type)
3572 && float_argreg <= MIPS_LAST_FP_ARG_REGNUM)
3573 {
8b07f6d8 3574 if (register_size (gdbarch, float_argreg) < 8 && len == 8)
46cac009 3575 {
72a155b4 3576 int low_offset = gdbarch_byte_order (gdbarch)
4c6b5505 3577 == BFD_ENDIAN_BIG ? 4 : 0;
46cac009
AC
3578 unsigned long regval;
3579
3580 /* Write the low word of the double to the even register(s). */
3581 regval = extract_unsigned_integer (val + low_offset, 4);
3582 if (mips_debug)
3583 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3584 float_argreg, phex (regval, 4));
9c9acae0 3585 regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
46cac009
AC
3586 if (mips_debug)
3587 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
3588 argreg, phex (regval, 4));
9c9acae0 3589 regcache_cooked_write_unsigned (regcache, argreg++, regval);
46cac009
AC
3590
3591 /* Write the high word of the double to the odd register(s). */
3592 regval = extract_unsigned_integer (val + 4 - low_offset, 4);
3593 if (mips_debug)
3594 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3595 float_argreg, phex (regval, 4));
9c9acae0 3596 regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
46cac009
AC
3597
3598 if (mips_debug)
3599 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
3600 argreg, phex (regval, 4));
9c9acae0 3601 regcache_cooked_write_unsigned (regcache, argreg++, regval);
46cac009
AC
3602 }
3603 else
3604 {
3605 /* This is a floating point value that fits entirely
3606 in a single register. */
3607 /* On 32 bit ABI's the float_argreg is further adjusted
6d82d43b 3608 above to ensure that it is even register aligned. */
46cac009
AC
3609 LONGEST regval = extract_unsigned_integer (val, len);
3610 if (mips_debug)
3611 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
3612 float_argreg, phex (regval, len));
9c9acae0 3613 regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
46cac009 3614 /* CAGNEY: 32 bit MIPS ABI's always reserve two FP
6d82d43b
AC
3615 registers for each argument. The below is (my
3616 guess) to ensure that the corresponding integer
3617 register has reserved the same space. */
46cac009
AC
3618 if (mips_debug)
3619 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
3620 argreg, phex (regval, len));
9c9acae0 3621 regcache_cooked_write_unsigned (regcache, argreg, regval);
2afd3f0a 3622 argreg += 2;
46cac009
AC
3623 }
3624 /* Reserve space for the FP register. */
1a69e1e4 3625 stack_offset += align_up (len, MIPS32_REGSIZE);
46cac009
AC
3626 }
3627 else
3628 {
3629 /* Copy the argument to general registers or the stack in
3630 register-sized pieces. Large arguments are split between
3631 registers and stack. */
1a69e1e4
DJ
3632 /* Note: structs whose size is not a multiple of MIPS32_REGSIZE
3633 are treated specially: Irix cc passes
d5ac5a39
AC
3634 them in registers where gcc sometimes puts them on the
3635 stack. For maximum compatibility, we will put them in
3636 both places. */
1a69e1e4
DJ
3637 int odd_sized_struct = (len > MIPS32_REGSIZE
3638 && len % MIPS32_REGSIZE != 0);
46cac009
AC
3639 /* Structures should be aligned to eight bytes (even arg registers)
3640 on MIPS_ABI_O32, if their first member has double precision. */
2afd3f0a 3641 if (mips_type_needs_double_align (arg_type))
46cac009
AC
3642 {
3643 if ((argreg & 1))
968b5391
MR
3644 {
3645 argreg++;
1a69e1e4 3646 stack_offset += MIPS32_REGSIZE;
968b5391 3647 }
46cac009 3648 }
46cac009
AC
3649 while (len > 0)
3650 {
3651 /* Remember if the argument was written to the stack. */
3652 int stack_used_p = 0;
1a69e1e4 3653 int partial_len = (len < MIPS32_REGSIZE ? len : MIPS32_REGSIZE);
46cac009
AC
3654
3655 if (mips_debug)
3656 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
3657 partial_len);
3658
3659 /* Write this portion of the argument to the stack. */
3660 if (argreg > MIPS_LAST_ARG_REGNUM
968b5391 3661 || odd_sized_struct)
46cac009
AC
3662 {
3663 /* Should shorter than int integer values be
3664 promoted to int before being stored? */
3665 int longword_offset = 0;
3666 CORE_ADDR addr;
3667 stack_used_p = 1;
46cac009
AC
3668
3669 if (mips_debug)
3670 {
3671 fprintf_unfiltered (gdb_stdlog, " - stack_offset=0x%s",
3672 paddr_nz (stack_offset));
3673 fprintf_unfiltered (gdb_stdlog, " longword_offset=0x%s",
3674 paddr_nz (longword_offset));
3675 }
3676
3677 addr = sp + stack_offset + longword_offset;
3678
3679 if (mips_debug)
3680 {
3681 int i;
6d82d43b 3682 fprintf_unfiltered (gdb_stdlog, " @0x%s ",
46cac009
AC
3683 paddr_nz (addr));
3684 for (i = 0; i < partial_len; i++)
3685 {
6d82d43b 3686 fprintf_unfiltered (gdb_stdlog, "%02x",
46cac009
AC
3687 val[i] & 0xff);
3688 }
3689 }
3690 write_memory (addr, val, partial_len);
3691 }
3692
3693 /* Note!!! This is NOT an else clause. Odd sized
968b5391 3694 structs may go thru BOTH paths. */
46cac009 3695 /* Write this portion of the argument to a general
6d82d43b 3696 purpose register. */
968b5391 3697 if (argreg <= MIPS_LAST_ARG_REGNUM)
46cac009
AC
3698 {
3699 LONGEST regval = extract_signed_integer (val, partial_len);
4246e332 3700 /* Value may need to be sign extended, because
1b13c4f6 3701 mips_isa_regsize() != mips_abi_regsize(). */
46cac009
AC
3702
3703 /* A non-floating-point argument being passed in a
3704 general register. If a struct or union, and if
3705 the remaining length is smaller than the register
3706 size, we have to adjust the register value on
3707 big endian targets.
3708
3709 It does not seem to be necessary to do the
3710 same for integral types.
3711
3712 Also don't do this adjustment on O64 binaries.
3713
3714 cagney/2001-07-23: gdb/179: Also, GCC, when
3715 outputting LE O32 with sizeof (struct) <
e914cb17
MR
3716 mips_abi_regsize(), generates a left shift
3717 as part of storing the argument in a register
3718 (the left shift isn't generated when
1b13c4f6 3719 sizeof (struct) >= mips_abi_regsize()). Since
480d3dd2
AC
3720 it is quite possible that this is GCC
3721 contradicting the LE/O32 ABI, GDB has not been
3722 adjusted to accommodate this. Either someone
3723 needs to demonstrate that the LE/O32 ABI
3724 specifies such a left shift OR this new ABI gets
3725 identified as such and GDB gets tweaked
3726 accordingly. */
3727
72a155b4 3728 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
1a69e1e4 3729 && partial_len < MIPS32_REGSIZE
06f9a1af
MR
3730 && (typecode == TYPE_CODE_STRUCT
3731 || typecode == TYPE_CODE_UNION))
1a69e1e4 3732 regval <<= ((MIPS32_REGSIZE - partial_len)
9ecf7166 3733 * TARGET_CHAR_BIT);
46cac009
AC
3734
3735 if (mips_debug)
3736 fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
3737 argreg,
1a69e1e4 3738 phex (regval, MIPS32_REGSIZE));
9c9acae0 3739 regcache_cooked_write_unsigned (regcache, argreg, regval);
46cac009
AC
3740 argreg++;
3741
3742 /* Prevent subsequent floating point arguments from
3743 being passed in floating point registers. */
3744 float_argreg = MIPS_LAST_FP_ARG_REGNUM + 1;
3745 }
3746
3747 len -= partial_len;
3748 val += partial_len;
3749
3750 /* Compute the the offset into the stack at which we
6d82d43b 3751 will copy the next parameter.
46cac009 3752
6d82d43b
AC
3753 In older ABIs, the caller reserved space for
3754 registers that contained arguments. This was loosely
3755 refered to as their "home". Consequently, space is
3756 always allocated. */
46cac009 3757
1a69e1e4 3758 stack_offset += align_up (partial_len, MIPS32_REGSIZE);
46cac009
AC
3759 }
3760 }
3761 if (mips_debug)
3762 fprintf_unfiltered (gdb_stdlog, "\n");
3763 }
3764
f10683bb 3765 regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
310e9b6a 3766
46cac009
AC
3767 /* Return adjusted stack pointer. */
3768 return sp;
3769}
3770
6d82d43b 3771static enum return_value_convention
c055b101
CV
3772mips_o32_return_value (struct gdbarch *gdbarch, struct type *func_type,
3773 struct type *type, struct regcache *regcache,
47a35522 3774 gdb_byte *readbuf, const gdb_byte *writebuf)
6d82d43b 3775{
72a155b4 3776 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
6d82d43b
AC
3777
3778 if (TYPE_CODE (type) == TYPE_CODE_STRUCT
3779 || TYPE_CODE (type) == TYPE_CODE_UNION
3780 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
3781 return RETURN_VALUE_STRUCT_CONVENTION;
3782 else if (TYPE_CODE (type) == TYPE_CODE_FLT
3783 && TYPE_LENGTH (type) == 4 && tdep->mips_fpu_type != MIPS_FPU_NONE)
3784 {
3785 /* A single-precision floating-point value. It fits in the
3786 least significant part of FP0. */
3787 if (mips_debug)
3788 fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
ba32f989 3789 mips_xfer_register (gdbarch, regcache,
72a155b4
UW
3790 gdbarch_num_regs (gdbarch)
3791 + mips_regnum (gdbarch)->fp0,
6d82d43b 3792 TYPE_LENGTH (type),
72a155b4 3793 gdbarch_byte_order (gdbarch),
4c6b5505 3794 readbuf, writebuf, 0);
6d82d43b
AC
3795 return RETURN_VALUE_REGISTER_CONVENTION;
3796 }
3797 else if (TYPE_CODE (type) == TYPE_CODE_FLT
3798 && TYPE_LENGTH (type) == 8 && tdep->mips_fpu_type != MIPS_FPU_NONE)
3799 {
3800 /* A double-precision floating-point value. The most
3801 significant part goes in FP1, and the least significant in
3802 FP0. */
3803 if (mips_debug)
3804 fprintf_unfiltered (gdb_stderr, "Return float in $fp1/$fp0\n");
72a155b4 3805 switch (gdbarch_byte_order (gdbarch))
6d82d43b
AC
3806 {
3807 case BFD_ENDIAN_LITTLE:
ba32f989 3808 mips_xfer_register (gdbarch, regcache,
72a155b4
UW
3809 gdbarch_num_regs (gdbarch)
3810 + mips_regnum (gdbarch)->fp0 +
3811 0, 4, gdbarch_byte_order (gdbarch),
4c6b5505 3812 readbuf, writebuf, 0);
ba32f989 3813 mips_xfer_register (gdbarch, regcache,
72a155b4
UW
3814 gdbarch_num_regs (gdbarch)
3815 + mips_regnum (gdbarch)->fp0 + 1,
3816 4, gdbarch_byte_order (gdbarch),
4c6b5505 3817 readbuf, writebuf, 4);
6d82d43b
AC
3818 break;
3819 case BFD_ENDIAN_BIG:
ba32f989 3820 mips_xfer_register (gdbarch, regcache,
72a155b4
UW
3821 gdbarch_num_regs (gdbarch)
3822 + mips_regnum (gdbarch)->fp0 + 1,
3823 4, gdbarch_byte_order (gdbarch),
4c6b5505 3824 readbuf, writebuf, 0);
ba32f989 3825 mips_xfer_register (gdbarch, regcache,
72a155b4
UW
3826 gdbarch_num_regs (gdbarch)
3827 + mips_regnum (gdbarch)->fp0 + 0,
3828 4, gdbarch_byte_order (gdbarch),
4c6b5505 3829 readbuf, writebuf, 4);
6d82d43b
AC
3830 break;
3831 default:
e2e0b3e5 3832 internal_error (__FILE__, __LINE__, _("bad switch"));
6d82d43b
AC
3833 }
3834 return RETURN_VALUE_REGISTER_CONVENTION;
3835 }
3836#if 0
3837 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
3838 && TYPE_NFIELDS (type) <= 2
3839 && TYPE_NFIELDS (type) >= 1
3840 && ((TYPE_NFIELDS (type) == 1
3841 && (TYPE_CODE (TYPE_FIELD_TYPE (type, 0))
3842 == TYPE_CODE_FLT))
3843 || (TYPE_NFIELDS (type) == 2
3844 && (TYPE_CODE (TYPE_FIELD_TYPE (type, 0))
3845 == TYPE_CODE_FLT)
3846 && (TYPE_CODE (TYPE_FIELD_TYPE (type, 1))
3847 == TYPE_CODE_FLT)))
3848 && tdep->mips_fpu_type != MIPS_FPU_NONE)
3849 {
3850 /* A struct that contains one or two floats. Each value is part
3851 in the least significant part of their floating point
3852 register.. */
870cd05e 3853 gdb_byte reg[MAX_REGISTER_SIZE];
6d82d43b
AC
3854 int regnum;
3855 int field;
72a155b4 3856 for (field = 0, regnum = mips_regnum (gdbarch)->fp0;
6d82d43b
AC
3857 field < TYPE_NFIELDS (type); field++, regnum += 2)
3858 {
3859 int offset = (FIELD_BITPOS (TYPE_FIELDS (type)[field])
3860 / TARGET_CHAR_BIT);
3861 if (mips_debug)
3862 fprintf_unfiltered (gdb_stderr, "Return float struct+%d\n",
3863 offset);
ba32f989
DJ
3864 mips_xfer_register (gdbarch, regcache,
3865 gdbarch_num_regs (gdbarch) + regnum,
6d82d43b 3866 TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)),
72a155b4 3867 gdbarch_byte_order (gdbarch),
4c6b5505 3868 readbuf, writebuf, offset);
6d82d43b
AC
3869 }
3870 return RETURN_VALUE_REGISTER_CONVENTION;
3871 }
3872#endif
3873#if 0
3874 else if (TYPE_CODE (type) == TYPE_CODE_STRUCT
3875 || TYPE_CODE (type) == TYPE_CODE_UNION)
3876 {
3877 /* A structure or union. Extract the left justified value,
3878 regardless of the byte order. I.e. DO NOT USE
3879 mips_xfer_lower. */
3880 int offset;
3881 int regnum;
4c7d22cb 3882 for (offset = 0, regnum = MIPS_V0_REGNUM;
6d82d43b 3883 offset < TYPE_LENGTH (type);
72a155b4 3884 offset += register_size (gdbarch, regnum), regnum++)
6d82d43b 3885 {
72a155b4 3886 int xfer = register_size (gdbarch, regnum);
6d82d43b
AC
3887 if (offset + xfer > TYPE_LENGTH (type))
3888 xfer = TYPE_LENGTH (type) - offset;
3889 if (mips_debug)
3890 fprintf_unfiltered (gdb_stderr, "Return struct+%d:%d in $%d\n",
3891 offset, xfer, regnum);
ba32f989
DJ
3892 mips_xfer_register (gdbarch, regcache,
3893 gdbarch_num_regs (gdbarch) + regnum, xfer,
6d82d43b
AC
3894 BFD_ENDIAN_UNKNOWN, readbuf, writebuf, offset);
3895 }
3896 return RETURN_VALUE_REGISTER_CONVENTION;
3897 }
3898#endif
3899 else
3900 {
3901 /* A scalar extract each part but least-significant-byte
3902 justified. o32 thinks registers are 4 byte, regardless of
1a69e1e4 3903 the ISA. */
6d82d43b
AC
3904 int offset;
3905 int regnum;
4c7d22cb 3906 for (offset = 0, regnum = MIPS_V0_REGNUM;
6d82d43b 3907 offset < TYPE_LENGTH (type);
1a69e1e4 3908 offset += MIPS32_REGSIZE, regnum++)
6d82d43b 3909 {
1a69e1e4 3910 int xfer = MIPS32_REGSIZE;
6d82d43b
AC
3911 if (offset + xfer > TYPE_LENGTH (type))
3912 xfer = TYPE_LENGTH (type) - offset;
3913 if (mips_debug)
3914 fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
3915 offset, xfer, regnum);
ba32f989
DJ
3916 mips_xfer_register (gdbarch, regcache,
3917 gdbarch_num_regs (gdbarch) + regnum, xfer,
72a155b4 3918 gdbarch_byte_order (gdbarch),
4c6b5505 3919 readbuf, writebuf, offset);
6d82d43b
AC
3920 }
3921 return RETURN_VALUE_REGISTER_CONVENTION;
3922 }
3923}
3924
3925/* O64 ABI. This is a hacked up kind of 64-bit version of the o32
3926 ABI. */
46cac009
AC
3927
3928static CORE_ADDR
7d9b040b 3929mips_o64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
6d82d43b
AC
3930 struct regcache *regcache, CORE_ADDR bp_addr,
3931 int nargs,
3932 struct value **args, CORE_ADDR sp,
3933 int struct_return, CORE_ADDR struct_addr)
46cac009
AC
3934{
3935 int argreg;
3936 int float_argreg;
3937 int argnum;
3938 int len = 0;
3939 int stack_offset = 0;
480d3dd2 3940 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7d9b040b 3941 CORE_ADDR func_addr = find_function_addr (function, NULL);
46cac009 3942
25ab4790
AC
3943 /* For shared libraries, "t9" needs to point at the function
3944 address. */
4c7d22cb 3945 regcache_cooked_write_signed (regcache, MIPS_T9_REGNUM, func_addr);
25ab4790
AC
3946
3947 /* Set the return address register to point to the entry point of
3948 the program, where a breakpoint lies in wait. */
4c7d22cb 3949 regcache_cooked_write_signed (regcache, MIPS_RA_REGNUM, bp_addr);
25ab4790 3950
46cac009
AC
3951 /* First ensure that the stack and structure return address (if any)
3952 are properly aligned. The stack has to be at least 64-bit
3953 aligned even on 32-bit machines, because doubles must be 64-bit
3954 aligned. For n32 and n64, stack frames need to be 128-bit
3955 aligned, so we round to this widest known alignment. */
3956
5b03f266
AC
3957 sp = align_down (sp, 16);
3958 struct_addr = align_down (struct_addr, 16);
46cac009
AC
3959
3960 /* Now make space on the stack for the args. */
3961 for (argnum = 0; argnum < nargs; argnum++)
968b5391
MR
3962 {
3963 struct type *arg_type = check_typedef (value_type (args[argnum]));
3964 int arglen = TYPE_LENGTH (arg_type);
3965
968b5391 3966 /* Allocate space on the stack. */
1a69e1e4 3967 len += align_up (arglen, MIPS64_REGSIZE);
968b5391 3968 }
5b03f266 3969 sp -= align_up (len, 16);
46cac009
AC
3970
3971 if (mips_debug)
6d82d43b 3972 fprintf_unfiltered (gdb_stdlog,
5b03f266
AC
3973 "mips_o64_push_dummy_call: sp=0x%s allocated %ld\n",
3974 paddr_nz (sp), (long) align_up (len, 16));
46cac009
AC
3975
3976 /* Initialize the integer and float register pointers. */
4c7d22cb 3977 argreg = MIPS_A0_REGNUM;
72a155b4 3978 float_argreg = mips_fpa0_regnum (gdbarch);
46cac009
AC
3979
3980 /* The struct_return pointer occupies the first parameter-passing reg. */
3981 if (struct_return)
3982 {
3983 if (mips_debug)
3984 fprintf_unfiltered (gdb_stdlog,
25ab4790 3985 "mips_o64_push_dummy_call: struct_return reg=%d 0x%s\n",
46cac009 3986 argreg, paddr_nz (struct_addr));
9c9acae0 3987 regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
1a69e1e4 3988 stack_offset += MIPS64_REGSIZE;
46cac009
AC
3989 }
3990
3991 /* Now load as many as possible of the first arguments into
3992 registers, and push the rest onto the stack. Loop thru args
3993 from first to last. */
3994 for (argnum = 0; argnum < nargs; argnum++)
3995 {
47a35522 3996 const gdb_byte *val;
46cac009 3997 struct value *arg = args[argnum];
4991999e 3998 struct type *arg_type = check_typedef (value_type (arg));
46cac009
AC
3999 int len = TYPE_LENGTH (arg_type);
4000 enum type_code typecode = TYPE_CODE (arg_type);
4001
4002 if (mips_debug)
4003 fprintf_unfiltered (gdb_stdlog,
25ab4790 4004 "mips_o64_push_dummy_call: %d len=%d type=%d",
ebafbe83
MS
4005 argnum + 1, len, (int) typecode);
4006
47a35522 4007 val = value_contents (arg);
ebafbe83 4008
ebafbe83
MS
4009 /* Floating point arguments passed in registers have to be
4010 treated specially. On 32-bit architectures, doubles
4011 are passed in register pairs; the even register gets
4012 the low word, and the odd register gets the high word.
4013 On O32/O64, the first two floating point arguments are
4014 also copied to general registers, because MIPS16 functions
4015 don't use float registers for arguments. This duplication of
4016 arguments in general registers can't hurt non-MIPS16 functions
4017 because those registers are normally skipped. */
4018
4019 if (fp_register_arg_p (typecode, arg_type)
4020 && float_argreg <= MIPS_LAST_FP_ARG_REGNUM)
4021 {
2afd3f0a
MR
4022 LONGEST regval = extract_unsigned_integer (val, len);
4023 if (mips_debug)
4024 fprintf_unfiltered (gdb_stdlog, " - fpreg=%d val=%s",
4025 float_argreg, phex (regval, len));
9c9acae0 4026 regcache_cooked_write_unsigned (regcache, float_argreg++, regval);
2afd3f0a
MR
4027 if (mips_debug)
4028 fprintf_unfiltered (gdb_stdlog, " - reg=%d val=%s",
4029 argreg, phex (regval, len));
9c9acae0 4030 regcache_cooked_write_unsigned (regcache, argreg, regval);
2afd3f0a 4031 argreg++;
ebafbe83 4032 /* Reserve space for the FP register. */
1a69e1e4 4033 stack_offset += align_up (len, MIPS64_REGSIZE);
ebafbe83
MS
4034 }
4035 else
4036 {
4037 /* Copy the argument to general registers or the stack in
4038 register-sized pieces. Large arguments are split between
4039 registers and stack. */
1a69e1e4 4040 /* Note: structs whose size is not a multiple of MIPS64_REGSIZE
436aafc4
MR
4041 are treated specially: Irix cc passes them in registers
4042 where gcc sometimes puts them on the stack. For maximum
4043 compatibility, we will put them in both places. */
1a69e1e4
DJ
4044 int odd_sized_struct = (len > MIPS64_REGSIZE
4045 && len % MIPS64_REGSIZE != 0);
ebafbe83
MS
4046 while (len > 0)
4047 {
4048 /* Remember if the argument was written to the stack. */
4049 int stack_used_p = 0;
1a69e1e4 4050 int partial_len = (len < MIPS64_REGSIZE ? len : MIPS64_REGSIZE);
ebafbe83
MS
4051
4052 if (mips_debug)
4053 fprintf_unfiltered (gdb_stdlog, " -- partial=%d",
4054 partial_len);
4055
4056 /* Write this portion of the argument to the stack. */
4057 if (argreg > MIPS_LAST_ARG_REGNUM
968b5391 4058 || odd_sized_struct)
ebafbe83
MS
4059 {
4060 /* Should shorter than int integer values be
4061 promoted to int before being stored? */
4062 int longword_offset = 0;
4063 CORE_ADDR addr;
4064 stack_used_p = 1;
72a155b4 4065 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
ebafbe83 4066 {
1a69e1e4
DJ
4067 if ((typecode == TYPE_CODE_INT
4068 || typecode == TYPE_CODE_PTR
4069 || typecode == TYPE_CODE_FLT)
4070 && len <= 4)
4071 longword_offset = MIPS64_REGSIZE - len;
ebafbe83
MS
4072 }
4073
4074 if (mips_debug)
4075 {
4076 fprintf_unfiltered (gdb_stdlog, " - stack_offset=0x%s",
4077 paddr_nz (stack_offset));
4078 fprintf_unfiltered (gdb_stdlog, " longword_offset=0x%s",
4079 paddr_nz (longword_offset));
4080 }
4081
4082 addr = sp + stack_offset + longword_offset;
4083
4084 if (mips_debug)
4085 {
4086 int i;
6d82d43b 4087 fprintf_unfiltered (gdb_stdlog, " @0x%s ",
ebafbe83
MS
4088 paddr_nz (addr));
4089 for (i = 0; i < partial_len; i++)
4090 {
6d82d43b 4091 fprintf_unfiltered (gdb_stdlog, "%02x",
ebafbe83
MS
4092 val[i] & 0xff);
4093 }
4094 }
4095 write_memory (addr, val, partial_len);
4096 }
4097
4098 /* Note!!! This is NOT an else clause. Odd sized
968b5391 4099 structs may go thru BOTH paths. */
ebafbe83 4100 /* Write this portion of the argument to a general
6d82d43b 4101 purpose register. */
968b5391 4102 if (argreg <= MIPS_LAST_ARG_REGNUM)
ebafbe83
MS
4103 {
4104 LONGEST regval = extract_signed_integer (val, partial_len);
4246e332 4105 /* Value may need to be sign extended, because
1b13c4f6 4106 mips_isa_regsize() != mips_abi_regsize(). */
ebafbe83
MS
4107
4108 /* A non-floating-point argument being passed in a
4109 general register. If a struct or union, and if
4110 the remaining length is smaller than the register
4111 size, we have to adjust the register value on
4112 big endian targets.
4113
4114 It does not seem to be necessary to do the
401835eb 4115 same for integral types. */
480d3dd2 4116
72a155b4 4117 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
1a69e1e4 4118 && partial_len < MIPS64_REGSIZE
06f9a1af
MR
4119 && (typecode == TYPE_CODE_STRUCT
4120 || typecode == TYPE_CODE_UNION))
1a69e1e4 4121 regval <<= ((MIPS64_REGSIZE - partial_len)
9ecf7166 4122 * TARGET_CHAR_BIT);
ebafbe83
MS
4123
4124 if (mips_debug)
4125 fprintf_filtered (gdb_stdlog, " - reg=%d val=%s",
4126 argreg,
1a69e1e4 4127 phex (regval, MIPS64_REGSIZE));
9c9acae0 4128 regcache_cooked_write_unsigned (regcache, argreg, regval);
ebafbe83
MS
4129 argreg++;
4130
4131 /* Prevent subsequent floating point arguments from
4132 being passed in floating point registers. */
4133 float_argreg = MIPS_LAST_FP_ARG_REGNUM + 1;
4134 }
4135
4136 len -= partial_len;
4137 val += partial_len;
4138
4139 /* Compute the the offset into the stack at which we
6d82d43b 4140 will copy the next parameter.
ebafbe83 4141
6d82d43b
AC
4142 In older ABIs, the caller reserved space for
4143 registers that contained arguments. This was loosely
4144 refered to as their "home". Consequently, space is
4145 always allocated. */
ebafbe83 4146
1a69e1e4 4147 stack_offset += align_up (partial_len, MIPS64_REGSIZE);
ebafbe83
MS
4148 }
4149 }
4150 if (mips_debug)
4151 fprintf_unfiltered (gdb_stdlog, "\n");
4152 }
4153
f10683bb 4154 regcache_cooked_write_signed (regcache, MIPS_SP_REGNUM, sp);
310e9b6a 4155
ebafbe83
MS
4156 /* Return adjusted stack pointer. */
4157 return sp;
4158}
4159
9c8fdbfa 4160static enum return_value_convention
c055b101 4161mips_o64_return_value (struct gdbarch *gdbarch, struct type *func_type,
9c8fdbfa 4162 struct type *type, struct regcache *regcache,
47a35522 4163 gdb_byte *readbuf, const gdb_byte *writebuf)
6d82d43b 4164{
72a155b4 4165 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
7a076fd2
FF
4166
4167 if (TYPE_CODE (type) == TYPE_CODE_STRUCT
4168 || TYPE_CODE (type) == TYPE_CODE_UNION
4169 || TYPE_CODE (type) == TYPE_CODE_ARRAY)
4170 return RETURN_VALUE_STRUCT_CONVENTION;
4171 else if (fp_register_arg_p (TYPE_CODE (type), type))
4172 {
4173 /* A floating-point value. It fits in the least significant
4174 part of FP0. */
4175 if (mips_debug)
4176 fprintf_unfiltered (gdb_stderr, "Return float in $fp0\n");
ba32f989 4177 mips_xfer_register (gdbarch, regcache,
72a155b4
UW
4178 gdbarch_num_regs (gdbarch)
4179 + mips_regnum (gdbarch)->fp0,
7a076fd2 4180 TYPE_LENGTH (type),
72a155b4 4181 gdbarch_byte_order (gdbarch),
4c6b5505 4182 readbuf, writebuf, 0);
7a076fd2
FF
4183 return RETURN_VALUE_REGISTER_CONVENTION;
4184 }
4185 else
4186 {
4187 /* A scalar extract each part but least-significant-byte
4188 justified. */
4189 int offset;
4190 int regnum;
4191 for (offset = 0, regnum = MIPS_V0_REGNUM;
4192 offset < TYPE_LENGTH (type);
1a69e1e4 4193 offset += MIPS64_REGSIZE, regnum++)
7a076fd2 4194 {
1a69e1e4 4195 int xfer = MIPS64_REGSIZE;
7a076fd2
FF
4196 if (offset + xfer > TYPE_LENGTH (type))
4197 xfer = TYPE_LENGTH (type) - offset;
4198 if (mips_debug)
4199 fprintf_unfiltered (gdb_stderr, "Return scalar+%d:%d in $%d\n",
4200 offset, xfer, regnum);
ba32f989
DJ
4201 mips_xfer_register (gdbarch, regcache,
4202 gdbarch_num_regs (gdbarch) + regnum,
72a155b4 4203 xfer, gdbarch_byte_order (gdbarch),
4c6b5505 4204 readbuf, writebuf, offset);
7a076fd2
FF
4205 }
4206 return RETURN_VALUE_REGISTER_CONVENTION;
4207 }
6d82d43b
AC
4208}
4209
dd824b04
DJ
4210/* Floating point register management.
4211
4212 Background: MIPS1 & 2 fp registers are 32 bits wide. To support
4213 64bit operations, these early MIPS cpus treat fp register pairs
4214 (f0,f1) as a single register (d0). Later MIPS cpu's have 64 bit fp
4215 registers and offer a compatibility mode that emulates the MIPS2 fp
4216 model. When operating in MIPS2 fp compat mode, later cpu's split
4217 double precision floats into two 32-bit chunks and store them in
4218 consecutive fp regs. To display 64-bit floats stored in this
4219 fashion, we have to combine 32 bits from f0 and 32 bits from f1.
4220 Throw in user-configurable endianness and you have a real mess.
4221
4222 The way this works is:
4223 - If we are in 32-bit mode or on a 32-bit processor, then a 64-bit
4224 double-precision value will be split across two logical registers.
4225 The lower-numbered logical register will hold the low-order bits,
4226 regardless of the processor's endianness.
4227 - If we are on a 64-bit processor, and we are looking for a
4228 single-precision value, it will be in the low ordered bits
4229 of a 64-bit GPR (after mfc1, for example) or a 64-bit register
4230 save slot in memory.
4231 - If we are in 64-bit mode, everything is straightforward.
4232
4233 Note that this code only deals with "live" registers at the top of the
4234 stack. We will attempt to deal with saved registers later, when
4235 the raw/cooked register interface is in place. (We need a general
4236 interface that can deal with dynamic saved register sizes -- fp
4237 regs could be 32 bits wide in one frame and 64 on the frame above
4238 and below). */
4239
67b2c998
DJ
4240static struct type *
4241mips_float_register_type (void)
4242{
8da61cc4 4243 return builtin_type_ieee_single;
67b2c998
DJ
4244}
4245
4246static struct type *
4247mips_double_register_type (void)
4248{
8da61cc4 4249 return builtin_type_ieee_double;
67b2c998
DJ
4250}
4251
dd824b04
DJ
4252/* Copy a 32-bit single-precision value from the current frame
4253 into rare_buffer. */
4254
4255static void
e11c53d2 4256mips_read_fp_register_single (struct frame_info *frame, int regno,
47a35522 4257 gdb_byte *rare_buffer)
dd824b04 4258{
72a155b4
UW
4259 struct gdbarch *gdbarch = get_frame_arch (frame);
4260 int raw_size = register_size (gdbarch, regno);
47a35522 4261 gdb_byte *raw_buffer = alloca (raw_size);
dd824b04 4262
e11c53d2 4263 if (!frame_register_read (frame, regno, raw_buffer))
c9f4d572 4264 error (_("can't read register %d (%s)"),
72a155b4 4265 regno, gdbarch_register_name (gdbarch, regno));
dd824b04
DJ
4266 if (raw_size == 8)
4267 {
4268 /* We have a 64-bit value for this register. Find the low-order
6d82d43b 4269 32 bits. */
dd824b04
DJ
4270 int offset;
4271
72a155b4 4272 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
dd824b04
DJ
4273 offset = 4;
4274 else
4275 offset = 0;
4276
4277 memcpy (rare_buffer, raw_buffer + offset, 4);
4278 }
4279 else
4280 {
4281 memcpy (rare_buffer, raw_buffer, 4);
4282 }
4283}
4284
4285/* Copy a 64-bit double-precision value from the current frame into
4286 rare_buffer. This may include getting half of it from the next
4287 register. */
4288
4289static void
e11c53d2 4290mips_read_fp_register_double (struct frame_info *frame, int regno,
47a35522 4291 gdb_byte *rare_buffer)
dd824b04 4292{
72a155b4
UW
4293 struct gdbarch *gdbarch = get_frame_arch (frame);
4294 int raw_size = register_size (gdbarch, regno);
dd824b04 4295
9c9acae0 4296 if (raw_size == 8 && !mips2_fp_compat (frame))
dd824b04
DJ
4297 {
4298 /* We have a 64-bit value for this register, and we should use
6d82d43b 4299 all 64 bits. */
e11c53d2 4300 if (!frame_register_read (frame, regno, rare_buffer))
c9f4d572 4301 error (_("can't read register %d (%s)"),
72a155b4 4302 regno, gdbarch_register_name (gdbarch, regno));
dd824b04
DJ
4303 }
4304 else
4305 {
72a155b4 4306 int rawnum = regno % gdbarch_num_regs (gdbarch);
82e91389 4307
72a155b4 4308 if ((rawnum - mips_regnum (gdbarch)->fp0) & 1)
dd824b04 4309 internal_error (__FILE__, __LINE__,
e2e0b3e5
AC
4310 _("mips_read_fp_register_double: bad access to "
4311 "odd-numbered FP register"));
dd824b04
DJ
4312
4313 /* mips_read_fp_register_single will find the correct 32 bits from
6d82d43b 4314 each register. */
72a155b4 4315 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
dd824b04 4316 {
e11c53d2
AC
4317 mips_read_fp_register_single (frame, regno, rare_buffer + 4);
4318 mips_read_fp_register_single (frame, regno + 1, rare_buffer);
dd824b04 4319 }
361d1df0 4320 else
dd824b04 4321 {
e11c53d2
AC
4322 mips_read_fp_register_single (frame, regno, rare_buffer);
4323 mips_read_fp_register_single (frame, regno + 1, rare_buffer + 4);
dd824b04
DJ
4324 }
4325 }
4326}
4327
c906108c 4328static void
e11c53d2
AC
4329mips_print_fp_register (struct ui_file *file, struct frame_info *frame,
4330 int regnum)
c5aa993b 4331{ /* do values for FP (float) regs */
72a155b4 4332 struct gdbarch *gdbarch = get_frame_arch (frame);
47a35522 4333 gdb_byte *raw_buffer;
3903d437
AC
4334 double doub, flt1; /* doubles extracted from raw hex data */
4335 int inv1, inv2;
c5aa993b 4336
72a155b4 4337 raw_buffer = alloca (2 * register_size (gdbarch, mips_regnum (gdbarch)->fp0));
c906108c 4338
72a155b4 4339 fprintf_filtered (file, "%s:", gdbarch_register_name (gdbarch, regnum));
c9f4d572 4340 fprintf_filtered (file, "%*s",
72a155b4 4341 4 - (int) strlen (gdbarch_register_name (gdbarch, regnum)),
e11c53d2 4342 "");
f0ef6b29 4343
72a155b4 4344 if (register_size (gdbarch, regnum) == 4 || mips2_fp_compat (frame))
c906108c 4345 {
f0ef6b29
KB
4346 /* 4-byte registers: Print hex and floating. Also print even
4347 numbered registers as doubles. */
e11c53d2 4348 mips_read_fp_register_single (frame, regnum, raw_buffer);
67b2c998 4349 flt1 = unpack_double (mips_float_register_type (), raw_buffer, &inv1);
c5aa993b 4350
6d82d43b
AC
4351 print_scalar_formatted (raw_buffer, builtin_type_uint32, 'x', 'w',
4352 file);
dd824b04 4353
e11c53d2 4354 fprintf_filtered (file, " flt: ");
1adad886 4355 if (inv1)
e11c53d2 4356 fprintf_filtered (file, " <invalid float> ");
1adad886 4357 else
e11c53d2 4358 fprintf_filtered (file, "%-17.9g", flt1);
1adad886 4359
72a155b4 4360 if ((regnum - gdbarch_num_regs (gdbarch)) % 2 == 0)
f0ef6b29 4361 {
e11c53d2 4362 mips_read_fp_register_double (frame, regnum, raw_buffer);
f0ef6b29 4363 doub = unpack_double (mips_double_register_type (), raw_buffer,
6d82d43b 4364 &inv2);
1adad886 4365
e11c53d2 4366 fprintf_filtered (file, " dbl: ");
f0ef6b29 4367 if (inv2)
e11c53d2 4368 fprintf_filtered (file, "<invalid double>");
f0ef6b29 4369 else
e11c53d2 4370 fprintf_filtered (file, "%-24.17g", doub);
f0ef6b29 4371 }
c906108c
SS
4372 }
4373 else
dd824b04 4374 {
f0ef6b29 4375 /* Eight byte registers: print each one as hex, float and double. */
e11c53d2 4376 mips_read_fp_register_single (frame, regnum, raw_buffer);
2f38ef89 4377 flt1 = unpack_double (mips_float_register_type (), raw_buffer, &inv1);
c906108c 4378
e11c53d2 4379 mips_read_fp_register_double (frame, regnum, raw_buffer);
f0ef6b29
KB
4380 doub = unpack_double (mips_double_register_type (), raw_buffer, &inv2);
4381
361d1df0 4382
6d82d43b
AC
4383 print_scalar_formatted (raw_buffer, builtin_type_uint64, 'x', 'g',
4384 file);
f0ef6b29 4385
e11c53d2 4386 fprintf_filtered (file, " flt: ");
1adad886 4387 if (inv1)
e11c53d2 4388 fprintf_filtered (file, "<invalid float>");
1adad886 4389 else
e11c53d2 4390 fprintf_filtered (file, "%-17.9g", flt1);
1adad886 4391
e11c53d2 4392 fprintf_filtered (file, " dbl: ");
f0ef6b29 4393 if (inv2)
e11c53d2 4394 fprintf_filtered (file, "<invalid double>");
1adad886 4395 else
e11c53d2 4396 fprintf_filtered (file, "%-24.17g", doub);
f0ef6b29
KB
4397 }
4398}
4399
4400static void
e11c53d2 4401mips_print_register (struct ui_file *file, struct frame_info *frame,
0cc93a06 4402 int regnum)
f0ef6b29 4403{
a4b8ebc8 4404 struct gdbarch *gdbarch = get_frame_arch (frame);
47a35522 4405 gdb_byte raw_buffer[MAX_REGISTER_SIZE];
f0ef6b29 4406 int offset;
1adad886 4407
7b9ee6a8 4408 if (TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT)
f0ef6b29 4409 {
e11c53d2 4410 mips_print_fp_register (file, frame, regnum);
f0ef6b29
KB
4411 return;
4412 }
4413
4414 /* Get the data in raw format. */
e11c53d2 4415 if (!frame_register_read (frame, regnum, raw_buffer))
f0ef6b29 4416 {
c9f4d572 4417 fprintf_filtered (file, "%s: [Invalid]",
72a155b4 4418 gdbarch_register_name (gdbarch, regnum));
f0ef6b29 4419 return;
c906108c 4420 }
f0ef6b29 4421
72a155b4 4422 fputs_filtered (gdbarch_register_name (gdbarch, regnum), file);
f0ef6b29
KB
4423
4424 /* The problem with printing numeric register names (r26, etc.) is that
4425 the user can't use them on input. Probably the best solution is to
4426 fix it so that either the numeric or the funky (a2, etc.) names
4427 are accepted on input. */
4428 if (regnum < MIPS_NUMREGS)
e11c53d2 4429 fprintf_filtered (file, "(r%d): ", regnum);
f0ef6b29 4430 else
e11c53d2 4431 fprintf_filtered (file, ": ");
f0ef6b29 4432
72a155b4 4433 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
6d82d43b 4434 offset =
72a155b4 4435 register_size (gdbarch, regnum) - register_size (gdbarch, regnum);
f0ef6b29
KB
4436 else
4437 offset = 0;
4438
6d82d43b 4439 print_scalar_formatted (raw_buffer + offset,
7b9ee6a8 4440 register_type (gdbarch, regnum), 'x', 0,
6d82d43b 4441 file);
c906108c
SS
4442}
4443
f0ef6b29
KB
4444/* Replacement for generic do_registers_info.
4445 Print regs in pretty columns. */
4446
4447static int
e11c53d2
AC
4448print_fp_register_row (struct ui_file *file, struct frame_info *frame,
4449 int regnum)
f0ef6b29 4450{
e11c53d2
AC
4451 fprintf_filtered (file, " ");
4452 mips_print_fp_register (file, frame, regnum);
4453 fprintf_filtered (file, "\n");
f0ef6b29
KB
4454 return regnum + 1;
4455}
4456
4457
c906108c
SS
4458/* Print a row's worth of GP (int) registers, with name labels above */
4459
4460static int
e11c53d2 4461print_gp_register_row (struct ui_file *file, struct frame_info *frame,
a4b8ebc8 4462 int start_regnum)
c906108c 4463{
a4b8ebc8 4464 struct gdbarch *gdbarch = get_frame_arch (frame);
c906108c 4465 /* do values for GP (int) regs */
47a35522 4466 gdb_byte raw_buffer[MAX_REGISTER_SIZE];
d5ac5a39 4467 int ncols = (mips_abi_regsize (gdbarch) == 8 ? 4 : 8); /* display cols per row */
c906108c 4468 int col, byte;
a4b8ebc8 4469 int regnum;
c906108c
SS
4470
4471 /* For GP registers, we print a separate row of names above the vals */
a4b8ebc8 4472 for (col = 0, regnum = start_regnum;
72a155b4
UW
4473 col < ncols && regnum < gdbarch_num_regs (gdbarch)
4474 + gdbarch_num_pseudo_regs (gdbarch);
f57d151a 4475 regnum++)
c906108c 4476 {
72a155b4 4477 if (*gdbarch_register_name (gdbarch, regnum) == '\0')
c5aa993b 4478 continue; /* unused register */
7b9ee6a8 4479 if (TYPE_CODE (register_type (gdbarch, regnum)) ==
6d82d43b 4480 TYPE_CODE_FLT)
c5aa993b 4481 break; /* end the row: reached FP register */
0cc93a06 4482 /* Large registers are handled separately. */
72a155b4 4483 if (register_size (gdbarch, regnum) > mips_abi_regsize (gdbarch))
0cc93a06
DJ
4484 {
4485 if (col > 0)
4486 break; /* End the row before this register. */
4487
4488 /* Print this register on a row by itself. */
4489 mips_print_register (file, frame, regnum);
4490 fprintf_filtered (file, "\n");
4491 return regnum + 1;
4492 }
d05f6826
DJ
4493 if (col == 0)
4494 fprintf_filtered (file, " ");
6d82d43b 4495 fprintf_filtered (file,
72a155b4
UW
4496 mips_abi_regsize (gdbarch) == 8 ? "%17s" : "%9s",
4497 gdbarch_register_name (gdbarch, regnum));
c906108c
SS
4498 col++;
4499 }
d05f6826
DJ
4500
4501 if (col == 0)
4502 return regnum;
4503
a4b8ebc8 4504 /* print the R0 to R31 names */
72a155b4 4505 if ((start_regnum % gdbarch_num_regs (gdbarch)) < MIPS_NUMREGS)
f57d151a 4506 fprintf_filtered (file, "\n R%-4d",
72a155b4 4507 start_regnum % gdbarch_num_regs (gdbarch));
20e6603c
AC
4508 else
4509 fprintf_filtered (file, "\n ");
c906108c 4510
c906108c 4511 /* now print the values in hex, 4 or 8 to the row */
a4b8ebc8 4512 for (col = 0, regnum = start_regnum;
72a155b4
UW
4513 col < ncols && regnum < gdbarch_num_regs (gdbarch)
4514 + gdbarch_num_pseudo_regs (gdbarch);
f57d151a 4515 regnum++)
c906108c 4516 {
72a155b4 4517 if (*gdbarch_register_name (gdbarch, regnum) == '\0')
c5aa993b 4518 continue; /* unused register */
7b9ee6a8 4519 if (TYPE_CODE (register_type (gdbarch, regnum)) ==
6d82d43b 4520 TYPE_CODE_FLT)
c5aa993b 4521 break; /* end row: reached FP register */
72a155b4 4522 if (register_size (gdbarch, regnum) > mips_abi_regsize (gdbarch))
0cc93a06
DJ
4523 break; /* End row: large register. */
4524
c906108c 4525 /* OK: get the data in raw format. */
e11c53d2 4526 if (!frame_register_read (frame, regnum, raw_buffer))
c9f4d572 4527 error (_("can't read register %d (%s)"),
72a155b4 4528 regnum, gdbarch_register_name (gdbarch, regnum));
c906108c 4529 /* pad small registers */
4246e332 4530 for (byte = 0;
72a155b4
UW
4531 byte < (mips_abi_regsize (gdbarch)
4532 - register_size (gdbarch, regnum)); byte++)
c906108c
SS
4533 printf_filtered (" ");
4534 /* Now print the register value in hex, endian order. */
72a155b4 4535 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
6d82d43b 4536 for (byte =
72a155b4
UW
4537 register_size (gdbarch, regnum) - register_size (gdbarch, regnum);
4538 byte < register_size (gdbarch, regnum); byte++)
47a35522 4539 fprintf_filtered (file, "%02x", raw_buffer[byte]);
c906108c 4540 else
72a155b4 4541 for (byte = register_size (gdbarch, regnum) - 1;
6d82d43b 4542 byte >= 0; byte--)
47a35522 4543 fprintf_filtered (file, "%02x", raw_buffer[byte]);
e11c53d2 4544 fprintf_filtered (file, " ");
c906108c
SS
4545 col++;
4546 }
c5aa993b 4547 if (col > 0) /* ie. if we actually printed anything... */
e11c53d2 4548 fprintf_filtered (file, "\n");
c906108c
SS
4549
4550 return regnum;
4551}
4552
4553/* MIPS_DO_REGISTERS_INFO(): called by "info register" command */
4554
bf1f5b4c 4555static void
e11c53d2
AC
4556mips_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
4557 struct frame_info *frame, int regnum, int all)
c906108c 4558{
c5aa993b 4559 if (regnum != -1) /* do one specified register */
c906108c 4560 {
72a155b4
UW
4561 gdb_assert (regnum >= gdbarch_num_regs (gdbarch));
4562 if (*(gdbarch_register_name (gdbarch, regnum)) == '\0')
8a3fe4f8 4563 error (_("Not a valid register for the current processor type"));
c906108c 4564
0cc93a06 4565 mips_print_register (file, frame, regnum);
e11c53d2 4566 fprintf_filtered (file, "\n");
c906108c 4567 }
c5aa993b
JM
4568 else
4569 /* do all (or most) registers */
c906108c 4570 {
72a155b4
UW
4571 regnum = gdbarch_num_regs (gdbarch);
4572 while (regnum < gdbarch_num_regs (gdbarch)
4573 + gdbarch_num_pseudo_regs (gdbarch))
c906108c 4574 {
7b9ee6a8 4575 if (TYPE_CODE (register_type (gdbarch, regnum)) ==
6d82d43b 4576 TYPE_CODE_FLT)
e11c53d2
AC
4577 {
4578 if (all) /* true for "INFO ALL-REGISTERS" command */
4579 regnum = print_fp_register_row (file, frame, regnum);
4580 else
4581 regnum += MIPS_NUMREGS; /* skip floating point regs */
4582 }
c906108c 4583 else
e11c53d2 4584 regnum = print_gp_register_row (file, frame, regnum);
c906108c
SS
4585 }
4586 }
4587}
4588
c906108c
SS
4589/* Is this a branch with a delay slot? */
4590
c906108c 4591static int
acdb74a0 4592is_delayed (unsigned long insn)
c906108c
SS
4593{
4594 int i;
4595 for (i = 0; i < NUMOPCODES; ++i)
4596 if (mips_opcodes[i].pinfo != INSN_MACRO
4597 && (insn & mips_opcodes[i].mask) == mips_opcodes[i].match)
4598 break;
4599 return (i < NUMOPCODES
4600 && (mips_opcodes[i].pinfo & (INSN_UNCOND_BRANCH_DELAY
4601 | INSN_COND_BRANCH_DELAY
4602 | INSN_COND_BRANCH_LIKELY)));
4603}
4604
4605int
3352ef37
AC
4606mips_single_step_through_delay (struct gdbarch *gdbarch,
4607 struct frame_info *frame)
c906108c 4608{
3352ef37 4609 CORE_ADDR pc = get_frame_pc (frame);
47a35522 4610 gdb_byte buf[MIPS_INSN32_SIZE];
c906108c
SS
4611
4612 /* There is no branch delay slot on MIPS16. */
0fe7e7c8 4613 if (mips_pc_is_mips16 (pc))
c906108c
SS
4614 return 0;
4615
06648491
MK
4616 if (!breakpoint_here_p (pc + 4))
4617 return 0;
4618
3352ef37
AC
4619 if (!safe_frame_unwind_memory (frame, pc, buf, sizeof buf))
4620 /* If error reading memory, guess that it is not a delayed
4621 branch. */
c906108c 4622 return 0;
4c7d22cb 4623 return is_delayed (extract_unsigned_integer (buf, sizeof buf));
c906108c
SS
4624}
4625
6d82d43b
AC
4626/* To skip prologues, I use this predicate. Returns either PC itself
4627 if the code at PC does not look like a function prologue; otherwise
4628 returns an address that (if we're lucky) follows the prologue. If
4629 LENIENT, then we must skip everything which is involved in setting
4630 up the frame (it's OK to skip more, just so long as we don't skip
4631 anything which might clobber the registers which are being saved.
4632 We must skip more in the case where part of the prologue is in the
4633 delay slot of a non-prologue instruction). */
4634
4635static CORE_ADDR
6093d2eb 4636mips_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
6d82d43b 4637{
8b622e6a
AC
4638 CORE_ADDR limit_pc;
4639 CORE_ADDR func_addr;
4640
6d82d43b
AC
4641 /* See if we can determine the end of the prologue via the symbol table.
4642 If so, then return either PC, or the PC after the prologue, whichever
4643 is greater. */
8b622e6a
AC
4644 if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
4645 {
4646 CORE_ADDR post_prologue_pc = skip_prologue_using_sal (func_addr);
4647 if (post_prologue_pc != 0)
4648 return max (pc, post_prologue_pc);
4649 }
6d82d43b
AC
4650
4651 /* Can't determine prologue from the symbol table, need to examine
4652 instructions. */
4653
98b4dd94
JB
4654 /* Find an upper limit on the function prologue using the debug
4655 information. If the debug information could not be used to provide
4656 that bound, then use an arbitrary large number as the upper bound. */
4657 limit_pc = skip_prologue_using_sal (pc);
4658 if (limit_pc == 0)
4659 limit_pc = pc + 100; /* Magic. */
4660
0fe7e7c8 4661 if (mips_pc_is_mips16 (pc))
a65bbe44 4662 return mips16_scan_prologue (pc, limit_pc, NULL, NULL);
6d82d43b 4663 else
a65bbe44 4664 return mips32_scan_prologue (pc, limit_pc, NULL, NULL);
88658117
AC
4665}
4666
97ab0fdd
MR
4667/* Check whether the PC is in a function epilogue (32-bit version).
4668 This is a helper function for mips_in_function_epilogue_p. */
4669static int
4670mips32_in_function_epilogue_p (CORE_ADDR pc)
4671{
4672 CORE_ADDR func_addr = 0, func_end = 0;
4673
4674 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
4675 {
4676 /* The MIPS epilogue is max. 12 bytes long. */
4677 CORE_ADDR addr = func_end - 12;
4678
4679 if (addr < func_addr + 4)
4680 addr = func_addr + 4;
4681 if (pc < addr)
4682 return 0;
4683
4684 for (; pc < func_end; pc += MIPS_INSN32_SIZE)
4685 {
4686 unsigned long high_word;
4687 unsigned long inst;
4688
4689 inst = mips_fetch_instruction (pc);
4690 high_word = (inst >> 16) & 0xffff;
4691
4692 if (high_word != 0x27bd /* addiu $sp,$sp,offset */
4693 && high_word != 0x67bd /* daddiu $sp,$sp,offset */
4694 && inst != 0x03e00008 /* jr $ra */
4695 && inst != 0x00000000) /* nop */
4696 return 0;
4697 }
4698
4699 return 1;
4700 }
4701
4702 return 0;
4703}
4704
4705/* Check whether the PC is in a function epilogue (16-bit version).
4706 This is a helper function for mips_in_function_epilogue_p. */
4707static int
4708mips16_in_function_epilogue_p (CORE_ADDR pc)
4709{
4710 CORE_ADDR func_addr = 0, func_end = 0;
4711
4712 if (find_pc_partial_function (pc, NULL, &func_addr, &func_end))
4713 {
4714 /* The MIPS epilogue is max. 12 bytes long. */
4715 CORE_ADDR addr = func_end - 12;
4716
4717 if (addr < func_addr + 4)
4718 addr = func_addr + 4;
4719 if (pc < addr)
4720 return 0;
4721
4722 for (; pc < func_end; pc += MIPS_INSN16_SIZE)
4723 {
4724 unsigned short inst;
4725
4726 inst = mips_fetch_instruction (pc);
4727
4728 if ((inst & 0xf800) == 0xf000) /* extend */
4729 continue;
4730
4731 if (inst != 0x6300 /* addiu $sp,offset */
4732 && inst != 0xfb00 /* daddiu $sp,$sp,offset */
4733 && inst != 0xe820 /* jr $ra */
4734 && inst != 0xe8a0 /* jrc $ra */
4735 && inst != 0x6500) /* nop */
4736 return 0;
4737 }
4738
4739 return 1;
4740 }
4741
4742 return 0;
4743}
4744
4745/* The epilogue is defined here as the area at the end of a function,
4746 after an instruction which destroys the function's stack frame. */
4747static int
4748mips_in_function_epilogue_p (struct gdbarch *gdbarch, CORE_ADDR pc)
4749{
4750 if (mips_pc_is_mips16 (pc))
4751 return mips16_in_function_epilogue_p (pc);
4752 else
4753 return mips32_in_function_epilogue_p (pc);
4754}
4755
a5ea2558
AC
4756/* Root of all "set mips "/"show mips " commands. This will eventually be
4757 used for all MIPS-specific commands. */
4758
a5ea2558 4759static void
acdb74a0 4760show_mips_command (char *args, int from_tty)
a5ea2558
AC
4761{
4762 help_list (showmipscmdlist, "show mips ", all_commands, gdb_stdout);
4763}
4764
a5ea2558 4765static void
acdb74a0 4766set_mips_command (char *args, int from_tty)
a5ea2558 4767{
6d82d43b
AC
4768 printf_unfiltered
4769 ("\"set mips\" must be followed by an appropriate subcommand.\n");
a5ea2558
AC
4770 help_list (setmipscmdlist, "set mips ", all_commands, gdb_stdout);
4771}
4772
c906108c
SS
4773/* Commands to show/set the MIPS FPU type. */
4774
c906108c 4775static void
acdb74a0 4776show_mipsfpu_command (char *args, int from_tty)
c906108c 4777{
c906108c 4778 char *fpu;
6ca0852e
UW
4779
4780 if (gdbarch_bfd_arch_info (current_gdbarch)->arch != bfd_arch_mips)
4781 {
4782 printf_unfiltered
4783 ("The MIPS floating-point coprocessor is unknown "
4784 "because the current architecture is not MIPS.\n");
4785 return;
4786 }
4787
c906108c
SS
4788 switch (MIPS_FPU_TYPE)
4789 {
4790 case MIPS_FPU_SINGLE:
4791 fpu = "single-precision";
4792 break;
4793 case MIPS_FPU_DOUBLE:
4794 fpu = "double-precision";
4795 break;
4796 case MIPS_FPU_NONE:
4797 fpu = "absent (none)";
4798 break;
93d56215 4799 default:
e2e0b3e5 4800 internal_error (__FILE__, __LINE__, _("bad switch"));
c906108c
SS
4801 }
4802 if (mips_fpu_type_auto)
6d82d43b
AC
4803 printf_unfiltered
4804 ("The MIPS floating-point coprocessor is set automatically (currently %s)\n",
4805 fpu);
c906108c 4806 else
6d82d43b
AC
4807 printf_unfiltered
4808 ("The MIPS floating-point coprocessor is assumed to be %s\n", fpu);
c906108c
SS
4809}
4810
4811
c906108c 4812static void
acdb74a0 4813set_mipsfpu_command (char *args, int from_tty)
c906108c 4814{
6d82d43b
AC
4815 printf_unfiltered
4816 ("\"set mipsfpu\" must be followed by \"double\", \"single\",\"none\" or \"auto\".\n");
c906108c
SS
4817 show_mipsfpu_command (args, from_tty);
4818}
4819
c906108c 4820static void
acdb74a0 4821set_mipsfpu_single_command (char *args, int from_tty)
c906108c 4822{
8d5838b5
AC
4823 struct gdbarch_info info;
4824 gdbarch_info_init (&info);
c906108c
SS
4825 mips_fpu_type = MIPS_FPU_SINGLE;
4826 mips_fpu_type_auto = 0;
8d5838b5
AC
4827 /* FIXME: cagney/2003-11-15: Should be setting a field in "info"
4828 instead of relying on globals. Doing that would let generic code
4829 handle the search for this specific architecture. */
4830 if (!gdbarch_update_p (info))
e2e0b3e5 4831 internal_error (__FILE__, __LINE__, _("set mipsfpu failed"));
c906108c
SS
4832}
4833
c906108c 4834static void
acdb74a0 4835set_mipsfpu_double_command (char *args, int from_tty)
c906108c 4836{
8d5838b5
AC
4837 struct gdbarch_info info;
4838 gdbarch_info_init (&info);
c906108c
SS
4839 mips_fpu_type = MIPS_FPU_DOUBLE;
4840 mips_fpu_type_auto = 0;
8d5838b5
AC
4841 /* FIXME: cagney/2003-11-15: Should be setting a field in "info"
4842 instead of relying on globals. Doing that would let generic code
4843 handle the search for this specific architecture. */
4844 if (!gdbarch_update_p (info))
e2e0b3e5 4845 internal_error (__FILE__, __LINE__, _("set mipsfpu failed"));
c906108c
SS
4846}
4847
c906108c 4848static void
acdb74a0 4849set_mipsfpu_none_command (char *args, int from_tty)
c906108c 4850{
8d5838b5
AC
4851 struct gdbarch_info info;
4852 gdbarch_info_init (&info);
c906108c
SS
4853 mips_fpu_type = MIPS_FPU_NONE;
4854 mips_fpu_type_auto = 0;
8d5838b5
AC
4855 /* FIXME: cagney/2003-11-15: Should be setting a field in "info"
4856 instead of relying on globals. Doing that would let generic code
4857 handle the search for this specific architecture. */
4858 if (!gdbarch_update_p (info))
e2e0b3e5 4859 internal_error (__FILE__, __LINE__, _("set mipsfpu failed"));
c906108c
SS
4860}
4861
c906108c 4862static void
acdb74a0 4863set_mipsfpu_auto_command (char *args, int from_tty)
c906108c
SS
4864{
4865 mips_fpu_type_auto = 1;
4866}
4867
c906108c 4868/* Attempt to identify the particular processor model by reading the
691c0433
AC
4869 processor id. NOTE: cagney/2003-11-15: Firstly it isn't clear that
4870 the relevant processor still exists (it dates back to '94) and
4871 secondly this is not the way to do this. The processor type should
4872 be set by forcing an architecture change. */
c906108c 4873
691c0433
AC
4874void
4875deprecated_mips_set_processor_regs_hack (void)
c906108c 4876{
691c0433 4877 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
a9614958 4878 ULONGEST prid;
c906108c 4879
594f7785 4880 regcache_cooked_read_unsigned (get_current_regcache (),
a9614958 4881 MIPS_PRID_REGNUM, &prid);
c906108c 4882 if ((prid & ~0xf) == 0x700)
691c0433 4883 tdep->mips_processor_reg_names = mips_r3041_reg_names;
c906108c
SS
4884}
4885
4886/* Just like reinit_frame_cache, but with the right arguments to be
4887 callable as an sfunc. */
4888
4889static void
acdb74a0
AC
4890reinit_frame_cache_sfunc (char *args, int from_tty,
4891 struct cmd_list_element *c)
c906108c
SS
4892{
4893 reinit_frame_cache ();
4894}
4895
a89aa300
AC
4896static int
4897gdb_print_insn_mips (bfd_vma memaddr, struct disassemble_info *info)
c906108c 4898{
e5ab0dce 4899 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
c906108c 4900
d31431ed
AC
4901 /* FIXME: cagney/2003-06-26: Is this even necessary? The
4902 disassembler needs to be able to locally determine the ISA, and
4903 not rely on GDB. Otherwize the stand-alone 'objdump -d' will not
4904 work. */
ec4045ea
AC
4905 if (mips_pc_is_mips16 (memaddr))
4906 info->mach = bfd_mach_mips16;
c906108c
SS
4907
4908 /* Round down the instruction address to the appropriate boundary. */
65c11066 4909 memaddr &= (info->mach == bfd_mach_mips16 ? ~1 : ~3);
c5aa993b 4910
e5ab0dce 4911 /* Set the disassembler options. */
6d82d43b 4912 if (tdep->mips_abi == MIPS_ABI_N32 || tdep->mips_abi == MIPS_ABI_N64)
e5ab0dce
AC
4913 {
4914 /* Set up the disassembler info, so that we get the right
6d82d43b 4915 register names from libopcodes. */
e5ab0dce
AC
4916 if (tdep->mips_abi == MIPS_ABI_N32)
4917 info->disassembler_options = "gpr-names=n32";
4918 else
4919 info->disassembler_options = "gpr-names=64";
4920 info->flavour = bfd_target_elf_flavour;
4921 }
4922 else
4923 /* This string is not recognized explicitly by the disassembler,
4924 but it tells the disassembler to not try to guess the ABI from
4925 the bfd elf headers, such that, if the user overrides the ABI
4926 of a program linked as NewABI, the disassembly will follow the
4927 register naming conventions specified by the user. */
4928 info->disassembler_options = "gpr-names=32";
4929
c906108c 4930 /* Call the appropriate disassembler based on the target endian-ness. */
40887e1a 4931 if (info->endian == BFD_ENDIAN_BIG)
c906108c
SS
4932 return print_insn_big_mips (memaddr, info);
4933 else
4934 return print_insn_little_mips (memaddr, info);
4935}
4936
3b3b875c
UW
4937/* This function implements gdbarch_breakpoint_from_pc. It uses the program
4938 counter value to determine whether a 16- or 32-bit breakpoint should be used.
4939 It returns a pointer to a string of bytes that encode a breakpoint
4940 instruction, stores the length of the string to *lenptr, and adjusts pc (if
4941 necessary) to point to the actual memory location where the breakpoint
4942 should be inserted. */
c906108c 4943
47a35522 4944static const gdb_byte *
67d57894 4945mips_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
c906108c 4946{
67d57894 4947 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
c906108c 4948 {
0fe7e7c8 4949 if (mips_pc_is_mips16 (*pcptr))
c906108c 4950 {
47a35522 4951 static gdb_byte mips16_big_breakpoint[] = { 0xe8, 0xa5 };
95404a3e 4952 *pcptr = unmake_mips16_addr (*pcptr);
c5aa993b 4953 *lenptr = sizeof (mips16_big_breakpoint);
c906108c
SS
4954 return mips16_big_breakpoint;
4955 }
4956 else
4957 {
aaab4dba
AC
4958 /* The IDT board uses an unusual breakpoint value, and
4959 sometimes gets confused when it sees the usual MIPS
4960 breakpoint instruction. */
47a35522
MK
4961 static gdb_byte big_breakpoint[] = { 0, 0x5, 0, 0xd };
4962 static gdb_byte pmon_big_breakpoint[] = { 0, 0, 0, 0xd };
4963 static gdb_byte idt_big_breakpoint[] = { 0, 0, 0x0a, 0xd };
c906108c 4964
c5aa993b 4965 *lenptr = sizeof (big_breakpoint);
c906108c
SS
4966
4967 if (strcmp (target_shortname, "mips") == 0)
4968 return idt_big_breakpoint;
4969 else if (strcmp (target_shortname, "ddb") == 0
4970 || strcmp (target_shortname, "pmon") == 0
4971 || strcmp (target_shortname, "lsi") == 0)
4972 return pmon_big_breakpoint;
4973 else
4974 return big_breakpoint;
4975 }
4976 }
4977 else
4978 {
0fe7e7c8 4979 if (mips_pc_is_mips16 (*pcptr))
c906108c 4980 {
47a35522 4981 static gdb_byte mips16_little_breakpoint[] = { 0xa5, 0xe8 };
95404a3e 4982 *pcptr = unmake_mips16_addr (*pcptr);
c5aa993b 4983 *lenptr = sizeof (mips16_little_breakpoint);
c906108c
SS
4984 return mips16_little_breakpoint;
4985 }
4986 else
4987 {
47a35522
MK
4988 static gdb_byte little_breakpoint[] = { 0xd, 0, 0x5, 0 };
4989 static gdb_byte pmon_little_breakpoint[] = { 0xd, 0, 0, 0 };
4990 static gdb_byte idt_little_breakpoint[] = { 0xd, 0x0a, 0, 0 };
c906108c 4991
c5aa993b 4992 *lenptr = sizeof (little_breakpoint);
c906108c
SS
4993
4994 if (strcmp (target_shortname, "mips") == 0)
4995 return idt_little_breakpoint;
4996 else if (strcmp (target_shortname, "ddb") == 0
4997 || strcmp (target_shortname, "pmon") == 0
4998 || strcmp (target_shortname, "lsi") == 0)
4999 return pmon_little_breakpoint;
5000 else
5001 return little_breakpoint;
5002 }
5003 }
5004}
5005
5006/* If PC is in a mips16 call or return stub, return the address of the target
5007 PC, which is either the callee or the caller. There are several
5008 cases which must be handled:
5009
5010 * If the PC is in __mips16_ret_{d,s}f, this is a return stub and the
c5aa993b 5011 target PC is in $31 ($ra).
c906108c 5012 * If the PC is in __mips16_call_stub_{1..10}, this is a call stub
c5aa993b 5013 and the target PC is in $2.
c906108c 5014 * If the PC at the start of __mips16_call_stub_{s,d}f_{0..10}, i.e.
c5aa993b
JM
5015 before the jal instruction, this is effectively a call stub
5016 and the the target PC is in $2. Otherwise this is effectively
5017 a return stub and the target PC is in $18.
c906108c
SS
5018
5019 See the source code for the stubs in gcc/config/mips/mips16.S for
e7d6a6d2 5020 gory details. */
c906108c 5021
757a7cc6 5022static CORE_ADDR
52f729a7 5023mips_skip_trampoline_code (struct frame_info *frame, CORE_ADDR pc)
c906108c
SS
5024{
5025 char *name;
5026 CORE_ADDR start_addr;
5027
5028 /* Find the starting address and name of the function containing the PC. */
5029 if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
5030 return 0;
5031
5032 /* If the PC is in __mips16_ret_{d,s}f, this is a return stub and the
5033 target PC is in $31 ($ra). */
5034 if (strcmp (name, "__mips16_ret_sf") == 0
5035 || strcmp (name, "__mips16_ret_df") == 0)
52f729a7 5036 return get_frame_register_signed (frame, MIPS_RA_REGNUM);
c906108c
SS
5037
5038 if (strncmp (name, "__mips16_call_stub_", 19) == 0)
5039 {
5040 /* If the PC is in __mips16_call_stub_{1..10}, this is a call stub
5041 and the target PC is in $2. */
5042 if (name[19] >= '0' && name[19] <= '9')
52f729a7 5043 return get_frame_register_signed (frame, 2);
c906108c
SS
5044
5045 /* If the PC at the start of __mips16_call_stub_{s,d}f_{0..10}, i.e.
c5aa993b
JM
5046 before the jal instruction, this is effectively a call stub
5047 and the the target PC is in $2. Otherwise this is effectively
5048 a return stub and the target PC is in $18. */
c906108c
SS
5049 else if (name[19] == 's' || name[19] == 'd')
5050 {
5051 if (pc == start_addr)
5052 {
5053 /* Check if the target of the stub is a compiler-generated
c5aa993b
JM
5054 stub. Such a stub for a function bar might have a name
5055 like __fn_stub_bar, and might look like this:
5056 mfc1 $4,$f13
5057 mfc1 $5,$f12
5058 mfc1 $6,$f15
5059 mfc1 $7,$f14
5060 la $1,bar (becomes a lui/addiu pair)
5061 jr $1
5062 So scan down to the lui/addi and extract the target
5063 address from those two instructions. */
c906108c 5064
52f729a7 5065 CORE_ADDR target_pc = get_frame_register_signed (frame, 2);
d37cca3d 5066 ULONGEST inst;
c906108c
SS
5067 int i;
5068
5069 /* See if the name of the target function is __fn_stub_*. */
6d82d43b
AC
5070 if (find_pc_partial_function (target_pc, &name, NULL, NULL) ==
5071 0)
c906108c
SS
5072 return target_pc;
5073 if (strncmp (name, "__fn_stub_", 10) != 0
5074 && strcmp (name, "etext") != 0
5075 && strcmp (name, "_etext") != 0)
5076 return target_pc;
5077
5078 /* Scan through this _fn_stub_ code for the lui/addiu pair.
c5aa993b
JM
5079 The limit on the search is arbitrarily set to 20
5080 instructions. FIXME. */
95ac2dcf 5081 for (i = 0, pc = 0; i < 20; i++, target_pc += MIPS_INSN32_SIZE)
c906108c 5082 {
c5aa993b
JM
5083 inst = mips_fetch_instruction (target_pc);
5084 if ((inst & 0xffff0000) == 0x3c010000) /* lui $at */
5085 pc = (inst << 16) & 0xffff0000; /* high word */
5086 else if ((inst & 0xffff0000) == 0x24210000) /* addiu $at */
5087 return pc | (inst & 0xffff); /* low word */
c906108c
SS
5088 }
5089
5090 /* Couldn't find the lui/addui pair, so return stub address. */
5091 return target_pc;
5092 }
5093 else
5094 /* This is the 'return' part of a call stub. The return
5095 address is in $r18. */
52f729a7 5096 return get_frame_register_signed (frame, 18);
c906108c
SS
5097 }
5098 }
c5aa993b 5099 return 0; /* not a stub */
c906108c
SS
5100}
5101
a4b8ebc8 5102/* Convert a dbx stab register number (from `r' declaration) to a GDB
f57d151a 5103 [1 * gdbarch_num_regs .. 2 * gdbarch_num_regs) REGNUM. */
88c72b7d
AC
5104
5105static int
d3f73121 5106mips_stab_reg_to_regnum (struct gdbarch *gdbarch, int num)
88c72b7d 5107{
a4b8ebc8 5108 int regnum;
2f38ef89 5109 if (num >= 0 && num < 32)
a4b8ebc8 5110 regnum = num;
2f38ef89 5111 else if (num >= 38 && num < 70)
d3f73121 5112 regnum = num + mips_regnum (gdbarch)->fp0 - 38;
040b99fd 5113 else if (num == 70)
d3f73121 5114 regnum = mips_regnum (gdbarch)->hi;
040b99fd 5115 else if (num == 71)
d3f73121 5116 regnum = mips_regnum (gdbarch)->lo;
2f38ef89 5117 else
a4b8ebc8
AC
5118 /* This will hopefully (eventually) provoke a warning. Should
5119 we be calling complaint() here? */
d3f73121
MD
5120 return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
5121 return gdbarch_num_regs (gdbarch) + regnum;
88c72b7d
AC
5122}
5123
2f38ef89 5124
a4b8ebc8 5125/* Convert a dwarf, dwarf2, or ecoff register number to a GDB [1 *
f57d151a 5126 gdbarch_num_regs .. 2 * gdbarch_num_regs) REGNUM. */
88c72b7d
AC
5127
5128static int
d3f73121 5129mips_dwarf_dwarf2_ecoff_reg_to_regnum (struct gdbarch *gdbarch, int num)
88c72b7d 5130{
a4b8ebc8 5131 int regnum;
2f38ef89 5132 if (num >= 0 && num < 32)
a4b8ebc8 5133 regnum = num;
2f38ef89 5134 else if (num >= 32 && num < 64)
d3f73121 5135 regnum = num + mips_regnum (gdbarch)->fp0 - 32;
040b99fd 5136 else if (num == 64)
d3f73121 5137 regnum = mips_regnum (gdbarch)->hi;
040b99fd 5138 else if (num == 65)
d3f73121 5139 regnum = mips_regnum (gdbarch)->lo;
2f38ef89 5140 else
a4b8ebc8
AC
5141 /* This will hopefully (eventually) provoke a warning. Should we
5142 be calling complaint() here? */
d3f73121
MD
5143 return gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
5144 return gdbarch_num_regs (gdbarch) + regnum;
a4b8ebc8
AC
5145}
5146
5147static int
e7faf938 5148mips_register_sim_regno (struct gdbarch *gdbarch, int regnum)
a4b8ebc8
AC
5149{
5150 /* Only makes sense to supply raw registers. */
e7faf938 5151 gdb_assert (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch));
a4b8ebc8
AC
5152 /* FIXME: cagney/2002-05-13: Need to look at the pseudo register to
5153 decide if it is valid. Should instead define a standard sim/gdb
5154 register numbering scheme. */
e7faf938
MD
5155 if (gdbarch_register_name (gdbarch,
5156 gdbarch_num_regs (gdbarch) + regnum) != NULL
5157 && gdbarch_register_name (gdbarch,
5158 gdbarch_num_regs (gdbarch) + regnum)[0] != '\0')
a4b8ebc8
AC
5159 return regnum;
5160 else
6d82d43b 5161 return LEGACY_SIM_REGNO_IGNORE;
88c72b7d
AC
5162}
5163
2f38ef89 5164
4844f454
CV
5165/* Convert an integer into an address. Extracting the value signed
5166 guarantees a correctly sign extended address. */
fc0c74b1
AC
5167
5168static CORE_ADDR
79dd2d24 5169mips_integer_to_address (struct gdbarch *gdbarch,
870cd05e 5170 struct type *type, const gdb_byte *buf)
fc0c74b1 5171{
4844f454 5172 return (CORE_ADDR) extract_signed_integer (buf, TYPE_LENGTH (type));
fc0c74b1
AC
5173}
5174
82e91389
DJ
5175/* Dummy virtual frame pointer method. This is no more or less accurate
5176 than most other architectures; we just need to be explicit about it,
5177 because the pseudo-register gdbarch_sp_regnum will otherwise lead to
5178 an assertion failure. */
5179
5180static void
a54fba4c
MD
5181mips_virtual_frame_pointer (struct gdbarch *gdbarch,
5182 CORE_ADDR pc, int *reg, LONGEST *offset)
82e91389
DJ
5183{
5184 *reg = MIPS_SP_REGNUM;
5185 *offset = 0;
5186}
5187
caaa3122
DJ
5188static void
5189mips_find_abi_section (bfd *abfd, asection *sect, void *obj)
5190{
5191 enum mips_abi *abip = (enum mips_abi *) obj;
5192 const char *name = bfd_get_section_name (abfd, sect);
5193
5194 if (*abip != MIPS_ABI_UNKNOWN)
5195 return;
5196
5197 if (strncmp (name, ".mdebug.", 8) != 0)
5198 return;
5199
5200 if (strcmp (name, ".mdebug.abi32") == 0)
5201 *abip = MIPS_ABI_O32;
5202 else if (strcmp (name, ".mdebug.abiN32") == 0)
5203 *abip = MIPS_ABI_N32;
62a49b2c 5204 else if (strcmp (name, ".mdebug.abi64") == 0)
e3bddbfa 5205 *abip = MIPS_ABI_N64;
caaa3122
DJ
5206 else if (strcmp (name, ".mdebug.abiO64") == 0)
5207 *abip = MIPS_ABI_O64;
5208 else if (strcmp (name, ".mdebug.eabi32") == 0)
5209 *abip = MIPS_ABI_EABI32;
5210 else if (strcmp (name, ".mdebug.eabi64") == 0)
5211 *abip = MIPS_ABI_EABI64;
5212 else
8a3fe4f8 5213 warning (_("unsupported ABI %s."), name + 8);
caaa3122
DJ
5214}
5215
22e47e37
FF
5216static void
5217mips_find_long_section (bfd *abfd, asection *sect, void *obj)
5218{
5219 int *lbp = (int *) obj;
5220 const char *name = bfd_get_section_name (abfd, sect);
5221
5222 if (strncmp (name, ".gcc_compiled_long32", 20) == 0)
5223 *lbp = 32;
5224 else if (strncmp (name, ".gcc_compiled_long64", 20) == 0)
5225 *lbp = 64;
5226 else if (strncmp (name, ".gcc_compiled_long", 18) == 0)
5227 warning (_("unrecognized .gcc_compiled_longXX"));
5228}
5229
2e4ebe70
DJ
5230static enum mips_abi
5231global_mips_abi (void)
5232{
5233 int i;
5234
5235 for (i = 0; mips_abi_strings[i] != NULL; i++)
5236 if (mips_abi_strings[i] == mips_abi_string)
5237 return (enum mips_abi) i;
5238
e2e0b3e5 5239 internal_error (__FILE__, __LINE__, _("unknown ABI string"));
2e4ebe70
DJ
5240}
5241
29709017
DJ
5242static void
5243mips_register_g_packet_guesses (struct gdbarch *gdbarch)
5244{
29709017
DJ
5245 /* If the size matches the set of 32-bit or 64-bit integer registers,
5246 assume that's what we've got. */
4eb0ad19
DJ
5247 register_remote_g_packet_guess (gdbarch, 38 * 4, mips_tdesc_gp32);
5248 register_remote_g_packet_guess (gdbarch, 38 * 8, mips_tdesc_gp64);
29709017
DJ
5249
5250 /* If the size matches the full set of registers GDB traditionally
5251 knows about, including floating point, for either 32-bit or
5252 64-bit, assume that's what we've got. */
4eb0ad19
DJ
5253 register_remote_g_packet_guess (gdbarch, 90 * 4, mips_tdesc_gp32);
5254 register_remote_g_packet_guess (gdbarch, 90 * 8, mips_tdesc_gp64);
29709017
DJ
5255
5256 /* Otherwise we don't have a useful guess. */
5257}
5258
f8b73d13
DJ
5259static struct value *
5260value_of_mips_user_reg (struct frame_info *frame, const void *baton)
5261{
5262 const int *reg_p = baton;
5263 return value_of_register (*reg_p, frame);
5264}
5265
c2d11a7d 5266static struct gdbarch *
6d82d43b 5267mips_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
c2d11a7d 5268{
c2d11a7d
JM
5269 struct gdbarch *gdbarch;
5270 struct gdbarch_tdep *tdep;
5271 int elf_flags;
2e4ebe70 5272 enum mips_abi mips_abi, found_abi, wanted_abi;
f8b73d13 5273 int i, num_regs;
8d5838b5 5274 enum mips_fpu_type fpu_type;
f8b73d13 5275 struct tdesc_arch_data *tdesc_data = NULL;
609ca2b9 5276 int elf_fpu_type = 0;
f8b73d13
DJ
5277
5278 /* Check any target description for validity. */
5279 if (tdesc_has_registers (info.target_desc))
5280 {
5281 static const char *const mips_gprs[] = {
5282 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
5283 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
5284 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
5285 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31"
5286 };
5287 static const char *const mips_fprs[] = {
5288 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
5289 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
5290 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
5291 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
5292 };
5293
5294 const struct tdesc_feature *feature;
5295 int valid_p;
5296
5297 feature = tdesc_find_feature (info.target_desc,
5298 "org.gnu.gdb.mips.cpu");
5299 if (feature == NULL)
5300 return NULL;
5301
5302 tdesc_data = tdesc_data_alloc ();
5303
5304 valid_p = 1;
5305 for (i = MIPS_ZERO_REGNUM; i <= MIPS_RA_REGNUM; i++)
5306 valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
5307 mips_gprs[i]);
5308
5309
5310 valid_p &= tdesc_numbered_register (feature, tdesc_data,
5311 MIPS_EMBED_LO_REGNUM, "lo");
5312 valid_p &= tdesc_numbered_register (feature, tdesc_data,
5313 MIPS_EMBED_HI_REGNUM, "hi");
5314 valid_p &= tdesc_numbered_register (feature, tdesc_data,
5315 MIPS_EMBED_PC_REGNUM, "pc");
5316
5317 if (!valid_p)
5318 {
5319 tdesc_data_cleanup (tdesc_data);
5320 return NULL;
5321 }
5322
5323 feature = tdesc_find_feature (info.target_desc,
5324 "org.gnu.gdb.mips.cp0");
5325 if (feature == NULL)
5326 {
5327 tdesc_data_cleanup (tdesc_data);
5328 return NULL;
5329 }
5330
5331 valid_p = 1;
5332 valid_p &= tdesc_numbered_register (feature, tdesc_data,
5333 MIPS_EMBED_BADVADDR_REGNUM,
5334 "badvaddr");
5335 valid_p &= tdesc_numbered_register (feature, tdesc_data,
5336 MIPS_PS_REGNUM, "status");
5337 valid_p &= tdesc_numbered_register (feature, tdesc_data,
5338 MIPS_EMBED_CAUSE_REGNUM, "cause");
5339
5340 if (!valid_p)
5341 {
5342 tdesc_data_cleanup (tdesc_data);
5343 return NULL;
5344 }
5345
5346 /* FIXME drow/2007-05-17: The FPU should be optional. The MIPS
5347 backend is not prepared for that, though. */
5348 feature = tdesc_find_feature (info.target_desc,
5349 "org.gnu.gdb.mips.fpu");
5350 if (feature == NULL)
5351 {
5352 tdesc_data_cleanup (tdesc_data);
5353 return NULL;
5354 }
5355
5356 valid_p = 1;
5357 for (i = 0; i < 32; i++)
5358 valid_p &= tdesc_numbered_register (feature, tdesc_data,
5359 i + MIPS_EMBED_FP0_REGNUM,
5360 mips_fprs[i]);
5361
5362 valid_p &= tdesc_numbered_register (feature, tdesc_data,
5363 MIPS_EMBED_FP0_REGNUM + 32, "fcsr");
5364 valid_p &= tdesc_numbered_register (feature, tdesc_data,
5365 MIPS_EMBED_FP0_REGNUM + 33, "fir");
5366
5367 if (!valid_p)
5368 {
5369 tdesc_data_cleanup (tdesc_data);
5370 return NULL;
5371 }
5372
5373 /* It would be nice to detect an attempt to use a 64-bit ABI
5374 when only 32-bit registers are provided. */
5375 }
c2d11a7d 5376
ec03c1ac
AC
5377 /* First of all, extract the elf_flags, if available. */
5378 if (info.abfd && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
5379 elf_flags = elf_elfheader (info.abfd)->e_flags;
6214a8a1
AC
5380 else if (arches != NULL)
5381 elf_flags = gdbarch_tdep (arches->gdbarch)->elf_flags;
ec03c1ac
AC
5382 else
5383 elf_flags = 0;
5384 if (gdbarch_debug)
5385 fprintf_unfiltered (gdb_stdlog,
6d82d43b 5386 "mips_gdbarch_init: elf_flags = 0x%08x\n", elf_flags);
c2d11a7d 5387
102182a9 5388 /* Check ELF_FLAGS to see if it specifies the ABI being used. */
0dadbba0
AC
5389 switch ((elf_flags & EF_MIPS_ABI))
5390 {
5391 case E_MIPS_ABI_O32:
ec03c1ac 5392 found_abi = MIPS_ABI_O32;
0dadbba0
AC
5393 break;
5394 case E_MIPS_ABI_O64:
ec03c1ac 5395 found_abi = MIPS_ABI_O64;
0dadbba0
AC
5396 break;
5397 case E_MIPS_ABI_EABI32:
ec03c1ac 5398 found_abi = MIPS_ABI_EABI32;
0dadbba0
AC
5399 break;
5400 case E_MIPS_ABI_EABI64:
ec03c1ac 5401 found_abi = MIPS_ABI_EABI64;
0dadbba0
AC
5402 break;
5403 default:
acdb74a0 5404 if ((elf_flags & EF_MIPS_ABI2))
ec03c1ac 5405 found_abi = MIPS_ABI_N32;
acdb74a0 5406 else
ec03c1ac 5407 found_abi = MIPS_ABI_UNKNOWN;
0dadbba0
AC
5408 break;
5409 }
acdb74a0 5410
caaa3122 5411 /* GCC creates a pseudo-section whose name describes the ABI. */
ec03c1ac
AC
5412 if (found_abi == MIPS_ABI_UNKNOWN && info.abfd != NULL)
5413 bfd_map_over_sections (info.abfd, mips_find_abi_section, &found_abi);
caaa3122 5414
dc305454 5415 /* If we have no useful BFD information, use the ABI from the last
ec03c1ac
AC
5416 MIPS architecture (if there is one). */
5417 if (found_abi == MIPS_ABI_UNKNOWN && info.abfd == NULL && arches != NULL)
5418 found_abi = gdbarch_tdep (arches->gdbarch)->found_abi;
2e4ebe70 5419
32a6503c 5420 /* Try the architecture for any hint of the correct ABI. */
ec03c1ac 5421 if (found_abi == MIPS_ABI_UNKNOWN
bf64bfd6
AC
5422 && info.bfd_arch_info != NULL
5423 && info.bfd_arch_info->arch == bfd_arch_mips)
5424 {
5425 switch (info.bfd_arch_info->mach)
5426 {
5427 case bfd_mach_mips3900:
ec03c1ac 5428 found_abi = MIPS_ABI_EABI32;
bf64bfd6
AC
5429 break;
5430 case bfd_mach_mips4100:
5431 case bfd_mach_mips5000:
ec03c1ac 5432 found_abi = MIPS_ABI_EABI64;
bf64bfd6 5433 break;
1d06468c
EZ
5434 case bfd_mach_mips8000:
5435 case bfd_mach_mips10000:
32a6503c
KB
5436 /* On Irix, ELF64 executables use the N64 ABI. The
5437 pseudo-sections which describe the ABI aren't present
5438 on IRIX. (Even for executables created by gcc.) */
28d169de
KB
5439 if (bfd_get_flavour (info.abfd) == bfd_target_elf_flavour
5440 && elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
ec03c1ac 5441 found_abi = MIPS_ABI_N64;
28d169de 5442 else
ec03c1ac 5443 found_abi = MIPS_ABI_N32;
1d06468c 5444 break;
bf64bfd6
AC
5445 }
5446 }
2e4ebe70 5447
26c53e50
DJ
5448 /* Default 64-bit objects to N64 instead of O32. */
5449 if (found_abi == MIPS_ABI_UNKNOWN
5450 && info.abfd != NULL
5451 && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour
5452 && elf_elfheader (info.abfd)->e_ident[EI_CLASS] == ELFCLASS64)
5453 found_abi = MIPS_ABI_N64;
5454
ec03c1ac
AC
5455 if (gdbarch_debug)
5456 fprintf_unfiltered (gdb_stdlog, "mips_gdbarch_init: found_abi = %d\n",
5457 found_abi);
5458
5459 /* What has the user specified from the command line? */
5460 wanted_abi = global_mips_abi ();
5461 if (gdbarch_debug)
5462 fprintf_unfiltered (gdb_stdlog, "mips_gdbarch_init: wanted_abi = %d\n",
5463 wanted_abi);
2e4ebe70
DJ
5464
5465 /* Now that we have found what the ABI for this binary would be,
5466 check whether the user is overriding it. */
2e4ebe70
DJ
5467 if (wanted_abi != MIPS_ABI_UNKNOWN)
5468 mips_abi = wanted_abi;
ec03c1ac
AC
5469 else if (found_abi != MIPS_ABI_UNKNOWN)
5470 mips_abi = found_abi;
5471 else
5472 mips_abi = MIPS_ABI_O32;
5473 if (gdbarch_debug)
5474 fprintf_unfiltered (gdb_stdlog, "mips_gdbarch_init: mips_abi = %d\n",
5475 mips_abi);
2e4ebe70 5476
ec03c1ac 5477 /* Also used when doing an architecture lookup. */
4b9b3959 5478 if (gdbarch_debug)
ec03c1ac
AC
5479 fprintf_unfiltered (gdb_stdlog,
5480 "mips_gdbarch_init: mips64_transfers_32bit_regs_p = %d\n",
5481 mips64_transfers_32bit_regs_p);
0dadbba0 5482
8d5838b5 5483 /* Determine the MIPS FPU type. */
609ca2b9
DJ
5484#ifdef HAVE_ELF
5485 if (info.abfd
5486 && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
5487 elf_fpu_type = bfd_elf_get_obj_attr_int (info.abfd, OBJ_ATTR_GNU,
5488 Tag_GNU_MIPS_ABI_FP);
5489#endif /* HAVE_ELF */
5490
8d5838b5
AC
5491 if (!mips_fpu_type_auto)
5492 fpu_type = mips_fpu_type;
609ca2b9
DJ
5493 else if (elf_fpu_type != 0)
5494 {
5495 switch (elf_fpu_type)
5496 {
5497 case 1:
5498 fpu_type = MIPS_FPU_DOUBLE;
5499 break;
5500 case 2:
5501 fpu_type = MIPS_FPU_SINGLE;
5502 break;
5503 case 3:
5504 default:
5505 /* Soft float or unknown. */
5506 fpu_type = MIPS_FPU_NONE;
5507 break;
5508 }
5509 }
8d5838b5
AC
5510 else if (info.bfd_arch_info != NULL
5511 && info.bfd_arch_info->arch == bfd_arch_mips)
5512 switch (info.bfd_arch_info->mach)
5513 {
5514 case bfd_mach_mips3900:
5515 case bfd_mach_mips4100:
5516 case bfd_mach_mips4111:
a9d61c86 5517 case bfd_mach_mips4120:
8d5838b5
AC
5518 fpu_type = MIPS_FPU_NONE;
5519 break;
5520 case bfd_mach_mips4650:
5521 fpu_type = MIPS_FPU_SINGLE;
5522 break;
5523 default:
5524 fpu_type = MIPS_FPU_DOUBLE;
5525 break;
5526 }
5527 else if (arches != NULL)
5528 fpu_type = gdbarch_tdep (arches->gdbarch)->mips_fpu_type;
5529 else
5530 fpu_type = MIPS_FPU_DOUBLE;
5531 if (gdbarch_debug)
5532 fprintf_unfiltered (gdb_stdlog,
6d82d43b 5533 "mips_gdbarch_init: fpu_type = %d\n", fpu_type);
8d5838b5 5534
29709017
DJ
5535 /* Check for blatant incompatibilities. */
5536
5537 /* If we have only 32-bit registers, then we can't debug a 64-bit
5538 ABI. */
5539 if (info.target_desc
5540 && tdesc_property (info.target_desc, PROPERTY_GP32) != NULL
5541 && mips_abi != MIPS_ABI_EABI32
5542 && mips_abi != MIPS_ABI_O32)
f8b73d13
DJ
5543 {
5544 if (tdesc_data != NULL)
5545 tdesc_data_cleanup (tdesc_data);
5546 return NULL;
5547 }
29709017 5548
c2d11a7d
JM
5549 /* try to find a pre-existing architecture */
5550 for (arches = gdbarch_list_lookup_by_info (arches, &info);
5551 arches != NULL;
5552 arches = gdbarch_list_lookup_by_info (arches->next, &info))
5553 {
5554 /* MIPS needs to be pedantic about which ABI the object is
102182a9 5555 using. */
9103eae0 5556 if (gdbarch_tdep (arches->gdbarch)->elf_flags != elf_flags)
c2d11a7d 5557 continue;
9103eae0 5558 if (gdbarch_tdep (arches->gdbarch)->mips_abi != mips_abi)
0dadbba0 5559 continue;
719ec221
AC
5560 /* Need to be pedantic about which register virtual size is
5561 used. */
5562 if (gdbarch_tdep (arches->gdbarch)->mips64_transfers_32bit_regs_p
5563 != mips64_transfers_32bit_regs_p)
5564 continue;
8d5838b5
AC
5565 /* Be pedantic about which FPU is selected. */
5566 if (gdbarch_tdep (arches->gdbarch)->mips_fpu_type != fpu_type)
5567 continue;
f8b73d13
DJ
5568
5569 if (tdesc_data != NULL)
5570 tdesc_data_cleanup (tdesc_data);
4be87837 5571 return arches->gdbarch;
c2d11a7d
JM
5572 }
5573
102182a9 5574 /* Need a new architecture. Fill in a target specific vector. */
c2d11a7d
JM
5575 tdep = (struct gdbarch_tdep *) xmalloc (sizeof (struct gdbarch_tdep));
5576 gdbarch = gdbarch_alloc (&info, tdep);
5577 tdep->elf_flags = elf_flags;
719ec221 5578 tdep->mips64_transfers_32bit_regs_p = mips64_transfers_32bit_regs_p;
ec03c1ac
AC
5579 tdep->found_abi = found_abi;
5580 tdep->mips_abi = mips_abi;
8d5838b5 5581 tdep->mips_fpu_type = fpu_type;
29709017
DJ
5582 tdep->register_size_valid_p = 0;
5583 tdep->register_size = 0;
5584
5585 if (info.target_desc)
5586 {
5587 /* Some useful properties can be inferred from the target. */
5588 if (tdesc_property (info.target_desc, PROPERTY_GP32) != NULL)
5589 {
5590 tdep->register_size_valid_p = 1;
5591 tdep->register_size = 4;
5592 }
5593 else if (tdesc_property (info.target_desc, PROPERTY_GP64) != NULL)
5594 {
5595 tdep->register_size_valid_p = 1;
5596 tdep->register_size = 8;
5597 }
5598 }
c2d11a7d 5599
102182a9 5600 /* Initially set everything according to the default ABI/ISA. */
c2d11a7d
JM
5601 set_gdbarch_short_bit (gdbarch, 16);
5602 set_gdbarch_int_bit (gdbarch, 32);
5603 set_gdbarch_float_bit (gdbarch, 32);
5604 set_gdbarch_double_bit (gdbarch, 64);
5605 set_gdbarch_long_double_bit (gdbarch, 64);
a4b8ebc8
AC
5606 set_gdbarch_register_reggroup_p (gdbarch, mips_register_reggroup_p);
5607 set_gdbarch_pseudo_register_read (gdbarch, mips_pseudo_register_read);
5608 set_gdbarch_pseudo_register_write (gdbarch, mips_pseudo_register_write);
1d06468c 5609
6d82d43b 5610 set_gdbarch_elf_make_msymbol_special (gdbarch,
f7ab6ec6
MS
5611 mips_elf_make_msymbol_special);
5612
16e109ca 5613 /* Fill in the OS dependant register numbers and names. */
56cea623 5614 {
16e109ca 5615 const char **reg_names;
56cea623
AC
5616 struct mips_regnum *regnum = GDBARCH_OBSTACK_ZALLOC (gdbarch,
5617 struct mips_regnum);
f8b73d13
DJ
5618 if (tdesc_has_registers (info.target_desc))
5619 {
5620 regnum->lo = MIPS_EMBED_LO_REGNUM;
5621 regnum->hi = MIPS_EMBED_HI_REGNUM;
5622 regnum->badvaddr = MIPS_EMBED_BADVADDR_REGNUM;
5623 regnum->cause = MIPS_EMBED_CAUSE_REGNUM;
5624 regnum->pc = MIPS_EMBED_PC_REGNUM;
5625 regnum->fp0 = MIPS_EMBED_FP0_REGNUM;
5626 regnum->fp_control_status = 70;
5627 regnum->fp_implementation_revision = 71;
5628 num_regs = MIPS_LAST_EMBED_REGNUM + 1;
5629 reg_names = NULL;
5630 }
5631 else if (info.osabi == GDB_OSABI_IRIX)
56cea623
AC
5632 {
5633 regnum->fp0 = 32;
5634 regnum->pc = 64;
5635 regnum->cause = 65;
5636 regnum->badvaddr = 66;
5637 regnum->hi = 67;
5638 regnum->lo = 68;
5639 regnum->fp_control_status = 69;
5640 regnum->fp_implementation_revision = 70;
5641 num_regs = 71;
16e109ca 5642 reg_names = mips_irix_reg_names;
56cea623
AC
5643 }
5644 else
5645 {
5646 regnum->lo = MIPS_EMBED_LO_REGNUM;
5647 regnum->hi = MIPS_EMBED_HI_REGNUM;
5648 regnum->badvaddr = MIPS_EMBED_BADVADDR_REGNUM;
5649 regnum->cause = MIPS_EMBED_CAUSE_REGNUM;
5650 regnum->pc = MIPS_EMBED_PC_REGNUM;
5651 regnum->fp0 = MIPS_EMBED_FP0_REGNUM;
5652 regnum->fp_control_status = 70;
5653 regnum->fp_implementation_revision = 71;
5654 num_regs = 90;
16e109ca
AC
5655 if (info.bfd_arch_info != NULL
5656 && info.bfd_arch_info->mach == bfd_mach_mips3900)
5657 reg_names = mips_tx39_reg_names;
5658 else
5659 reg_names = mips_generic_reg_names;
56cea623 5660 }
3e8c568d 5661 /* FIXME: cagney/2003-11-15: For MIPS, hasn't gdbarch_pc_regnum been
56cea623 5662 replaced by read_pc? */
f10683bb
MH
5663 set_gdbarch_pc_regnum (gdbarch, regnum->pc + num_regs);
5664 set_gdbarch_sp_regnum (gdbarch, MIPS_SP_REGNUM + num_regs);
56cea623
AC
5665 set_gdbarch_fp0_regnum (gdbarch, regnum->fp0);
5666 set_gdbarch_num_regs (gdbarch, num_regs);
5667 set_gdbarch_num_pseudo_regs (gdbarch, num_regs);
16e109ca 5668 set_gdbarch_register_name (gdbarch, mips_register_name);
82e91389 5669 set_gdbarch_virtual_frame_pointer (gdbarch, mips_virtual_frame_pointer);
16e109ca
AC
5670 tdep->mips_processor_reg_names = reg_names;
5671 tdep->regnum = regnum;
56cea623 5672 }
fe29b929 5673
0dadbba0 5674 switch (mips_abi)
c2d11a7d 5675 {
0dadbba0 5676 case MIPS_ABI_O32:
25ab4790 5677 set_gdbarch_push_dummy_call (gdbarch, mips_o32_push_dummy_call);
29dfb2ac 5678 set_gdbarch_return_value (gdbarch, mips_o32_return_value);
4c7d22cb 5679 tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 4 - 1;
56cea623 5680 tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 4 - 1;
4014092b 5681 tdep->default_mask_address_p = 0;
c2d11a7d
JM
5682 set_gdbarch_long_bit (gdbarch, 32);
5683 set_gdbarch_ptr_bit (gdbarch, 32);
5684 set_gdbarch_long_long_bit (gdbarch, 64);
5685 break;
0dadbba0 5686 case MIPS_ABI_O64:
25ab4790 5687 set_gdbarch_push_dummy_call (gdbarch, mips_o64_push_dummy_call);
9c8fdbfa 5688 set_gdbarch_return_value (gdbarch, mips_o64_return_value);
4c7d22cb 5689 tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 4 - 1;
56cea623 5690 tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 4 - 1;
361d1df0 5691 tdep->default_mask_address_p = 0;
c2d11a7d
JM
5692 set_gdbarch_long_bit (gdbarch, 32);
5693 set_gdbarch_ptr_bit (gdbarch, 32);
5694 set_gdbarch_long_long_bit (gdbarch, 64);
5695 break;
0dadbba0 5696 case MIPS_ABI_EABI32:
25ab4790 5697 set_gdbarch_push_dummy_call (gdbarch, mips_eabi_push_dummy_call);
9c8fdbfa 5698 set_gdbarch_return_value (gdbarch, mips_eabi_return_value);
4c7d22cb 5699 tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 8 - 1;
56cea623 5700 tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 8 - 1;
4014092b 5701 tdep->default_mask_address_p = 0;
c2d11a7d
JM
5702 set_gdbarch_long_bit (gdbarch, 32);
5703 set_gdbarch_ptr_bit (gdbarch, 32);
5704 set_gdbarch_long_long_bit (gdbarch, 64);
5705 break;
0dadbba0 5706 case MIPS_ABI_EABI64:
25ab4790 5707 set_gdbarch_push_dummy_call (gdbarch, mips_eabi_push_dummy_call);
9c8fdbfa 5708 set_gdbarch_return_value (gdbarch, mips_eabi_return_value);
4c7d22cb 5709 tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 8 - 1;
56cea623 5710 tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 8 - 1;
4014092b 5711 tdep->default_mask_address_p = 0;
c2d11a7d
JM
5712 set_gdbarch_long_bit (gdbarch, 64);
5713 set_gdbarch_ptr_bit (gdbarch, 64);
5714 set_gdbarch_long_long_bit (gdbarch, 64);
5715 break;
0dadbba0 5716 case MIPS_ABI_N32:
25ab4790 5717 set_gdbarch_push_dummy_call (gdbarch, mips_n32n64_push_dummy_call);
29dfb2ac 5718 set_gdbarch_return_value (gdbarch, mips_n32n64_return_value);
4c7d22cb 5719 tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 8 - 1;
56cea623 5720 tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 8 - 1;
4014092b 5721 tdep->default_mask_address_p = 0;
0dadbba0
AC
5722 set_gdbarch_long_bit (gdbarch, 32);
5723 set_gdbarch_ptr_bit (gdbarch, 32);
5724 set_gdbarch_long_long_bit (gdbarch, 64);
fed7ba43 5725 set_gdbarch_long_double_bit (gdbarch, 128);
b14d30e1 5726 set_gdbarch_long_double_format (gdbarch, floatformats_ibm_long_double);
28d169de
KB
5727 break;
5728 case MIPS_ABI_N64:
25ab4790 5729 set_gdbarch_push_dummy_call (gdbarch, mips_n32n64_push_dummy_call);
29dfb2ac 5730 set_gdbarch_return_value (gdbarch, mips_n32n64_return_value);
4c7d22cb 5731 tdep->mips_last_arg_regnum = MIPS_A0_REGNUM + 8 - 1;
56cea623 5732 tdep->mips_last_fp_arg_regnum = tdep->regnum->fp0 + 12 + 8 - 1;
28d169de
KB
5733 tdep->default_mask_address_p = 0;
5734 set_gdbarch_long_bit (gdbarch, 64);
5735 set_gdbarch_ptr_bit (gdbarch, 64);
5736 set_gdbarch_long_long_bit (gdbarch, 64);
fed7ba43 5737 set_gdbarch_long_double_bit (gdbarch, 128);
b14d30e1 5738 set_gdbarch_long_double_format (gdbarch, floatformats_ibm_long_double);
0dadbba0 5739 break;
c2d11a7d 5740 default:
e2e0b3e5 5741 internal_error (__FILE__, __LINE__, _("unknown ABI in switch"));
c2d11a7d
JM
5742 }
5743
22e47e37
FF
5744 /* GCC creates a pseudo-section whose name specifies the size of
5745 longs, since -mlong32 or -mlong64 may be used independent of
5746 other options. How those options affect pointer sizes is ABI and
5747 architecture dependent, so use them to override the default sizes
5748 set by the ABI. This table shows the relationship between ABI,
5749 -mlongXX, and size of pointers:
5750
5751 ABI -mlongXX ptr bits
5752 --- -------- --------
5753 o32 32 32
5754 o32 64 32
5755 n32 32 32
5756 n32 64 64
5757 o64 32 32
5758 o64 64 64
5759 n64 32 32
5760 n64 64 64
5761 eabi32 32 32
5762 eabi32 64 32
5763 eabi64 32 32
5764 eabi64 64 64
5765
5766 Note that for o32 and eabi32, pointers are always 32 bits
5767 regardless of any -mlongXX option. For all others, pointers and
5768 longs are the same, as set by -mlongXX or set by defaults.
5769 */
5770
5771 if (info.abfd != NULL)
5772 {
5773 int long_bit = 0;
5774
5775 bfd_map_over_sections (info.abfd, mips_find_long_section, &long_bit);
5776 if (long_bit)
5777 {
5778 set_gdbarch_long_bit (gdbarch, long_bit);
5779 switch (mips_abi)
5780 {
5781 case MIPS_ABI_O32:
5782 case MIPS_ABI_EABI32:
5783 break;
5784 case MIPS_ABI_N32:
5785 case MIPS_ABI_O64:
5786 case MIPS_ABI_N64:
5787 case MIPS_ABI_EABI64:
5788 set_gdbarch_ptr_bit (gdbarch, long_bit);
5789 break;
5790 default:
5791 internal_error (__FILE__, __LINE__, _("unknown ABI in switch"));
5792 }
5793 }
5794 }
5795
a5ea2558
AC
5796 /* FIXME: jlarmour/2000-04-07: There *is* a flag EF_MIPS_32BIT_MODE
5797 that could indicate -gp32 BUT gas/config/tc-mips.c contains the
5798 comment:
5799
5800 ``We deliberately don't allow "-gp32" to set the MIPS_32BITMODE
5801 flag in object files because to do so would make it impossible to
102182a9 5802 link with libraries compiled without "-gp32". This is
a5ea2558 5803 unnecessarily restrictive.
361d1df0 5804
a5ea2558
AC
5805 We could solve this problem by adding "-gp32" multilibs to gcc,
5806 but to set this flag before gcc is built with such multilibs will
5807 break too many systems.''
5808
5809 But even more unhelpfully, the default linker output target for
5810 mips64-elf is elf32-bigmips, and has EF_MIPS_32BIT_MODE set, even
5811 for 64-bit programs - you need to change the ABI to change this,
102182a9 5812 and not all gcc targets support that currently. Therefore using
a5ea2558
AC
5813 this flag to detect 32-bit mode would do the wrong thing given
5814 the current gcc - it would make GDB treat these 64-bit programs
102182a9 5815 as 32-bit programs by default. */
a5ea2558 5816
6c997a34 5817 set_gdbarch_read_pc (gdbarch, mips_read_pc);
b6cb9035 5818 set_gdbarch_write_pc (gdbarch, mips_write_pc);
c2d11a7d 5819
102182a9
MS
5820 /* Add/remove bits from an address. The MIPS needs be careful to
5821 ensure that all 32 bit addresses are sign extended to 64 bits. */
875e1767
AC
5822 set_gdbarch_addr_bits_remove (gdbarch, mips_addr_bits_remove);
5823
58dfe9ff
AC
5824 /* Unwind the frame. */
5825 set_gdbarch_unwind_pc (gdbarch, mips_unwind_pc);
30244cd8 5826 set_gdbarch_unwind_sp (gdbarch, mips_unwind_sp);
b8a22b94 5827 set_gdbarch_dummy_id (gdbarch, mips_dummy_id);
10312cc4 5828
102182a9 5829 /* Map debug register numbers onto internal register numbers. */
88c72b7d 5830 set_gdbarch_stab_reg_to_regnum (gdbarch, mips_stab_reg_to_regnum);
6d82d43b
AC
5831 set_gdbarch_ecoff_reg_to_regnum (gdbarch,
5832 mips_dwarf_dwarf2_ecoff_reg_to_regnum);
6d82d43b
AC
5833 set_gdbarch_dwarf2_reg_to_regnum (gdbarch,
5834 mips_dwarf_dwarf2_ecoff_reg_to_regnum);
a4b8ebc8 5835 set_gdbarch_register_sim_regno (gdbarch, mips_register_sim_regno);
88c72b7d 5836
c2d11a7d
JM
5837 /* MIPS version of CALL_DUMMY */
5838
9710e734
AC
5839 /* NOTE: cagney/2003-08-05: Eventually call dummy location will be
5840 replaced by a command, and all targets will default to on stack
5841 (regardless of the stack's execute status). */
5842 set_gdbarch_call_dummy_location (gdbarch, AT_SYMBOL);
dc604539 5843 set_gdbarch_frame_align (gdbarch, mips_frame_align);
d05285fa 5844
87783b8b
AC
5845 set_gdbarch_convert_register_p (gdbarch, mips_convert_register_p);
5846 set_gdbarch_register_to_value (gdbarch, mips_register_to_value);
5847 set_gdbarch_value_to_register (gdbarch, mips_value_to_register);
5848
f7b9e9fc
AC
5849 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
5850 set_gdbarch_breakpoint_from_pc (gdbarch, mips_breakpoint_from_pc);
f7b9e9fc
AC
5851
5852 set_gdbarch_skip_prologue (gdbarch, mips_skip_prologue);
f7b9e9fc 5853
97ab0fdd
MR
5854 set_gdbarch_in_function_epilogue_p (gdbarch, mips_in_function_epilogue_p);
5855
fc0c74b1
AC
5856 set_gdbarch_pointer_to_address (gdbarch, signed_pointer_to_address);
5857 set_gdbarch_address_to_pointer (gdbarch, address_to_signed_pointer);
5858 set_gdbarch_integer_to_address (gdbarch, mips_integer_to_address);
70f80edf 5859
a4b8ebc8 5860 set_gdbarch_register_type (gdbarch, mips_register_type);
78fde5f8 5861
e11c53d2 5862 set_gdbarch_print_registers_info (gdbarch, mips_print_registers_info);
bf1f5b4c 5863
e5ab0dce
AC
5864 set_gdbarch_print_insn (gdbarch, gdb_print_insn_mips);
5865
3a3bc038
AC
5866 /* FIXME: cagney/2003-08-29: The macros HAVE_STEPPABLE_WATCHPOINT,
5867 HAVE_NONSTEPPABLE_WATCHPOINT, and HAVE_CONTINUABLE_WATCHPOINT
5868 need to all be folded into the target vector. Since they are
5869 being used as guards for STOPPED_BY_WATCHPOINT, why not have
5870 STOPPED_BY_WATCHPOINT return the type of watchpoint that the code
5871 is sitting on? */
5872 set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
5873
e7d6a6d2 5874 set_gdbarch_skip_trampoline_code (gdbarch, mips_skip_trampoline_code);
757a7cc6 5875
3352ef37
AC
5876 set_gdbarch_single_step_through_delay (gdbarch, mips_single_step_through_delay);
5877
0d5de010
DJ
5878 /* Virtual tables. */
5879 set_gdbarch_vbit_in_delta (gdbarch, 1);
5880
29709017
DJ
5881 mips_register_g_packet_guesses (gdbarch);
5882
6de918a6 5883 /* Hook in OS ABI-specific overrides, if they have been registered. */
822b6570 5884 info.tdep_info = (void *) tdesc_data;
6de918a6 5885 gdbarch_init_osabi (info, gdbarch);
757a7cc6 5886
5792a79b 5887 /* Unwind the frame. */
b8a22b94
DJ
5888 dwarf2_append_unwinders (gdbarch);
5889 frame_unwind_append_unwinder (gdbarch, &mips_stub_frame_unwind);
5890 frame_unwind_append_unwinder (gdbarch, &mips_insn16_frame_unwind);
5891 frame_unwind_append_unwinder (gdbarch, &mips_insn32_frame_unwind);
2bd0c3d7 5892 frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
eec63939 5893 frame_base_append_sniffer (gdbarch, mips_stub_frame_base_sniffer);
45c9dd44
AC
5894 frame_base_append_sniffer (gdbarch, mips_insn16_frame_base_sniffer);
5895 frame_base_append_sniffer (gdbarch, mips_insn32_frame_base_sniffer);
5792a79b 5896
f8b73d13
DJ
5897 if (tdesc_data)
5898 {
5899 set_tdesc_pseudo_register_type (gdbarch, mips_pseudo_register_type);
7cc46491 5900 tdesc_use_registers (gdbarch, info.target_desc, tdesc_data);
f8b73d13
DJ
5901
5902 /* Override the normal target description methods to handle our
5903 dual real and pseudo registers. */
5904 set_gdbarch_register_name (gdbarch, mips_register_name);
5905 set_gdbarch_register_reggroup_p (gdbarch, mips_tdesc_register_reggroup_p);
5906
5907 num_regs = gdbarch_num_regs (gdbarch);
5908 set_gdbarch_num_pseudo_regs (gdbarch, num_regs);
5909 set_gdbarch_pc_regnum (gdbarch, tdep->regnum->pc + num_regs);
5910 set_gdbarch_sp_regnum (gdbarch, MIPS_SP_REGNUM + num_regs);
5911 }
5912
5913 /* Add ABI-specific aliases for the registers. */
5914 if (mips_abi == MIPS_ABI_N32 || mips_abi == MIPS_ABI_N64)
5915 for (i = 0; i < ARRAY_SIZE (mips_n32_n64_aliases); i++)
5916 user_reg_add (gdbarch, mips_n32_n64_aliases[i].name,
5917 value_of_mips_user_reg, &mips_n32_n64_aliases[i].regnum);
5918 else
5919 for (i = 0; i < ARRAY_SIZE (mips_o32_aliases); i++)
5920 user_reg_add (gdbarch, mips_o32_aliases[i].name,
5921 value_of_mips_user_reg, &mips_o32_aliases[i].regnum);
5922
5923 /* Add some other standard aliases. */
5924 for (i = 0; i < ARRAY_SIZE (mips_register_aliases); i++)
5925 user_reg_add (gdbarch, mips_register_aliases[i].name,
5926 value_of_mips_user_reg, &mips_register_aliases[i].regnum);
5927
4b9b3959
AC
5928 return gdbarch;
5929}
5930
2e4ebe70 5931static void
6d82d43b 5932mips_abi_update (char *ignore_args, int from_tty, struct cmd_list_element *c)
2e4ebe70
DJ
5933{
5934 struct gdbarch_info info;
5935
5936 /* Force the architecture to update, and (if it's a MIPS architecture)
5937 mips_gdbarch_init will take care of the rest. */
5938 gdbarch_info_init (&info);
5939 gdbarch_update_p (info);
5940}
5941
ad188201
KB
5942/* Print out which MIPS ABI is in use. */
5943
5944static void
1f8ca57c
JB
5945show_mips_abi (struct ui_file *file,
5946 int from_tty,
5947 struct cmd_list_element *ignored_cmd,
5948 const char *ignored_value)
ad188201
KB
5949{
5950 if (gdbarch_bfd_arch_info (current_gdbarch)->arch != bfd_arch_mips)
1f8ca57c
JB
5951 fprintf_filtered
5952 (file,
5953 "The MIPS ABI is unknown because the current architecture "
5954 "is not MIPS.\n");
ad188201
KB
5955 else
5956 {
5957 enum mips_abi global_abi = global_mips_abi ();
5958 enum mips_abi actual_abi = mips_abi (current_gdbarch);
5959 const char *actual_abi_str = mips_abi_strings[actual_abi];
5960
5961 if (global_abi == MIPS_ABI_UNKNOWN)
1f8ca57c
JB
5962 fprintf_filtered
5963 (file,
5964 "The MIPS ABI is set automatically (currently \"%s\").\n",
6d82d43b 5965 actual_abi_str);
ad188201 5966 else if (global_abi == actual_abi)
1f8ca57c
JB
5967 fprintf_filtered
5968 (file,
5969 "The MIPS ABI is assumed to be \"%s\" (due to user setting).\n",
6d82d43b 5970 actual_abi_str);
ad188201
KB
5971 else
5972 {
5973 /* Probably shouldn't happen... */
1f8ca57c
JB
5974 fprintf_filtered
5975 (file,
5976 "The (auto detected) MIPS ABI \"%s\" is in use even though the user setting was \"%s\".\n",
6d82d43b 5977 actual_abi_str, mips_abi_strings[global_abi]);
ad188201
KB
5978 }
5979 }
5980}
5981
4b9b3959 5982static void
72a155b4 5983mips_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
4b9b3959 5984{
72a155b4 5985 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
4b9b3959 5986 if (tdep != NULL)
c2d11a7d 5987 {
acdb74a0
AC
5988 int ef_mips_arch;
5989 int ef_mips_32bitmode;
f49e4e6d 5990 /* Determine the ISA. */
acdb74a0
AC
5991 switch (tdep->elf_flags & EF_MIPS_ARCH)
5992 {
5993 case E_MIPS_ARCH_1:
5994 ef_mips_arch = 1;
5995 break;
5996 case E_MIPS_ARCH_2:
5997 ef_mips_arch = 2;
5998 break;
5999 case E_MIPS_ARCH_3:
6000 ef_mips_arch = 3;
6001 break;
6002 case E_MIPS_ARCH_4:
93d56215 6003 ef_mips_arch = 4;
acdb74a0
AC
6004 break;
6005 default:
93d56215 6006 ef_mips_arch = 0;
acdb74a0
AC
6007 break;
6008 }
f49e4e6d 6009 /* Determine the size of a pointer. */
acdb74a0 6010 ef_mips_32bitmode = (tdep->elf_flags & EF_MIPS_32BITMODE);
4b9b3959
AC
6011 fprintf_unfiltered (file,
6012 "mips_dump_tdep: tdep->elf_flags = 0x%x\n",
0dadbba0 6013 tdep->elf_flags);
4b9b3959 6014 fprintf_unfiltered (file,
acdb74a0
AC
6015 "mips_dump_tdep: ef_mips_32bitmode = %d\n",
6016 ef_mips_32bitmode);
6017 fprintf_unfiltered (file,
6018 "mips_dump_tdep: ef_mips_arch = %d\n",
6019 ef_mips_arch);
6020 fprintf_unfiltered (file,
6021 "mips_dump_tdep: tdep->mips_abi = %d (%s)\n",
6d82d43b 6022 tdep->mips_abi, mips_abi_strings[tdep->mips_abi]);
4014092b
AC
6023 fprintf_unfiltered (file,
6024 "mips_dump_tdep: mips_mask_address_p() %d (default %d)\n",
480d3dd2 6025 mips_mask_address_p (tdep),
4014092b 6026 tdep->default_mask_address_p);
c2d11a7d 6027 }
4b9b3959
AC
6028 fprintf_unfiltered (file,
6029 "mips_dump_tdep: MIPS_DEFAULT_FPU_TYPE = %d (%s)\n",
6030 MIPS_DEFAULT_FPU_TYPE,
6031 (MIPS_DEFAULT_FPU_TYPE == MIPS_FPU_NONE ? "none"
6032 : MIPS_DEFAULT_FPU_TYPE == MIPS_FPU_SINGLE ? "single"
6033 : MIPS_DEFAULT_FPU_TYPE == MIPS_FPU_DOUBLE ? "double"
6034 : "???"));
6d82d43b 6035 fprintf_unfiltered (file, "mips_dump_tdep: MIPS_EABI = %d\n", MIPS_EABI);
4b9b3959
AC
6036 fprintf_unfiltered (file,
6037 "mips_dump_tdep: MIPS_FPU_TYPE = %d (%s)\n",
6038 MIPS_FPU_TYPE,
6039 (MIPS_FPU_TYPE == MIPS_FPU_NONE ? "none"
6040 : MIPS_FPU_TYPE == MIPS_FPU_SINGLE ? "single"
6041 : MIPS_FPU_TYPE == MIPS_FPU_DOUBLE ? "double"
6042 : "???"));
c2d11a7d
JM
6043}
6044
6d82d43b 6045extern initialize_file_ftype _initialize_mips_tdep; /* -Wmissing-prototypes */
a78f21af 6046
c906108c 6047void
acdb74a0 6048_initialize_mips_tdep (void)
c906108c
SS
6049{
6050 static struct cmd_list_element *mipsfpulist = NULL;
6051 struct cmd_list_element *c;
6052
6d82d43b 6053 mips_abi_string = mips_abi_strings[MIPS_ABI_UNKNOWN];
2e4ebe70
DJ
6054 if (MIPS_ABI_LAST + 1
6055 != sizeof (mips_abi_strings) / sizeof (mips_abi_strings[0]))
e2e0b3e5 6056 internal_error (__FILE__, __LINE__, _("mips_abi_strings out of sync"));
2e4ebe70 6057
4b9b3959 6058 gdbarch_register (bfd_arch_mips, mips_gdbarch_init, mips_dump_tdep);
c906108c 6059
8d5f9dcb
DJ
6060 mips_pdr_data = register_objfile_data ();
6061
4eb0ad19
DJ
6062 /* Create feature sets with the appropriate properties. The values
6063 are not important. */
6064 mips_tdesc_gp32 = allocate_target_description ();
6065 set_tdesc_property (mips_tdesc_gp32, PROPERTY_GP32, "");
6066
6067 mips_tdesc_gp64 = allocate_target_description ();
6068 set_tdesc_property (mips_tdesc_gp64, PROPERTY_GP64, "");
6069
a5ea2558
AC
6070 /* Add root prefix command for all "set mips"/"show mips" commands */
6071 add_prefix_cmd ("mips", no_class, set_mips_command,
1bedd215 6072 _("Various MIPS specific commands."),
a5ea2558
AC
6073 &setmipscmdlist, "set mips ", 0, &setlist);
6074
6075 add_prefix_cmd ("mips", no_class, show_mips_command,
1bedd215 6076 _("Various MIPS specific commands."),
a5ea2558
AC
6077 &showmipscmdlist, "show mips ", 0, &showlist);
6078
2e4ebe70 6079 /* Allow the user to override the ABI. */
7ab04401
AC
6080 add_setshow_enum_cmd ("abi", class_obscure, mips_abi_strings,
6081 &mips_abi_string, _("\
6082Set the MIPS ABI used by this program."), _("\
6083Show the MIPS ABI used by this program."), _("\
6084This option can be set to one of:\n\
6085 auto - the default ABI associated with the current binary\n\
6086 o32\n\
6087 o64\n\
6088 n32\n\
6089 n64\n\
6090 eabi32\n\
6091 eabi64"),
6092 mips_abi_update,
6093 show_mips_abi,
6094 &setmipscmdlist, &showmipscmdlist);
2e4ebe70 6095
c906108c
SS
6096 /* Let the user turn off floating point and set the fence post for
6097 heuristic_proc_start. */
6098
6099 add_prefix_cmd ("mipsfpu", class_support, set_mipsfpu_command,
1bedd215 6100 _("Set use of MIPS floating-point coprocessor."),
c906108c
SS
6101 &mipsfpulist, "set mipsfpu ", 0, &setlist);
6102 add_cmd ("single", class_support, set_mipsfpu_single_command,
1a966eab 6103 _("Select single-precision MIPS floating-point coprocessor."),
c906108c
SS
6104 &mipsfpulist);
6105 add_cmd ("double", class_support, set_mipsfpu_double_command,
1a966eab 6106 _("Select double-precision MIPS floating-point coprocessor."),
c906108c
SS
6107 &mipsfpulist);
6108 add_alias_cmd ("on", "double", class_support, 1, &mipsfpulist);
6109 add_alias_cmd ("yes", "double", class_support, 1, &mipsfpulist);
6110 add_alias_cmd ("1", "double", class_support, 1, &mipsfpulist);
6111 add_cmd ("none", class_support, set_mipsfpu_none_command,
1a966eab 6112 _("Select no MIPS floating-point coprocessor."), &mipsfpulist);
c906108c
SS
6113 add_alias_cmd ("off", "none", class_support, 1, &mipsfpulist);
6114 add_alias_cmd ("no", "none", class_support, 1, &mipsfpulist);
6115 add_alias_cmd ("0", "none", class_support, 1, &mipsfpulist);
6116 add_cmd ("auto", class_support, set_mipsfpu_auto_command,
1a966eab 6117 _("Select MIPS floating-point coprocessor automatically."),
c906108c
SS
6118 &mipsfpulist);
6119 add_cmd ("mipsfpu", class_support, show_mipsfpu_command,
1a966eab 6120 _("Show current use of MIPS floating-point coprocessor target."),
c906108c
SS
6121 &showlist);
6122
c906108c
SS
6123 /* We really would like to have both "0" and "unlimited" work, but
6124 command.c doesn't deal with that. So make it a var_zinteger
6125 because the user can always use "999999" or some such for unlimited. */
6bcadd06 6126 add_setshow_zinteger_cmd ("heuristic-fence-post", class_support,
7915a72c
AC
6127 &heuristic_fence_post, _("\
6128Set the distance searched for the start of a function."), _("\
6129Show the distance searched for the start of a function."), _("\
c906108c
SS
6130If you are debugging a stripped executable, GDB needs to search through the\n\
6131program for the start of a function. This command sets the distance of the\n\
7915a72c 6132search. The only need to set it is when debugging a stripped executable."),
2c5b56ce 6133 reinit_frame_cache_sfunc,
7915a72c 6134 NULL, /* FIXME: i18n: The distance searched for the start of a function is %s. */
6bcadd06 6135 &setlist, &showlist);
c906108c
SS
6136
6137 /* Allow the user to control whether the upper bits of 64-bit
6138 addresses should be zeroed. */
7915a72c
AC
6139 add_setshow_auto_boolean_cmd ("mask-address", no_class,
6140 &mask_address_var, _("\
6141Set zeroing of upper 32 bits of 64-bit addresses."), _("\
6142Show zeroing of upper 32 bits of 64-bit addresses."), _("\
e9e68a56 6143Use \"on\" to enable the masking, \"off\" to disable it and \"auto\" to \n\
7915a72c 6144allow GDB to determine the correct value."),
08546159
AC
6145 NULL, show_mask_address,
6146 &setmipscmdlist, &showmipscmdlist);
43e526b9
JM
6147
6148 /* Allow the user to control the size of 32 bit registers within the
6149 raw remote packet. */
b3f42336 6150 add_setshow_boolean_cmd ("remote-mips64-transfers-32bit-regs", class_obscure,
7915a72c
AC
6151 &mips64_transfers_32bit_regs_p, _("\
6152Set compatibility with 64-bit MIPS target that transfers 32-bit quantities."),
6153 _("\
6154Show compatibility with 64-bit MIPS target that transfers 32-bit quantities."),
6155 _("\
719ec221
AC
6156Use \"on\" to enable backward compatibility with older MIPS 64 GDB+target\n\
6157that would transfer 32 bits for some registers (e.g. SR, FSR) and\n\
7915a72c 615864 bits for others. Use \"off\" to disable compatibility mode"),
2c5b56ce 6159 set_mips64_transfers_32bit_regs,
7915a72c 6160 NULL, /* FIXME: i18n: Compatibility with 64-bit MIPS target that transfers 32-bit quantities is %s. */
7915a72c 6161 &setlist, &showlist);
9ace0497
AC
6162
6163 /* Debug this files internals. */
6bcadd06 6164 add_setshow_zinteger_cmd ("mips", class_maintenance,
7915a72c
AC
6165 &mips_debug, _("\
6166Set mips debugging."), _("\
6167Show mips debugging."), _("\
6168When non-zero, mips specific debugging is enabled."),
2c5b56ce 6169 NULL,
7915a72c 6170 NULL, /* FIXME: i18n: Mips debugging is currently %s. */
6bcadd06 6171 &setdebuglist, &showdebuglist);
c906108c 6172}
This page took 1.245337 seconds and 4 git commands to generate.