1 /* Target-dependent code for the MIPS architecture, for GDB, the GNU Debugger.
2 Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995
3 Free Software Foundation, Inc.
7 This file is part of GDB.
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.
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.
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. */
24 #include "gdb_string.h"
37 #include "opcode/mips.h"
39 #define VM_MIN_ADDRESS (CORE_ADDR)0x400000
41 /* FIXME: Put this declaration in frame.h. */
42 extern struct obstack frame_cache_obstack;
44 /* FIXME! this code assumes 4-byte instructions. */
45 #define MIPS_INSTLEN 4 /* Length of an instruction */
46 #define MIPS_NUMREGS 32 /* Number of integer or float registers */
47 typedef unsigned long t_inst; /* Integer big enough to hold an instruction */
50 static int mips_in_lenient_prologue PARAMS ((CORE_ADDR, CORE_ADDR));
53 static int gdb_print_insn_mips PARAMS ((bfd_vma, disassemble_info *));
55 static void mips_print_register PARAMS ((int, int));
57 static mips_extra_func_info_t
58 heuristic_proc_desc PARAMS ((CORE_ADDR, CORE_ADDR, struct frame_info *));
60 static CORE_ADDR heuristic_proc_start PARAMS ((CORE_ADDR));
62 static CORE_ADDR read_next_frame_reg PARAMS ((struct frame_info *, int));
64 static void mips_set_fpu_command PARAMS ((char *, int,
65 struct cmd_list_element *));
67 static void mips_show_fpu_command PARAMS ((char *, int,
68 struct cmd_list_element *));
70 void mips_set_processor_type_command PARAMS ((char *, int));
72 int mips_set_processor_type PARAMS ((char *));
74 static void mips_show_processor_type_command PARAMS ((char *, int));
76 static void reinit_frame_cache_sfunc PARAMS ((char *, int,
77 struct cmd_list_element *));
79 static mips_extra_func_info_t
80 find_proc_desc PARAMS ((CORE_ADDR pc, struct frame_info *next_frame));
82 static CORE_ADDR after_prologue PARAMS ((CORE_ADDR pc,
83 mips_extra_func_info_t proc_desc));
85 /* This value is the model of MIPS in use. It is derived from the value
86 of the PrID register. */
88 char *mips_processor_type;
90 char *tmp_mips_processor_type;
92 /* Some MIPS boards don't support floating point, so we permit the
93 user to turn it off. */
95 enum mips_fpu_type mips_fpu;
97 static char *mips_fpu_string;
99 /* A set of original names, to be used when restoring back to generic
100 registers from a specific set. */
102 char *mips_generic_reg_names[] = REGISTER_NAMES;
104 /* Names of IDT R3041 registers. */
106 char *mips_r3041_reg_names[] = {
107 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
108 "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7",
109 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
110 "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra",
111 "sr", "lo", "hi", "bad", "cause","pc",
112 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
113 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
114 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
115 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
116 "fsr", "fir", "fp", "",
117 "", "", "bus", "ccfg", "", "", "", "",
118 "", "", "port", "cmp", "", "", "epc", "prid",
121 /* Names of IDT R3051 registers. */
123 char *mips_r3051_reg_names[] = {
124 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
125 "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7",
126 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
127 "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra",
128 "sr", "lo", "hi", "bad", "cause","pc",
129 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
130 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
131 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
132 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
133 "fsr", "fir", "fp", "",
134 "inx", "rand", "elo", "", "ctxt", "", "", "",
135 "", "", "ehi", "", "", "", "epc", "prid",
138 /* Names of IDT R3081 registers. */
140 char *mips_r3081_reg_names[] = {
141 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
142 "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7",
143 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
144 "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra",
145 "sr", "lo", "hi", "bad", "cause","pc",
146 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
147 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
148 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
149 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
150 "fsr", "fir", "fp", "",
151 "inx", "rand", "elo", "cfg", "ctxt", "", "", "",
152 "", "", "ehi", "", "", "", "epc", "prid",
155 /* Names of LSI 33k registers. */
157 char *mips_lsi33k_reg_names[] = {
158 "zero", "at", "v0", "v1", "a0", "a1", "a2", "a3",
159 "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7",
160 "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
161 "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra",
162 "epc", "hi", "lo", "sr", "cause","badvaddr",
163 "dcic", "bpc", "bda", "", "", "", "", "",
164 "", "", "", "", "", "", "", "",
165 "", "", "", "", "", "", "", "",
166 "", "", "", "", "", "", "", "",
168 "", "", "", "", "", "", "", "",
169 "", "", "", "", "", "", "", "",
175 } mips_processor_type_table[] = {
176 { "generic", mips_generic_reg_names },
177 { "r3041", mips_r3041_reg_names },
178 { "r3051", mips_r3051_reg_names },
179 { "r3071", mips_r3081_reg_names },
180 { "r3081", mips_r3081_reg_names },
181 { "lsi33k", mips_lsi33k_reg_names },
185 /* Heuristic_proc_start may hunt through the text section for a long
186 time across a 2400 baud serial line. Allows the user to limit this
189 static unsigned int heuristic_fence_post = 0;
191 #define PROC_LOW_ADDR(proc) ((proc)->pdr.adr) /* least address */
192 #define PROC_HIGH_ADDR(proc) ((proc)->high_addr) /* upper address bound */
193 #define PROC_FRAME_OFFSET(proc) ((proc)->pdr.frameoffset)
194 #define PROC_FRAME_REG(proc) ((proc)->pdr.framereg)
195 #define PROC_REG_MASK(proc) ((proc)->pdr.regmask)
196 #define PROC_FREG_MASK(proc) ((proc)->pdr.fregmask)
197 #define PROC_REG_OFFSET(proc) ((proc)->pdr.regoffset)
198 #define PROC_FREG_OFFSET(proc) ((proc)->pdr.fregoffset)
199 #define PROC_PC_REG(proc) ((proc)->pdr.pcreg)
200 #define PROC_SYMBOL(proc) (*(struct symbol**)&(proc)->pdr.isym)
201 #define _PROC_MAGIC_ 0x0F0F0F0F
202 #define PROC_DESC_IS_DUMMY(proc) ((proc)->pdr.isym == _PROC_MAGIC_)
203 #define SET_PROC_DESC_IS_DUMMY(proc) ((proc)->pdr.isym = _PROC_MAGIC_)
205 struct linked_proc_info
207 struct mips_extra_func_info info;
208 struct linked_proc_info *next;
209 } *linked_proc_desc_table = NULL;
212 /* This returns the PC of the first inst after the prologue. If we can't
213 find the prologue, then return 0. */
216 after_prologue (pc, proc_desc)
218 mips_extra_func_info_t proc_desc;
220 struct symtab_and_line sal;
221 CORE_ADDR func_addr, func_end;
224 proc_desc = find_proc_desc (pc, NULL);
228 /* If function is frameless, then we need to do it the hard way. I
229 strongly suspect that frameless always means prologueless... */
230 if (PROC_FRAME_REG (proc_desc) == SP_REGNUM
231 && PROC_FRAME_OFFSET (proc_desc) == 0)
235 if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
236 return 0; /* Unknown */
238 sal = find_pc_line (func_addr, 0);
240 if (sal.end < func_end)
243 /* The line after the prologue is after the end of the function. In this
244 case, tell the caller to find the prologue the hard way. */
249 /* Guaranteed to set fci->saved_regs to some values (it never leaves it
253 mips_find_saved_regs (fci)
254 struct frame_info *fci;
257 CORE_ADDR reg_position;
258 /* r0 bit means kernel trap */
260 /* What registers have been saved? Bitmasks. */
261 unsigned long gen_mask, float_mask;
262 mips_extra_func_info_t proc_desc;
264 fci->saved_regs = (struct frame_saved_regs *)
265 obstack_alloc (&frame_cache_obstack, sizeof(struct frame_saved_regs));
266 memset (fci->saved_regs, 0, sizeof (struct frame_saved_regs));
268 /* If it is the frame for sigtramp, the saved registers are located
269 in a sigcontext structure somewhere on the stack.
270 If the stack layout for sigtramp changes we might have to change these
271 constants and the companion fixup_sigtramp in mdebugread.c */
272 #ifndef SIGFRAME_BASE
273 /* To satisfy alignment restrictions, sigcontext is located 4 bytes
274 above the sigtramp frame. */
275 #define SIGFRAME_BASE MIPS_REGSIZE
276 /* FIXME! Are these correct?? */
277 #define SIGFRAME_PC_OFF (SIGFRAME_BASE + 2 * MIPS_REGSIZE)
278 #define SIGFRAME_REGSAVE_OFF (SIGFRAME_BASE + 3 * MIPS_REGSIZE)
279 #define SIGFRAME_FPREGSAVE_OFF \
280 (SIGFRAME_REGSAVE_OFF + MIPS_NUMREGS * MIPS_REGSIZE + 3 * MIPS_REGSIZE)
282 #ifndef SIGFRAME_REG_SIZE
283 /* FIXME! Is this correct?? */
284 #define SIGFRAME_REG_SIZE MIPS_REGSIZE
286 if (fci->signal_handler_caller)
288 for (ireg = 0; ireg < MIPS_NUMREGS; ireg++)
290 reg_position = fci->frame + SIGFRAME_REGSAVE_OFF
291 + ireg * SIGFRAME_REG_SIZE;
292 fci->saved_regs->regs[ireg] = reg_position;
294 for (ireg = 0; ireg < MIPS_NUMREGS; ireg++)
296 reg_position = fci->frame + SIGFRAME_FPREGSAVE_OFF
297 + ireg * SIGFRAME_REG_SIZE;
298 fci->saved_regs->regs[FP0_REGNUM + ireg] = reg_position;
300 fci->saved_regs->regs[PC_REGNUM] = fci->frame + SIGFRAME_PC_OFF;
304 proc_desc = fci->proc_desc;
305 if (proc_desc == NULL)
306 /* I'm not sure how/whether this can happen. Normally when we can't
307 find a proc_desc, we "synthesize" one using heuristic_proc_desc
308 and set the saved_regs right away. */
311 kernel_trap = PROC_REG_MASK(proc_desc) & 1;
312 gen_mask = kernel_trap ? 0xFFFFFFFF : PROC_REG_MASK(proc_desc);
313 float_mask = kernel_trap ? 0xFFFFFFFF : PROC_FREG_MASK(proc_desc);
315 if (/* In any frame other than the innermost, we assume that all
316 registers have been saved. This assumes that all register
317 saves in a function happen before the first function
321 /* In a dummy frame we know exactly where things are saved. */
322 && !PROC_DESC_IS_DUMMY (proc_desc)
324 /* Don't bother unless we are inside a function prologue. Outside the
325 prologue, we know where everything is. */
327 && in_prologue (fci->pc, PROC_LOW_ADDR (proc_desc))
329 /* Not sure exactly what kernel_trap means, but if it means
330 the kernel saves the registers without a prologue doing it,
331 we better not examine the prologue to see whether registers
332 have been saved yet. */
335 /* We need to figure out whether the registers that the proc_desc
336 claims are saved have been saved yet. */
340 char buf[MIPS_INSTLEN];
343 /* Bitmasks; set if we have found a save for the register. */
344 unsigned long gen_save_found = 0;
345 unsigned long float_save_found = 0;
347 for (addr = PROC_LOW_ADDR (proc_desc);
348 addr < fci->pc /*&& (gen_mask != gen_save_found
349 || float_mask != float_save_found)*/;
350 addr += MIPS_INSTLEN)
352 status = read_memory_nobpt (addr, buf, MIPS_INSTLEN);
354 memory_error (status, addr);
355 inst = extract_unsigned_integer (buf, MIPS_INSTLEN);
356 if (/* sw reg,n($sp) */
357 (inst & 0xffe00000) == 0xafa00000
360 || (inst & 0xffe00000) == 0xafc00000
363 || (inst & 0xffe00000) == 0xffa00000)
365 /* It might be possible to use the instruction to
366 find the offset, rather than the code below which
367 is based on things being in a certain order in the
368 frame, but figuring out what the instruction's offset
369 is relative to might be a little tricky. */
370 int reg = (inst & 0x001f0000) >> 16;
371 gen_save_found |= (1 << reg);
373 else if (/* swc1 freg,n($sp) */
374 (inst & 0xffe00000) == 0xe7a00000
376 /* swc1 freg,n($r30) */
377 || (inst & 0xffe00000) == 0xe7c00000
379 /* sdc1 freg,n($sp) */
380 || (inst & 0xffe00000) == 0xf7a00000)
383 int reg = ((inst & 0x001f0000) >> 16);
384 float_save_found |= (1 << reg);
387 gen_mask = gen_save_found;
388 float_mask = float_save_found;
391 /* Fill in the offsets for the registers which gen_mask says
393 reg_position = fci->frame + PROC_REG_OFFSET (proc_desc);
394 for (ireg= MIPS_NUMREGS-1; gen_mask; --ireg, gen_mask <<= 1)
395 if (gen_mask & 0x80000000)
397 fci->saved_regs->regs[ireg] = reg_position;
398 reg_position -= MIPS_REGSIZE;
400 /* Fill in the offsets for the registers which float_mask says
402 reg_position = fci->frame + PROC_FREG_OFFSET (proc_desc);
404 /* The freg_offset points to where the first *double* register
405 is saved. So skip to the high-order word. */
406 if (! GDB_TARGET_IS_MIPS64)
409 /* FIXME! this code looks scary...
410 * Looks like it's trying to do stuff with a register,
413 for (ireg = MIPS_NUMREGS-1; float_mask; --ireg, float_mask <<= 1)
414 if (float_mask & 0x80000000)
416 fci->saved_regs->regs[FP0_REGNUM+ireg] = reg_position;
417 reg_position -= MIPS_REGSIZE;
420 fci->saved_regs->regs[PC_REGNUM] = fci->saved_regs->regs[RA_REGNUM];
424 read_next_frame_reg(fi, regno)
425 struct frame_info *fi;
428 for (; fi; fi = fi->next)
430 /* We have to get the saved sp from the sigcontext
431 if it is a signal handler frame. */
432 if (regno == SP_REGNUM && !fi->signal_handler_caller)
436 if (fi->saved_regs == NULL)
437 mips_find_saved_regs (fi);
438 if (fi->saved_regs->regs[regno])
439 return read_memory_integer(fi->saved_regs->regs[regno], MIPS_REGSIZE);
442 return read_register (regno);
445 /* mips_addr_bits_remove - remove useless address bits */
448 mips_addr_bits_remove (addr)
451 if (GDB_TARGET_IS_MIPS64
452 && (addr >> 32 == (CORE_ADDR)0xffffffff)
453 && (strcmp(target_shortname,"pmon")==0
454 || strcmp(target_shortname,"ddb")==0
455 || strcmp(target_shortname,"sim")==0))
457 /* This hack is a work-around for existing boards using PMON,
458 the simulator, and any other 64-bit targets that doesn't have
459 true 64-bit addressing. On these targets, the upper 32 bits
460 of addresses are ignored by the hardware. Thus, the PC or SP
461 are likely to have been sign extended to all 1s by instruction
462 sequences that load 32-bit addresses. For example, a typical
463 piece of code that loads an address is this:
464 lui $r2, <upper 16 bits>
465 ori $r2, <lower 16 bits>
466 But the lui sign-extends the value such that the upper 32 bits
467 may be all 1s. The workaround is simply to mask off these bits.
468 In the future, gcc may be changed to support true 64-bit
469 addressing, and this masking will have to be disabled. */
470 addr &= (CORE_ADDR)0xffffffff;
477 mips_frame_saved_pc(frame)
478 struct frame_info *frame;
481 mips_extra_func_info_t proc_desc = frame->proc_desc;
482 /* We have to get the saved pc from the sigcontext
483 if it is a signal handler frame. */
484 int pcreg = frame->signal_handler_caller ? PC_REGNUM
485 : (proc_desc ? PROC_PC_REG(proc_desc) : RA_REGNUM);
487 if (proc_desc && PROC_DESC_IS_DUMMY(proc_desc))
488 saved_pc = read_memory_integer(frame->frame - MIPS_REGSIZE, MIPS_REGSIZE);
490 saved_pc = read_next_frame_reg(frame, pcreg);
492 return ADDR_BITS_REMOVE (saved_pc);
495 static struct mips_extra_func_info temp_proc_desc;
496 static struct frame_saved_regs temp_saved_regs;
498 /* This fencepost looks highly suspicious to me. Removing it also
499 seems suspicious as it could affect remote debugging across serial
503 heuristic_proc_start(pc)
506 CORE_ADDR start_pc = pc;
507 CORE_ADDR fence = start_pc - heuristic_fence_post;
509 if (start_pc == 0) return 0;
511 if (heuristic_fence_post == UINT_MAX
512 || fence < VM_MIN_ADDRESS)
513 fence = VM_MIN_ADDRESS;
515 /* search back for previous return */
516 for (start_pc -= MIPS_INSTLEN; ; start_pc -= MIPS_INSTLEN) /* FIXME!! */
517 if (start_pc < fence)
519 /* It's not clear to me why we reach this point when
520 stop_soon_quietly, but with this test, at least we
521 don't print out warnings for every child forked (eg, on
523 if (!stop_soon_quietly)
525 static int blurb_printed = 0;
527 if (fence == VM_MIN_ADDRESS)
528 warning("Hit beginning of text section without finding");
530 warning("Hit heuristic-fence-post without finding");
532 warning("enclosing function for address 0x%s", paddr (pc));
536 This warning occurs if you are debugging a function without any symbols\n\
537 (for example, in a stripped executable). In that case, you may wish to\n\
538 increase the size of the search with the `set heuristic-fence-post' command.\n\
540 Otherwise, you told GDB there was a function where there isn't one, or\n\
541 (more likely) you have encountered a bug in GDB.\n");
548 else if (ABOUT_TO_RETURN(start_pc))
551 start_pc += 2 * MIPS_INSTLEN; /* skip return, and its delay slot */
553 /* skip nops (usually 1) 0 - is this */
554 while (start_pc < pc && read_memory_integer (start_pc, MIPS_INSTLEN) == 0)
555 start_pc += MIPS_INSTLEN;
560 static mips_extra_func_info_t
561 heuristic_proc_desc(start_pc, limit_pc, next_frame)
562 CORE_ADDR start_pc, limit_pc;
563 struct frame_info *next_frame;
565 CORE_ADDR sp = read_next_frame_reg (next_frame, SP_REGNUM);
567 unsigned long frame_size;
568 int has_frame_reg = 0;
569 CORE_ADDR reg30 = 0; /* Value of $r30. Used by gcc for frame-pointer */
570 unsigned long reg_mask = 0;
572 if (start_pc == 0) return NULL;
573 memset (&temp_proc_desc, '\0', sizeof(temp_proc_desc));
574 memset (&temp_saved_regs, '\0', sizeof(struct frame_saved_regs));
575 PROC_LOW_ADDR (&temp_proc_desc) = start_pc;
577 if (start_pc + 200 < limit_pc)
578 limit_pc = start_pc + 200;
581 for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += MIPS_INSTLEN) {
582 char buf[MIPS_INSTLEN];
586 status = (unsigned long) read_memory_nobpt (cur_pc, buf, MIPS_INSTLEN); /* FIXME!! */
587 if (status) memory_error (status, cur_pc);
588 word = (unsigned long) extract_unsigned_integer (buf, MIPS_INSTLEN); /* FIXME!! */
590 if ((word & 0xFFFF0000) == 0x27bd0000 /* addiu $sp,$sp,-i */
591 || (word & 0xFFFF0000) == 0x23bd0000 /* addi $sp,$sp,-i */
592 || (word & 0xFFFF0000) == 0x67bd0000) /* daddiu $sp,$sp,-i */
593 frame_size += (-word) & 0xFFFF;
594 else if ((word & 0xFFE00000) == 0xafa00000 /* sw reg,offset($sp) */
595 || (word & 0xFFE00000) == 0xffa00000) { /* sd reg,offset($sp) */
596 int reg = (word & 0x001F0000) >> 16;
597 reg_mask |= 1 << reg;
598 temp_saved_regs.regs[reg] = sp + (word & 0xffff);
600 else if ((word & 0xFFFF0000) == 0x27be0000) { /* addiu $30,$sp,size */
601 if ((word & 0xffff) != frame_size)
602 reg30 = sp + (word & 0xffff);
603 else if (!has_frame_reg) {
604 unsigned alloca_adjust;
606 reg30 = read_next_frame_reg(next_frame, 30);
607 alloca_adjust = (unsigned)(reg30 - (sp + (word & 0xffff)));
608 if (alloca_adjust > 0) {
609 /* FP > SP + frame_size. This may be because
610 * of an alloca or somethings similar.
611 * Fix sp to "pre-alloca" value, and try again.
618 else if ((word & 0xFFE00000) == 0xafc00000) { /* sw reg,offset($30) */
619 int reg = (word & 0x001F0000) >> 16;
620 reg_mask |= 1 << reg;
621 temp_saved_regs.regs[reg] = reg30 + (word & 0xffff);
625 PROC_FRAME_REG(&temp_proc_desc) = 30;
626 PROC_FRAME_OFFSET(&temp_proc_desc) = 0;
629 PROC_FRAME_REG(&temp_proc_desc) = SP_REGNUM;
630 PROC_FRAME_OFFSET(&temp_proc_desc) = frame_size;
632 PROC_REG_MASK(&temp_proc_desc) = reg_mask;
633 PROC_PC_REG(&temp_proc_desc) = RA_REGNUM;
634 return &temp_proc_desc;
637 static mips_extra_func_info_t
638 find_proc_desc (pc, next_frame)
640 struct frame_info *next_frame;
642 mips_extra_func_info_t proc_desc;
643 struct block *b = block_for_pc(pc);
647 find_pc_partial_function (pc, NULL, &startaddr, NULL);
652 if (startaddr > BLOCK_START (b))
653 /* This is the "pathological" case referred to in a comment in
654 print_frame_info. It might be better to move this check into
658 sym = lookup_symbol (MIPS_EFI_SYMBOL_NAME, b, LABEL_NAMESPACE,
662 /* If we never found a PDR for this function in symbol reading, then
663 examine prologues to find the information. */
664 if (sym && ((mips_extra_func_info_t) SYMBOL_VALUE (sym))->pdr.framereg == -1)
669 /* IF this is the topmost frame AND
670 * (this proc does not have debugging information OR
671 * the PC is in the procedure prologue)
672 * THEN create a "heuristic" proc_desc (by analyzing
673 * the actual code) to replace the "official" proc_desc.
675 proc_desc = (mips_extra_func_info_t) SYMBOL_VALUE (sym);
676 if (next_frame == NULL) {
677 struct symtab_and_line val;
678 struct symbol *proc_symbol =
679 PROC_DESC_IS_DUMMY(proc_desc) ? 0 : PROC_SYMBOL(proc_desc);
682 val = find_pc_line (BLOCK_START
683 (SYMBOL_BLOCK_VALUE(proc_symbol)),
685 val.pc = val.end ? val.end : pc;
687 if (!proc_symbol || pc < val.pc) {
688 mips_extra_func_info_t found_heuristic =
689 heuristic_proc_desc (PROC_LOW_ADDR (proc_desc),
692 proc_desc = found_heuristic;
698 /* Is linked_proc_desc_table really necessary? It only seems to be used
699 by procedure call dummys. However, the procedures being called ought
700 to have their own proc_descs, and even if they don't,
701 heuristic_proc_desc knows how to create them! */
703 register struct linked_proc_info *link;
705 for (link = linked_proc_desc_table; link; link = link->next)
706 if (PROC_LOW_ADDR(&link->info) <= pc
707 && PROC_HIGH_ADDR(&link->info) > pc)
711 startaddr = heuristic_proc_start (pc);
714 heuristic_proc_desc (startaddr, pc, next_frame);
720 get_frame_pointer(frame, proc_desc)
721 struct frame_info *frame;
722 mips_extra_func_info_t proc_desc;
724 return ADDR_BITS_REMOVE (read_next_frame_reg (frame,
725 PROC_FRAME_REG(proc_desc)) + PROC_FRAME_OFFSET(proc_desc));
728 mips_extra_func_info_t cached_proc_desc;
731 mips_frame_chain(frame)
732 struct frame_info *frame;
734 mips_extra_func_info_t proc_desc;
735 CORE_ADDR saved_pc = FRAME_SAVED_PC(frame);
737 if (saved_pc == 0 || inside_entry_file (saved_pc))
740 proc_desc = find_proc_desc(saved_pc, frame);
744 cached_proc_desc = proc_desc;
746 /* If no frame pointer and frame size is zero, we must be at end
747 of stack (or otherwise hosed). If we don't check frame size,
748 we loop forever if we see a zero size frame. */
749 if (PROC_FRAME_REG (proc_desc) == SP_REGNUM
750 && PROC_FRAME_OFFSET (proc_desc) == 0
751 /* The previous frame from a sigtramp frame might be frameless
752 and have frame size zero. */
753 && !frame->signal_handler_caller)
756 return get_frame_pointer (frame, proc_desc);
760 init_extra_frame_info(fci)
761 struct frame_info *fci;
765 /* Use proc_desc calculated in frame_chain */
766 mips_extra_func_info_t proc_desc =
767 fci->next ? cached_proc_desc : find_proc_desc(fci->pc, fci->next);
769 fci->saved_regs = NULL;
771 proc_desc == &temp_proc_desc ? 0 : proc_desc;
774 /* Fixup frame-pointer - only needed for top frame */
775 /* This may not be quite right, if proc has a real frame register.
776 Get the value of the frame relative sp, procedure might have been
777 interrupted by a signal at it's very start. */
778 if (fci->pc == PROC_LOW_ADDR (proc_desc)
779 && !PROC_DESC_IS_DUMMY (proc_desc))
780 fci->frame = read_next_frame_reg (fci->next, SP_REGNUM);
782 fci->frame = get_frame_pointer (fci->next, proc_desc);
784 if (proc_desc == &temp_proc_desc)
788 /* Do not set the saved registers for a sigtramp frame,
789 mips_find_saved_registers will do that for us.
790 We can't use fci->signal_handler_caller, it is not yet set. */
791 find_pc_partial_function (fci->pc, &name,
792 (CORE_ADDR *)NULL,(CORE_ADDR *)NULL);
793 if (!IN_SIGTRAMP (fci->pc, name))
795 fci->saved_regs = (struct frame_saved_regs*)
796 obstack_alloc (&frame_cache_obstack,
797 sizeof (struct frame_saved_regs));
798 *fci->saved_regs = temp_saved_regs;
799 fci->saved_regs->regs[PC_REGNUM]
800 = fci->saved_regs->regs[RA_REGNUM];
804 /* hack: if argument regs are saved, guess these contain args */
805 fci->num_args = -1; /* assume we can't tell how many args for now */
806 for (regnum = MIPS_LAST_ARG_REGNUM; regnum >= A0_REGNUM; regnum--)
808 if (PROC_REG_MASK(proc_desc) & (1 << regnum))
810 fci->num_args = regnum - A0_REGNUM + 1;
817 /* MIPS stack frames are almost impenetrable. When execution stops,
818 we basically have to look at symbol information for the function
819 that we stopped in, which tells us *which* register (if any) is
820 the base of the frame pointer, and what offset from that register
821 the frame itself is at.
823 This presents a problem when trying to examine a stack in memory
824 (that isn't executing at the moment), using the "frame" command. We
825 don't have a PC, nor do we have any registers except SP.
827 This routine takes two arguments, SP and PC, and tries to make the
828 cached frames look as if these two arguments defined a frame on the
829 cache. This allows the rest of info frame to extract the important
830 arguments without difficulty. */
833 setup_arbitrary_frame (argc, argv)
838 error ("MIPS frame specifications require two arguments: sp and pc");
840 return create_new_frame (argv[0], argv[1]);
845 mips_push_arguments(nargs, args, sp, struct_return, struct_addr)
850 CORE_ADDR struct_addr;
854 struct mips_arg { char *contents; int len; int offset; };
855 struct mips_arg *mips_args;
856 register struct mips_arg *m_arg;
860 /* Macro to round n up to the next a boundary (a must be a power of two) */
861 #define ALIGN(n,a) (((n)+(a)-1) & ~((a)-1))
863 /* First ensure that the stack and structure return address (if any)
864 are properly aligned. */
866 sp = ALIGN (sp, MIPS_REGSIZE);
867 struct_addr = ALIGN (struct_addr, MIPS_REGSIZE);
869 accumulate_size = struct_return ? MIPS_REGSIZE : 0;
871 /* Allocate descriptors for each argument, plus some extras for the
872 dummies we will create to zero-fill the holes left when we align
873 arguments passed in registers that are smaller than a register. */
875 (struct mips_arg*) alloca ((nargs + MIPS_NUM_ARG_REGS) * sizeof (struct mips_arg));
877 /* Build up the list of argument descriptors. */
878 for (i = 0, m_arg = mips_args; i < nargs; i++, m_arg++) {
879 value_ptr arg = args[i];
880 len = m_arg->len = TYPE_LENGTH (VALUE_TYPE (arg));
881 /* This entire mips-specific routine is because doubles must be aligned
882 * on 8-byte boundaries. It still isn't quite right, because MIPS decided
883 * to align 'struct {int a, b}' on 4-byte boundaries (even though this
884 * breaks their varargs implementation...). A correct solution
885 * requires a simulation of gcc's 'alignof' (and use of 'alignof'
886 * in stdarg.h/varargs.h).
887 * On the 64 bit r4000 we always pass the first four arguments
888 * using eight bytes each, so that we can load them up correctly
891 if (len > 4) /* FIXME? */
892 accumulate_size = ALIGN (accumulate_size, 8);
893 m_arg->offset = accumulate_size;
894 m_arg->contents = VALUE_CONTENTS(arg);
895 if (! GDB_TARGET_IS_MIPS64)
896 /* For 32-bit targets, align the next argument on a 32-bit boundary. */
897 accumulate_size = ALIGN (accumulate_size + len, 4);
900 /* The following test attempts to determine if the argument
901 is being passed on the stack. But it fails account for
902 floating point arguments in the EABI, which should have their
903 own accumulated size separate from that for integer arguments.
905 if (accumulate_size >= MIPS_NUM_ARG_REGS * MIPS_REGSIZE)
906 /* The argument is being passed on the stack, not a register,
907 so adjust the size of the argument upward to account for stack
908 alignment. But shouldn't we be right-aligning small arguments
909 as we do below for the args-in-registers case? FIXME!! */
910 accumulate_size = ALIGN (accumulate_size + len, 8);
913 if (len < MIPS_REGSIZE)
915 /* The argument is being passed in a register, but is smaller
916 than a register. So it it must be right-aligned in the
917 register image being placed in the stack, and the rest
918 of the register image must be zero-filled. */
919 static char zeroes[MIPS_REGSIZE] = { 0 };
921 /* Align the arg in the rightmost part of the 64-bit word. */
922 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
923 m_arg->offset += MIPS_REGSIZE - len;
925 /* Create a fake argument to zero-fill the unsused part
926 of the 64-bit word. */
928 m_arg->len = MIPS_REGSIZE - len;
929 m_arg->contents = zeroes;
930 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
931 m_arg->offset = accumulate_size;
933 m_arg->offset = accumulate_size + len;
936 accumulate_size = ALIGN (accumulate_size + len, MIPS_REGSIZE);
940 accumulate_size = ALIGN (accumulate_size, 8);
941 if (accumulate_size < 4 * MIPS_REGSIZE)
942 accumulate_size = 4 * MIPS_REGSIZE;
943 sp -= accumulate_size;
944 for (i = nargs + fake_args; m_arg--, --i >= 0; )
945 write_memory(sp + m_arg->offset, m_arg->contents, m_arg->len);
948 char buf[TARGET_PTR_BIT / HOST_CHAR_BIT];
950 store_address (buf, sizeof buf, struct_addr);
951 write_memory (sp, buf, sizeof buf);
957 mips_push_register(CORE_ADDR *sp, int regno)
959 char buffer[MAX_REGISTER_RAW_SIZE];
960 int regsize = REGISTER_RAW_SIZE (regno);
963 read_register_gen (regno, buffer);
964 write_memory (*sp, buffer, regsize);
967 /* MASK(i,j) == (1<<i) + (1<<(i+1)) + ... + (1<<j)). Assume i<=j<(MIPS_NUMREGS-1). */
968 #define MASK(i,j) (((1 << ((j)+1))-1) ^ ((1 << (i))-1))
971 mips_push_dummy_frame()
974 struct linked_proc_info *link = (struct linked_proc_info*)
975 xmalloc(sizeof(struct linked_proc_info));
976 mips_extra_func_info_t proc_desc = &link->info;
977 CORE_ADDR sp = ADDR_BITS_REMOVE (read_register (SP_REGNUM));
978 CORE_ADDR old_sp = sp;
979 link->next = linked_proc_desc_table;
980 linked_proc_desc_table = link;
982 /* FIXME! are these correct ? */
983 #define PUSH_FP_REGNUM 16 /* must be a register preserved across calls */
984 #define GEN_REG_SAVE_MASK MASK(1,16)|MASK(24,28)|(1<<(MIPS_NUMREGS-1))
985 #define FLOAT_REG_SAVE_MASK MASK(0,19)
986 #define FLOAT_SINGLE_REG_SAVE_MASK \
987 ((1<<18)|(1<<16)|(1<<14)|(1<<12)|(1<<10)|(1<<8)|(1<<6)|(1<<4)|(1<<2)|(1<<0))
989 * The registers we must save are all those not preserved across
990 * procedure calls. Dest_Reg (see tm-mips.h) must also be saved.
991 * In addition, we must save the PC, PUSH_FP_REGNUM, MMLO/-HI
992 * and FP Control/Status registers.
995 * Dummy frame layout:
998 * Saved MMHI, MMLO, FPC_CSR
1003 * Saved D18 (i.e. F19, F18)
1005 * Saved D0 (i.e. F1, F0)
1006 * CALL_DUMMY (subroutine stub; see tm-mips.h)
1007 * Parameter build area (not yet implemented)
1011 /* Save special registers (PC, MMHI, MMLO, FPC_CSR) */
1012 write_register (PUSH_FP_REGNUM, sp);
1013 PROC_FRAME_REG(proc_desc) = PUSH_FP_REGNUM;
1014 PROC_FRAME_OFFSET(proc_desc) = 0;
1015 mips_push_register (&sp, PC_REGNUM);
1016 mips_push_register (&sp, HI_REGNUM);
1017 mips_push_register (&sp, LO_REGNUM);
1018 mips_push_register (&sp, mips_fpu == MIPS_FPU_NONE ? 0 : FCRCS_REGNUM);
1020 /* Save general CPU registers */
1021 PROC_REG_MASK(proc_desc) = GEN_REG_SAVE_MASK;
1022 PROC_REG_OFFSET(proc_desc) = sp - old_sp; /* offset of (Saved R31) from FP */
1023 for (ireg = 32; --ireg >= 0; )
1024 if (PROC_REG_MASK(proc_desc) & (1 << ireg))
1025 mips_push_register (&sp, ireg);
1027 /* Save floating point registers starting with high order word */
1028 PROC_FREG_MASK(proc_desc) =
1029 mips_fpu == MIPS_FPU_DOUBLE ? FLOAT_REG_SAVE_MASK
1030 : mips_fpu == MIPS_FPU_SINGLE ? FLOAT_SINGLE_REG_SAVE_MASK : 0;
1031 PROC_FREG_OFFSET(proc_desc) = sp - old_sp; /* offset of (Saved D18) from FP */
1032 for (ireg = 32; --ireg >= 0; )
1033 if (PROC_FREG_MASK(proc_desc) & (1 << ireg))
1034 mips_push_register (&sp, ireg + FP0_REGNUM);
1036 /* Update the stack pointer. Set the procedure's starting and ending
1037 addresses to point to the place on the stack where we'll be writing the
1038 dummy code (in mips_push_arguments). */
1039 write_register (SP_REGNUM, sp);
1040 PROC_LOW_ADDR(proc_desc) = sp - CALL_DUMMY_SIZE + CALL_DUMMY_START_OFFSET;
1041 PROC_HIGH_ADDR(proc_desc) = sp;
1042 SET_PROC_DESC_IS_DUMMY(proc_desc);
1043 PROC_PC_REG(proc_desc) = RA_REGNUM;
1049 register int regnum;
1050 struct frame_info *frame = get_current_frame ();
1051 CORE_ADDR new_sp = FRAME_FP (frame);
1053 mips_extra_func_info_t proc_desc = frame->proc_desc;
1055 write_register (PC_REGNUM, FRAME_SAVED_PC(frame));
1056 if (frame->saved_regs == NULL)
1057 mips_find_saved_regs (frame);
1060 for (regnum = MIPS_NUMREGS; --regnum >= 0; )
1061 if (PROC_REG_MASK(proc_desc) & (1 << regnum))
1062 write_register (regnum,
1063 read_memory_integer (frame->saved_regs->regs[regnum],
1065 for (regnum = MIPS_NUMREGS; --regnum >= 0; )
1066 if (PROC_FREG_MASK(proc_desc) & (1 << regnum))
1067 write_register (regnum + FP0_REGNUM,
1068 read_memory_integer (frame->saved_regs->regs[regnum + FP0_REGNUM], MIPS_REGSIZE));
1070 write_register (SP_REGNUM, new_sp);
1071 flush_cached_frames ();
1073 if (proc_desc && PROC_DESC_IS_DUMMY(proc_desc))
1075 struct linked_proc_info *pi_ptr, *prev_ptr;
1077 for (pi_ptr = linked_proc_desc_table, prev_ptr = NULL;
1079 prev_ptr = pi_ptr, pi_ptr = pi_ptr->next)
1081 if (&pi_ptr->info == proc_desc)
1086 error ("Can't locate dummy extra frame info\n");
1088 if (prev_ptr != NULL)
1089 prev_ptr->next = pi_ptr->next;
1091 linked_proc_desc_table = pi_ptr->next;
1095 write_register (HI_REGNUM,
1096 read_memory_integer (new_sp - 2*MIPS_REGSIZE, MIPS_REGSIZE));
1097 write_register (LO_REGNUM,
1098 read_memory_integer (new_sp - 3*MIPS_REGSIZE, MIPS_REGSIZE));
1099 if (mips_fpu != MIPS_FPU_NONE)
1100 write_register (FCRCS_REGNUM,
1101 read_memory_integer (new_sp - 4*MIPS_REGSIZE, MIPS_REGSIZE));
1106 mips_print_register (regnum, all)
1109 char raw_buffer[MAX_REGISTER_RAW_SIZE];
1111 /* Get the data in raw format. */
1112 if (read_relative_register_raw_bytes (regnum, raw_buffer))
1114 printf_filtered ("%s: [Invalid]", reg_names[regnum]);
1118 /* If an even floating pointer register, also print as double. */
1119 if (regnum >= FP0_REGNUM && regnum < FP0_REGNUM+MIPS_NUMREGS
1120 && !((regnum-FP0_REGNUM) & 1))
1122 char dbuffer[MAX_REGISTER_RAW_SIZE];
1124 read_relative_register_raw_bytes (regnum, dbuffer);
1125 read_relative_register_raw_bytes (regnum+1, dbuffer+4); /* FIXME!! */
1126 #ifdef REGISTER_CONVERT_TO_TYPE
1127 REGISTER_CONVERT_TO_TYPE(regnum, builtin_type_double, dbuffer);
1129 printf_filtered ("(d%d: ", regnum-FP0_REGNUM);
1130 val_print (builtin_type_double, dbuffer, 0,
1131 gdb_stdout, 0, 1, 0, Val_pretty_default);
1132 printf_filtered ("); ");
1134 fputs_filtered (reg_names[regnum], gdb_stdout);
1136 /* The problem with printing numeric register names (r26, etc.) is that
1137 the user can't use them on input. Probably the best solution is to
1138 fix it so that either the numeric or the funky (a2, etc.) names
1139 are accepted on input. */
1140 if (regnum < MIPS_NUMREGS)
1141 printf_filtered ("(r%d): ", regnum);
1143 printf_filtered (": ");
1145 /* If virtual format is floating, print it that way. */
1146 if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (regnum)) == TYPE_CODE_FLT)
1147 val_print (REGISTER_VIRTUAL_TYPE (regnum), raw_buffer, 0,
1148 gdb_stdout, 0, 1, 0, Val_pretty_default);
1149 /* Else print as integer in hex. */
1151 print_scalar_formatted (raw_buffer, REGISTER_VIRTUAL_TYPE (regnum),
1152 'x', 0, gdb_stdout);
1155 /* Replacement for generic do_registers_info. */
1158 mips_do_registers_info (regnum, fpregs)
1164 if (*(reg_names[regnum]) == '\0')
1165 error ("Not a valid register for the current processor type");
1167 mips_print_register (regnum, 0);
1168 printf_filtered ("\n");
1172 int did_newline = 0;
1174 for (regnum = 0; regnum < NUM_REGS; )
1176 if (((!fpregs) && regnum >= FP0_REGNUM && regnum <= FCRIR_REGNUM)
1177 || *(reg_names[regnum]) == '\0')
1182 mips_print_register (regnum, 1);
1184 printf_filtered ("; ");
1186 if ((regnum & 3) == 0)
1188 printf_filtered ("\n");
1193 printf_filtered ("\n");
1197 /* Return number of args passed to a frame. described by FIP.
1198 Can return -1, meaning no way to tell. */
1201 mips_frame_num_args (frame)
1202 struct frame_info *frame;
1204 #if 0 /* FIXME Use or lose this! */
1205 struct chain_info_t *p;
1207 p = mips_find_cached_frame (FRAME_FP (frame));
1209 return p->the_info.numargs;
1214 /* Is this a branch with a delay slot? */
1216 static int is_delayed PARAMS ((unsigned long));
1223 for (i = 0; i < NUMOPCODES; ++i)
1224 if (mips_opcodes[i].pinfo != INSN_MACRO
1225 && (insn & mips_opcodes[i].mask) == mips_opcodes[i].match)
1227 return (i < NUMOPCODES
1228 && (mips_opcodes[i].pinfo & (INSN_UNCOND_BRANCH_DELAY
1229 | INSN_COND_BRANCH_DELAY
1230 | INSN_COND_BRANCH_LIKELY)));
1234 mips_step_skips_delay (pc)
1237 char buf[MIPS_INSTLEN];
1239 if (target_read_memory (pc, buf, MIPS_INSTLEN) != 0)
1240 /* If error reading memory, guess that it is not a delayed branch. */
1242 return is_delayed ((unsigned long)extract_unsigned_integer (buf, MIPS_INSTLEN));
1245 /* To skip prologues, I use this predicate. Returns either PC itself
1246 if the code at PC does not look like a function prologue; otherwise
1247 returns an address that (if we're lucky) follows the prologue. If
1248 LENIENT, then we must skip everything which is involved in setting
1249 up the frame (it's OK to skip more, just so long as we don't skip
1250 anything which might clobber the registers which are being saved.
1251 We must skip more in the case where part of the prologue is in the
1252 delay slot of a non-prologue instruction). */
1255 mips_skip_prologue (pc, lenient)
1261 int seen_sp_adjust = 0;
1262 int load_immediate_bytes = 0;
1263 CORE_ADDR post_prologue_pc;
1265 /* See if we can determine the end of the prologue via the symbol table.
1266 If so, then return either PC, or the PC after the prologue, whichever
1269 post_prologue_pc = after_prologue (pc, NULL);
1271 if (post_prologue_pc != 0)
1272 return max (pc, post_prologue_pc);
1274 /* Can't determine prologue from the symbol table, need to examine
1277 /* Skip the typical prologue instructions. These are the stack adjustment
1278 instruction and the instructions that save registers on the stack
1279 or in the gcc frame. */
1280 for (offset = 0; offset < 100; offset += MIPS_INSTLEN)
1282 char buf[MIPS_INSTLEN];
1285 status = read_memory_nobpt (pc + offset, buf, MIPS_INSTLEN);
1287 memory_error (status, pc + offset);
1288 inst = (unsigned long)extract_unsigned_integer (buf, MIPS_INSTLEN);
1291 if (lenient && is_delayed (inst))
1295 /* Must add cases for 64-bit operations. FIXME!! */
1296 if ((inst & 0xffff0000) == 0x27bd0000) /* addiu $sp,$sp,offset */
1298 else if (inst == 0x03a1e823 || /* subu $sp,$sp,$at */
1299 inst == 0x03a8e823) /* subu $sp,$sp,$t0 */
1301 else if ((inst & 0xFFE00000) == 0xAFA00000 && (inst & 0x001F0000))
1302 continue; /* sw reg,n($sp) */
1304 else if ((inst & 0xFFE00000) == 0xE7A00000) /* swc1 freg,n($sp) */
1306 else if ((inst & 0xF3E00000) == 0xA3C00000 && (inst & 0x001F0000))
1308 continue; /* reg != $zero */
1310 /* move $s8,$sp. With different versions of gas this will be either
1311 `addu $s8,$sp,$zero' or `or $s8,$sp,$zero'. Accept either. */
1312 else if (inst == 0x03A0F021 || inst == 0x03a0f025)
1315 else if ((inst & 0xFF9F07FF) == 0x00800021) /* move reg,$a0-$a3 */
1317 else if ((inst & 0xffff0000) == 0x3c1c0000) /* lui $gp,n */
1319 else if ((inst & 0xffff0000) == 0x279c0000) /* addiu $gp,$gp,n */
1321 else if (inst == 0x0399e021 /* addu $gp,$gp,$t9 */
1322 || inst == 0x033ce021) /* addu $gp,$t9,$gp */
1324 /* The following instructions load $at or $t0 with an immediate
1325 value in preparation for a stack adjustment via
1326 subu $sp,$sp,[$at,$t0]. These instructions could also initialize
1327 a local variable, so we accept them only before a stack adjustment
1328 instruction was seen. */
1329 else if (!seen_sp_adjust)
1331 if ((inst & 0xffff0000) == 0x3c010000 || /* lui $at,n */
1332 (inst & 0xffff0000) == 0x3c080000) /* lui $t0,n */
1334 load_immediate_bytes += MIPS_INSTLEN; /* FIXME!! */
1337 else if ((inst & 0xffff0000) == 0x34210000 || /* ori $at,$at,n */
1338 (inst & 0xffff0000) == 0x35080000 || /* ori $t0,$t0,n */
1339 (inst & 0xffff0000) == 0x34010000 || /* ori $at,$zero,n */
1340 (inst & 0xffff0000) == 0x34080000) /* ori $t0,$zero,n */
1342 load_immediate_bytes += MIPS_INSTLEN; /* FIXME!! */
1352 /* In a frameless function, we might have incorrectly
1353 skipped some load immediate instructions. Undo the skipping
1354 if the load immediate was not followed by a stack adjustment. */
1355 if (load_immediate_bytes && !seen_sp_adjust)
1356 offset -= load_immediate_bytes;
1361 /* The lenient prologue stuff should be superceded by the code in
1362 init_extra_frame_info which looks to see whether the stores mentioned
1363 in the proc_desc have actually taken place. */
1365 /* Is address PC in the prologue (loosely defined) for function at
1369 mips_in_lenient_prologue (startaddr, pc)
1370 CORE_ADDR startaddr;
1373 CORE_ADDR end_prologue = mips_skip_prologue (startaddr, 1);
1374 return pc >= startaddr && pc < end_prologue;
1378 /* Given a return value in `regbuf' with a type `valtype',
1379 extract and copy its value into `valbuf'. */
1381 mips_extract_return_value (valtype, regbuf, valbuf)
1382 struct type *valtype;
1383 char regbuf[REGISTER_BYTES];
1390 if (TYPE_CODE (valtype) == TYPE_CODE_FLT
1391 && (mips_fpu == MIPS_FPU_DOUBLE
1392 || (mips_fpu == MIPS_FPU_SINGLE && TYPE_LENGTH (valtype) <= 4))) /* FIXME!! */
1393 regnum = FP0_REGNUM;
1395 if (TARGET_BYTE_ORDER == BIG_ENDIAN
1396 && TYPE_CODE (valtype) != TYPE_CODE_FLT
1397 && TYPE_LENGTH (valtype) < REGISTER_RAW_SIZE (regnum))
1398 offset = REGISTER_RAW_SIZE (regnum) - TYPE_LENGTH (valtype);
1400 memcpy (valbuf, regbuf + REGISTER_BYTE (regnum) + offset,
1401 TYPE_LENGTH (valtype));
1402 #ifdef REGISTER_CONVERT_TO_TYPE
1403 REGISTER_CONVERT_TO_TYPE(regnum, valtype, valbuf);
1407 /* Given a return value in `regbuf' with a type `valtype',
1408 write it's value into the appropriate register. */
1410 mips_store_return_value (valtype, valbuf)
1411 struct type *valtype;
1415 char raw_buffer[MAX_REGISTER_RAW_SIZE];
1418 if (TYPE_CODE (valtype) == TYPE_CODE_FLT
1419 && (mips_fpu == MIPS_FPU_DOUBLE
1420 || (mips_fpu == MIPS_FPU_SINGLE && TYPE_LENGTH (valtype) <= 4))) /* FIXME!! */
1421 regnum = FP0_REGNUM;
1423 memcpy(raw_buffer, valbuf, TYPE_LENGTH (valtype));
1425 #ifdef REGISTER_CONVERT_FROM_TYPE
1426 REGISTER_CONVERT_FROM_TYPE(regnum, valtype, raw_buffer);
1429 write_register_bytes(REGISTER_BYTE (regnum), raw_buffer, TYPE_LENGTH (valtype));
1432 /* Exported procedure: Is PC in the signal trampoline code */
1435 in_sigtramp (pc, ignore)
1437 char *ignore; /* function name */
1439 if (sigtramp_address == 0)
1441 return (pc >= sigtramp_address && pc < sigtramp_end);
1444 /* Command to set FPU type. mips_fpu_string will have been set to the
1445 user's argument. Set mips_fpu based on mips_fpu_string, and then
1446 canonicalize mips_fpu_string. */
1450 mips_set_fpu_command (args, from_tty, c)
1453 struct cmd_list_element *c;
1457 if (mips_fpu_string == NULL || *mips_fpu_string == '\0')
1458 mips_fpu = MIPS_FPU_DOUBLE;
1459 else if (strcasecmp (mips_fpu_string, "double") == 0
1460 || strcasecmp (mips_fpu_string, "on") == 0
1461 || strcasecmp (mips_fpu_string, "1") == 0
1462 || strcasecmp (mips_fpu_string, "yes") == 0)
1463 mips_fpu = MIPS_FPU_DOUBLE;
1464 else if (strcasecmp (mips_fpu_string, "none") == 0
1465 || strcasecmp (mips_fpu_string, "off") == 0
1466 || strcasecmp (mips_fpu_string, "0") == 0
1467 || strcasecmp (mips_fpu_string, "no") == 0)
1468 mips_fpu = MIPS_FPU_NONE;
1469 else if (strcasecmp (mips_fpu_string, "single") == 0)
1470 mips_fpu = MIPS_FPU_SINGLE;
1472 err = strsave (mips_fpu_string);
1474 if (mips_fpu_string != NULL)
1475 free (mips_fpu_string);
1479 case MIPS_FPU_DOUBLE:
1480 mips_fpu_string = strsave ("double");
1482 case MIPS_FPU_SINGLE:
1483 mips_fpu_string = strsave ("single");
1486 mips_fpu_string = strsave ("none");
1492 struct cleanup *cleanups = make_cleanup (free, err);
1493 error ("Unknown FPU type `%s'. Use `double', `none', or `single'.",
1495 do_cleanups (cleanups);
1500 mips_show_fpu_command (args, from_tty, c)
1503 struct cmd_list_element *c;
1507 /* Command to set the processor type. */
1510 mips_set_processor_type_command (args, from_tty)
1516 if (tmp_mips_processor_type == NULL || *tmp_mips_processor_type == '\0')
1518 printf_unfiltered ("The known MIPS processor types are as follows:\n\n");
1519 for (i = 0; mips_processor_type_table[i].name != NULL; ++i)
1520 printf_unfiltered ("%s\n", mips_processor_type_table[i].name);
1522 /* Restore the value. */
1523 tmp_mips_processor_type = strsave (mips_processor_type);
1528 if (!mips_set_processor_type (tmp_mips_processor_type))
1530 error ("Unknown processor type `%s'.", tmp_mips_processor_type);
1531 /* Restore its value. */
1532 tmp_mips_processor_type = strsave (mips_processor_type);
1537 mips_show_processor_type_command (args, from_tty)
1543 /* Modify the actual processor type. */
1546 mips_set_processor_type (str)
1554 for (i = 0; mips_processor_type_table[i].name != NULL; ++i)
1556 if (strcasecmp (str, mips_processor_type_table[i].name) == 0)
1558 mips_processor_type = str;
1560 for (j = 0; j < NUM_REGS; ++j)
1561 reg_names[j] = mips_processor_type_table[i].regnames[j];
1565 /* FIXME tweak fpu flag too */
1572 /* Attempt to identify the particular processor model by reading the
1576 mips_read_processor_type ()
1580 prid = read_register (PRID_REGNUM);
1582 if ((prid & ~0xf) == 0x700)
1583 return savestring ("r3041", strlen("r3041"));
1588 /* Just like reinit_frame_cache, but with the right arguments to be
1589 callable as an sfunc. */
1592 reinit_frame_cache_sfunc (args, from_tty, c)
1595 struct cmd_list_element *c;
1597 reinit_frame_cache ();
1601 gdb_print_insn_mips (memaddr, info)
1603 disassemble_info *info;
1605 if (TARGET_BYTE_ORDER == BIG_ENDIAN)
1606 return print_insn_big_mips (memaddr, info);
1608 return print_insn_little_mips (memaddr, info);
1612 _initialize_mips_tdep ()
1614 struct cmd_list_element *c;
1616 tm_print_insn = gdb_print_insn_mips;
1618 /* Let the user turn off floating point and set the fence post for
1619 heuristic_proc_start. */
1621 c = add_set_cmd ("mipsfpu", class_support, var_string_noescape,
1622 (char *) &mips_fpu_string,
1623 "Set use of floating point coprocessor.\n\
1624 Set to `none' to avoid using floating point instructions when calling\n\
1625 functions or dealing with return values. Set to `single' to use only\n\
1626 single precision floating point as on the R4650. Set to `double' for\n\
1627 normal floating point support.",
1629 c->function.sfunc = mips_set_fpu_command;
1630 c = add_show_from_set (c, &showlist);
1631 c->function.sfunc = mips_show_fpu_command;
1633 mips_fpu = MIPS_FPU_DOUBLE;
1634 mips_fpu_string = strsave ("double");
1636 c = add_set_cmd ("processor", class_support, var_string_noescape,
1637 (char *) &tmp_mips_processor_type,
1638 "Set the type of MIPS processor in use.\n\
1639 Set this to be able to access processor-type-specific registers.\n\
1642 c->function.cfunc = mips_set_processor_type_command;
1643 c = add_show_from_set (c, &showlist);
1644 c->function.cfunc = mips_show_processor_type_command;
1646 tmp_mips_processor_type = strsave (DEFAULT_MIPS_TYPE);
1647 mips_set_processor_type_command (strsave (DEFAULT_MIPS_TYPE), 0);
1649 /* We really would like to have both "0" and "unlimited" work, but
1650 command.c doesn't deal with that. So make it a var_zinteger
1651 because the user can always use "999999" or some such for unlimited. */
1652 c = add_set_cmd ("heuristic-fence-post", class_support, var_zinteger,
1653 (char *) &heuristic_fence_post,
1655 Set the distance searched for the start of a function.\n\
1656 If you are debugging a stripped executable, GDB needs to search through the\n\
1657 program for the start of a function. This command sets the distance of the\n\
1658 search. The only need to set it is when debugging a stripped executable.",
1660 /* We need to throw away the frame cache when we set this, since it
1661 might change our ability to get backtraces. */
1662 c->function.sfunc = reinit_frame_cache_sfunc;
1663 add_show_from_set (c, &showlist);