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