OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-6.8/] [gdb/] [mips-tdep.c] - Blame information for rev 277

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.