Fix gcc -Wall warnings. See ChangeLog for details.
[deliverable/binutils-gdb.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, 1996
3 Free Software Foundation, Inc.
4 Contributed by Alessandro Forin(af@cs.cmu.edu) at CMU
5 and by Per Bothner(bothner@cs.wisc.edu) 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 #if 0
45 static int mips_in_lenient_prologue PARAMS ((CORE_ADDR, CORE_ADDR));
46 #endif
47
48 static int gdb_print_insn_mips PARAMS ((bfd_vma, disassemble_info *));
49
50 static void mips_print_register PARAMS ((int, int));
51
52 static mips_extra_func_info_t
53 heuristic_proc_desc PARAMS ((CORE_ADDR, CORE_ADDR, struct frame_info *));
54
55 static CORE_ADDR heuristic_proc_start PARAMS ((CORE_ADDR));
56
57 static CORE_ADDR read_next_frame_reg PARAMS ((struct frame_info *, int));
58
59 static void mips_set_fpu_command PARAMS ((char *, int,
60 struct cmd_list_element *));
61
62 static void mips_show_fpu_command PARAMS ((char *, int,
63 struct cmd_list_element *));
64
65 void mips_set_processor_type_command PARAMS ((char *, int));
66
67 int mips_set_processor_type PARAMS ((char *));
68
69 static void mips_show_processor_type_command PARAMS ((char *, int));
70
71 static void reinit_frame_cache_sfunc PARAMS ((char *, int,
72 struct cmd_list_element *));
73
74 static mips_extra_func_info_t
75 find_proc_desc PARAMS ((CORE_ADDR pc, struct frame_info *next_frame));
76
77 static CORE_ADDR after_prologue PARAMS ((CORE_ADDR pc,
78 mips_extra_func_info_t proc_desc));
79
80 /* This value is the model of MIPS in use. It is derived from the value
81 of the PrID register. */
82
83 char *mips_processor_type;
84
85 char *tmp_mips_processor_type;
86
87 /* Some MIPS boards don't support floating point, so we permit the
88 user to turn it off. */
89
90 enum mips_fpu_type mips_fpu;
91
92 static char *mips_fpu_string;
93
94 /* A set of original names, to be used when restoring back to generic
95 registers from a specific set. */
96
97 char *mips_generic_reg_names[] = REGISTER_NAMES;
98
99 /* Names of IDT R3041 registers. */
100
101 char *mips_r3041_reg_names[] = {
102 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
103 "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7",
104 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
105 "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra",
106 "sr", "lo", "hi", "bad", "cause","pc",
107 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
108 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
109 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
110 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
111 "fsr", "fir", "fp", "",
112 "", "", "bus", "ccfg", "", "", "", "",
113 "", "", "port", "cmp", "", "", "epc", "prid",
114 };
115
116 /* Names of IDT R3051 registers. */
117
118 char *mips_r3051_reg_names[] = {
119 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
120 "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7",
121 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
122 "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra",
123 "sr", "lo", "hi", "bad", "cause","pc",
124 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
125 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
126 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
127 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
128 "fsr", "fir", "fp", "",
129 "inx", "rand", "elo", "", "ctxt", "", "", "",
130 "", "", "ehi", "", "", "", "epc", "prid",
131 };
132
133 /* Names of IDT R3081 registers. */
134
135 char *mips_r3081_reg_names[] = {
136 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
137 "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7",
138 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
139 "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra",
140 "sr", "lo", "hi", "bad", "cause","pc",
141 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
142 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
143 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
144 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
145 "fsr", "fir", "fp", "",
146 "inx", "rand", "elo", "cfg", "ctxt", "", "", "",
147 "", "", "ehi", "", "", "", "epc", "prid",
148 };
149
150 /* Names of LSI 33k registers. */
151
152 char *mips_lsi33k_reg_names[] = {
153 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
154 "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7",
155 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
156 "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra",
157 "epc", "hi", "lo", "sr", "cause","badvaddr",
158 "dcic", "bpc", "bda", "", "", "", "", "",
159 "", "", "", "", "", "", "", "",
160 "", "", "", "", "", "", "", "",
161 "", "", "", "", "", "", "", "",
162 "", "", "", "",
163 "", "", "", "", "", "", "", "",
164 "", "", "", "", "", "", "", "",
165 };
166
167 struct {
168 char *name;
169 char **regnames;
170 } mips_processor_type_table[] = {
171 { "generic", mips_generic_reg_names },
172 { "r3041", mips_r3041_reg_names },
173 { "r3051", mips_r3051_reg_names },
174 { "r3071", mips_r3081_reg_names },
175 { "r3081", mips_r3081_reg_names },
176 { "lsi33k", mips_lsi33k_reg_names },
177 { NULL, NULL }
178 };
179
180 /* Table to translate MIPS16 register field to actual register number. */
181 static int mips16_to_32_reg[8] = { 16, 17, 2, 3, 4, 5, 6, 7 };
182
183 /* Heuristic_proc_start may hunt through the text section for a long
184 time across a 2400 baud serial line. Allows the user to limit this
185 search. */
186
187 static unsigned int heuristic_fence_post = 0;
188
189 #define PROC_LOW_ADDR(proc) ((proc)->pdr.adr) /* least address */
190 #define PROC_HIGH_ADDR(proc) ((proc)->high_addr) /* upper address bound */
191 #define PROC_FRAME_OFFSET(proc) ((proc)->pdr.frameoffset)
192 #define PROC_FRAME_REG(proc) ((proc)->pdr.framereg)
193 #define PROC_FRAME_ADJUST(proc) ((proc)->frame_adjust)
194 #define PROC_REG_MASK(proc) ((proc)->pdr.regmask)
195 #define PROC_FREG_MASK(proc) ((proc)->pdr.fregmask)
196 #define PROC_REG_OFFSET(proc) ((proc)->pdr.regoffset)
197 #define PROC_FREG_OFFSET(proc) ((proc)->pdr.fregoffset)
198 #define PROC_PC_REG(proc) ((proc)->pdr.pcreg)
199 #define PROC_SYMBOL(proc) (*(struct symbol**)&(proc)->pdr.isym)
200 #define _PROC_MAGIC_ 0x0F0F0F0F
201 #define PROC_DESC_IS_DUMMY(proc) ((proc)->pdr.isym == _PROC_MAGIC_)
202 #define SET_PROC_DESC_IS_DUMMY(proc) ((proc)->pdr.isym = _PROC_MAGIC_)
203
204 struct linked_proc_info
205 {
206 struct mips_extra_func_info info;
207 struct linked_proc_info *next;
208 } *linked_proc_desc_table = NULL;
209
210
211 /* Tell if the program counter value in MEMADDR is in a MIPS16 function. */
212
213 static int
214 pc_is_mips16 (bfd_vma memaddr)
215 {
216 struct minimal_symbol *sym;
217
218 /* If bit 0 of the address is set, assume this is a MIPS16 address. */
219 if (IS_MIPS16_ADDR (memaddr))
220 return 1;
221
222 /* A flag indicating that this is a MIPS16 function is stored by elfread.c in
223 the high bit of the info field. Use this to decide if the function is
224 MIPS16 or normal MIPS. */
225 sym = lookup_minimal_symbol_by_pc (memaddr);
226 if (sym)
227 return MSYMBOL_IS_SPECIAL (sym);
228 else
229 return 0;
230 }
231
232
233 /* This returns the PC of the first inst after the prologue. If we can't
234 find the prologue, then return 0. */
235
236 static CORE_ADDR
237 after_prologue (pc, proc_desc)
238 CORE_ADDR pc;
239 mips_extra_func_info_t proc_desc;
240 {
241 struct symtab_and_line sal;
242 CORE_ADDR func_addr, func_end;
243
244 if (!proc_desc)
245 proc_desc = find_proc_desc (pc, NULL);
246
247 if (proc_desc)
248 {
249 /* If function is frameless, then we need to do it the hard way. I
250 strongly suspect that frameless always means prologueless... */
251 if (PROC_FRAME_REG (proc_desc) == SP_REGNUM
252 && PROC_FRAME_OFFSET (proc_desc) == 0)
253 return 0;
254 }
255
256 if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
257 return 0; /* Unknown */
258
259 sal = find_pc_line (func_addr, 0);
260
261 if (sal.end < func_end)
262 return sal.end;
263
264 /* The line after the prologue is after the end of the function. In this
265 case, tell the caller to find the prologue the hard way. */
266
267 return 0;
268 }
269
270 /* Decode a MIPS32 instruction that saves a register in the stack, and
271 set the appropriate bit in the general register mask or float register mask
272 to indicate which register is saved. This is a helper function
273 for mips_find_saved_regs. */
274
275 static void
276 mips32_decode_reg_save (inst, gen_mask, float_mask)
277 t_inst inst;
278 unsigned long *gen_mask;
279 unsigned long *float_mask;
280 {
281 int reg;
282
283 if ((inst & 0xffe00000) == 0xafa00000 /* sw reg,n($sp) */
284 || (inst & 0xffe00000) == 0xafc00000 /* sw reg,n($r30) */
285 || (inst & 0xffe00000) == 0xffa00000) /* sd reg,n($sp) */
286 {
287 /* It might be possible to use the instruction to
288 find the offset, rather than the code below which
289 is based on things being in a certain order in the
290 frame, but figuring out what the instruction's offset
291 is relative to might be a little tricky. */
292 reg = (inst & 0x001f0000) >> 16;
293 *gen_mask |= (1 << reg);
294 }
295 else if ((inst & 0xffe00000) == 0xe7a00000 /* swc1 freg,n($sp) */
296 || (inst & 0xffe00000) == 0xe7c00000 /* swc1 freg,n($r30) */
297 || (inst & 0xffe00000) == 0xf7a00000)/* sdc1 freg,n($sp) */
298
299 {
300 reg = ((inst & 0x001f0000) >> 16);
301 *float_mask |= (1 << reg);
302 }
303 }
304
305 /* Decode a MIPS16 instruction that saves a register in the stack, and
306 set the appropriate bit in the general register or float register mask
307 to indicate which register is saved. This is a helper function
308 for mips_find_saved_regs. */
309
310 static void
311 mips16_decode_reg_save (inst, gen_mask)
312 t_inst inst;
313 unsigned long *gen_mask;
314 {
315 if ((inst & 0xf800) == 0xd000) /* sw reg,n($sp) */
316 {
317 int reg = mips16_to_32_reg[(inst & 0x700) >> 8];
318 *gen_mask |= (1 << reg);
319 }
320 else if ((inst & 0xff00) == 0xf900) /* sd reg,n($sp) */
321 {
322 int reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
323 *gen_mask |= (1 << reg);
324 }
325 else if ((inst & 0xff00) == 0x6200 /* sw $ra,n($sp) */
326 || (inst & 0xff00) == 0xfa00) /* sd $ra,n($sp) */
327 *gen_mask |= (1 << RA_REGNUM);
328 }
329
330
331 /* Fetch and return instruction from the specified location. If the PC
332 is odd, assume it's a MIPS16 instruction; otherwise MIPS32. */
333
334 static t_inst
335 mips_fetch_instruction (addr)
336 CORE_ADDR addr;
337 {
338 char buf[MIPS_INSTLEN];
339 int instlen;
340 int status;
341
342 if (pc_is_mips16 (addr))
343 {
344 instlen = MIPS16_INSTLEN;
345 addr = UNMAKE_MIPS16_ADDR (addr);
346 }
347 else
348 instlen = MIPS_INSTLEN;
349 status = read_memory_nobpt (addr, buf, instlen);
350 if (status)
351 memory_error (status, addr);
352 return extract_unsigned_integer (buf, instlen);
353 }
354
355
356 /* Guaranteed to set fci->saved_regs to some values (it never leaves it
357 NULL). */
358
359 void
360 mips_find_saved_regs (fci)
361 struct frame_info *fci;
362 {
363 int ireg;
364 CORE_ADDR reg_position;
365 /* r0 bit means kernel trap */
366 int kernel_trap;
367 /* What registers have been saved? Bitmasks. */
368 unsigned long gen_mask, float_mask;
369 mips_extra_func_info_t proc_desc;
370 t_inst inst;
371
372 fci->saved_regs = (struct frame_saved_regs *)
373 obstack_alloc (&frame_cache_obstack, sizeof(struct frame_saved_regs));
374 memset (fci->saved_regs, 0, sizeof (struct frame_saved_regs));
375
376 /* If it is the frame for sigtramp, the saved registers are located
377 in a sigcontext structure somewhere on the stack.
378 If the stack layout for sigtramp changes we might have to change these
379 constants and the companion fixup_sigtramp in mdebugread.c */
380 #ifndef SIGFRAME_BASE
381 /* To satisfy alignment restrictions, sigcontext is located 4 bytes
382 above the sigtramp frame. */
383 #define SIGFRAME_BASE MIPS_REGSIZE
384 /* FIXME! Are these correct?? */
385 #define SIGFRAME_PC_OFF (SIGFRAME_BASE + 2 * MIPS_REGSIZE)
386 #define SIGFRAME_REGSAVE_OFF (SIGFRAME_BASE + 3 * MIPS_REGSIZE)
387 #define SIGFRAME_FPREGSAVE_OFF \
388 (SIGFRAME_REGSAVE_OFF + MIPS_NUMREGS * MIPS_REGSIZE + 3 * MIPS_REGSIZE)
389 #endif
390 #ifndef SIGFRAME_REG_SIZE
391 /* FIXME! Is this correct?? */
392 #define SIGFRAME_REG_SIZE MIPS_REGSIZE
393 #endif
394 if (fci->signal_handler_caller)
395 {
396 for (ireg = 0; ireg < MIPS_NUMREGS; ireg++)
397 {
398 reg_position = fci->frame + SIGFRAME_REGSAVE_OFF
399 + ireg * SIGFRAME_REG_SIZE;
400 fci->saved_regs->regs[ireg] = reg_position;
401 }
402 for (ireg = 0; ireg < MIPS_NUMREGS; ireg++)
403 {
404 reg_position = fci->frame + SIGFRAME_FPREGSAVE_OFF
405 + ireg * SIGFRAME_REG_SIZE;
406 fci->saved_regs->regs[FP0_REGNUM + ireg] = reg_position;
407 }
408 fci->saved_regs->regs[PC_REGNUM] = fci->frame + SIGFRAME_PC_OFF;
409 return;
410 }
411
412 proc_desc = fci->proc_desc;
413 if (proc_desc == NULL)
414 /* I'm not sure how/whether this can happen. Normally when we can't
415 find a proc_desc, we "synthesize" one using heuristic_proc_desc
416 and set the saved_regs right away. */
417 return;
418
419 kernel_trap = PROC_REG_MASK(proc_desc) & 1;
420 gen_mask = kernel_trap ? 0xFFFFFFFF : PROC_REG_MASK(proc_desc);
421 float_mask = kernel_trap ? 0xFFFFFFFF : PROC_FREG_MASK(proc_desc);
422
423 if (/* In any frame other than the innermost or a frame interrupted by
424 a signal, we assume that all registers have been saved.
425 This assumes that all register saves in a function happen before
426 the first function call. */
427 (fci->next == NULL || fci->next->signal_handler_caller)
428
429 /* In a dummy frame we know exactly where things are saved. */
430 && !PROC_DESC_IS_DUMMY (proc_desc)
431
432 /* Don't bother unless we are inside a function prologue. Outside the
433 prologue, we know where everything is. */
434
435 && in_prologue (fci->pc, PROC_LOW_ADDR (proc_desc))
436
437 /* Not sure exactly what kernel_trap means, but if it means
438 the kernel saves the registers without a prologue doing it,
439 we better not examine the prologue to see whether registers
440 have been saved yet. */
441 && !kernel_trap)
442 {
443 /* We need to figure out whether the registers that the proc_desc
444 claims are saved have been saved yet. */
445
446 CORE_ADDR addr;
447
448 /* Bitmasks; set if we have found a save for the register. */
449 unsigned long gen_save_found = 0;
450 unsigned long float_save_found = 0;
451 int instlen;
452
453 /* If the address is odd, assume this is MIPS16 code. */
454 addr = PROC_LOW_ADDR (proc_desc);
455 instlen = pc_is_mips16 (addr) ? MIPS16_INSTLEN : MIPS_INSTLEN;
456
457 /* Scan through this function's instructions preceding the current
458 PC, and look for those that save registers. */
459 while (addr < fci->pc)
460 {
461 inst = mips_fetch_instruction (addr);
462 if (pc_is_mips16 (addr))
463 mips16_decode_reg_save (inst, &gen_save_found);
464 else
465 mips32_decode_reg_save (inst, &gen_save_found, &float_save_found);
466 addr += instlen;
467 }
468 gen_mask = gen_save_found;
469 float_mask = float_save_found;
470 }
471
472 /* Fill in the offsets for the registers which gen_mask says
473 were saved. */
474 reg_position = fci->frame + PROC_REG_OFFSET (proc_desc);
475 for (ireg= MIPS_NUMREGS-1; gen_mask; --ireg, gen_mask <<= 1)
476 if (gen_mask & 0x80000000)
477 {
478 fci->saved_regs->regs[ireg] = reg_position;
479 reg_position -= MIPS_REGSIZE;
480 }
481
482 /* The MIPS16 entry instruction saves $s0 and $s1 in the reverse order
483 of that normally used by gcc. Therefore, we have to fetch the first
484 instruction of the function, and if it's an entry instruction that
485 saves $s0 or $s1, correct their saved addresses. */
486 if (pc_is_mips16 (PROC_LOW_ADDR (proc_desc)))
487 {
488 inst = mips_fetch_instruction (PROC_LOW_ADDR (proc_desc));
489 if ((inst & 0xf81f) == 0xe809 && (inst & 0x700) != 0x700) /* entry */
490 {
491 int reg;
492 int sreg_count = (inst >> 6) & 3;
493
494 /* Check if the ra register was pushed on the stack. */
495 reg_position = fci->frame + PROC_REG_OFFSET (proc_desc);
496 if (inst & 0x20)
497 reg_position -= MIPS_REGSIZE;
498
499 /* Check if the s0 and s1 registers were pushed on the stack. */
500 for (reg = 16; reg < sreg_count+16; reg++)
501 {
502 fci->saved_regs->regs[reg] = reg_position;
503 reg_position -= MIPS_REGSIZE;
504 }
505 }
506 }
507
508 /* Fill in the offsets for the registers which float_mask says
509 were saved. */
510 reg_position = fci->frame + PROC_FREG_OFFSET (proc_desc);
511
512 /* The freg_offset points to where the first *double* register
513 is saved. So skip to the high-order word. */
514 if (! GDB_TARGET_IS_MIPS64)
515 reg_position += MIPS_REGSIZE;
516
517 /* Fill in the offsets for the float registers which float_mask says
518 were saved. */
519 for (ireg = MIPS_NUMREGS-1; float_mask; --ireg, float_mask <<= 1)
520 if (float_mask & 0x80000000)
521 {
522 fci->saved_regs->regs[FP0_REGNUM+ireg] = reg_position;
523 reg_position -= MIPS_REGSIZE;
524 }
525
526 fci->saved_regs->regs[PC_REGNUM] = fci->saved_regs->regs[RA_REGNUM];
527 }
528
529 static CORE_ADDR
530 read_next_frame_reg(fi, regno)
531 struct frame_info *fi;
532 int regno;
533 {
534 for (; fi; fi = fi->next)
535 {
536 /* We have to get the saved sp from the sigcontext
537 if it is a signal handler frame. */
538 if (regno == SP_REGNUM && !fi->signal_handler_caller)
539 return fi->frame;
540 else
541 {
542 if (fi->saved_regs == NULL)
543 mips_find_saved_regs (fi);
544 if (fi->saved_regs->regs[regno])
545 return read_memory_integer(fi->saved_regs->regs[regno], MIPS_REGSIZE);
546 }
547 }
548 return read_register (regno);
549 }
550
551 /* mips_addr_bits_remove - remove useless address bits */
552
553 CORE_ADDR
554 mips_addr_bits_remove (addr)
555 CORE_ADDR addr;
556 {
557 #if GDB_TARGET_IS_MIPS64
558 if ((addr >> 32 == (CORE_ADDR)0xffffffff)
559 && (strcmp (target_shortname,"pmon")==0
560 || strcmp (target_shortname,"ddb")==0
561 || strcmp (target_shortname,"sim")==0))
562 {
563 /* This hack is a work-around for existing boards using PMON,
564 the simulator, and any other 64-bit targets that doesn't have
565 true 64-bit addressing. On these targets, the upper 32 bits
566 of addresses are ignored by the hardware. Thus, the PC or SP
567 are likely to have been sign extended to all 1s by instruction
568 sequences that load 32-bit addresses. For example, a typical
569 piece of code that loads an address is this:
570 lui $r2, <upper 16 bits>
571 ori $r2, <lower 16 bits>
572 But the lui sign-extends the value such that the upper 32 bits
573 may be all 1s. The workaround is simply to mask off these bits.
574 In the future, gcc may be changed to support true 64-bit
575 addressing, and this masking will have to be disabled. */
576 addr &= (CORE_ADDR)0xffffffff;
577 }
578 #else
579 /* Even when GDB is configured for some 32-bit targets (e.g. mips-elf),
580 BFD is configured to handle 64-bit targets, so CORE_ADDR is 64 bits.
581 So we still have to mask off useless bits from addresses. */
582 addr &= (CORE_ADDR)0xffffffff;
583 #endif
584
585 return addr;
586 }
587
588 void
589 mips_init_frame_pc_first (fromleaf, prev)
590 int fromleaf;
591 struct frame_info *prev;
592 {
593 CORE_ADDR pc, tmp;
594
595 pc = ((fromleaf) ? SAVED_PC_AFTER_CALL (prev->next) :
596 prev->next ? FRAME_SAVED_PC (prev->next) : read_pc ());
597 tmp = mips_skip_stub (pc);
598 prev->pc = tmp ? tmp : pc;
599 }
600
601
602 CORE_ADDR
603 mips_frame_saved_pc(frame)
604 struct frame_info *frame;
605 {
606 CORE_ADDR saved_pc;
607 mips_extra_func_info_t proc_desc = frame->proc_desc;
608 /* We have to get the saved pc from the sigcontext
609 if it is a signal handler frame. */
610 int pcreg = frame->signal_handler_caller ? PC_REGNUM
611 : (proc_desc ? PROC_PC_REG(proc_desc) : RA_REGNUM);
612
613 if (proc_desc && PROC_DESC_IS_DUMMY(proc_desc))
614 saved_pc = read_memory_integer(frame->frame - MIPS_REGSIZE, MIPS_REGSIZE);
615 else
616 saved_pc = read_next_frame_reg(frame, pcreg);
617
618 return ADDR_BITS_REMOVE (saved_pc);
619 }
620
621 static struct mips_extra_func_info temp_proc_desc;
622 static struct frame_saved_regs temp_saved_regs;
623
624 /* Set a register's saved stack address in temp_saved_regs. If an address
625 has already been set for this register, do nothing; this way we will
626 only recognize the first save of a given register in a function prologue.
627 This is a helper function for mips{16,32}_heuristic_proc_desc. */
628
629 static void
630 set_reg_offset (regno, offset)
631 int regno;
632 CORE_ADDR offset;
633 {
634 if (temp_saved_regs.regs[regno] == 0)
635 temp_saved_regs.regs[regno] = offset;
636 }
637
638
639 /* This fencepost looks highly suspicious to me. Removing it also
640 seems suspicious as it could affect remote debugging across serial
641 lines. */
642
643 static CORE_ADDR
644 heuristic_proc_start(pc)
645 CORE_ADDR pc;
646 {
647 CORE_ADDR start_pc;
648 CORE_ADDR fence;
649 int instlen;
650 int seen_adjsp = 0;
651
652 pc = ADDR_BITS_REMOVE (pc);
653 start_pc = pc;
654 fence = start_pc - heuristic_fence_post;
655 if (start_pc == 0) return 0;
656
657 if (heuristic_fence_post == UINT_MAX
658 || fence < VM_MIN_ADDRESS)
659 fence = VM_MIN_ADDRESS;
660
661 instlen = pc_is_mips16 (pc) ? MIPS16_INSTLEN : MIPS_INSTLEN;
662
663 /* search back for previous return */
664 for (start_pc -= instlen; ; start_pc -= instlen)
665 if (start_pc < fence)
666 {
667 /* It's not clear to me why we reach this point when
668 stop_soon_quietly, but with this test, at least we
669 don't print out warnings for every child forked (eg, on
670 decstation). 22apr93 rich@cygnus.com. */
671 if (!stop_soon_quietly)
672 {
673 static int blurb_printed = 0;
674
675 if (fence == VM_MIN_ADDRESS)
676 warning("Hit beginning of text section without finding");
677 else
678 warning("Hit heuristic-fence-post without finding");
679
680 warning("enclosing function for address 0x%s", paddr_nz (pc));
681 if (!blurb_printed)
682 {
683 printf_filtered ("\
684 This warning occurs if you are debugging a function without any symbols\n\
685 (for example, in a stripped executable). In that case, you may wish to\n\
686 increase the size of the search with the `set heuristic-fence-post' command.\n\
687 \n\
688 Otherwise, you told GDB there was a function where there isn't one, or\n\
689 (more likely) you have encountered a bug in GDB.\n");
690 blurb_printed = 1;
691 }
692 }
693
694 return 0;
695 }
696 else if (pc_is_mips16 (start_pc))
697 {
698 unsigned short inst;
699
700 /* On MIPS16, any one of the following is likely to be the
701 start of a function:
702 entry
703 addiu sp,-n
704 daddiu sp,-n
705 extend -n followed by 'addiu sp,+n' or 'daddiu sp,+n' */
706 inst = mips_fetch_instruction (start_pc);
707 if (((inst & 0xf81f) == 0xe809 && (inst & 0x700) != 0x700) /* entry */
708 || (inst & 0xff80) == 0x6380 /* addiu sp,-n */
709 || (inst & 0xff80) == 0xfb80 /* daddiu sp,-n */
710 || ((inst & 0xf810) == 0xf010 && seen_adjsp)) /* extend -n */
711 break;
712 else if ((inst & 0xff00) == 0x6300 /* addiu sp */
713 || (inst & 0xff00) == 0xfb00) /* daddiu sp */
714 seen_adjsp = 1;
715 else
716 seen_adjsp = 0;
717 }
718 else if (ABOUT_TO_RETURN(start_pc))
719 {
720 start_pc += 2 * MIPS_INSTLEN; /* skip return, and its delay slot */
721 break;
722 }
723
724 #if 0
725 /* skip nops (usually 1) 0 - is this */
726 while (start_pc < pc && read_memory_integer (start_pc, MIPS_INSTLEN) == 0)
727 start_pc += MIPS_INSTLEN;
728 #endif
729 return start_pc;
730 }
731
732 /* Fetch the immediate value from a MIPS16 instruction.
733 If the previous instruction was an EXTEND, use it to extend
734 the upper bits of the immediate value. This is a helper function
735 for mips16_heuristic_proc_desc. */
736
737 static int
738 mips16_get_imm (prev_inst, inst, nbits, scale, is_signed)
739 unsigned short prev_inst; /* previous instruction */
740 unsigned short inst; /* current instruction */
741 int nbits; /* number of bits in imm field */
742 int scale; /* scale factor to be applied to imm */
743 int is_signed; /* is the imm field signed? */
744 {
745 int offset;
746
747 if ((prev_inst & 0xf800) == 0xf000) /* prev instruction was EXTEND? */
748 {
749 offset = ((prev_inst & 0x1f) << 11) | (prev_inst & 0x7e0);
750 if (offset & 0x8000) /* check for negative extend */
751 offset = 0 - (0x10000 - (offset & 0xffff));
752 return offset | (inst & 0x1f);
753 }
754 else
755 {
756 int max_imm = 1 << nbits;
757 int mask = max_imm - 1;
758 int sign_bit = max_imm >> 1;
759
760 offset = inst & mask;
761 if (is_signed && (offset & sign_bit))
762 offset = 0 - (max_imm - offset);
763 return offset * scale;
764 }
765 }
766
767
768 /* Fill in values in temp_proc_desc based on the MIPS16 instruction
769 stream from start_pc to limit_pc. */
770
771 static void
772 mips16_heuristic_proc_desc(start_pc, limit_pc, next_frame, sp)
773 CORE_ADDR start_pc, limit_pc;
774 struct frame_info *next_frame;
775 CORE_ADDR sp;
776 {
777 CORE_ADDR cur_pc;
778 CORE_ADDR frame_addr = 0; /* Value of $r17, used as frame pointer */
779 unsigned short prev_inst = 0; /* saved copy of previous instruction */
780 unsigned inst = 0; /* current instruction */
781 unsigned entry_inst = 0; /* the entry instruction */
782 int reg, offset;
783
784 PROC_FRAME_OFFSET(&temp_proc_desc) = 0; /* size of stack frame */
785 PROC_FRAME_ADJUST(&temp_proc_desc) = 0; /* offset of FP from SP */
786
787 for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS16_INSTLEN)
788 {
789 /* Save the previous instruction. If it's an EXTEND, we'll extract
790 the immediate offset extension from it in mips16_get_imm. */
791 prev_inst = inst;
792
793 /* Fetch and decode the instruction. */
794 inst = (unsigned short) mips_fetch_instruction (cur_pc);
795 if ((inst & 0xff00) == 0x6300 /* addiu sp */
796 || (inst & 0xff00) == 0xfb00) /* daddiu sp */
797 {
798 offset = mips16_get_imm (prev_inst, inst, 8, 8, 1);
799 if (offset < 0) /* negative stack adjustment? */
800 PROC_FRAME_OFFSET(&temp_proc_desc) -= offset;
801 else
802 /* Exit loop if a positive stack adjustment is found, which
803 usually means that the stack cleanup code in the function
804 epilogue is reached. */
805 break;
806 }
807 else if ((inst & 0xf800) == 0xd000) /* sw reg,n($sp) */
808 {
809 offset = mips16_get_imm (prev_inst, inst, 8, 4, 0);
810 reg = mips16_to_32_reg[(inst & 0x700) >> 8];
811 PROC_REG_MASK(&temp_proc_desc) |= (1 << reg);
812 set_reg_offset (reg, sp + offset);
813 }
814 else if ((inst & 0xff00) == 0xf900) /* sd reg,n($sp) */
815 {
816 offset = mips16_get_imm (prev_inst, inst, 5, 8, 0);
817 reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
818 PROC_REG_MASK(&temp_proc_desc) |= (1 << reg);
819 set_reg_offset (reg, sp + offset);
820 }
821 else if ((inst & 0xff00) == 0x6200) /* sw $ra,n($sp) */
822 {
823 offset = mips16_get_imm (prev_inst, inst, 8, 4, 0);
824 PROC_REG_MASK(&temp_proc_desc) |= (1 << RA_REGNUM);
825 set_reg_offset (RA_REGNUM, sp + offset);
826 }
827 else if ((inst & 0xff00) == 0xfa00) /* sd $ra,n($sp) */
828 {
829 offset = mips16_get_imm (prev_inst, inst, 8, 8, 0);
830 PROC_REG_MASK(&temp_proc_desc) |= (1 << RA_REGNUM);
831 set_reg_offset (RA_REGNUM, sp + offset);
832 }
833 else if (inst == 0x673d) /* move $s1, $sp */
834 {
835 frame_addr = sp;
836 PROC_FRAME_REG (&temp_proc_desc) = 17;
837 }
838 else if ((inst & 0xff00) == 0x0100) /* addiu $s1,sp,n */
839 {
840 offset = mips16_get_imm (prev_inst, inst, 8, 4, 0);
841 frame_addr = sp + offset;
842 PROC_FRAME_REG (&temp_proc_desc) = 17;
843 PROC_FRAME_ADJUST (&temp_proc_desc) = offset;
844 }
845 else if ((inst & 0xFF00) == 0xd900) /* sw reg,offset($s1) */
846 {
847 offset = mips16_get_imm (prev_inst, inst, 5, 4, 0);
848 reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
849 PROC_REG_MASK(&temp_proc_desc) |= 1 << reg;
850 set_reg_offset (reg, frame_addr + offset);
851 }
852 else if ((inst & 0xFF00) == 0x7900) /* sd reg,offset($s1) */
853 {
854 offset = mips16_get_imm (prev_inst, inst, 5, 8, 0);
855 reg = mips16_to_32_reg[(inst & 0xe0) >> 5];
856 PROC_REG_MASK(&temp_proc_desc) |= 1 << reg;
857 set_reg_offset (reg, frame_addr + offset);
858 }
859 else if ((inst & 0xf81f) == 0xe809 && (inst & 0x700) != 0x700) /* entry */
860 entry_inst = inst; /* save for later processing */
861 else if ((inst & 0xf800) == 0x1800) /* jal(x) */
862 cur_pc += MIPS16_INSTLEN; /* 32-bit instruction */
863 }
864
865 /* The entry instruction is typically the first instruction in a function,
866 and it stores registers at offsets relative to the value of the old SP
867 (before the prologue). But the value of the sp parameter to this
868 function is the new SP (after the prologue has been executed). So we
869 can't calculate those offsets until we've seen the entire prologue,
870 and can calculate what the old SP must have been. */
871 if (entry_inst != 0)
872 {
873 int areg_count = (entry_inst >> 8) & 7;
874 int sreg_count = (entry_inst >> 6) & 3;
875
876 /* The entry instruction always subtracts 32 from the SP. */
877 PROC_FRAME_OFFSET(&temp_proc_desc) += 32;
878
879 /* Now we can calculate what the SP must have been at the
880 start of the function prologue. */
881 sp += PROC_FRAME_OFFSET(&temp_proc_desc);
882
883 /* Check if a0-a3 were saved in the caller's argument save area. */
884 for (reg = 4, offset = 0; reg < areg_count+4; reg++)
885 {
886 PROC_REG_MASK(&temp_proc_desc) |= 1 << reg;
887 set_reg_offset (reg, sp + offset);
888 offset += MIPS_REGSIZE;
889 }
890
891 /* Check if the ra register was pushed on the stack. */
892 offset = -4;
893 if (entry_inst & 0x20)
894 {
895 PROC_REG_MASK(&temp_proc_desc) |= 1 << RA_REGNUM;
896 set_reg_offset (RA_REGNUM, sp + offset);
897 offset -= MIPS_REGSIZE;
898 }
899
900 /* Check if the s0 and s1 registers were pushed on the stack. */
901 for (reg = 16; reg < sreg_count+16; reg++)
902 {
903 PROC_REG_MASK(&temp_proc_desc) |= 1 << reg;
904 set_reg_offset (reg, sp + offset);
905 offset -= MIPS_REGSIZE;
906 }
907 }
908 }
909
910 static void
911 mips32_heuristic_proc_desc(start_pc, limit_pc, next_frame, sp)
912 CORE_ADDR start_pc, limit_pc;
913 struct frame_info *next_frame;
914 CORE_ADDR sp;
915 {
916 CORE_ADDR cur_pc;
917 CORE_ADDR frame_addr = 0; /* Value of $r30. Used by gcc for frame-pointer */
918 restart:
919 PROC_FRAME_OFFSET(&temp_proc_desc) = 0;
920 PROC_FRAME_ADJUST (&temp_proc_desc) = 0; /* offset of FP from SP */
921 for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS_INSTLEN)
922 {
923 unsigned long inst, high_word, low_word;
924 int reg;
925
926 /* Fetch the instruction. */
927 inst = (unsigned long) mips_fetch_instruction (cur_pc);
928
929 /* Save some code by pre-extracting some useful fields. */
930 high_word = (inst >> 16) & 0xffff;
931 low_word = inst & 0xffff;
932 reg = high_word & 0x1f;
933
934 if (high_word == 0x27bd /* addiu $sp,$sp,-i */
935 || high_word == 0x23bd /* addi $sp,$sp,-i */
936 || high_word == 0x67bd) /* daddiu $sp,$sp,-i */
937 {
938 if (low_word & 0x8000) /* negative stack adjustment? */
939 PROC_FRAME_OFFSET(&temp_proc_desc) += 0x10000 - low_word;
940 else
941 /* Exit loop if a positive stack adjustment is found, which
942 usually means that the stack cleanup code in the function
943 epilogue is reached. */
944 break;
945 }
946 else if ((high_word & 0xFFE0) == 0xafa0) /* sw reg,offset($sp) */
947 {
948 PROC_REG_MASK(&temp_proc_desc) |= 1 << reg;
949 set_reg_offset (reg, sp + low_word);
950 }
951 else if ((high_word & 0xFFE0) == 0xffa0) /* sd reg,offset($sp) */
952 {
953 /* Irix 6.2 N32 ABI uses sd instructions for saving $gp and $ra,
954 but the register size used is only 32 bits. Make the address
955 for the saved register point to the lower 32 bits. */
956 PROC_REG_MASK(&temp_proc_desc) |= 1 << reg;
957 set_reg_offset (reg, sp + low_word + 8 - MIPS_REGSIZE);
958 }
959 else if (high_word == 0x27be) /* addiu $30,$sp,size */
960 {
961 /* Old gcc frame, r30 is virtual frame pointer. */
962 if ((long)low_word != PROC_FRAME_OFFSET(&temp_proc_desc))
963 frame_addr = sp + low_word;
964 else if (PROC_FRAME_REG (&temp_proc_desc) == SP_REGNUM)
965 {
966 unsigned alloca_adjust;
967 PROC_FRAME_REG (&temp_proc_desc) = 30;
968 frame_addr = read_next_frame_reg(next_frame, 30);
969 alloca_adjust = (unsigned)(frame_addr - (sp + low_word));
970 if (alloca_adjust > 0)
971 {
972 /* FP > SP + frame_size. This may be because
973 * of an alloca or somethings similar.
974 * Fix sp to "pre-alloca" value, and try again.
975 */
976 sp += alloca_adjust;
977 goto restart;
978 }
979 }
980 }
981 /* move $30,$sp. With different versions of gas this will be either
982 `addu $30,$sp,$zero' or `or $30,$sp,$zero' or `daddu 30,sp,$0'.
983 Accept any one of these. */
984 else if (inst == 0x03A0F021 || inst == 0x03a0f025 || inst == 0x03a0f02d)
985 {
986 /* New gcc frame, virtual frame pointer is at r30 + frame_size. */
987 if (PROC_FRAME_REG (&temp_proc_desc) == SP_REGNUM)
988 {
989 unsigned alloca_adjust;
990 PROC_FRAME_REG (&temp_proc_desc) = 30;
991 frame_addr = read_next_frame_reg(next_frame, 30);
992 alloca_adjust = (unsigned)(frame_addr - sp);
993 if (alloca_adjust > 0)
994 {
995 /* FP > SP + frame_size. This may be because
996 * of an alloca or somethings similar.
997 * Fix sp to "pre-alloca" value, and try again.
998 */
999 sp += alloca_adjust;
1000 goto restart;
1001 }
1002 }
1003 }
1004 else if ((high_word & 0xFFE0) == 0xafc0) /* sw reg,offset($30) */
1005 {
1006 PROC_REG_MASK(&temp_proc_desc) |= 1 << reg;
1007 set_reg_offset (reg, frame_addr + low_word);
1008 }
1009 }
1010 }
1011
1012 static mips_extra_func_info_t
1013 heuristic_proc_desc(start_pc, limit_pc, next_frame)
1014 CORE_ADDR start_pc, limit_pc;
1015 struct frame_info *next_frame;
1016 {
1017 CORE_ADDR sp = read_next_frame_reg (next_frame, SP_REGNUM);
1018
1019 if (start_pc == 0) return NULL;
1020 memset (&temp_proc_desc, '\0', sizeof(temp_proc_desc));
1021 memset (&temp_saved_regs, '\0', sizeof(struct frame_saved_regs));
1022 PROC_LOW_ADDR (&temp_proc_desc) = start_pc;
1023 PROC_FRAME_REG (&temp_proc_desc) = SP_REGNUM;
1024 PROC_PC_REG (&temp_proc_desc) = RA_REGNUM;
1025
1026 if (start_pc + 200 < limit_pc)
1027 limit_pc = start_pc + 200;
1028 if (pc_is_mips16 (start_pc))
1029 mips16_heuristic_proc_desc (start_pc, limit_pc, next_frame, sp);
1030 else
1031 mips32_heuristic_proc_desc (start_pc, limit_pc, next_frame, sp);
1032 return &temp_proc_desc;
1033 }
1034
1035 static mips_extra_func_info_t
1036 non_heuristic_proc_desc (pc, addrptr)
1037 CORE_ADDR pc;
1038 CORE_ADDR *addrptr;
1039 {
1040 CORE_ADDR startaddr;
1041 mips_extra_func_info_t proc_desc;
1042 struct block *b = block_for_pc(pc);
1043 struct symbol *sym;
1044
1045 find_pc_partial_function (pc, NULL, &startaddr, NULL);
1046 if (addrptr)
1047 *addrptr = startaddr;
1048 if (b == NULL || PC_IN_CALL_DUMMY (pc, 0, 0))
1049 sym = NULL;
1050 else
1051 {
1052 if (startaddr > BLOCK_START (b))
1053 /* This is the "pathological" case referred to in a comment in
1054 print_frame_info. It might be better to move this check into
1055 symbol reading. */
1056 sym = NULL;
1057 else
1058 sym = lookup_symbol (MIPS_EFI_SYMBOL_NAME, b, LABEL_NAMESPACE, 0, NULL);
1059 }
1060
1061 /* If we never found a PDR for this function in symbol reading, then
1062 examine prologues to find the information. */
1063 if (sym)
1064 {
1065 proc_desc = (mips_extra_func_info_t) SYMBOL_VALUE (sym);
1066 if (PROC_FRAME_REG (proc_desc) == -1)
1067 return NULL;
1068 else
1069 return proc_desc;
1070 }
1071 else
1072 return NULL;
1073 }
1074
1075
1076 static mips_extra_func_info_t
1077 find_proc_desc (pc, next_frame)
1078 CORE_ADDR pc;
1079 struct frame_info *next_frame;
1080 {
1081 mips_extra_func_info_t proc_desc;
1082 CORE_ADDR startaddr;
1083
1084 proc_desc = non_heuristic_proc_desc (pc, &startaddr);
1085
1086 if (proc_desc)
1087 {
1088 /* IF this is the topmost frame AND
1089 * (this proc does not have debugging information OR
1090 * the PC is in the procedure prologue)
1091 * THEN create a "heuristic" proc_desc (by analyzing
1092 * the actual code) to replace the "official" proc_desc.
1093 */
1094 if (next_frame == NULL)
1095 {
1096 struct symtab_and_line val;
1097 struct symbol *proc_symbol =
1098 PROC_DESC_IS_DUMMY(proc_desc) ? 0 : PROC_SYMBOL(proc_desc);
1099
1100 if (proc_symbol)
1101 {
1102 val = find_pc_line (BLOCK_START
1103 (SYMBOL_BLOCK_VALUE(proc_symbol)),
1104 0);
1105 val.pc = val.end ? val.end : pc;
1106 }
1107 if (!proc_symbol || pc < val.pc)
1108 {
1109 mips_extra_func_info_t found_heuristic =
1110 heuristic_proc_desc (PROC_LOW_ADDR (proc_desc),
1111 pc, next_frame);
1112 if (found_heuristic)
1113 proc_desc = found_heuristic;
1114 }
1115 }
1116 }
1117 else
1118 {
1119 /* Is linked_proc_desc_table really necessary? It only seems to be used
1120 by procedure call dummys. However, the procedures being called ought
1121 to have their own proc_descs, and even if they don't,
1122 heuristic_proc_desc knows how to create them! */
1123
1124 register struct linked_proc_info *link;
1125
1126 for (link = linked_proc_desc_table; link; link = link->next)
1127 if (PROC_LOW_ADDR(&link->info) <= pc
1128 && PROC_HIGH_ADDR(&link->info) > pc)
1129 return &link->info;
1130
1131 if (startaddr == 0)
1132 startaddr = heuristic_proc_start (pc);
1133
1134 proc_desc =
1135 heuristic_proc_desc (startaddr, pc, next_frame);
1136 }
1137 return proc_desc;
1138 }
1139
1140 static CORE_ADDR
1141 get_frame_pointer(frame, proc_desc)
1142 struct frame_info *frame;
1143 mips_extra_func_info_t proc_desc;
1144 {
1145 return ADDR_BITS_REMOVE (
1146 read_next_frame_reg (frame, PROC_FRAME_REG (proc_desc)) +
1147 PROC_FRAME_OFFSET (proc_desc) - PROC_FRAME_ADJUST (proc_desc));
1148 }
1149
1150 mips_extra_func_info_t cached_proc_desc;
1151
1152 CORE_ADDR
1153 mips_frame_chain(frame)
1154 struct frame_info *frame;
1155 {
1156 mips_extra_func_info_t proc_desc;
1157 CORE_ADDR tmp;
1158 CORE_ADDR saved_pc = FRAME_SAVED_PC(frame);
1159
1160 if (saved_pc == 0 || inside_entry_file (saved_pc))
1161 return 0;
1162
1163 /* Check if the PC is inside a call stub. If it is, fetch the
1164 PC of the caller of that stub. */
1165 if ((tmp = mips_skip_stub (saved_pc)) != 0)
1166 saved_pc = tmp;
1167
1168 /* Look up the procedure descriptor for this PC. */
1169 proc_desc = find_proc_desc(saved_pc, frame);
1170 if (!proc_desc)
1171 return 0;
1172
1173 cached_proc_desc = proc_desc;
1174
1175 /* If no frame pointer and frame size is zero, we must be at end
1176 of stack (or otherwise hosed). If we don't check frame size,
1177 we loop forever if we see a zero size frame. */
1178 if (PROC_FRAME_REG (proc_desc) == SP_REGNUM
1179 && PROC_FRAME_OFFSET (proc_desc) == 0
1180 /* The previous frame from a sigtramp frame might be frameless
1181 and have frame size zero. */
1182 && !frame->signal_handler_caller)
1183 return 0;
1184 else
1185 return get_frame_pointer (frame, proc_desc);
1186 }
1187
1188 void
1189 init_extra_frame_info(fci)
1190 struct frame_info *fci;
1191 {
1192 int regnum;
1193
1194 /* Use proc_desc calculated in frame_chain */
1195 mips_extra_func_info_t proc_desc =
1196 fci->next ? cached_proc_desc : find_proc_desc(fci->pc, fci->next);
1197
1198 fci->saved_regs = NULL;
1199 fci->proc_desc =
1200 proc_desc == &temp_proc_desc ? 0 : proc_desc;
1201 if (proc_desc)
1202 {
1203 /* Fixup frame-pointer - only needed for top frame */
1204 /* This may not be quite right, if proc has a real frame register.
1205 Get the value of the frame relative sp, procedure might have been
1206 interrupted by a signal at it's very start. */
1207 if (fci->pc == PROC_LOW_ADDR (proc_desc)
1208 && !PROC_DESC_IS_DUMMY (proc_desc))
1209 fci->frame = read_next_frame_reg (fci->next, SP_REGNUM);
1210 else
1211 fci->frame = get_frame_pointer (fci->next, proc_desc);
1212
1213 if (proc_desc == &temp_proc_desc)
1214 {
1215 char *name;
1216
1217 /* Do not set the saved registers for a sigtramp frame,
1218 mips_find_saved_registers will do that for us.
1219 We can't use fci->signal_handler_caller, it is not yet set. */
1220 find_pc_partial_function (fci->pc, &name,
1221 (CORE_ADDR *)NULL,(CORE_ADDR *)NULL);
1222 if (!IN_SIGTRAMP (fci->pc, name))
1223 {
1224 fci->saved_regs = (struct frame_saved_regs*)
1225 obstack_alloc (&frame_cache_obstack,
1226 sizeof (struct frame_saved_regs));
1227 *fci->saved_regs = temp_saved_regs;
1228 fci->saved_regs->regs[PC_REGNUM]
1229 = fci->saved_regs->regs[RA_REGNUM];
1230 }
1231 }
1232
1233 /* hack: if argument regs are saved, guess these contain args */
1234 fci->num_args = -1; /* assume we can't tell how many args for now */
1235 for (regnum = MIPS_LAST_ARG_REGNUM; regnum >= A0_REGNUM; regnum--)
1236 {
1237 if (PROC_REG_MASK(proc_desc) & (1 << regnum))
1238 {
1239 fci->num_args = regnum - A0_REGNUM + 1;
1240 break;
1241 }
1242 }
1243 }
1244 }
1245
1246 /* MIPS stack frames are almost impenetrable. When execution stops,
1247 we basically have to look at symbol information for the function
1248 that we stopped in, which tells us *which* register (if any) is
1249 the base of the frame pointer, and what offset from that register
1250 the frame itself is at.
1251
1252 This presents a problem when trying to examine a stack in memory
1253 (that isn't executing at the moment), using the "frame" command. We
1254 don't have a PC, nor do we have any registers except SP.
1255
1256 This routine takes two arguments, SP and PC, and tries to make the
1257 cached frames look as if these two arguments defined a frame on the
1258 cache. This allows the rest of info frame to extract the important
1259 arguments without difficulty. */
1260
1261 struct frame_info *
1262 setup_arbitrary_frame (argc, argv)
1263 int argc;
1264 CORE_ADDR *argv;
1265 {
1266 if (argc != 2)
1267 error ("MIPS frame specifications require two arguments: sp and pc");
1268
1269 return create_new_frame (argv[0], argv[1]);
1270 }
1271
1272 CORE_ADDR
1273 mips_push_arguments(nargs, args, sp, struct_return, struct_addr)
1274 int nargs;
1275 value_ptr *args;
1276 CORE_ADDR sp;
1277 int struct_return;
1278 CORE_ADDR struct_addr;
1279 {
1280 int argreg;
1281 int float_argreg;
1282 int argnum;
1283 int len = 0;
1284 int stack_offset = 0;
1285
1286 /* Macros to round N up or down to the next A boundary; A must be
1287 a power of two. */
1288 #define ROUND_DOWN(n,a) ((n) & ~((a)-1))
1289 #define ROUND_UP(n,a) (((n)+(a)-1) & ~((a)-1))
1290
1291 /* First ensure that the stack and structure return address (if any)
1292 are properly aligned. The stack has to be 64-bit aligned even
1293 on 32-bit machines, because doubles must be 64-bit aligned. */
1294 sp = ROUND_DOWN (sp, 8);
1295 struct_addr = ROUND_DOWN (struct_addr, MIPS_REGSIZE);
1296
1297 /* Now make space on the stack for the args. We allocate more
1298 than necessary for EABI, because the first few arguments are
1299 passed in registers, but that's OK. */
1300 for (argnum = 0; argnum < nargs; argnum++)
1301 len += ROUND_UP (TYPE_LENGTH(VALUE_TYPE(args[argnum])), MIPS_REGSIZE);
1302 sp -= ROUND_UP (len, 8);
1303
1304 /* Initialize the integer and float register pointers. */
1305 argreg = A0_REGNUM;
1306 float_argreg = FPA0_REGNUM;
1307
1308 /* the struct_return pointer occupies the first parameter-passing reg */
1309 if (struct_return)
1310 write_register (argreg++, struct_addr);
1311
1312 /* Now load as many as possible of the first arguments into
1313 registers, and push the rest onto the stack. Loop thru args
1314 from first to last. */
1315 for (argnum = 0; argnum < nargs; argnum++)
1316 {
1317 char *val;
1318 char valbuf[REGISTER_RAW_SIZE(A0_REGNUM)];
1319 value_ptr arg = args[argnum];
1320 struct type *arg_type = check_typedef (VALUE_TYPE (arg));
1321 int len = TYPE_LENGTH (arg_type);
1322 enum type_code typecode = TYPE_CODE (arg_type);
1323
1324 /* The EABI passes structures that do not fit in a register by
1325 reference. In all other cases, pass the structure by value. */
1326 if (MIPS_EABI && len > MIPS_REGSIZE &&
1327 (typecode == TYPE_CODE_STRUCT || typecode == TYPE_CODE_UNION))
1328 {
1329 store_address (valbuf, MIPS_REGSIZE, VALUE_ADDRESS (arg));
1330 typecode = TYPE_CODE_PTR;
1331 len = MIPS_REGSIZE;
1332 val = valbuf;
1333 }
1334 else
1335 val = (char *)VALUE_CONTENTS (arg);
1336
1337 /* 32-bit ABIs always start floating point arguments in an
1338 even-numbered floating point register. */
1339 if (!GDB_TARGET_IS_MIPS64 && typecode == TYPE_CODE_FLT
1340 && (float_argreg & 1))
1341 float_argreg++;
1342
1343 /* Floating point arguments passed in registers have to be
1344 treated specially. On 32-bit architectures, doubles
1345 are passed in register pairs; the even register gets
1346 the low word, and the odd register gets the high word.
1347 On non-EABI processors, the first two floating point arguments are
1348 also copied to general registers, because MIPS16 functions
1349 don't use float registers for arguments. This duplication of
1350 arguments in general registers can't hurt non-MIPS16 functions
1351 because those registers are normally skipped. */
1352 if (typecode == TYPE_CODE_FLT
1353 && float_argreg <= MIPS_LAST_FP_ARG_REGNUM
1354 && mips_fpu != MIPS_FPU_NONE)
1355 {
1356 if (!GDB_TARGET_IS_MIPS64 && len == 8)
1357 {
1358 int low_offset = TARGET_BYTE_ORDER == BIG_ENDIAN ? 4 : 0;
1359 unsigned long regval;
1360
1361 /* Write the low word of the double to the even register(s). */
1362 regval = extract_unsigned_integer (val+low_offset, 4);
1363 write_register (float_argreg++, regval);
1364 if (!MIPS_EABI)
1365 write_register (argreg+1, regval);
1366
1367 /* Write the high word of the double to the odd register(s). */
1368 regval = extract_unsigned_integer (val+4-low_offset, 4);
1369 write_register (float_argreg++, regval);
1370 if (!MIPS_EABI)
1371 {
1372 write_register (argreg, regval);
1373 argreg += 2;
1374 }
1375
1376 }
1377 else
1378 {
1379 /* This is a floating point value that fits entirely
1380 in a single register. */
1381 CORE_ADDR regval = extract_address (val, len);
1382 write_register (float_argreg++, regval);
1383 if (!MIPS_EABI)
1384 {
1385 write_register (argreg, regval);
1386 argreg += GDB_TARGET_IS_MIPS64 ? 1 : 2;
1387 }
1388 }
1389 }
1390 else
1391 {
1392 /* Copy the argument to general registers or the stack in
1393 register-sized pieces. Large arguments are split between
1394 registers and stack. */
1395 /* Note: structs whose size is not a multiple of MIPS_REGSIZE
1396 are treated specially: Irix cc passes them in registers
1397 where gcc sometimes puts them on the stack. For maximum
1398 compatibility, we will put them in both places. */
1399
1400 int odd_sized_struct = ((len > MIPS_REGSIZE) &&
1401 (len % MIPS_REGSIZE != 0));
1402 while (len > 0)
1403 {
1404 int partial_len = len < MIPS_REGSIZE ? len : MIPS_REGSIZE;
1405
1406 if (argreg > MIPS_LAST_ARG_REGNUM || odd_sized_struct)
1407 {
1408 /* Write this portion of the argument to the stack. */
1409 int longword_offset;
1410
1411 longword_offset = 0;
1412 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
1413 if (MIPS_REGSIZE == 8 &&
1414 (typecode == TYPE_CODE_INT ||
1415 typecode == TYPE_CODE_PTR ||
1416 typecode == TYPE_CODE_FLT) && len <= 4)
1417 longword_offset = 4;
1418 else if ((typecode == TYPE_CODE_STRUCT ||
1419 typecode == TYPE_CODE_UNION) &&
1420 TYPE_LENGTH (arg_type) < MIPS_REGSIZE)
1421 longword_offset = MIPS_REGSIZE - len;
1422
1423 write_memory (sp + stack_offset + longword_offset,
1424 val, partial_len);
1425 }
1426
1427 /* Note!!! This is NOT an else clause.
1428 Odd sized structs may go thru BOTH paths. */
1429 if (argreg <= MIPS_LAST_ARG_REGNUM)
1430 {
1431 CORE_ADDR regval = extract_address (val, partial_len);
1432
1433 /* A non-floating-point argument being passed in a
1434 general register. If a struct or union, and if
1435 the remaining length is smaller than the register
1436 size, we have to adjust the register value on
1437 big endian targets.
1438
1439 It does not seem to be necessary to do the
1440 same for integral types.
1441
1442 Also don't do this adjustment on EABI targets. */
1443
1444 if (!MIPS_EABI &&
1445 TARGET_BYTE_ORDER == BIG_ENDIAN &&
1446 partial_len < MIPS_REGSIZE &&
1447 (typecode == TYPE_CODE_STRUCT ||
1448 typecode == TYPE_CODE_UNION))
1449 regval <<= ((MIPS_REGSIZE - partial_len) *
1450 TARGET_CHAR_BIT);
1451
1452 write_register (argreg, regval);
1453 argreg++;
1454
1455 /* If this is the old ABI, prevent subsequent floating
1456 point arguments from being passed in floating point
1457 registers. */
1458 if (!MIPS_EABI)
1459 float_argreg = MIPS_LAST_FP_ARG_REGNUM + 1;
1460 }
1461
1462 len -= partial_len;
1463 val += partial_len;
1464
1465 /* The offset onto the stack at which we will start
1466 copying parameters (after the registers are used up)
1467 begins at (4 * MIPS_REGSIZE) in the old ABI. This
1468 leaves room for the "home" area for register parameters.
1469
1470 In the new EABI, the 8 register parameters do not
1471 have "home" stack space reserved for them, so the
1472 stack offset does not get incremented until after
1473 we have used up the 8 parameter registers. */
1474 if (!(MIPS_EABI && argnum < 8))
1475 stack_offset += ROUND_UP (partial_len, MIPS_REGSIZE);
1476 }
1477 }
1478 }
1479
1480 /* Set the return address register to point to the entry
1481 point of the program, where a breakpoint lies in wait. */
1482 write_register (RA_REGNUM, CALL_DUMMY_ADDRESS());
1483
1484 /* Return adjusted stack pointer. */
1485 return sp;
1486 }
1487
1488 static void
1489 mips_push_register(CORE_ADDR *sp, int regno)
1490 {
1491 char buffer[MAX_REGISTER_RAW_SIZE];
1492 int regsize = REGISTER_RAW_SIZE (regno);
1493
1494 *sp -= regsize;
1495 read_register_gen (regno, buffer);
1496 write_memory (*sp, buffer, regsize);
1497 }
1498
1499 /* MASK(i,j) == (1<<i) + (1<<(i+1)) + ... + (1<<j)). Assume i<=j<(MIPS_NUMREGS-1). */
1500 #define MASK(i,j) (((1 << ((j)+1))-1) ^ ((1 << (i))-1))
1501
1502 void
1503 mips_push_dummy_frame()
1504 {
1505 int ireg;
1506 struct linked_proc_info *link = (struct linked_proc_info*)
1507 xmalloc(sizeof(struct linked_proc_info));
1508 mips_extra_func_info_t proc_desc = &link->info;
1509 CORE_ADDR sp = ADDR_BITS_REMOVE (read_register (SP_REGNUM));
1510 CORE_ADDR old_sp = sp;
1511 link->next = linked_proc_desc_table;
1512 linked_proc_desc_table = link;
1513
1514 /* FIXME! are these correct ? */
1515 #define PUSH_FP_REGNUM 16 /* must be a register preserved across calls */
1516 #define GEN_REG_SAVE_MASK MASK(1,16)|MASK(24,28)|(1<<(MIPS_NUMREGS-1))
1517 #define FLOAT_REG_SAVE_MASK MASK(0,19)
1518 #define FLOAT_SINGLE_REG_SAVE_MASK \
1519 ((1<<18)|(1<<16)|(1<<14)|(1<<12)|(1<<10)|(1<<8)|(1<<6)|(1<<4)|(1<<2)|(1<<0))
1520 /*
1521 * The registers we must save are all those not preserved across
1522 * procedure calls. Dest_Reg (see tm-mips.h) must also be saved.
1523 * In addition, we must save the PC, PUSH_FP_REGNUM, MMLO/-HI
1524 * and FP Control/Status registers.
1525 *
1526 *
1527 * Dummy frame layout:
1528 * (high memory)
1529 * Saved PC
1530 * Saved MMHI, MMLO, FPC_CSR
1531 * Saved R31
1532 * Saved R28
1533 * ...
1534 * Saved R1
1535 * Saved D18 (i.e. F19, F18)
1536 * ...
1537 * Saved D0 (i.e. F1, F0)
1538 * Argument build area and stack arguments written via mips_push_arguments
1539 * (low memory)
1540 */
1541
1542 /* Save special registers (PC, MMHI, MMLO, FPC_CSR) */
1543 PROC_FRAME_REG(proc_desc) = PUSH_FP_REGNUM;
1544 PROC_FRAME_OFFSET(proc_desc) = 0;
1545 PROC_FRAME_ADJUST(proc_desc) = 0;
1546 mips_push_register (&sp, PC_REGNUM);
1547 mips_push_register (&sp, HI_REGNUM);
1548 mips_push_register (&sp, LO_REGNUM);
1549 mips_push_register (&sp, mips_fpu == MIPS_FPU_NONE ? 0 : FCRCS_REGNUM);
1550
1551 /* Save general CPU registers */
1552 PROC_REG_MASK(proc_desc) = GEN_REG_SAVE_MASK;
1553 PROC_REG_OFFSET(proc_desc) = sp - old_sp; /* offset of (Saved R31) from FP */
1554 for (ireg = 32; --ireg >= 0; )
1555 if (PROC_REG_MASK(proc_desc) & (1 << ireg))
1556 mips_push_register (&sp, ireg);
1557
1558 /* Save floating point registers starting with high order word */
1559 PROC_FREG_MASK(proc_desc) =
1560 mips_fpu == MIPS_FPU_DOUBLE ? FLOAT_REG_SAVE_MASK
1561 : mips_fpu == MIPS_FPU_SINGLE ? FLOAT_SINGLE_REG_SAVE_MASK : 0;
1562 PROC_FREG_OFFSET(proc_desc) = sp - old_sp; /* offset of (Saved D18) from FP */
1563 for (ireg = 32; --ireg >= 0; )
1564 if (PROC_FREG_MASK(proc_desc) & (1 << ireg))
1565 mips_push_register (&sp, ireg + FP0_REGNUM);
1566
1567 /* Update the frame pointer for the call dummy and the stack pointer.
1568 Set the procedure's starting and ending addresses to point to the
1569 call dummy address at the entry point. */
1570 write_register (PUSH_FP_REGNUM, old_sp);
1571 write_register (SP_REGNUM, sp);
1572 PROC_LOW_ADDR(proc_desc) = CALL_DUMMY_ADDRESS();
1573 PROC_HIGH_ADDR(proc_desc) = CALL_DUMMY_ADDRESS() + 4;
1574 SET_PROC_DESC_IS_DUMMY(proc_desc);
1575 PROC_PC_REG(proc_desc) = RA_REGNUM;
1576 }
1577
1578 void
1579 mips_pop_frame()
1580 {
1581 register int regnum;
1582 struct frame_info *frame = get_current_frame ();
1583 CORE_ADDR new_sp = FRAME_FP (frame);
1584
1585 mips_extra_func_info_t proc_desc = frame->proc_desc;
1586
1587 write_register (PC_REGNUM, FRAME_SAVED_PC(frame));
1588 if (frame->saved_regs == NULL)
1589 mips_find_saved_regs (frame);
1590 for (regnum = 0; regnum < NUM_REGS; regnum++)
1591 {
1592 if (regnum != SP_REGNUM && regnum != PC_REGNUM
1593 && frame->saved_regs->regs[regnum])
1594 write_register (regnum,
1595 read_memory_integer (frame->saved_regs->regs[regnum],
1596 MIPS_REGSIZE));
1597 }
1598 write_register (SP_REGNUM, new_sp);
1599 flush_cached_frames ();
1600
1601 if (proc_desc && PROC_DESC_IS_DUMMY(proc_desc))
1602 {
1603 struct linked_proc_info *pi_ptr, *prev_ptr;
1604
1605 for (pi_ptr = linked_proc_desc_table, prev_ptr = NULL;
1606 pi_ptr != NULL;
1607 prev_ptr = pi_ptr, pi_ptr = pi_ptr->next)
1608 {
1609 if (&pi_ptr->info == proc_desc)
1610 break;
1611 }
1612
1613 if (pi_ptr == NULL)
1614 error ("Can't locate dummy extra frame info\n");
1615
1616 if (prev_ptr != NULL)
1617 prev_ptr->next = pi_ptr->next;
1618 else
1619 linked_proc_desc_table = pi_ptr->next;
1620
1621 free (pi_ptr);
1622
1623 write_register (HI_REGNUM,
1624 read_memory_integer (new_sp - 2*MIPS_REGSIZE, MIPS_REGSIZE));
1625 write_register (LO_REGNUM,
1626 read_memory_integer (new_sp - 3*MIPS_REGSIZE, MIPS_REGSIZE));
1627 if (mips_fpu != MIPS_FPU_NONE)
1628 write_register (FCRCS_REGNUM,
1629 read_memory_integer (new_sp - 4*MIPS_REGSIZE, MIPS_REGSIZE));
1630 }
1631 }
1632
1633 static void
1634 mips_print_register (regnum, all)
1635 int regnum, all;
1636 {
1637 char raw_buffer[MAX_REGISTER_RAW_SIZE];
1638
1639 /* Get the data in raw format. */
1640 if (read_relative_register_raw_bytes (regnum, raw_buffer))
1641 {
1642 printf_filtered ("%s: [Invalid]", reg_names[regnum]);
1643 return;
1644 }
1645
1646 /* If an even floating point register, also print as double. */
1647 if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT
1648 && !((regnum-FP0_REGNUM) & 1))
1649 if (REGISTER_RAW_SIZE(regnum) == 4) /* this would be silly on MIPS64 */
1650 {
1651 char dbuffer[2 * MAX_REGISTER_RAW_SIZE];
1652
1653 read_relative_register_raw_bytes (regnum, dbuffer);
1654 read_relative_register_raw_bytes (regnum+1, dbuffer+MIPS_REGSIZE);
1655 REGISTER_CONVERT_TO_TYPE (regnum, builtin_type_double, dbuffer);
1656
1657 printf_filtered ("(d%d: ", regnum-FP0_REGNUM);
1658 val_print (builtin_type_double, dbuffer, 0,
1659 gdb_stdout, 0, 1, 0, Val_pretty_default);
1660 printf_filtered ("); ");
1661 }
1662 fputs_filtered (reg_names[regnum], gdb_stdout);
1663
1664 /* The problem with printing numeric register names (r26, etc.) is that
1665 the user can't use them on input. Probably the best solution is to
1666 fix it so that either the numeric or the funky (a2, etc.) names
1667 are accepted on input. */
1668 if (regnum < MIPS_NUMREGS)
1669 printf_filtered ("(r%d): ", regnum);
1670 else
1671 printf_filtered (": ");
1672
1673 /* If virtual format is floating, print it that way. */
1674 if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT)
1675 if (REGISTER_RAW_SIZE(regnum) == 8)
1676 { /* show 8-byte floats as float AND double: */
1677 int offset = 4 * (TARGET_BYTE_ORDER == BIG_ENDIAN);
1678
1679 printf_filtered (" (float) ");
1680 val_print (builtin_type_float, raw_buffer + offset, 0,
1681 gdb_stdout, 0, 1, 0, Val_pretty_default);
1682 printf_filtered (", (double) ");
1683 val_print (builtin_type_double, raw_buffer, 0,
1684 gdb_stdout, 0, 1, 0, Val_pretty_default);
1685 }
1686 else
1687 val_print (REGISTER_VIRTUAL_TYPE (regnum), raw_buffer, 0,
1688 gdb_stdout, 0, 1, 0, Val_pretty_default);
1689 /* Else print as integer in hex. */
1690 else
1691 print_scalar_formatted (raw_buffer, REGISTER_VIRTUAL_TYPE (regnum),
1692 'x', 0, gdb_stdout);
1693 }
1694
1695 /* Replacement for generic do_registers_info.
1696 Print regs in pretty columns. */
1697
1698 static int
1699 do_fp_register_row (regnum)
1700 int regnum;
1701 { /* do values for FP (float) regs */
1702 char raw_buffer[2] [REGISTER_RAW_SIZE(FP0_REGNUM)];
1703 char dbl_buffer[2 * REGISTER_RAW_SIZE(FP0_REGNUM)];
1704 /* use HI and LO to control the order of combining two flt regs */
1705 int HI = (TARGET_BYTE_ORDER == BIG_ENDIAN);
1706 int LO = (TARGET_BYTE_ORDER != BIG_ENDIAN);
1707 double doub, flt1, flt2; /* doubles extracted from raw hex data */
1708 int inv1, inv2, inv3;
1709
1710 /* Get the data in raw format. */
1711 if (read_relative_register_raw_bytes (regnum, raw_buffer[HI]))
1712 error ("can't read register %d (%s)", regnum, reg_names[regnum]);
1713 if (REGISTER_RAW_SIZE(regnum) == 4)
1714 {
1715 /* 4-byte registers: we can fit two registers per row. */
1716 /* Also print every pair of 4-byte regs as an 8-byte double. */
1717 if (read_relative_register_raw_bytes (regnum + 1, raw_buffer[LO]))
1718 error ("can't read register %d (%s)",
1719 regnum + 1, reg_names[regnum + 1]);
1720
1721 /* copy the two floats into one double, and unpack both */
1722 memcpy (dbl_buffer, raw_buffer, sizeof(dbl_buffer));
1723 flt1 = unpack_double (builtin_type_float, raw_buffer[HI], &inv1);
1724 flt2 = unpack_double (builtin_type_float, raw_buffer[LO], &inv2);
1725 doub = unpack_double (builtin_type_double, dbl_buffer, &inv3);
1726
1727 printf_filtered (inv1 ? " %-5s: <invalid float>" :
1728 " %-5s%-17.9g", reg_names[regnum], flt1);
1729 printf_filtered (inv2 ? " %-5s: <invalid float>" :
1730 " %-5s%-17.9g", reg_names[regnum + 1], flt2);
1731 printf_filtered (inv3 ? " dbl: <invalid double>\n" :
1732 " dbl: %-24.17g\n", doub);
1733 /* may want to do hex display here (future enhancement) */
1734 regnum +=2;
1735 }
1736 else
1737 { /* eight byte registers: print each one as float AND as double. */
1738 int offset = 4 * (TARGET_BYTE_ORDER == BIG_ENDIAN);
1739
1740 memcpy (dbl_buffer, raw_buffer[HI], sizeof(dbl_buffer));
1741 flt1 = unpack_double (builtin_type_float,
1742 &raw_buffer[HI][offset], &inv1);
1743 doub = unpack_double (builtin_type_double, dbl_buffer, &inv3);
1744
1745 printf_filtered (inv1 ? " %-5s: <invalid float>" :
1746 " %-5s flt: %-17.9g", reg_names[regnum], flt1);
1747 printf_filtered (inv3 ? " dbl: <invalid double>\n" :
1748 " dbl: %-24.17g\n", doub);
1749 /* may want to do hex display here (future enhancement) */
1750 regnum++;
1751 }
1752 return regnum;
1753 }
1754
1755 /* Print a row's worth of GP (int) registers, with name labels above */
1756
1757 static int
1758 do_gp_register_row (regnum)
1759 int regnum;
1760 { /* do values for GP (int) regs */
1761 char raw_buffer[REGISTER_RAW_SIZE(0)];
1762 int ncols = MIPS_REGSIZE == 8 ? 4 : 8; /* display cols per row */
1763 int col, byte, start_regnum = regnum;
1764
1765 /* For GP registers, we print a separate row of names above the vals */
1766 printf_filtered (" ");
1767 for (col = 0; col < ncols && regnum < NUM_REGS; regnum++)
1768 {
1769 if (*reg_names[regnum] == '\0')
1770 continue; /* unused register */
1771 if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT)
1772 break; /* end the row: reached FP register */
1773 printf_filtered (MIPS_REGSIZE == 8 ? "%17s" : "%9s",
1774 reg_names[regnum]);
1775 col++;
1776 }
1777 printf_filtered (start_regnum < MIPS_NUMREGS ? "\n R%-4d" : "\n ",
1778 start_regnum); /* print the R0 to R31 names */
1779
1780 regnum = start_regnum; /* go back to start of row */
1781 /* now print the values in hex, 4 or 8 to the row */
1782 for (col = 0; col < ncols && regnum < NUM_REGS; regnum++)
1783 {
1784 if (*reg_names[regnum] == '\0')
1785 continue; /* unused register */
1786 if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT)
1787 break; /* end row: reached FP register */
1788 /* OK: get the data in raw format. */
1789 if (read_relative_register_raw_bytes (regnum, raw_buffer))
1790 error ("can't read register %d (%s)", regnum, reg_names[regnum]);
1791 /* Now print the register value in hex, endian order. */
1792 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
1793 for (byte = 0; byte < REGISTER_RAW_SIZE (regnum); byte++)
1794 printf_filtered ("%02x", (unsigned char) raw_buffer[byte]);
1795 else
1796 for (byte = REGISTER_RAW_SIZE (regnum) - 1; byte >= 0; byte--)
1797 printf_filtered ("%02x", (unsigned char) raw_buffer[byte]);
1798 printf_filtered (" ");
1799 col++;
1800 }
1801 if (col > 0) /* ie. if we actually printed anything... */
1802 printf_filtered ("\n");
1803
1804 return regnum;
1805 }
1806
1807 /* MIPS_DO_REGISTERS_INFO(): called by "info register" command */
1808
1809 void
1810 mips_do_registers_info (regnum, fpregs)
1811 int regnum;
1812 int fpregs;
1813 {
1814 if (regnum != -1) /* do one specified register */
1815 {
1816 if (*(reg_names[regnum]) == '\0')
1817 error ("Not a valid register for the current processor type");
1818
1819 mips_print_register (regnum, 0);
1820 printf_filtered ("\n");
1821 }
1822 else /* do all (or most) registers */
1823 {
1824 regnum = 0;
1825 while (regnum < NUM_REGS)
1826 if (TYPE_CODE(REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT)
1827 if (fpregs) /* true for "INFO ALL-REGISTERS" command */
1828 regnum = do_fp_register_row (regnum); /* FP regs */
1829 else
1830 regnum += MIPS_NUMREGS; /* skip floating point regs */
1831 else
1832 regnum = do_gp_register_row (regnum); /* GP (int) regs */
1833 }
1834 }
1835
1836 /* Return number of args passed to a frame. described by FIP.
1837 Can return -1, meaning no way to tell. */
1838
1839 int
1840 mips_frame_num_args (frame)
1841 struct frame_info *frame;
1842 {
1843 #if 0 /* FIXME Use or lose this! */
1844 struct chain_info_t *p;
1845
1846 p = mips_find_cached_frame (FRAME_FP (frame));
1847 if (p->valid)
1848 return p->the_info.numargs;
1849 #endif
1850 return -1;
1851 }
1852
1853 /* Is this a branch with a delay slot? */
1854
1855 static int is_delayed PARAMS ((unsigned long));
1856
1857 static int
1858 is_delayed (insn)
1859 unsigned long insn;
1860 {
1861 int i;
1862 for (i = 0; i < NUMOPCODES; ++i)
1863 if (mips_opcodes[i].pinfo != INSN_MACRO
1864 && (insn & mips_opcodes[i].mask) == mips_opcodes[i].match)
1865 break;
1866 return (i < NUMOPCODES
1867 && (mips_opcodes[i].pinfo & (INSN_UNCOND_BRANCH_DELAY
1868 | INSN_COND_BRANCH_DELAY
1869 | INSN_COND_BRANCH_LIKELY)));
1870 }
1871
1872 int
1873 mips_step_skips_delay (pc)
1874 CORE_ADDR pc;
1875 {
1876 char buf[MIPS_INSTLEN];
1877
1878 /* There is no branch delay slot on MIPS16. */
1879 if (pc_is_mips16 (pc))
1880 return 0;
1881
1882 if (target_read_memory (pc, buf, MIPS_INSTLEN) != 0)
1883 /* If error reading memory, guess that it is not a delayed branch. */
1884 return 0;
1885 return is_delayed ((unsigned long)extract_unsigned_integer (buf, MIPS_INSTLEN));
1886 }
1887
1888
1889 /* Skip the PC past function prologue instructions (32-bit version).
1890 This is a helper function for mips_skip_prologue. */
1891
1892 static CORE_ADDR
1893 mips32_skip_prologue (pc, lenient)
1894 CORE_ADDR pc; /* starting PC to search from */
1895 int lenient;
1896 {
1897 t_inst inst;
1898 CORE_ADDR end_pc;
1899 int seen_sp_adjust = 0;
1900 int load_immediate_bytes = 0;
1901
1902 /* Skip the typical prologue instructions. These are the stack adjustment
1903 instruction and the instructions that save registers on the stack
1904 or in the gcc frame. */
1905 for (end_pc = pc + 100; pc < end_pc; pc += MIPS_INSTLEN)
1906 {
1907 unsigned long high_word;
1908
1909 inst = mips_fetch_instruction (pc);
1910 high_word = (inst >> 16) & 0xffff;
1911
1912 #if 0
1913 if (lenient && is_delayed (inst))
1914 continue;
1915 #endif
1916
1917 if (high_word == 0x27bd /* addiu $sp,$sp,offset */
1918 || high_word == 0x67bd) /* daddiu $sp,$sp,offset */
1919 seen_sp_adjust = 1;
1920 else if (inst == 0x03a1e823 || /* subu $sp,$sp,$at */
1921 inst == 0x03a8e823) /* subu $sp,$sp,$t0 */
1922 seen_sp_adjust = 1;
1923 else if (((inst & 0xFFE00000) == 0xAFA00000 /* sw reg,n($sp) */
1924 || (inst & 0xFFE00000) == 0xFFA00000) /* sd reg,n($sp) */
1925 && (inst & 0x001F0000)) /* reg != $zero */
1926 continue;
1927
1928 else if ((inst & 0xFFE00000) == 0xE7A00000) /* swc1 freg,n($sp) */
1929 continue;
1930 else if ((inst & 0xF3E00000) == 0xA3C00000 && (inst & 0x001F0000))
1931 /* sx reg,n($s8) */
1932 continue; /* reg != $zero */
1933
1934 /* move $s8,$sp. With different versions of gas this will be either
1935 `addu $s8,$sp,$zero' or `or $s8,$sp,$zero' or `daddu s8,sp,$0'.
1936 Accept any one of these. */
1937 else if (inst == 0x03A0F021 || inst == 0x03a0f025 || inst == 0x03a0f02d)
1938 continue;
1939
1940 else if ((inst & 0xFF9F07FF) == 0x00800021) /* move reg,$a0-$a3 */
1941 continue;
1942 else if (high_word == 0x3c1c) /* lui $gp,n */
1943 continue;
1944 else if (high_word == 0x279c) /* addiu $gp,$gp,n */
1945 continue;
1946 else if (inst == 0x0399e021 /* addu $gp,$gp,$t9 */
1947 || inst == 0x033ce021) /* addu $gp,$t9,$gp */
1948 continue;
1949 /* The following instructions load $at or $t0 with an immediate
1950 value in preparation for a stack adjustment via
1951 subu $sp,$sp,[$at,$t0]. These instructions could also initialize
1952 a local variable, so we accept them only before a stack adjustment
1953 instruction was seen. */
1954 else if (!seen_sp_adjust)
1955 {
1956 if (high_word == 0x3c01 || /* lui $at,n */
1957 high_word == 0x3c08) /* lui $t0,n */
1958 {
1959 load_immediate_bytes += MIPS_INSTLEN; /* FIXME!! */
1960 continue;
1961 }
1962 else if (high_word == 0x3421 || /* ori $at,$at,n */
1963 high_word == 0x3508 || /* ori $t0,$t0,n */
1964 high_word == 0x3401 || /* ori $at,$zero,n */
1965 high_word == 0x3408) /* ori $t0,$zero,n */
1966 {
1967 load_immediate_bytes += MIPS_INSTLEN; /* FIXME!! */
1968 continue;
1969 }
1970 else
1971 break;
1972 }
1973 else
1974 break;
1975 }
1976
1977 /* In a frameless function, we might have incorrectly
1978 skipped some load immediate instructions. Undo the skipping
1979 if the load immediate was not followed by a stack adjustment. */
1980 if (load_immediate_bytes && !seen_sp_adjust)
1981 pc -= load_immediate_bytes;
1982 return pc;
1983 }
1984
1985 /* Skip the PC past function prologue instructions (16-bit version).
1986 This is a helper function for mips_skip_prologue. */
1987
1988 static CORE_ADDR
1989 mips16_skip_prologue (pc, lenient)
1990 CORE_ADDR pc; /* starting PC to search from */
1991 int lenient;
1992 {
1993 CORE_ADDR end_pc;
1994 int extend_bytes = 0;
1995 int prev_extend_bytes;
1996
1997 /* Table of instructions likely to be found in a function prologue. */
1998 static struct
1999 {
2000 unsigned short inst;
2001 unsigned short mask;
2002 } table[] =
2003 {
2004 { 0x6300, 0xff00 }, /* addiu $sp,offset */
2005 { 0xfb00, 0xff00 }, /* daddiu $sp,offset */
2006 { 0xd000, 0xf800 }, /* sw reg,n($sp) */
2007 { 0xf900, 0xff00 }, /* sd reg,n($sp) */
2008 { 0x6200, 0xff00 }, /* sw $ra,n($sp) */
2009 { 0xfa00, 0xff00 }, /* sd $ra,n($sp) */
2010 { 0x673d, 0xffff }, /* move $s1,sp */
2011 { 0xd980, 0xff80 }, /* sw $a0-$a3,n($s1) */
2012 { 0x6704, 0xff1c }, /* move reg,$a0-$a3 */
2013 { 0xe809, 0xf81f }, /* entry pseudo-op */
2014 { 0x0100, 0xff00 }, /* addiu $s1,$sp,n */
2015 { 0, 0 } /* end of table marker */
2016 };
2017
2018 /* Skip the typical prologue instructions. These are the stack adjustment
2019 instruction and the instructions that save registers on the stack
2020 or in the gcc frame. */
2021 for (end_pc = pc + 100; pc < end_pc; pc += MIPS16_INSTLEN)
2022 {
2023 unsigned short inst;
2024 int i;
2025
2026 inst = mips_fetch_instruction (pc);
2027
2028 /* Normally we ignore an extend instruction. However, if it is
2029 not followed by a valid prologue instruction, we must adjust
2030 the pc back over the extend so that it won't be considered
2031 part of the prologue. */
2032 if ((inst & 0xf800) == 0xf000) /* extend */
2033 {
2034 extend_bytes = MIPS16_INSTLEN;
2035 continue;
2036 }
2037 prev_extend_bytes = extend_bytes;
2038 extend_bytes = 0;
2039
2040 /* Check for other valid prologue instructions besides extend. */
2041 for (i = 0; table[i].mask != 0; i++)
2042 if ((inst & table[i].mask) == table[i].inst) /* found, get out */
2043 break;
2044 if (table[i].mask != 0) /* it was in table? */
2045 continue; /* ignore it */
2046 else /* non-prologue */
2047 {
2048 /* Return the current pc, adjusted backwards by 2 if
2049 the previous instruction was an extend. */
2050 return pc - prev_extend_bytes;
2051 }
2052 }
2053 return pc;
2054 }
2055
2056 /* To skip prologues, I use this predicate. Returns either PC itself
2057 if the code at PC does not look like a function prologue; otherwise
2058 returns an address that (if we're lucky) follows the prologue. If
2059 LENIENT, then we must skip everything which is involved in setting
2060 up the frame (it's OK to skip more, just so long as we don't skip
2061 anything which might clobber the registers which are being saved.
2062 We must skip more in the case where part of the prologue is in the
2063 delay slot of a non-prologue instruction). */
2064
2065 CORE_ADDR
2066 mips_skip_prologue (pc, lenient)
2067 CORE_ADDR pc;
2068 int lenient;
2069 {
2070 /* See if we can determine the end of the prologue via the symbol table.
2071 If so, then return either PC, or the PC after the prologue, whichever
2072 is greater. */
2073
2074 CORE_ADDR post_prologue_pc = after_prologue (pc, NULL);
2075
2076 if (post_prologue_pc != 0)
2077 return max (pc, post_prologue_pc);
2078
2079 /* Can't determine prologue from the symbol table, need to examine
2080 instructions. */
2081
2082 if (pc_is_mips16 (pc))
2083 return mips16_skip_prologue (pc, lenient);
2084 else
2085 return mips32_skip_prologue (pc, lenient);
2086 }
2087
2088 #if 0
2089 /* The lenient prologue stuff should be superseded by the code in
2090 init_extra_frame_info which looks to see whether the stores mentioned
2091 in the proc_desc have actually taken place. */
2092
2093 /* Is address PC in the prologue (loosely defined) for function at
2094 STARTADDR? */
2095
2096 static int
2097 mips_in_lenient_prologue (startaddr, pc)
2098 CORE_ADDR startaddr;
2099 CORE_ADDR pc;
2100 {
2101 CORE_ADDR end_prologue = mips_skip_prologue (startaddr, 1);
2102 return pc >= startaddr && pc < end_prologue;
2103 }
2104 #endif
2105
2106 /* Given a return value in `regbuf' with a type `valtype',
2107 extract and copy its value into `valbuf'. */
2108 void
2109 mips_extract_return_value (valtype, regbuf, valbuf)
2110 struct type *valtype;
2111 char regbuf[REGISTER_BYTES];
2112 char *valbuf;
2113 {
2114 int regnum;
2115 int offset = 0;
2116 int len = TYPE_LENGTH (valtype);
2117
2118 regnum = 2;
2119 if (TYPE_CODE (valtype) == TYPE_CODE_FLT
2120 && (mips_fpu == MIPS_FPU_DOUBLE
2121 || (mips_fpu == MIPS_FPU_SINGLE && len <= MIPS_REGSIZE)))
2122 regnum = FP0_REGNUM;
2123
2124 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
2125 { /* "un-left-justify" the value from the register */
2126 if (len < REGISTER_RAW_SIZE (regnum))
2127 offset = REGISTER_RAW_SIZE (regnum) - len;
2128 if (len > REGISTER_RAW_SIZE (regnum) && /* odd-size structs */
2129 len < REGISTER_RAW_SIZE (regnum) * 2 &&
2130 (TYPE_CODE (valtype) == TYPE_CODE_STRUCT ||
2131 TYPE_CODE (valtype) == TYPE_CODE_UNION))
2132 offset = 2 * REGISTER_RAW_SIZE (regnum) - len;
2133 }
2134 memcpy (valbuf, regbuf + REGISTER_BYTE (regnum) + offset, len);
2135 REGISTER_CONVERT_TO_TYPE (regnum, valtype, valbuf);
2136 }
2137
2138 /* Given a return value in `regbuf' with a type `valtype',
2139 write it's value into the appropriate register. */
2140 void
2141 mips_store_return_value (valtype, valbuf)
2142 struct type *valtype;
2143 char *valbuf;
2144 {
2145 int regnum;
2146 int offset = 0;
2147 int len = TYPE_LENGTH (valtype);
2148 char raw_buffer[MAX_REGISTER_RAW_SIZE];
2149
2150 regnum = 2;
2151 if (TYPE_CODE (valtype) == TYPE_CODE_FLT
2152 && (mips_fpu == MIPS_FPU_DOUBLE
2153 || (mips_fpu == MIPS_FPU_SINGLE && len <= MIPS_REGSIZE)))
2154 regnum = FP0_REGNUM;
2155
2156 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
2157 { /* "left-justify" the value in the register */
2158 if (len < REGISTER_RAW_SIZE (regnum))
2159 offset = REGISTER_RAW_SIZE (regnum) - len;
2160 if (len > REGISTER_RAW_SIZE (regnum) && /* odd-size structs */
2161 len < REGISTER_RAW_SIZE (regnum) * 2 &&
2162 (TYPE_CODE (valtype) == TYPE_CODE_STRUCT ||
2163 TYPE_CODE (valtype) == TYPE_CODE_UNION))
2164 offset = 2 * REGISTER_RAW_SIZE (regnum) - len;
2165 }
2166 memcpy(raw_buffer + offset, valbuf, len);
2167 REGISTER_CONVERT_FROM_TYPE(regnum, valtype, raw_buffer);
2168 write_register_bytes(REGISTER_BYTE (regnum), raw_buffer,
2169 len > REGISTER_RAW_SIZE (regnum) ?
2170 len : REGISTER_RAW_SIZE (regnum));
2171 }
2172
2173 /* Exported procedure: Is PC in the signal trampoline code */
2174
2175 int
2176 in_sigtramp (pc, ignore)
2177 CORE_ADDR pc;
2178 char *ignore; /* function name */
2179 {
2180 if (sigtramp_address == 0)
2181 fixup_sigtramp ();
2182 return (pc >= sigtramp_address && pc < sigtramp_end);
2183 }
2184
2185 /* Command to set FPU type. mips_fpu_string will have been set to the
2186 user's argument. Set mips_fpu based on mips_fpu_string, and then
2187 canonicalize mips_fpu_string. */
2188
2189 /*ARGSUSED*/
2190 static void
2191 mips_set_fpu_command (args, from_tty, c)
2192 char *args;
2193 int from_tty;
2194 struct cmd_list_element *c;
2195 {
2196 char *err = NULL;
2197
2198 if (mips_fpu_string == NULL || *mips_fpu_string == '\0')
2199 mips_fpu = MIPS_FPU_DOUBLE;
2200 else if (strcasecmp (mips_fpu_string, "double") == 0
2201 || strcasecmp (mips_fpu_string, "on") == 0
2202 || strcasecmp (mips_fpu_string, "1") == 0
2203 || strcasecmp (mips_fpu_string, "yes") == 0)
2204 mips_fpu = MIPS_FPU_DOUBLE;
2205 else if (strcasecmp (mips_fpu_string, "none") == 0
2206 || strcasecmp (mips_fpu_string, "off") == 0
2207 || strcasecmp (mips_fpu_string, "0") == 0
2208 || strcasecmp (mips_fpu_string, "no") == 0)
2209 mips_fpu = MIPS_FPU_NONE;
2210 else if (strcasecmp (mips_fpu_string, "single") == 0)
2211 mips_fpu = MIPS_FPU_SINGLE;
2212 else
2213 err = strsave (mips_fpu_string);
2214
2215 if (mips_fpu_string != NULL)
2216 free (mips_fpu_string);
2217
2218 switch (mips_fpu)
2219 {
2220 case MIPS_FPU_DOUBLE:
2221 mips_fpu_string = strsave ("double");
2222 break;
2223 case MIPS_FPU_SINGLE:
2224 mips_fpu_string = strsave ("single");
2225 break;
2226 case MIPS_FPU_NONE:
2227 mips_fpu_string = strsave ("none");
2228 break;
2229 }
2230
2231 if (err != NULL)
2232 {
2233 struct cleanup *cleanups = make_cleanup (free, err);
2234 error ("Unknown FPU type `%s'. Use `double', `none', or `single'.",
2235 err);
2236 do_cleanups (cleanups);
2237 }
2238 }
2239
2240 static void
2241 mips_show_fpu_command (args, from_tty, c)
2242 char *args;
2243 int from_tty;
2244 struct cmd_list_element *c;
2245 {
2246 }
2247
2248 /* Command to set the processor type. */
2249
2250 void
2251 mips_set_processor_type_command (args, from_tty)
2252 char *args;
2253 int from_tty;
2254 {
2255 int i;
2256
2257 if (tmp_mips_processor_type == NULL || *tmp_mips_processor_type == '\0')
2258 {
2259 printf_unfiltered ("The known MIPS processor types are as follows:\n\n");
2260 for (i = 0; mips_processor_type_table[i].name != NULL; ++i)
2261 printf_unfiltered ("%s\n", mips_processor_type_table[i].name);
2262
2263 /* Restore the value. */
2264 tmp_mips_processor_type = strsave (mips_processor_type);
2265
2266 return;
2267 }
2268
2269 if (!mips_set_processor_type (tmp_mips_processor_type))
2270 {
2271 error ("Unknown processor type `%s'.", tmp_mips_processor_type);
2272 /* Restore its value. */
2273 tmp_mips_processor_type = strsave (mips_processor_type);
2274 }
2275 }
2276
2277 static void
2278 mips_show_processor_type_command (args, from_tty)
2279 char *args;
2280 int from_tty;
2281 {
2282 }
2283
2284 /* Modify the actual processor type. */
2285
2286 int
2287 mips_set_processor_type (str)
2288 char *str;
2289 {
2290 int i, j;
2291
2292 if (str == NULL)
2293 return 0;
2294
2295 for (i = 0; mips_processor_type_table[i].name != NULL; ++i)
2296 {
2297 if (strcasecmp (str, mips_processor_type_table[i].name) == 0)
2298 {
2299 mips_processor_type = str;
2300
2301 for (j = 0; j < NUM_REGS; ++j)
2302 reg_names[j] = mips_processor_type_table[i].regnames[j];
2303
2304 return 1;
2305
2306 /* FIXME tweak fpu flag too */
2307 }
2308 }
2309
2310 return 0;
2311 }
2312
2313 /* Attempt to identify the particular processor model by reading the
2314 processor id. */
2315
2316 char *
2317 mips_read_processor_type ()
2318 {
2319 CORE_ADDR prid;
2320
2321 prid = read_register (PRID_REGNUM);
2322
2323 if ((prid & ~0xf) == 0x700)
2324 return savestring ("r3041", strlen("r3041"));
2325
2326 return NULL;
2327 }
2328
2329 /* Just like reinit_frame_cache, but with the right arguments to be
2330 callable as an sfunc. */
2331
2332 static void
2333 reinit_frame_cache_sfunc (args, from_tty, c)
2334 char *args;
2335 int from_tty;
2336 struct cmd_list_element *c;
2337 {
2338 reinit_frame_cache ();
2339 }
2340
2341 static int
2342 gdb_print_insn_mips (memaddr, info)
2343 bfd_vma memaddr;
2344 disassemble_info *info;
2345 {
2346 mips_extra_func_info_t proc_desc;
2347
2348 /* Search for the function containing this address. Set the low bit
2349 of the address when searching, in case we were given an even address
2350 that is the start of a 16-bit function. If we didn't do this,
2351 the search would fail because the symbol table says the function
2352 starts at an odd address, i.e. 1 byte past the given address. */
2353 memaddr = ADDR_BITS_REMOVE (memaddr);
2354 proc_desc = non_heuristic_proc_desc (MAKE_MIPS16_ADDR (memaddr), NULL);
2355
2356 /* Make an attempt to determine if this is a 16-bit function. If
2357 the procedure descriptor exists and the address therein is odd,
2358 it's definitely a 16-bit function. Otherwise, we have to just
2359 guess that if the address passed in is odd, it's 16-bits. */
2360 if (proc_desc)
2361 info->mach = pc_is_mips16 (PROC_LOW_ADDR (proc_desc)) ? 16 : 0;
2362 else
2363 info->mach = pc_is_mips16 (memaddr) ? 16 : 0;
2364
2365 /* Round down the instruction address to the appropriate boundary. */
2366 memaddr &= (info->mach == 16 ? ~1 : ~3);
2367
2368 /* Call the appropriate disassembler based on the target endian-ness. */
2369 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
2370 return print_insn_big_mips (memaddr, info);
2371 else
2372 return print_insn_little_mips (memaddr, info);
2373 }
2374
2375 /* This function implements the BREAKPOINT_FROM_PC macro. It uses the program
2376 counter value to determine whether a 16- or 32-bit breakpoint should be
2377 used. It returns a pointer to a string of bytes that encode a breakpoint
2378 instruction, stores the length of the string to *lenptr, and adjusts pc
2379 (if necessary) to point to the actual memory location where the
2380 breakpoint should be inserted. */
2381
2382 unsigned char *mips_breakpoint_from_pc (pcptr, lenptr)
2383 CORE_ADDR *pcptr;
2384 int *lenptr;
2385 {
2386 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
2387 {
2388 if (pc_is_mips16 (*pcptr))
2389 {
2390 static char mips16_big_breakpoint[] = MIPS16_BIG_BREAKPOINT;
2391 *pcptr = UNMAKE_MIPS16_ADDR (*pcptr);
2392 *lenptr = sizeof(mips16_big_breakpoint);
2393 return mips16_big_breakpoint;
2394 }
2395 else
2396 {
2397 static char big_breakpoint[] = BIG_BREAKPOINT;
2398 static char pmon_big_breakpoint[] = PMON_BIG_BREAKPOINT;
2399 static char idt_big_breakpoint[] = IDT_BIG_BREAKPOINT;
2400
2401 *lenptr = sizeof(big_breakpoint);
2402
2403 if (strcmp (target_shortname, "mips") == 0)
2404 return idt_big_breakpoint;
2405 else if (strcmp (target_shortname, "ddb") == 0
2406 || strcmp (target_shortname, "pmon") == 0
2407 || strcmp (target_shortname, "lsi") == 0)
2408 return pmon_big_breakpoint;
2409 else
2410 return big_breakpoint;
2411 }
2412 }
2413 else
2414 {
2415 if (pc_is_mips16 (*pcptr))
2416 {
2417 static char mips16_little_breakpoint[] = MIPS16_LITTLE_BREAKPOINT;
2418 *pcptr = UNMAKE_MIPS16_ADDR (*pcptr);
2419 *lenptr = sizeof(mips16_little_breakpoint);
2420 return mips16_little_breakpoint;
2421 }
2422 else
2423 {
2424 static char little_breakpoint[] = LITTLE_BREAKPOINT;
2425 static char pmon_little_breakpoint[] = PMON_LITTLE_BREAKPOINT;
2426 static char idt_little_breakpoint[] = IDT_LITTLE_BREAKPOINT;
2427
2428 *lenptr = sizeof(little_breakpoint);
2429
2430 if (strcmp (target_shortname, "mips") == 0)
2431 return idt_little_breakpoint;
2432 else if (strcmp (target_shortname, "ddb") == 0
2433 || strcmp (target_shortname, "pmon") == 0
2434 || strcmp (target_shortname, "lsi") == 0)
2435 return pmon_little_breakpoint;
2436 else
2437 return little_breakpoint;
2438 }
2439 }
2440 }
2441
2442 /* Test whether the PC points to the return instruction at the
2443 end of a function. This implements the ABOUT_TO_RETURN macro. */
2444
2445 int
2446 mips_about_to_return (pc)
2447 CORE_ADDR pc;
2448 {
2449 if (pc_is_mips16 (pc))
2450 /* This mips16 case isn't necessarily reliable. Sometimes the compiler
2451 generates a "jr $ra"; other times it generates code to load
2452 the return address from the stack to an accessible register (such
2453 as $a3), then a "jr" using that register. This second case
2454 is almost impossible to distinguish from an indirect jump
2455 used for switch statements, so we don't even try. */
2456 return mips_fetch_instruction (pc) == 0xe820; /* jr $ra */
2457 else
2458 return mips_fetch_instruction (pc) == 0x3e00008; /* jr $ra */
2459 }
2460
2461
2462 /* If PC is in a mips16 call or return stub, return the address of the target
2463 PC, which is either the callee or the caller. There are several
2464 cases which must be handled:
2465
2466 * If the PC is in __mips16_ret_{d,s}f, this is a return stub and the
2467 target PC is in $31 ($ra).
2468 * If the PC is in __mips16_call_stub_{1..10}, this is a call stub
2469 and the target PC is in $2.
2470 * If the PC at the start of __mips16_call_stub_{s,d}f_{0..10}, i.e.
2471 before the jal instruction, this is effectively a call stub
2472 and the the target PC is in $2. Otherwise this is effectively
2473 a return stub and the target PC is in $18.
2474
2475 See the source code for the stubs in gcc/config/mips/mips16.S for
2476 gory details.
2477
2478 This function implements the SKIP_TRAMPOLINE_CODE macro.
2479 */
2480
2481 CORE_ADDR
2482 mips_skip_stub (pc)
2483 CORE_ADDR pc;
2484 {
2485 char *name;
2486 CORE_ADDR start_addr;
2487
2488 /* Find the starting address and name of the function containing the PC. */
2489 if (find_pc_partial_function (pc, &name, &start_addr, NULL) == 0)
2490 return 0;
2491
2492 /* If the PC is in __mips16_ret_{d,s}f, this is a return stub and the
2493 target PC is in $31 ($ra). */
2494 if (strcmp (name, "__mips16_ret_sf") == 0
2495 || strcmp (name, "__mips16_ret_df") == 0)
2496 return read_register (RA_REGNUM);
2497
2498 if (strncmp (name, "__mips16_call_stub_", 19) == 0)
2499 {
2500 /* If the PC is in __mips16_call_stub_{1..10}, this is a call stub
2501 and the target PC is in $2. */
2502 if (name[19] >= '0' && name[19] <= '9')
2503 return read_register (2);
2504
2505 /* If the PC at the start of __mips16_call_stub_{s,d}f_{0..10}, i.e.
2506 before the jal instruction, this is effectively a call stub
2507 and the the target PC is in $2. Otherwise this is effectively
2508 a return stub and the target PC is in $18. */
2509 else if (name[19] == 's' || name[19] == 'd')
2510 {
2511 if (pc == start_addr)
2512 {
2513 /* Check if the target of the stub is a compiler-generated
2514 stub. Such a stub for a function bar might have a name
2515 like __fn_stub_bar, and might look like this:
2516 mfc1 $4,$f13
2517 mfc1 $5,$f12
2518 mfc1 $6,$f15
2519 mfc1 $7,$f14
2520 la $1,bar (becomes a lui/addiu pair)
2521 jr $1
2522 So scan down to the lui/addi and extract the target
2523 address from those two instructions. */
2524
2525 CORE_ADDR target_pc = read_register (2);
2526 t_inst inst;
2527 int i;
2528
2529 /* See if the name of the target function is __fn_stub_*. */
2530 if (find_pc_partial_function (target_pc, &name, NULL, NULL) == 0)
2531 return target_pc;
2532 if (strncmp (name, "__fn_stub_", 10) != 0
2533 && strcmp (name, "etext") != 0
2534 && strcmp (name, "_etext") != 0)
2535 return target_pc;
2536
2537 /* Scan through this _fn_stub_ code for the lui/addiu pair.
2538 The limit on the search is arbitrarily set to 20
2539 instructions. FIXME. */
2540 for (i = 0, pc = 0; i < 20; i++, target_pc += MIPS_INSTLEN)
2541 {
2542 inst = mips_fetch_instruction (target_pc);
2543 if ((inst & 0xffff0000) == 0x3c010000) /* lui $at */
2544 pc = (inst << 16) & 0xffff0000; /* high word */
2545 else if ((inst & 0xffff0000) == 0x24210000) /* addiu $at */
2546 return pc | (inst & 0xffff); /* low word */
2547 }
2548
2549 /* Couldn't find the lui/addui pair, so return stub address. */
2550 return target_pc;
2551 }
2552 else
2553 /* This is the 'return' part of a call stub. The return
2554 address is in $r18. */
2555 return read_register (18);
2556 }
2557 }
2558 return 0; /* not a stub */
2559 }
2560
2561
2562 /* Return non-zero if the PC is inside a call thunk (aka stub or trampoline).
2563 This implements the IN_SOLIB_CALL_TRAMPOLINE macro. */
2564
2565 int
2566 mips_in_call_stub (pc, name)
2567 CORE_ADDR pc;
2568 char *name;
2569 {
2570 CORE_ADDR start_addr;
2571
2572 /* Find the starting address of the function containing the PC. If the
2573 caller didn't give us a name, look it up at the same time. */
2574 if (find_pc_partial_function (pc, name ? NULL : &name, &start_addr, NULL) == 0)
2575 return 0;
2576
2577 if (strncmp (name, "__mips16_call_stub_", 19) == 0)
2578 {
2579 /* If the PC is in __mips16_call_stub_{1..10}, this is a call stub. */
2580 if (name[19] >= '0' && name[19] <= '9')
2581 return 1;
2582 /* If the PC at the start of __mips16_call_stub_{s,d}f_{0..10}, i.e.
2583 before the jal instruction, this is effectively a call stub. */
2584 else if (name[19] == 's' || name[19] == 'd')
2585 return pc == start_addr;
2586 }
2587
2588 return 0; /* not a stub */
2589 }
2590
2591
2592 /* Return non-zero if the PC is inside a return thunk (aka stub or trampoline).
2593 This implements the IN_SOLIB_RETURN_TRAMPOLINE macro. */
2594
2595 int
2596 mips_in_return_stub (pc, name)
2597 CORE_ADDR pc;
2598 char *name;
2599 {
2600 CORE_ADDR start_addr;
2601
2602 /* Find the starting address of the function containing the PC. */
2603 if (find_pc_partial_function (pc, NULL, &start_addr, NULL) == 0)
2604 return 0;
2605
2606 /* If the PC is in __mips16_ret_{d,s}f, this is a return stub. */
2607 if (strcmp (name, "__mips16_ret_sf") == 0
2608 || strcmp (name, "__mips16_ret_df") == 0)
2609 return 1;
2610
2611 /* If the PC is in __mips16_call_stub_{s,d}f_{0..10} but not at the start,
2612 i.e. after the jal instruction, this is effectively a return stub. */
2613 if (strncmp (name, "__mips16_call_stub_", 19) == 0
2614 && (name[19] == 's' || name[19] == 'd')
2615 && pc != start_addr)
2616 return 1;
2617
2618 return 0; /* not a stub */
2619 }
2620
2621
2622 /* Return non-zero if the PC is in a library helper function that should
2623 be ignored. This implements the IGNORE_HELPER_CALL macro. */
2624
2625 int
2626 mips_ignore_helper (pc)
2627 CORE_ADDR pc;
2628 {
2629 char *name;
2630
2631 /* Find the starting address and name of the function containing the PC. */
2632 if (find_pc_partial_function (pc, &name, NULL, NULL) == 0)
2633 return 0;
2634
2635 /* If the PC is in __mips16_ret_{d,s}f, this is a library helper function
2636 that we want to ignore. */
2637 return (strcmp (name, "__mips16_ret_sf") == 0
2638 || strcmp (name, "__mips16_ret_df") == 0);
2639 }
2640
2641
2642 void
2643 _initialize_mips_tdep ()
2644 {
2645 struct cmd_list_element *c;
2646
2647 tm_print_insn = gdb_print_insn_mips;
2648
2649 /* Let the user turn off floating point and set the fence post for
2650 heuristic_proc_start. */
2651
2652 c = add_set_cmd ("mipsfpu", class_support, var_string_noescape,
2653 (char *) &mips_fpu_string,
2654 "Set use of floating point coprocessor.\n\
2655 Set to `none' to avoid using floating point instructions when calling\n\
2656 functions or dealing with return values. Set to `single' to use only\n\
2657 single precision floating point as on the R4650. Set to `double' for\n\
2658 normal floating point support.",
2659 &setlist);
2660 c->function.sfunc = mips_set_fpu_command;
2661 c = add_show_from_set (c, &showlist);
2662 c->function.sfunc = mips_show_fpu_command;
2663
2664 #ifndef MIPS_DEFAULT_FPU_TYPE
2665 mips_fpu = MIPS_FPU_DOUBLE;
2666 mips_fpu_string = strsave ("double");
2667 #else
2668 mips_fpu = MIPS_DEFAULT_FPU_TYPE;
2669 switch (mips_fpu)
2670 {
2671 case MIPS_FPU_DOUBLE: mips_fpu_string = strsave ("double"); break;
2672 case MIPS_FPU_SINGLE: mips_fpu_string = strsave ("single"); break;
2673 case MIPS_FPU_NONE: mips_fpu_string = strsave ("none"); break;
2674 }
2675 #endif
2676
2677 c = add_set_cmd ("processor", class_support, var_string_noescape,
2678 (char *) &tmp_mips_processor_type,
2679 "Set the type of MIPS processor in use.\n\
2680 Set this to be able to access processor-type-specific registers.\n\
2681 ",
2682 &setlist);
2683 c->function.cfunc = mips_set_processor_type_command;
2684 c = add_show_from_set (c, &showlist);
2685 c->function.cfunc = mips_show_processor_type_command;
2686
2687 tmp_mips_processor_type = strsave (DEFAULT_MIPS_TYPE);
2688 mips_set_processor_type_command (strsave (DEFAULT_MIPS_TYPE), 0);
2689
2690 /* We really would like to have both "0" and "unlimited" work, but
2691 command.c doesn't deal with that. So make it a var_zinteger
2692 because the user can always use "999999" or some such for unlimited. */
2693 c = add_set_cmd ("heuristic-fence-post", class_support, var_zinteger,
2694 (char *) &heuristic_fence_post,
2695 "\
2696 Set the distance searched for the start of a function.\n\
2697 If you are debugging a stripped executable, GDB needs to search through the\n\
2698 program for the start of a function. This command sets the distance of the\n\
2699 search. The only need to set it is when debugging a stripped executable.",
2700 &setlist);
2701 /* We need to throw away the frame cache when we set this, since it
2702 might change our ability to get backtraces. */
2703 c->function.sfunc = reinit_frame_cache_sfunc;
2704 add_show_from_set (c, &showlist);
2705 }
This page took 0.088485 seconds and 4 git commands to generate.