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