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