]> Git Repo - binutils.git/blob - gdb/mips-tdep.c
fixed sanitize files
[binutils.git] / gdb / mips-tdep.c
1 /* Target-dependent code for the MIPS architecture, for GDB, the GNU Debugger.
2    Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995
3    Free Software Foundation, Inc.
4    Contributed by Alessandro Forin([email protected]) at CMU
5    and by Per Bothner([email protected]) at U.Wisconsin.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
22
23 #include "defs.h"
24 #include "gdb_string.h"
25 #include "frame.h"
26 #include "inferior.h"
27 #include "symtab.h"
28 #include "value.h"
29 #include "gdbcmd.h"
30 #include "language.h"
31 #include "gdbcore.h"
32 #include "symfile.h"
33 #include "objfiles.h"
34 #include "gdbtypes.h"
35 #include "target.h"
36
37 #include "opcode/mips.h"
38
39 #define VM_MIN_ADDRESS (CORE_ADDR)0x400000
40
41 /* FIXME: Put this declaration in frame.h.  */
42 extern struct obstack frame_cache_obstack;
43
44 /* FIXME! this code assumes 4-byte instructions.  */
45 #define MIPS_INSTLEN 4          /* Length of an instruction */
46 #define MIPS_NUMREGS 32         /* Number of integer or float registers */
47 typedef unsigned long t_inst;   /* Integer big enough to hold an instruction */
48
49 #if 0
50 static int mips_in_lenient_prologue PARAMS ((CORE_ADDR, CORE_ADDR));
51 #endif
52
53 static int gdb_print_insn_mips PARAMS ((bfd_vma, disassemble_info *));
54
55 static void mips_print_register PARAMS ((int, int));
56
57 static mips_extra_func_info_t
58 heuristic_proc_desc PARAMS ((CORE_ADDR, CORE_ADDR, struct frame_info *));
59
60 static CORE_ADDR heuristic_proc_start PARAMS ((CORE_ADDR));
61
62 static CORE_ADDR read_next_frame_reg PARAMS ((struct frame_info *, int));
63
64 static void mips_set_fpu_command PARAMS ((char *, int,
65                                           struct cmd_list_element *));
66
67 static void mips_show_fpu_command PARAMS ((char *, int,
68                                            struct cmd_list_element *));
69
70 void mips_set_processor_type_command PARAMS ((char *, int));
71
72 int mips_set_processor_type PARAMS ((char *));
73
74 static void mips_show_processor_type_command PARAMS ((char *, int));
75
76 static void reinit_frame_cache_sfunc PARAMS ((char *, int,
77                                               struct cmd_list_element *));
78
79 static mips_extra_func_info_t
80   find_proc_desc PARAMS ((CORE_ADDR pc, struct frame_info *next_frame));
81
82 static CORE_ADDR after_prologue PARAMS ((CORE_ADDR pc,
83                                          mips_extra_func_info_t proc_desc));
84
85 /* This value is the model of MIPS in use.  It is derived from the value
86    of the PrID register.  */
87
88 char *mips_processor_type;
89
90 char *tmp_mips_processor_type;
91
92 /* Some MIPS boards don't support floating point, so we permit the
93    user to turn it off.  */
94
95 enum mips_fpu_type mips_fpu;
96
97 static char *mips_fpu_string;
98
99 /* A set of original names, to be used when restoring back to generic
100    registers from a specific set.  */
101
102 char *mips_generic_reg_names[] = REGISTER_NAMES;
103
104 /* Names of IDT R3041 registers.  */
105
106 char *mips_r3041_reg_names[] = {
107         "zero", "at",   "v0",   "v1",   "a0",   "a1",   "a2",   "a3",
108         "t0",   "t1",   "t2",   "t3",   "t4",   "t5",   "t6",   "t7",
109         "s0",   "s1",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",
110         "t8",   "t9",   "k0",   "k1",   "gp",   "sp",   "s8",   "ra",
111         "sr",   "lo",   "hi",   "bad",  "cause","pc",
112         "f0",   "f1",   "f2",   "f3",   "f4",   "f5",   "f6",   "f7",
113         "f8",   "f9",   "f10",  "f11",  "f12",  "f13",  "f14",  "f15",
114         "f16",  "f17",  "f18",  "f19",  "f20",  "f21",  "f22",  "f23",
115         "f24",  "f25",  "f26",  "f27",  "f28",  "f29",  "f30",  "f31",
116         "fsr",  "fir",  "fp",   "",
117         "",     "",     "bus",  "ccfg", "",     "",     "",     "",
118         "",     "",     "port", "cmp",  "",     "",     "epc",  "prid",
119 };
120
121 /* Names of IDT R3051 registers.  */
122
123 char *mips_r3051_reg_names[] = {
124         "zero", "at",   "v0",   "v1",   "a0",   "a1",   "a2",   "a3",
125         "t0",   "t1",   "t2",   "t3",   "t4",   "t5",   "t6",   "t7",
126         "s0",   "s1",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",
127         "t8",   "t9",   "k0",   "k1",   "gp",   "sp",   "s8",   "ra",
128         "sr",   "lo",   "hi",   "bad",  "cause","pc",
129         "f0",   "f1",   "f2",   "f3",   "f4",   "f5",   "f6",   "f7",
130         "f8",   "f9",   "f10",  "f11",  "f12",  "f13",  "f14",  "f15",
131         "f16",  "f17",  "f18",  "f19",  "f20",  "f21",  "f22",  "f23",
132         "f24",  "f25",  "f26",  "f27",  "f28",  "f29",  "f30",  "f31",
133         "fsr",  "fir",  "fp",   "",
134         "inx",  "rand", "elo",  "",     "ctxt", "",     "",     "",
135         "",     "",     "ehi",  "",     "",     "",     "epc",  "prid",
136 };
137
138 /* Names of IDT R3081 registers.  */
139
140 char *mips_r3081_reg_names[] = {
141         "zero", "at",   "v0",   "v1",   "a0",   "a1",   "a2",   "a3",
142         "t0",   "t1",   "t2",   "t3",   "t4",   "t5",   "t6",   "t7",
143         "s0",   "s1",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",
144         "t8",   "t9",   "k0",   "k1",   "gp",   "sp",   "s8",   "ra",
145         "sr",   "lo",   "hi",   "bad",  "cause","pc",
146         "f0",   "f1",   "f2",   "f3",   "f4",   "f5",   "f6",   "f7",
147         "f8",   "f9",   "f10",  "f11",  "f12",  "f13",  "f14",  "f15",
148         "f16",  "f17",  "f18",  "f19",  "f20",  "f21",  "f22",  "f23",
149         "f24",  "f25",  "f26",  "f27",  "f28",  "f29",  "f30",  "f31",
150         "fsr",  "fir",  "fp",   "",
151         "inx",  "rand", "elo",  "cfg",  "ctxt", "",     "",     "",
152         "",     "",     "ehi",  "",     "",     "",     "epc",  "prid",
153 };
154
155 /* Names of LSI 33k registers.  */
156
157 char *mips_lsi33k_reg_names[] = {
158         "zero", "at",   "v0",   "v1",   "a0",   "a1",   "a2",   "a3",
159         "t0",   "t1",   "t2",   "t3",   "t4",   "t5",   "t6",   "t7",
160         "s0",   "s1",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",
161         "t8",   "t9",   "k0",   "k1",   "gp",   "sp",   "s8",   "ra",
162         "epc",  "hi",   "lo",   "sr",   "cause","badvaddr",
163         "dcic", "bpc",  "bda",  "",     "",     "",     "",      "",
164         "",     "",     "",     "",     "",     "",     "",      "",
165         "",     "",     "",     "",     "",     "",     "",      "",
166         "",     "",     "",     "",     "",     "",     "",      "",
167         "",     "",     "",     "",
168         "",     "",     "",     "",     "",     "",     "",      "",
169         "",     "",     "",     "",     "",     "",     "",      "",
170 };
171
172 struct {
173   char *name;
174   char **regnames;
175 } mips_processor_type_table[] = {
176   { "generic", mips_generic_reg_names },
177   { "r3041", mips_r3041_reg_names },
178   { "r3051", mips_r3051_reg_names },
179   { "r3071", mips_r3081_reg_names },
180   { "r3081", mips_r3081_reg_names },
181   { "lsi33k", mips_lsi33k_reg_names },
182   { NULL, NULL }
183 };
184
185 /* Heuristic_proc_start may hunt through the text section for a long
186    time across a 2400 baud serial line.  Allows the user to limit this
187    search.  */
188
189 static unsigned int heuristic_fence_post = 0;
190
191 #define PROC_LOW_ADDR(proc) ((proc)->pdr.adr) /* least address */
192 #define PROC_HIGH_ADDR(proc) ((proc)->high_addr) /* upper address bound */
193 #define PROC_FRAME_OFFSET(proc) ((proc)->pdr.frameoffset)
194 #define PROC_FRAME_REG(proc) ((proc)->pdr.framereg)
195 #define PROC_REG_MASK(proc) ((proc)->pdr.regmask)
196 #define PROC_FREG_MASK(proc) ((proc)->pdr.fregmask)
197 #define PROC_REG_OFFSET(proc) ((proc)->pdr.regoffset)
198 #define PROC_FREG_OFFSET(proc) ((proc)->pdr.fregoffset)
199 #define PROC_PC_REG(proc) ((proc)->pdr.pcreg)
200 #define PROC_SYMBOL(proc) (*(struct symbol**)&(proc)->pdr.isym)
201 #define _PROC_MAGIC_ 0x0F0F0F0F
202 #define PROC_DESC_IS_DUMMY(proc) ((proc)->pdr.isym == _PROC_MAGIC_)
203 #define SET_PROC_DESC_IS_DUMMY(proc) ((proc)->pdr.isym = _PROC_MAGIC_)
204
205 struct linked_proc_info
206 {
207   struct mips_extra_func_info info;
208   struct linked_proc_info *next;
209 } *linked_proc_desc_table = NULL;
210
211
212 /* This returns the PC of the first inst after the prologue.  If we can't
213    find the prologue, then return 0.  */
214
215 static CORE_ADDR
216 after_prologue (pc, proc_desc)
217      CORE_ADDR pc;
218      mips_extra_func_info_t proc_desc;
219 {
220   struct symtab_and_line sal;
221   CORE_ADDR func_addr, func_end;
222
223   if (!proc_desc)
224     proc_desc = find_proc_desc (pc, NULL);
225
226   if (proc_desc)
227     {
228       /* If function is frameless, then we need to do it the hard way.  I
229          strongly suspect that frameless always means prologueless... */
230       if (PROC_FRAME_REG (proc_desc) == SP_REGNUM
231           && PROC_FRAME_OFFSET (proc_desc) == 0)
232         return 0;
233     }
234
235   if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
236     return 0;                   /* Unknown */
237
238   sal = find_pc_line (func_addr, 0);
239
240   if (sal.end < func_end)
241     return sal.end;
242
243   /* The line after the prologue is after the end of the function.  In this
244      case, tell the caller to find the prologue the hard way.  */
245
246   return 0;
247 }
248
249 /* Guaranteed to set fci->saved_regs to some values (it never leaves it
250    NULL).  */
251
252 void
253 mips_find_saved_regs (fci)
254      struct frame_info *fci;
255 {
256   int ireg;
257   CORE_ADDR reg_position;
258   /* r0 bit means kernel trap */
259   int kernel_trap;
260   /* What registers have been saved?  Bitmasks.  */
261   unsigned long gen_mask, float_mask;
262   mips_extra_func_info_t proc_desc;
263
264   fci->saved_regs = (struct frame_saved_regs *)
265     obstack_alloc (&frame_cache_obstack, sizeof(struct frame_saved_regs));
266   memset (fci->saved_regs, 0, sizeof (struct frame_saved_regs));
267
268   /* If it is the frame for sigtramp, the saved registers are located
269      in a sigcontext structure somewhere on the stack.
270      If the stack layout for sigtramp changes we might have to change these
271      constants and the companion fixup_sigtramp in mdebugread.c  */
272 #ifndef SIGFRAME_BASE
273 /* To satisfy alignment restrictions, sigcontext is located 4 bytes
274    above the sigtramp frame.  */
275 #define SIGFRAME_BASE           MIPS_REGSIZE
276 /* FIXME!  Are these correct?? */
277 #define SIGFRAME_PC_OFF         (SIGFRAME_BASE + 2 * MIPS_REGSIZE)
278 #define SIGFRAME_REGSAVE_OFF    (SIGFRAME_BASE + 3 * MIPS_REGSIZE)
279 #define SIGFRAME_FPREGSAVE_OFF  \
280         (SIGFRAME_REGSAVE_OFF + MIPS_NUMREGS * MIPS_REGSIZE + 3 * MIPS_REGSIZE)
281 #endif
282 #ifndef SIGFRAME_REG_SIZE
283 /* FIXME!  Is this correct?? */
284 #define SIGFRAME_REG_SIZE       MIPS_REGSIZE
285 #endif
286   if (fci->signal_handler_caller)
287     {
288       for (ireg = 0; ireg < MIPS_NUMREGS; ireg++)
289         {
290           reg_position = fci->frame + SIGFRAME_REGSAVE_OFF
291                          + ireg * SIGFRAME_REG_SIZE;
292           fci->saved_regs->regs[ireg] = reg_position;
293         }
294       for (ireg = 0; ireg < MIPS_NUMREGS; ireg++)
295         {
296           reg_position = fci->frame + SIGFRAME_FPREGSAVE_OFF
297                          + ireg * SIGFRAME_REG_SIZE;
298           fci->saved_regs->regs[FP0_REGNUM + ireg] = reg_position;
299         }
300       fci->saved_regs->regs[PC_REGNUM] = fci->frame + SIGFRAME_PC_OFF;
301       return;
302     }
303
304   proc_desc = fci->proc_desc;
305   if (proc_desc == NULL)
306     /* I'm not sure how/whether this can happen.  Normally when we can't
307        find a proc_desc, we "synthesize" one using heuristic_proc_desc
308        and set the saved_regs right away.  */
309     return;
310
311   kernel_trap = PROC_REG_MASK(proc_desc) & 1;
312   gen_mask = kernel_trap ? 0xFFFFFFFF : PROC_REG_MASK(proc_desc);
313   float_mask = kernel_trap ? 0xFFFFFFFF : PROC_FREG_MASK(proc_desc);
314
315   if (/* In any frame other than the innermost, we assume that all
316          registers have been saved.  This assumes that all register
317          saves in a function happen before the first function
318          call.  */
319       fci->next == NULL
320
321       /* In a dummy frame we know exactly where things are saved.  */
322       && !PROC_DESC_IS_DUMMY (proc_desc)
323
324       /* Don't bother unless we are inside a function prologue.  Outside the
325          prologue, we know where everything is. */
326
327       && in_prologue (fci->pc, PROC_LOW_ADDR (proc_desc))
328
329       /* Not sure exactly what kernel_trap means, but if it means
330          the kernel saves the registers without a prologue doing it,
331          we better not examine the prologue to see whether registers
332          have been saved yet.  */
333       && !kernel_trap)
334     {
335       /* We need to figure out whether the registers that the proc_desc
336          claims are saved have been saved yet.  */
337
338       CORE_ADDR addr;
339       int status;
340       char buf[MIPS_INSTLEN];
341       t_inst inst;
342
343       /* Bitmasks; set if we have found a save for the register.  */
344       unsigned long gen_save_found = 0;
345       unsigned long float_save_found = 0;
346
347       for (addr = PROC_LOW_ADDR (proc_desc);
348            addr < fci->pc /*&& (gen_mask != gen_save_found
349                               || float_mask != float_save_found)*/;
350            addr += MIPS_INSTLEN)
351         {
352           status = read_memory_nobpt (addr, buf, MIPS_INSTLEN);
353           if (status)
354             memory_error (status, addr);
355           inst = extract_unsigned_integer (buf, MIPS_INSTLEN);
356           if (/* sw reg,n($sp) */
357               (inst & 0xffe00000) == 0xafa00000
358
359               /* sw reg,n($r30) */
360               || (inst & 0xffe00000) == 0xafc00000
361
362               /* sd reg,n($sp) */
363               || (inst & 0xffe00000) == 0xffa00000)
364             {
365               /* It might be possible to use the instruction to
366                  find the offset, rather than the code below which
367                  is based on things being in a certain order in the
368                  frame, but figuring out what the instruction's offset
369                  is relative to might be a little tricky.  */
370               int reg = (inst & 0x001f0000) >> 16;
371               gen_save_found |= (1 << reg);
372             }
373           else if (/* swc1 freg,n($sp) */
374                    (inst & 0xffe00000) == 0xe7a00000
375
376                    /* swc1 freg,n($r30) */
377                    || (inst & 0xffe00000) == 0xe7c00000
378
379                    /* sdc1 freg,n($sp) */
380                    || (inst & 0xffe00000) == 0xf7a00000)
381
382             {
383               int reg = ((inst & 0x001f0000) >> 16);
384               float_save_found |= (1 << reg);
385             }
386         }
387       gen_mask = gen_save_found;
388       float_mask = float_save_found;
389     }
390
391   /* Fill in the offsets for the registers which gen_mask says
392      were saved.  */
393   reg_position = fci->frame + PROC_REG_OFFSET (proc_desc);
394   for (ireg= MIPS_NUMREGS-1; gen_mask; --ireg, gen_mask <<= 1)
395     if (gen_mask & 0x80000000)
396       {
397         fci->saved_regs->regs[ireg] = reg_position;
398         reg_position -= MIPS_REGSIZE;
399       }
400   /* Fill in the offsets for the registers which float_mask says
401      were saved.  */
402   reg_position = fci->frame + PROC_FREG_OFFSET (proc_desc);
403
404   /* The freg_offset points to where the first *double* register
405      is saved.  So skip to the high-order word. */
406   if (! GDB_TARGET_IS_MIPS64)
407     reg_position += 4;
408
409   /* FIXME!  this code looks scary... 
410    * Looks like it's trying to do stuff with a register, 
411    * but .... ???
412    */
413   for (ireg = MIPS_NUMREGS-1; float_mask; --ireg, float_mask <<= 1)
414     if (float_mask & 0x80000000)
415       {
416         fci->saved_regs->regs[FP0_REGNUM+ireg] = reg_position;
417         reg_position -= MIPS_REGSIZE;
418       }
419
420   fci->saved_regs->regs[PC_REGNUM] = fci->saved_regs->regs[RA_REGNUM];
421 }
422
423 static CORE_ADDR
424 read_next_frame_reg(fi, regno)
425      struct frame_info *fi;
426      int regno;
427 {
428   for (; fi; fi = fi->next)
429     {
430       /* We have to get the saved sp from the sigcontext
431          if it is a signal handler frame.  */
432       if (regno == SP_REGNUM && !fi->signal_handler_caller)
433         return fi->frame;
434       else
435         {
436           if (fi->saved_regs == NULL)
437             mips_find_saved_regs (fi);
438           if (fi->saved_regs->regs[regno])
439             return read_memory_integer(fi->saved_regs->regs[regno], MIPS_REGSIZE);
440         }
441     }
442   return read_register (regno);
443 }
444
445 /* mips_addr_bits_remove - remove useless address bits  */
446
447 CORE_ADDR
448 mips_addr_bits_remove (addr)
449     CORE_ADDR addr;
450 {
451   if (GDB_TARGET_IS_MIPS64
452       && (addr >> 32 == (CORE_ADDR)0xffffffff)
453       && (strcmp(target_shortname,"pmon")==0
454          || strcmp(target_shortname,"ddb")==0
455          || strcmp(target_shortname,"sim")==0))
456     {
457       /* This hack is a work-around for existing boards using PMON,
458          the simulator, and any other 64-bit targets that doesn't have
459          true 64-bit addressing.  On these targets, the upper 32 bits
460          of addresses are ignored by the hardware.  Thus, the PC or SP
461          are likely to have been sign extended to all 1s by instruction
462          sequences that load 32-bit addresses.  For example, a typical
463          piece of code that loads an address is this:
464                 lui $r2, <upper 16 bits>
465                 ori $r2, <lower 16 bits>
466          But the lui sign-extends the value such that the upper 32 bits
467          may be all 1s.  The workaround is simply to mask off these bits.
468          In the future, gcc may be changed to support true 64-bit
469          addressing, and this masking will have to be disabled.  */
470         addr &= (CORE_ADDR)0xffffffff;
471     }
472
473   return addr;
474 }
475
476 CORE_ADDR
477 mips_frame_saved_pc(frame)
478      struct frame_info *frame;
479 {
480   CORE_ADDR saved_pc;
481   mips_extra_func_info_t proc_desc = frame->proc_desc;
482   /* We have to get the saved pc from the sigcontext
483      if it is a signal handler frame.  */
484   int pcreg = frame->signal_handler_caller ? PC_REGNUM
485               : (proc_desc ? PROC_PC_REG(proc_desc) : RA_REGNUM);
486
487   if (proc_desc && PROC_DESC_IS_DUMMY(proc_desc))
488     saved_pc = read_memory_integer(frame->frame - MIPS_REGSIZE, MIPS_REGSIZE);
489   else
490     saved_pc = read_next_frame_reg(frame, pcreg);
491
492   return ADDR_BITS_REMOVE (saved_pc);
493 }
494
495 static struct mips_extra_func_info temp_proc_desc;
496 static struct frame_saved_regs temp_saved_regs;
497
498 /* This fencepost looks highly suspicious to me.  Removing it also
499    seems suspicious as it could affect remote debugging across serial
500    lines.  */
501
502 static CORE_ADDR
503 heuristic_proc_start(pc)
504     CORE_ADDR pc;
505 {
506     CORE_ADDR start_pc = pc;
507     CORE_ADDR fence = start_pc - heuristic_fence_post;
508
509     if (start_pc == 0)  return 0;
510
511     if (heuristic_fence_post == UINT_MAX
512         || fence < VM_MIN_ADDRESS)
513       fence = VM_MIN_ADDRESS;
514
515     /* search back for previous return */
516     for (start_pc -= MIPS_INSTLEN; ; start_pc -= MIPS_INSTLEN) /* FIXME!! */
517         if (start_pc < fence)
518           {
519             /* It's not clear to me why we reach this point when
520                stop_soon_quietly, but with this test, at least we
521                don't print out warnings for every child forked (eg, on
522                decstation).  22apr93 [email protected].  */
523             if (!stop_soon_quietly)
524               {
525                 static int blurb_printed = 0;
526
527                 if (fence == VM_MIN_ADDRESS)
528                   warning("Hit beginning of text section without finding");
529                 else
530                   warning("Hit heuristic-fence-post without finding");
531                 
532                 warning("enclosing function for address 0x%s", paddr (pc));
533                 if (!blurb_printed)
534                   {
535                     printf_filtered ("\
536 This warning occurs if you are debugging a function without any symbols\n\
537 (for example, in a stripped executable).  In that case, you may wish to\n\
538 increase the size of the search with the `set heuristic-fence-post' command.\n\
539 \n\
540 Otherwise, you told GDB there was a function where there isn't one, or\n\
541 (more likely) you have encountered a bug in GDB.\n");
542                     blurb_printed = 1;
543                   }
544               }
545
546             return 0; 
547           }
548         else if (ABOUT_TO_RETURN(start_pc))
549             break;
550
551     start_pc += 2 * MIPS_INSTLEN; /* skip return, and its delay slot */
552 #if 0
553     /* skip nops (usually 1) 0 - is this */
554     while (start_pc < pc && read_memory_integer (start_pc, MIPS_INSTLEN) == 0)
555         start_pc += MIPS_INSTLEN;
556 #endif
557     return start_pc;
558 }
559
560 static mips_extra_func_info_t
561 heuristic_proc_desc(start_pc, limit_pc, next_frame)
562     CORE_ADDR start_pc, limit_pc;
563     struct frame_info *next_frame;
564 {
565     CORE_ADDR sp = read_next_frame_reg (next_frame, SP_REGNUM);
566     CORE_ADDR cur_pc;
567     unsigned long frame_size;
568     int has_frame_reg = 0;
569     CORE_ADDR reg30 = 0; /* Value of $r30. Used by gcc for frame-pointer */
570     unsigned long reg_mask = 0;
571
572     if (start_pc == 0) return NULL;
573     memset (&temp_proc_desc, '\0', sizeof(temp_proc_desc));
574     memset (&temp_saved_regs, '\0', sizeof(struct frame_saved_regs));
575     PROC_LOW_ADDR (&temp_proc_desc) = start_pc;
576
577     if (start_pc + 200 < limit_pc)
578       limit_pc = start_pc + 200;
579   restart:
580     frame_size = 0;
581     for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS_INSTLEN) {
582         char buf[MIPS_INSTLEN];
583         unsigned long word;
584         int status;
585
586         status = (unsigned long) read_memory_nobpt (cur_pc, buf, MIPS_INSTLEN); /* FIXME!! */ 
587         if (status) memory_error (status, cur_pc);
588         word = (unsigned long) extract_unsigned_integer (buf, MIPS_INSTLEN); /* FIXME!! */
589
590         if ((word & 0xFFFF0000) == 0x27bd0000           /* addiu $sp,$sp,-i */
591             || (word & 0xFFFF0000) == 0x23bd0000        /* addi $sp,$sp,-i */
592             || (word & 0xFFFF0000) == 0x67bd0000)       /* daddiu $sp,$sp,-i */
593             frame_size += (-word) & 0xFFFF;
594         else if ((word & 0xFFE00000) == 0xafa00000      /* sw reg,offset($sp) */
595                 || (word & 0xFFE00000) == 0xffa00000) { /* sd reg,offset($sp) */
596             int reg = (word & 0x001F0000) >> 16;
597             reg_mask |= 1 << reg;
598             temp_saved_regs.regs[reg] = sp + (word & 0xffff);
599         }
600         else if ((word & 0xFFFF0000) == 0x27be0000) { /* addiu $30,$sp,size */
601             if ((word & 0xffff) != frame_size)
602                 reg30 = sp + (word & 0xffff);
603             else if (!has_frame_reg) {
604                 unsigned alloca_adjust;
605                 has_frame_reg = 1;
606                 reg30 = read_next_frame_reg(next_frame, 30);
607                 alloca_adjust = (unsigned)(reg30 - (sp + (word & 0xffff)));
608                 if (alloca_adjust > 0) {
609                     /* FP > SP + frame_size. This may be because
610                      * of an alloca or somethings similar.
611                      * Fix sp to "pre-alloca" value, and try again.
612                      */
613                     sp += alloca_adjust;
614                     goto restart;
615                 }
616             }
617         }
618         else if ((word & 0xFFE00000) == 0xafc00000) { /* sw reg,offset($30) */
619             int reg = (word & 0x001F0000) >> 16;
620             reg_mask |= 1 << reg;
621             temp_saved_regs.regs[reg] = reg30 + (word & 0xffff);
622         }
623     }
624     if (has_frame_reg) {
625         PROC_FRAME_REG(&temp_proc_desc) = 30;
626         PROC_FRAME_OFFSET(&temp_proc_desc) = 0;
627     }
628     else {
629         PROC_FRAME_REG(&temp_proc_desc) = SP_REGNUM;
630         PROC_FRAME_OFFSET(&temp_proc_desc) = frame_size;
631     }
632     PROC_REG_MASK(&temp_proc_desc) = reg_mask;
633     PROC_PC_REG(&temp_proc_desc) = RA_REGNUM;
634     return &temp_proc_desc;
635 }
636
637 static mips_extra_func_info_t
638 find_proc_desc (pc, next_frame)
639      CORE_ADDR pc;
640      struct frame_info *next_frame;
641 {
642   mips_extra_func_info_t proc_desc;
643   struct block *b = block_for_pc(pc);
644   struct symbol *sym;
645   CORE_ADDR startaddr;
646
647   find_pc_partial_function (pc, NULL, &startaddr, NULL);
648   if (b == NULL)
649     sym = NULL;
650   else
651     {
652       if (startaddr > BLOCK_START (b))
653         /* This is the "pathological" case referred to in a comment in
654            print_frame_info.  It might be better to move this check into
655            symbol reading.  */
656         sym = NULL;
657       else
658         sym = lookup_symbol (MIPS_EFI_SYMBOL_NAME, b, LABEL_NAMESPACE,
659                              0, NULL);
660     }
661
662   /* If we never found a PDR for this function in symbol reading, then
663      examine prologues to find the information.  */
664   if (sym && ((mips_extra_func_info_t) SYMBOL_VALUE (sym))->pdr.framereg == -1)
665     sym = NULL;
666
667   if (sym)
668     {
669         /* IF this is the topmost frame AND
670          * (this proc does not have debugging information OR
671          * the PC is in the procedure prologue)
672          * THEN create a "heuristic" proc_desc (by analyzing
673          * the actual code) to replace the "official" proc_desc.
674          */
675         proc_desc = (mips_extra_func_info_t) SYMBOL_VALUE (sym);
676         if (next_frame == NULL) {
677             struct symtab_and_line val;
678             struct symbol *proc_symbol =
679                 PROC_DESC_IS_DUMMY(proc_desc) ? 0 : PROC_SYMBOL(proc_desc);
680
681             if (proc_symbol) {
682                 val = find_pc_line (BLOCK_START
683                                     (SYMBOL_BLOCK_VALUE(proc_symbol)),
684                                     0);
685                 val.pc = val.end ? val.end : pc;
686             }
687             if (!proc_symbol || pc < val.pc) {
688                 mips_extra_func_info_t found_heuristic =
689                   heuristic_proc_desc (PROC_LOW_ADDR (proc_desc),
690                                        pc, next_frame);
691                 if (found_heuristic)
692                   proc_desc = found_heuristic;
693             }
694         }
695     }
696   else
697     {
698       /* Is linked_proc_desc_table really necessary?  It only seems to be used
699          by procedure call dummys.  However, the procedures being called ought
700          to have their own proc_descs, and even if they don't,
701          heuristic_proc_desc knows how to create them! */
702
703       register struct linked_proc_info *link;
704
705       for (link = linked_proc_desc_table; link; link = link->next)
706         if (PROC_LOW_ADDR(&link->info) <= pc
707             && PROC_HIGH_ADDR(&link->info) > pc)
708           return &link->info;
709
710       if (startaddr == 0)
711         startaddr = heuristic_proc_start (pc);
712
713       proc_desc =
714         heuristic_proc_desc (startaddr, pc, next_frame);
715     }
716   return proc_desc;
717 }
718
719 static CORE_ADDR
720 get_frame_pointer(frame, proc_desc)
721     struct frame_info *frame;
722     mips_extra_func_info_t proc_desc;
723 {
724   return ADDR_BITS_REMOVE (read_next_frame_reg (frame,
725     PROC_FRAME_REG(proc_desc)) + PROC_FRAME_OFFSET(proc_desc));
726 }
727
728 mips_extra_func_info_t cached_proc_desc;
729
730 CORE_ADDR
731 mips_frame_chain(frame)
732     struct frame_info *frame;
733 {
734     mips_extra_func_info_t proc_desc;
735     CORE_ADDR saved_pc = FRAME_SAVED_PC(frame);
736
737     if (saved_pc == 0 || inside_entry_file (saved_pc))
738       return 0;
739
740     proc_desc = find_proc_desc(saved_pc, frame);
741     if (!proc_desc)
742       return 0;
743
744     cached_proc_desc = proc_desc;
745
746     /* If no frame pointer and frame size is zero, we must be at end
747        of stack (or otherwise hosed).  If we don't check frame size,
748        we loop forever if we see a zero size frame.  */
749     if (PROC_FRAME_REG (proc_desc) == SP_REGNUM
750         && PROC_FRAME_OFFSET (proc_desc) == 0
751         /* The previous frame from a sigtramp frame might be frameless
752            and have frame size zero.  */
753         && !frame->signal_handler_caller)
754       return 0;
755     else
756       return get_frame_pointer (frame, proc_desc);
757 }
758
759 void
760 init_extra_frame_info(fci)
761      struct frame_info *fci;
762 {
763   int regnum;
764
765   /* Use proc_desc calculated in frame_chain */
766   mips_extra_func_info_t proc_desc =
767     fci->next ? cached_proc_desc : find_proc_desc(fci->pc, fci->next);
768
769   fci->saved_regs = NULL;
770   fci->proc_desc =
771     proc_desc == &temp_proc_desc ? 0 : proc_desc;
772   if (proc_desc)
773     {
774       /* Fixup frame-pointer - only needed for top frame */
775       /* This may not be quite right, if proc has a real frame register.
776          Get the value of the frame relative sp, procedure might have been
777          interrupted by a signal at it's very start.  */
778       if (fci->pc == PROC_LOW_ADDR (proc_desc)
779           && !PROC_DESC_IS_DUMMY (proc_desc))
780         fci->frame = read_next_frame_reg (fci->next, SP_REGNUM);
781       else
782         fci->frame = get_frame_pointer (fci->next, proc_desc);
783
784       if (proc_desc == &temp_proc_desc)
785         {
786           char *name;
787
788           /* Do not set the saved registers for a sigtramp frame,
789              mips_find_saved_registers will do that for us.
790              We can't use fci->signal_handler_caller, it is not yet set.  */
791           find_pc_partial_function (fci->pc, &name,
792                                     (CORE_ADDR *)NULL,(CORE_ADDR *)NULL);
793           if (!IN_SIGTRAMP (fci->pc, name))
794             {
795               fci->saved_regs = (struct frame_saved_regs*)
796                 obstack_alloc (&frame_cache_obstack,
797                                sizeof (struct frame_saved_regs));
798               *fci->saved_regs = temp_saved_regs;
799               fci->saved_regs->regs[PC_REGNUM]
800                 = fci->saved_regs->regs[RA_REGNUM];
801             }
802         }
803
804       /* hack: if argument regs are saved, guess these contain args */
805       fci->num_args = -1;       /* assume we can't tell how many args for now */
806       for (regnum = MIPS_LAST_ARG_REGNUM; regnum >= A0_REGNUM; regnum--)
807         {
808           if (PROC_REG_MASK(proc_desc) & (1 << regnum))
809             {
810               fci->num_args = regnum - A0_REGNUM + 1;
811               break;
812             }
813         } 
814     }
815 }
816
817 /* MIPS stack frames are almost impenetrable.  When execution stops,
818    we basically have to look at symbol information for the function
819    that we stopped in, which tells us *which* register (if any) is
820    the base of the frame pointer, and what offset from that register
821    the frame itself is at.  
822
823    This presents a problem when trying to examine a stack in memory
824    (that isn't executing at the moment), using the "frame" command.  We
825    don't have a PC, nor do we have any registers except SP.
826
827    This routine takes two arguments, SP and PC, and tries to make the
828    cached frames look as if these two arguments defined a frame on the
829    cache.  This allows the rest of info frame to extract the important
830    arguments without difficulty.  */
831
832 struct frame_info *
833 setup_arbitrary_frame (argc, argv)
834      int argc;
835      CORE_ADDR *argv;
836 {
837   if (argc != 2)
838     error ("MIPS frame specifications require two arguments: sp and pc");
839
840   return create_new_frame (argv[0], argv[1]);
841 }
842
843
844 CORE_ADDR
845 mips_push_arguments(nargs, args, sp, struct_return, struct_addr)
846   int nargs;
847   value_ptr *args;
848   CORE_ADDR sp;
849   int struct_return;
850   CORE_ADDR struct_addr;
851 {
852   register i;
853   int accumulate_size;
854   struct mips_arg { char *contents; int len; int offset; };
855   struct mips_arg *mips_args;
856   register struct mips_arg *m_arg;
857   int fake_args = 0;
858   int len;
859
860   /* Macro to round n up to the next a boundary (a must be a power of two) */
861   #define ALIGN(n,a) (((n)+(a)-1) & ~((a)-1))
862   
863   /* First ensure that the stack and structure return address (if any)
864      are properly aligned. */
865
866   sp = ALIGN (sp, MIPS_REGSIZE);
867   struct_addr = ALIGN (struct_addr, MIPS_REGSIZE);
868       
869   accumulate_size = struct_return ? MIPS_REGSIZE : 0;
870   
871   /* Allocate descriptors for each argument, plus some extras for the
872      dummies we will create to zero-fill the holes left when we align
873      arguments passed in registers that are smaller than a register.  */
874   mips_args =
875     (struct mips_arg*) alloca ((nargs + MIPS_NUM_ARG_REGS) * sizeof (struct mips_arg));
876
877   /* Build up the list of argument descriptors.  */
878   for (i = 0, m_arg = mips_args; i < nargs; i++, m_arg++) {
879     value_ptr arg = args[i];
880     len = m_arg->len = TYPE_LENGTH (VALUE_TYPE (arg));
881     /* This entire mips-specific routine is because doubles must be aligned
882      * on 8-byte boundaries. It still isn't quite right, because MIPS decided
883      * to align 'struct {int a, b}' on 4-byte boundaries (even though this
884      * breaks their varargs implementation...). A correct solution
885      * requires a simulation of gcc's 'alignof' (and use of 'alignof'
886      * in stdarg.h/varargs.h).
887      * On the 64 bit r4000 we always pass the first four arguments
888      * using eight bytes each, so that we can load them up correctly
889      * in CALL_DUMMY.
890      */
891     if (len > 4) /* FIXME? */
892       accumulate_size = ALIGN (accumulate_size, 8);
893     m_arg->offset = accumulate_size;
894     m_arg->contents = VALUE_CONTENTS(arg);
895     if (! GDB_TARGET_IS_MIPS64)
896       /* For 32-bit targets, align the next argument on a 32-bit boundary.  */
897       accumulate_size = ALIGN (accumulate_size + len, 4);
898     else
899       {
900         /* The following test attempts to determine if the argument
901            is being passed on the stack.  But it fails account for
902            floating point arguments in the EABI, which should have their
903            own accumulated size separate from that for integer arguments.
904            FIXME!! */
905         if (accumulate_size >= MIPS_NUM_ARG_REGS * MIPS_REGSIZE)
906           /* The argument is being passed on the stack, not a register,
907              so adjust the size of the argument upward to account for stack
908              alignment.  But shouldn't we be right-aligning small arguments
909              as we do below for the args-in-registers case?  FIXME!! */
910           accumulate_size = ALIGN (accumulate_size + len, 8);
911         else
912           {
913             if (len < MIPS_REGSIZE)
914               {
915               /* The argument is being passed in a register, but is smaller
916                  than a register.  So it it must be right-aligned in the
917                  register image being placed in the stack, and the rest
918                  of the register image must be zero-filled.  */
919                 static char zeroes[MIPS_REGSIZE] = { 0 };
920
921                 /* Align the arg in the rightmost part of the 64-bit word.  */
922                 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
923                   m_arg->offset += MIPS_REGSIZE - len;
924
925                 /* Create a fake argument to zero-fill the unsused part
926                    of the 64-bit word.  */
927                 ++m_arg;
928                 m_arg->len = MIPS_REGSIZE - len;
929                 m_arg->contents = zeroes;
930                 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
931                   m_arg->offset = accumulate_size;
932                 else
933                   m_arg->offset = accumulate_size + len;
934                 ++fake_args;
935               }
936             accumulate_size = ALIGN (accumulate_size + len, MIPS_REGSIZE);
937           }
938       }
939   }
940   accumulate_size = ALIGN (accumulate_size, 8);
941   if (accumulate_size < 4 * MIPS_REGSIZE)
942     accumulate_size = 4 * MIPS_REGSIZE;
943   sp -= accumulate_size;
944   for (i = nargs + fake_args; m_arg--, --i >= 0; )
945     write_memory(sp + m_arg->offset, m_arg->contents, m_arg->len);
946   if (struct_return)
947     {
948       char buf[TARGET_PTR_BIT / HOST_CHAR_BIT];
949
950       store_address (buf, sizeof buf, struct_addr);
951       write_memory (sp, buf, sizeof buf);
952     }
953   return sp;
954 }
955
956 void
957 mips_push_register(CORE_ADDR *sp, int regno)
958 {
959   char buffer[MAX_REGISTER_RAW_SIZE];
960   int regsize = REGISTER_RAW_SIZE (regno);
961
962   *sp -= regsize;
963   read_register_gen (regno, buffer);
964   write_memory (*sp, buffer, regsize);
965 }
966
967 /* MASK(i,j) == (1<<i) + (1<<(i+1)) + ... + (1<<j)). Assume i<=j<(MIPS_NUMREGS-1). */
968 #define MASK(i,j) (((1 << ((j)+1))-1) ^ ((1 << (i))-1))
969
970 void
971 mips_push_dummy_frame()
972 {
973   int ireg;
974   struct linked_proc_info *link = (struct linked_proc_info*)
975       xmalloc(sizeof(struct linked_proc_info));
976   mips_extra_func_info_t proc_desc = &link->info;
977   CORE_ADDR sp = ADDR_BITS_REMOVE (read_register (SP_REGNUM));
978   CORE_ADDR old_sp = sp;
979   link->next = linked_proc_desc_table;
980   linked_proc_desc_table = link;
981
982 /* FIXME!   are these correct ? */
983 #define PUSH_FP_REGNUM 16 /* must be a register preserved across calls */
984 #define GEN_REG_SAVE_MASK MASK(1,16)|MASK(24,28)|(1<<(MIPS_NUMREGS-1))
985 #define FLOAT_REG_SAVE_MASK MASK(0,19)
986 #define FLOAT_SINGLE_REG_SAVE_MASK \
987   ((1<<18)|(1<<16)|(1<<14)|(1<<12)|(1<<10)|(1<<8)|(1<<6)|(1<<4)|(1<<2)|(1<<0))
988   /*
989    * The registers we must save are all those not preserved across
990    * procedure calls. Dest_Reg (see tm-mips.h) must also be saved.
991    * In addition, we must save the PC, PUSH_FP_REGNUM, MMLO/-HI
992    * and FP Control/Status registers.
993    * 
994    *
995    * Dummy frame layout:
996    *  (high memory)
997    *    Saved PC
998    *    Saved MMHI, MMLO, FPC_CSR
999    *    Saved R31
1000    *    Saved R28
1001    *    ...
1002    *    Saved R1
1003    *    Saved D18 (i.e. F19, F18)
1004    *    ...
1005    *    Saved D0 (i.e. F1, F0)
1006    *    CALL_DUMMY (subroutine stub; see tm-mips.h)
1007    *    Parameter build area (not yet implemented)
1008    *  (low memory)
1009    */
1010
1011   /* Save special registers (PC, MMHI, MMLO, FPC_CSR) */
1012   write_register (PUSH_FP_REGNUM, sp);
1013   PROC_FRAME_REG(proc_desc) = PUSH_FP_REGNUM;
1014   PROC_FRAME_OFFSET(proc_desc) = 0;
1015   mips_push_register (&sp, PC_REGNUM);
1016   mips_push_register (&sp, HI_REGNUM);
1017   mips_push_register (&sp, LO_REGNUM);
1018   mips_push_register (&sp, mips_fpu == MIPS_FPU_NONE ? 0 : FCRCS_REGNUM);
1019
1020   /* Save general CPU registers */
1021   PROC_REG_MASK(proc_desc) = GEN_REG_SAVE_MASK;
1022   PROC_REG_OFFSET(proc_desc) = sp - old_sp; /* offset of (Saved R31) from FP */
1023   for (ireg = 32; --ireg >= 0; )
1024     if (PROC_REG_MASK(proc_desc) & (1 << ireg))
1025       mips_push_register (&sp, ireg);
1026
1027   /* Save floating point registers starting with high order word */
1028   PROC_FREG_MASK(proc_desc) = 
1029     mips_fpu == MIPS_FPU_DOUBLE ? FLOAT_REG_SAVE_MASK
1030     : mips_fpu == MIPS_FPU_SINGLE ? FLOAT_SINGLE_REG_SAVE_MASK : 0;
1031   PROC_FREG_OFFSET(proc_desc) = sp - old_sp; /* offset of (Saved D18) from FP */
1032   for (ireg = 32; --ireg >= 0; )
1033     if (PROC_FREG_MASK(proc_desc) & (1 << ireg))
1034       mips_push_register (&sp, ireg + FP0_REGNUM);
1035
1036   /* Update the stack pointer.  Set the procedure's starting and ending
1037      addresses to point to the place on the stack where we'll be writing the
1038      dummy code (in mips_push_arguments). */
1039   write_register (SP_REGNUM, sp);
1040   PROC_LOW_ADDR(proc_desc) = sp - CALL_DUMMY_SIZE + CALL_DUMMY_START_OFFSET;
1041   PROC_HIGH_ADDR(proc_desc) = sp;
1042   SET_PROC_DESC_IS_DUMMY(proc_desc);
1043   PROC_PC_REG(proc_desc) = RA_REGNUM;
1044 }
1045
1046 void
1047 mips_pop_frame()
1048 {
1049   register int regnum;
1050   struct frame_info *frame = get_current_frame ();
1051   CORE_ADDR new_sp = FRAME_FP (frame);
1052
1053   mips_extra_func_info_t proc_desc = frame->proc_desc;
1054
1055   write_register (PC_REGNUM, FRAME_SAVED_PC(frame));
1056   if (frame->saved_regs == NULL)
1057     mips_find_saved_regs (frame);
1058   if (proc_desc)
1059     {
1060       for (regnum = MIPS_NUMREGS; --regnum >= 0; )
1061         if (PROC_REG_MASK(proc_desc) & (1 << regnum))
1062           write_register (regnum,
1063                           read_memory_integer (frame->saved_regs->regs[regnum],
1064                                                MIPS_REGSIZE)); 
1065       for (regnum = MIPS_NUMREGS; --regnum >= 0; )
1066         if (PROC_FREG_MASK(proc_desc) & (1 << regnum))
1067           write_register (regnum + FP0_REGNUM,
1068                           read_memory_integer (frame->saved_regs->regs[regnum + FP0_REGNUM], MIPS_REGSIZE)); 
1069     }
1070   write_register (SP_REGNUM, new_sp);
1071   flush_cached_frames ();
1072
1073   if (proc_desc && PROC_DESC_IS_DUMMY(proc_desc))
1074     {
1075       struct linked_proc_info *pi_ptr, *prev_ptr;
1076
1077       for (pi_ptr = linked_proc_desc_table, prev_ptr = NULL;
1078            pi_ptr != NULL;
1079            prev_ptr = pi_ptr, pi_ptr = pi_ptr->next)
1080         {
1081           if (&pi_ptr->info == proc_desc)
1082             break;
1083         }
1084
1085       if (pi_ptr == NULL)
1086         error ("Can't locate dummy extra frame info\n");
1087
1088       if (prev_ptr != NULL)
1089         prev_ptr->next = pi_ptr->next;
1090       else
1091         linked_proc_desc_table = pi_ptr->next;
1092
1093       free (pi_ptr);
1094
1095       write_register (HI_REGNUM,
1096                 read_memory_integer (new_sp - 2*MIPS_REGSIZE, MIPS_REGSIZE));
1097       write_register (LO_REGNUM,
1098                 read_memory_integer (new_sp - 3*MIPS_REGSIZE, MIPS_REGSIZE));
1099       if (mips_fpu != MIPS_FPU_NONE)
1100         write_register (FCRCS_REGNUM,
1101                 read_memory_integer (new_sp - 4*MIPS_REGSIZE, MIPS_REGSIZE));
1102     }
1103 }
1104
1105 static void
1106 mips_print_register (regnum, all)
1107      int regnum, all;
1108 {
1109   char raw_buffer[MAX_REGISTER_RAW_SIZE];
1110
1111   /* Get the data in raw format.  */
1112   if (read_relative_register_raw_bytes (regnum, raw_buffer))
1113     {
1114       printf_filtered ("%s: [Invalid]", reg_names[regnum]);
1115       return;
1116     }
1117
1118   /* If an even floating pointer register, also print as double. */
1119   if (regnum >= FP0_REGNUM && regnum < FP0_REGNUM+MIPS_NUMREGS
1120       && !((regnum-FP0_REGNUM) & 1))
1121     {
1122       char dbuffer[MAX_REGISTER_RAW_SIZE]; 
1123
1124       read_relative_register_raw_bytes (regnum, dbuffer);
1125       read_relative_register_raw_bytes (regnum+1, dbuffer+4); /* FIXME!! */
1126 #ifdef REGISTER_CONVERT_TO_TYPE
1127       REGISTER_CONVERT_TO_TYPE(regnum, builtin_type_double, dbuffer);
1128 #endif
1129       printf_filtered ("(d%d: ", regnum-FP0_REGNUM);
1130       val_print (builtin_type_double, dbuffer, 0,
1131                  gdb_stdout, 0, 1, 0, Val_pretty_default);
1132       printf_filtered ("); ");
1133     }
1134   fputs_filtered (reg_names[regnum], gdb_stdout);
1135
1136   /* The problem with printing numeric register names (r26, etc.) is that
1137      the user can't use them on input.  Probably the best solution is to
1138      fix it so that either the numeric or the funky (a2, etc.) names
1139      are accepted on input.  */
1140   if (regnum < MIPS_NUMREGS)
1141     printf_filtered ("(r%d): ", regnum);
1142   else
1143     printf_filtered (": ");
1144
1145   /* If virtual format is floating, print it that way.  */
1146   if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT)
1147     val_print (REGISTER_VIRTUAL_TYPE (regnum), raw_buffer, 0,
1148                gdb_stdout, 0, 1, 0, Val_pretty_default);
1149   /* Else print as integer in hex.  */
1150   else
1151     print_scalar_formatted (raw_buffer, REGISTER_VIRTUAL_TYPE (regnum),
1152                             'x', 0, gdb_stdout);
1153 }
1154
1155 /* Replacement for generic do_registers_info.  */
1156
1157 void
1158 mips_do_registers_info (regnum, fpregs)
1159      int regnum;
1160      int fpregs;
1161 {
1162   if (regnum != -1)
1163     {
1164       if (*(reg_names[regnum]) == '\0')
1165         error ("Not a valid register for the current processor type");
1166
1167       mips_print_register (regnum, 0);
1168       printf_filtered ("\n");
1169     }
1170   else
1171     {
1172       int did_newline = 0;
1173
1174       for (regnum = 0; regnum < NUM_REGS; )
1175         {
1176           if (((!fpregs) && regnum >= FP0_REGNUM && regnum <= FCRIR_REGNUM)
1177               || *(reg_names[regnum]) == '\0')
1178             {
1179               regnum++;
1180               continue;
1181             }
1182           mips_print_register (regnum, 1);
1183           regnum++;
1184           printf_filtered ("; ");
1185           did_newline = 0;
1186           if ((regnum & 3) == 0)
1187             {
1188               printf_filtered ("\n");
1189               did_newline = 1;
1190             }
1191         }
1192       if (!did_newline)
1193         printf_filtered ("\n");
1194     }
1195 }
1196
1197 /* Return number of args passed to a frame. described by FIP.
1198    Can return -1, meaning no way to tell.  */
1199
1200 int
1201 mips_frame_num_args (frame)
1202         struct frame_info *frame;
1203 {
1204 #if 0 /* FIXME Use or lose this! */
1205   struct chain_info_t *p;
1206
1207   p = mips_find_cached_frame (FRAME_FP (frame));
1208   if (p->valid)
1209     return p->the_info.numargs;
1210 #endif
1211   return -1;
1212 }
1213
1214 /* Is this a branch with a delay slot?  */
1215
1216 static int is_delayed PARAMS ((unsigned long));
1217
1218 static int
1219 is_delayed (insn)
1220      unsigned long insn;
1221 {
1222   int i;
1223   for (i = 0; i < NUMOPCODES; ++i)
1224     if (mips_opcodes[i].pinfo != INSN_MACRO
1225         && (insn & mips_opcodes[i].mask) == mips_opcodes[i].match)
1226       break;
1227   return (i < NUMOPCODES
1228           && (mips_opcodes[i].pinfo & (INSN_UNCOND_BRANCH_DELAY
1229                                        | INSN_COND_BRANCH_DELAY
1230                                        | INSN_COND_BRANCH_LIKELY)));
1231 }
1232
1233 int
1234 mips_step_skips_delay (pc)
1235      CORE_ADDR pc;
1236 {
1237   char buf[MIPS_INSTLEN];
1238
1239   if (target_read_memory (pc, buf, MIPS_INSTLEN) != 0)
1240     /* If error reading memory, guess that it is not a delayed branch.  */
1241     return 0;
1242   return is_delayed ((unsigned long)extract_unsigned_integer (buf, MIPS_INSTLEN));
1243 }
1244
1245 /* To skip prologues, I use this predicate.  Returns either PC itself
1246    if the code at PC does not look like a function prologue; otherwise
1247    returns an address that (if we're lucky) follows the prologue.  If
1248    LENIENT, then we must skip everything which is involved in setting
1249    up the frame (it's OK to skip more, just so long as we don't skip
1250    anything which might clobber the registers which are being saved.
1251    We must skip more in the case where part of the prologue is in the
1252    delay slot of a non-prologue instruction).  */
1253
1254 CORE_ADDR
1255 mips_skip_prologue (pc, lenient)
1256      CORE_ADDR pc;
1257      int lenient;
1258 {
1259     t_inst inst;
1260     unsigned offset; 
1261     int seen_sp_adjust = 0;
1262     int load_immediate_bytes = 0;
1263     CORE_ADDR post_prologue_pc;
1264
1265     /* See if we can determine the end of the prologue via the symbol table.
1266        If so, then return either PC, or the PC after the prologue, whichever
1267        is greater.  */
1268
1269     post_prologue_pc = after_prologue (pc, NULL);
1270
1271     if (post_prologue_pc != 0)
1272       return max (pc, post_prologue_pc);
1273
1274     /* Can't determine prologue from the symbol table, need to examine
1275        instructions.  */
1276
1277     /* Skip the typical prologue instructions. These are the stack adjustment
1278        instruction and the instructions that save registers on the stack
1279        or in the gcc frame.  */
1280     for (offset = 0; offset < 100; offset += MIPS_INSTLEN)
1281       {
1282         char buf[MIPS_INSTLEN];
1283         int status;
1284
1285         status = read_memory_nobpt (pc + offset, buf, MIPS_INSTLEN);
1286         if (status)
1287           memory_error (status, pc + offset);
1288         inst = (unsigned long)extract_unsigned_integer (buf, MIPS_INSTLEN);
1289
1290 #if 0
1291         if (lenient && is_delayed (inst))
1292           continue;
1293 #endif
1294
1295         /* Must add cases for 64-bit operations.  FIXME!! */
1296         if ((inst & 0xffff0000) == 0x27bd0000)  /* addiu $sp,$sp,offset */
1297             seen_sp_adjust = 1;
1298         else if (inst == 0x03a1e823 ||          /* subu $sp,$sp,$at */
1299                  inst == 0x03a8e823)            /* subu $sp,$sp,$t0 */
1300             seen_sp_adjust = 1;
1301         else if ((inst & 0xFFE00000) == 0xAFA00000 && (inst & 0x001F0000))
1302             continue;                           /* sw reg,n($sp) */
1303                                                 /* reg != $zero */
1304         else if ((inst & 0xFFE00000) == 0xE7A00000) /* swc1 freg,n($sp) */
1305             continue;
1306         else if ((inst & 0xF3E00000) == 0xA3C00000 && (inst & 0x001F0000))
1307                                                 /* sx reg,n($s8) */
1308             continue;                           /* reg != $zero */
1309  
1310         /* move $s8,$sp.  With different versions of gas this will be either
1311            `addu $s8,$sp,$zero' or `or $s8,$sp,$zero'.  Accept either.  */
1312         else if (inst == 0x03A0F021 || inst == 0x03a0f025)
1313             continue;
1314
1315         else if ((inst & 0xFF9F07FF) == 0x00800021) /* move reg,$a0-$a3 */
1316             continue;
1317         else if ((inst & 0xffff0000) == 0x3c1c0000) /* lui $gp,n */
1318             continue;
1319         else if ((inst & 0xffff0000) == 0x279c0000) /* addiu $gp,$gp,n */
1320             continue;
1321         else if (inst == 0x0399e021             /* addu $gp,$gp,$t9 */
1322                  || inst == 0x033ce021)         /* addu $gp,$t9,$gp */
1323           continue;
1324         /* The following instructions load $at or $t0 with an immediate
1325            value in preparation for a stack adjustment via
1326            subu $sp,$sp,[$at,$t0]. These instructions could also initialize
1327            a local variable, so we accept them only before a stack adjustment
1328            instruction was seen.  */
1329         else if (!seen_sp_adjust)
1330           {
1331             if ((inst & 0xffff0000) == 0x3c010000 ||      /* lui $at,n */
1332                 (inst & 0xffff0000) == 0x3c080000)        /* lui $t0,n */
1333               {
1334                 load_immediate_bytes += MIPS_INSTLEN; /* FIXME!! */
1335                 continue;
1336               }
1337             else if ((inst & 0xffff0000) == 0x34210000 || /* ori $at,$at,n */
1338                      (inst & 0xffff0000) == 0x35080000 || /* ori $t0,$t0,n */
1339                      (inst & 0xffff0000) == 0x34010000 || /* ori $at,$zero,n */
1340                      (inst & 0xffff0000) == 0x34080000)   /* ori $t0,$zero,n */
1341               {
1342                 load_immediate_bytes += MIPS_INSTLEN; /* FIXME!! */
1343                 continue;
1344               }
1345             else
1346               break;
1347           }
1348         else
1349           break;
1350     }
1351
1352     /* In a frameless function, we might have incorrectly
1353        skipped some load immediate instructions. Undo the skipping
1354        if the load immediate was not followed by a stack adjustment.  */
1355     if (load_immediate_bytes && !seen_sp_adjust)
1356       offset -= load_immediate_bytes;
1357     return pc + offset;
1358 }
1359
1360 #if 0
1361 /* The lenient prologue stuff should be superceded by the code in
1362    init_extra_frame_info which looks to see whether the stores mentioned
1363    in the proc_desc have actually taken place.  */
1364
1365 /* Is address PC in the prologue (loosely defined) for function at
1366    STARTADDR?  */
1367
1368 static int
1369 mips_in_lenient_prologue (startaddr, pc)
1370      CORE_ADDR startaddr;
1371      CORE_ADDR pc;
1372 {
1373   CORE_ADDR end_prologue = mips_skip_prologue (startaddr, 1);
1374   return pc >= startaddr && pc < end_prologue;
1375 }
1376 #endif
1377
1378 /* Given a return value in `regbuf' with a type `valtype', 
1379    extract and copy its value into `valbuf'.  */
1380 void
1381 mips_extract_return_value (valtype, regbuf, valbuf)
1382     struct type *valtype;
1383     char regbuf[REGISTER_BYTES];
1384     char *valbuf;
1385 {
1386   int regnum;
1387   int offset = 0;
1388   
1389   regnum = 2;
1390   if (TYPE_CODE (valtype) == TYPE_CODE_FLT
1391        && (mips_fpu == MIPS_FPU_DOUBLE
1392            || (mips_fpu == MIPS_FPU_SINGLE && TYPE_LENGTH (valtype) <= 4))) /* FIXME!! */
1393     regnum = FP0_REGNUM;
1394
1395   if (TARGET_BYTE_ORDER == BIG_ENDIAN
1396       && TYPE_CODE (valtype) != TYPE_CODE_FLT
1397       && TYPE_LENGTH (valtype) < REGISTER_RAW_SIZE (regnum))
1398     offset = REGISTER_RAW_SIZE (regnum) - TYPE_LENGTH (valtype);
1399
1400   memcpy (valbuf, regbuf + REGISTER_BYTE (regnum) + offset,
1401           TYPE_LENGTH (valtype));
1402 #ifdef REGISTER_CONVERT_TO_TYPE
1403   REGISTER_CONVERT_TO_TYPE(regnum, valtype, valbuf);
1404 #endif
1405 }
1406
1407 /* Given a return value in `regbuf' with a type `valtype', 
1408    write it's value into the appropriate register.  */
1409 void
1410 mips_store_return_value (valtype, valbuf)
1411     struct type *valtype;
1412     char *valbuf;
1413 {
1414   int regnum;
1415   char raw_buffer[MAX_REGISTER_RAW_SIZE];
1416   
1417   regnum = 2;
1418   if (TYPE_CODE (valtype) == TYPE_CODE_FLT
1419        && (mips_fpu == MIPS_FPU_DOUBLE
1420            || (mips_fpu == MIPS_FPU_SINGLE && TYPE_LENGTH (valtype) <= 4))) /* FIXME!! */
1421     regnum = FP0_REGNUM;
1422
1423   memcpy(raw_buffer, valbuf, TYPE_LENGTH (valtype));
1424
1425 #ifdef REGISTER_CONVERT_FROM_TYPE
1426   REGISTER_CONVERT_FROM_TYPE(regnum, valtype, raw_buffer);
1427 #endif
1428
1429   write_register_bytes(REGISTER_BYTE (regnum), raw_buffer, TYPE_LENGTH (valtype));
1430 }
1431
1432 /* Exported procedure: Is PC in the signal trampoline code */
1433
1434 int
1435 in_sigtramp (pc, ignore)
1436      CORE_ADDR pc;
1437      char *ignore;              /* function name */
1438 {
1439   if (sigtramp_address == 0)
1440     fixup_sigtramp ();
1441   return (pc >= sigtramp_address && pc < sigtramp_end);
1442 }
1443
1444 /* Command to set FPU type.  mips_fpu_string will have been set to the
1445    user's argument.  Set mips_fpu based on mips_fpu_string, and then
1446    canonicalize mips_fpu_string.  */
1447
1448 /*ARGSUSED*/
1449 static void
1450 mips_set_fpu_command (args, from_tty, c)
1451      char *args;
1452      int from_tty;
1453      struct cmd_list_element *c;
1454 {
1455   char *err = NULL;
1456
1457   if (mips_fpu_string == NULL || *mips_fpu_string == '\0')
1458     mips_fpu = MIPS_FPU_DOUBLE;
1459   else if (strcasecmp (mips_fpu_string, "double") == 0
1460            || strcasecmp (mips_fpu_string, "on") == 0
1461            || strcasecmp (mips_fpu_string, "1") == 0
1462            || strcasecmp (mips_fpu_string, "yes") == 0)
1463     mips_fpu = MIPS_FPU_DOUBLE;
1464   else if (strcasecmp (mips_fpu_string, "none") == 0
1465            || strcasecmp (mips_fpu_string, "off") == 0
1466            || strcasecmp (mips_fpu_string, "0") == 0
1467            || strcasecmp (mips_fpu_string, "no") == 0)
1468     mips_fpu = MIPS_FPU_NONE;
1469   else if (strcasecmp (mips_fpu_string, "single") == 0)
1470     mips_fpu = MIPS_FPU_SINGLE;
1471   else
1472     err = strsave (mips_fpu_string);
1473
1474   if (mips_fpu_string != NULL)
1475     free (mips_fpu_string);
1476
1477   switch (mips_fpu)
1478     {
1479     case MIPS_FPU_DOUBLE:
1480       mips_fpu_string = strsave ("double");
1481       break;
1482     case MIPS_FPU_SINGLE:
1483       mips_fpu_string = strsave ("single");
1484       break;
1485     case MIPS_FPU_NONE:
1486       mips_fpu_string = strsave ("none");
1487       break;
1488     }
1489
1490   if (err != NULL)
1491     {
1492       struct cleanup *cleanups = make_cleanup (free, err);
1493       error ("Unknown FPU type `%s'.  Use `double', `none', or `single'.",
1494              err);
1495       do_cleanups (cleanups);
1496     }
1497 }
1498
1499 static void
1500 mips_show_fpu_command (args, from_tty, c)
1501      char *args;
1502      int from_tty;
1503      struct cmd_list_element *c;
1504 {
1505 }
1506
1507 /* Command to set the processor type.  */
1508
1509 void
1510 mips_set_processor_type_command (args, from_tty)
1511      char *args;
1512      int from_tty;
1513 {
1514   int i;
1515
1516   if (tmp_mips_processor_type == NULL || *tmp_mips_processor_type == '\0')
1517     {
1518       printf_unfiltered ("The known MIPS processor types are as follows:\n\n");
1519       for (i = 0; mips_processor_type_table[i].name != NULL; ++i)
1520         printf_unfiltered ("%s\n", mips_processor_type_table[i].name);
1521
1522       /* Restore the value.  */
1523       tmp_mips_processor_type = strsave (mips_processor_type);
1524
1525       return;
1526     }
1527   
1528   if (!mips_set_processor_type (tmp_mips_processor_type))
1529     {
1530       error ("Unknown processor type `%s'.", tmp_mips_processor_type);
1531       /* Restore its value.  */
1532       tmp_mips_processor_type = strsave (mips_processor_type);
1533     }
1534 }
1535
1536 static void
1537 mips_show_processor_type_command (args, from_tty)
1538      char *args;
1539      int from_tty;
1540 {
1541 }
1542
1543 /* Modify the actual processor type. */
1544
1545 int
1546 mips_set_processor_type (str)
1547      char *str;
1548 {
1549   int i, j;
1550
1551   if (str == NULL)
1552     return 0;
1553
1554   for (i = 0; mips_processor_type_table[i].name != NULL; ++i)
1555     {
1556       if (strcasecmp (str, mips_processor_type_table[i].name) == 0)
1557         {
1558           mips_processor_type = str;
1559
1560           for (j = 0; j < NUM_REGS; ++j)
1561             reg_names[j] = mips_processor_type_table[i].regnames[j];
1562
1563           return 1;
1564
1565           /* FIXME tweak fpu flag too */
1566         }
1567     }
1568
1569   return 0;
1570 }
1571
1572 /* Attempt to identify the particular processor model by reading the
1573    processor id.  */
1574
1575 char *
1576 mips_read_processor_type ()
1577 {
1578   CORE_ADDR prid;
1579
1580   prid = read_register (PRID_REGNUM);
1581
1582   if ((prid & ~0xf) == 0x700)
1583     return savestring ("r3041", strlen("r3041"));
1584
1585   return NULL;
1586 }
1587
1588 /* Just like reinit_frame_cache, but with the right arguments to be
1589    callable as an sfunc.  */
1590
1591 static void
1592 reinit_frame_cache_sfunc (args, from_tty, c)
1593      char *args;
1594      int from_tty;
1595      struct cmd_list_element *c;
1596 {
1597   reinit_frame_cache ();
1598 }
1599
1600 static int
1601 gdb_print_insn_mips (memaddr, info)
1602      bfd_vma memaddr;
1603      disassemble_info *info;
1604 {
1605   if (TARGET_BYTE_ORDER == BIG_ENDIAN)
1606     return print_insn_big_mips (memaddr, info);
1607   else
1608     return print_insn_little_mips (memaddr, info);
1609 }
1610
1611 void
1612 _initialize_mips_tdep ()
1613 {
1614   struct cmd_list_element *c;
1615
1616   tm_print_insn = gdb_print_insn_mips;
1617
1618   /* Let the user turn off floating point and set the fence post for
1619      heuristic_proc_start.  */
1620
1621   c = add_set_cmd ("mipsfpu", class_support, var_string_noescape,
1622                    (char *) &mips_fpu_string,
1623                    "Set use of floating point coprocessor.\n\
1624 Set to `none' to avoid using floating point instructions when calling\n\
1625 functions or dealing with return values.  Set to `single' to use only\n\
1626 single precision floating point as on the R4650.  Set to `double' for\n\
1627 normal floating point support.",
1628                    &setlist);
1629   c->function.sfunc = mips_set_fpu_command;
1630   c = add_show_from_set (c, &showlist);
1631   c->function.sfunc = mips_show_fpu_command;
1632
1633   mips_fpu = MIPS_FPU_DOUBLE;
1634   mips_fpu_string = strsave ("double");
1635
1636   c = add_set_cmd ("processor", class_support, var_string_noescape,
1637                    (char *) &tmp_mips_processor_type,
1638                    "Set the type of MIPS processor in use.\n\
1639 Set this to be able to access processor-type-specific registers.\n\
1640 ",
1641                    &setlist);
1642   c->function.cfunc = mips_set_processor_type_command;
1643   c = add_show_from_set (c, &showlist);
1644   c->function.cfunc = mips_show_processor_type_command;
1645
1646   tmp_mips_processor_type = strsave (DEFAULT_MIPS_TYPE);
1647   mips_set_processor_type_command (strsave (DEFAULT_MIPS_TYPE), 0);
1648
1649   /* We really would like to have both "0" and "unlimited" work, but
1650      command.c doesn't deal with that.  So make it a var_zinteger
1651      because the user can always use "999999" or some such for unlimited.  */
1652   c = add_set_cmd ("heuristic-fence-post", class_support, var_zinteger,
1653                    (char *) &heuristic_fence_post,
1654                    "\
1655 Set the distance searched for the start of a function.\n\
1656 If you are debugging a stripped executable, GDB needs to search through the\n\
1657 program for the start of a function.  This command sets the distance of the\n\
1658 search.  The only need to set it is when debugging a stripped executable.",
1659                    &setlist);
1660   /* We need to throw away the frame cache when we set this, since it
1661      might change our ability to get backtraces.  */
1662   c->function.sfunc = reinit_frame_cache_sfunc;
1663   add_show_from_set (c, &showlist);
1664 }
This page took 0.113327 seconds and 4 git commands to generate.