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