1 /* Machine-dependent code which would otherwise be in inflow.c and core.c,
2 for GDB, the GNU debugger.
3 Copyright (C) 1986, 1987, 1989 Free Software Foundation, Inc.
4 This code is for the sparc cpu.
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
30 #include "ieee-float.h"
32 #include <sys/ptrace.h>
37 extern int stop_after_trap;
41 Error, not_branch, bicc, bicca, ba, baa, ticc, ta,
44 /* Simulate single-step ptrace call for sun4. Code written by Gary
47 /* npc4 and next_pc describe the situation at the time that the
48 step-breakpoint was set, not necessary the current value of NPC_REGNUM. */
49 static CORE_ADDR next_pc, npc4, target;
50 static int brknpc4, brktrg;
51 typedef char binsn_quantum[BREAKPOINT_MAX];
52 static binsn_quantum break_mem[3];
54 /* Non-zero if we just simulated a single-step ptrace call. This is
55 needed because we cannot remove the breakpoints in the inferior
56 process until after the `wait' in `wait_for_inferior'. Used for
61 /* single_step() is called just before we want to resume the inferior,
62 if we want to single-step it but there is no hardware or kernel single-step
63 support (as on all SPARCs). We find all the possible targets of the
64 coming instruction and breakpoint them.
66 single_step is also called just after the inferior stops. If we had
67 set up a simulated single-step, we undo our damage. */
72 branch_type br, isannulled();
78 /* Always set breakpoint for NPC. */
79 next_pc = read_register (NPC_REGNUM);
80 npc4 = next_pc + 4; /* branch not taken */
82 target_insert_breakpoint (next_pc, break_mem[0]);
83 /* printf ("set break at %x\n",next_pc); */
85 pc = read_register (PC_REGNUM);
86 pc_instruction = read_memory_integer (pc, sizeof(pc_instruction));
87 br = isannulled (pc_instruction, pc, &target);
92 /* Conditional annulled branch will either end up at
93 npc (if taken) or at npc+4 (if not taken).
96 target_insert_breakpoint (npc4, break_mem[1]);
98 else if (br == baa && target != next_pc)
100 /* Unconditional annulled branch will always end up at
103 target_insert_breakpoint (target, break_mem[2]);
106 /* We are ready to let it go */
112 /* Remove breakpoints */
113 target_remove_breakpoint (next_pc, break_mem[0]);
116 target_remove_breakpoint (npc4, break_mem[1]);
119 target_remove_breakpoint (target, break_mem[2]);
126 sparc_frame_chain (thisframe)
131 err = target_read_memory
132 ((CORE_ADDR)&(((struct rwindow *)(thisframe->frame))->rw_in[6]),
141 sparc_extract_struct_value_address (regbuf)
142 char regbuf[REGISTER_BYTES];
145 read_memory (((int *)(regbuf))[SP_REGNUM]+(16*4),
152 * Find the pc saved in frame FRAME.
155 frame_saved_pc (frame)
160 /* If it's at the bottom, the return value's stored in i7/rp */
161 if (get_current_frame () == frame)
162 read_memory ((CORE_ADDR)&((struct rwindow *)
163 (read_register (SP_REGNUM)))->rw_in[7],
164 &prev_pc, sizeof (CORE_ADDR));
166 /* Wouldn't this always work? */
167 read_memory ((CORE_ADDR)&((struct rwindow *)(frame->bottom))->rw_in[7],
171 return PC_ADJUST (prev_pc);
175 * Since an individual frame in the frame cache is defined by two
176 * arguments (a frame pointer and a stack pointer), we need two
177 * arguments to get info for an arbitrary stack frame. This routine
178 * takes two arguments and makes the cached frames look as if these
179 * two arguments defined a frame on the cache. This allows the rest
180 * of info frame to extract the important arguments without
184 setup_arbitrary_frame (frame, stack)
185 FRAME_ADDR frame, stack;
187 FRAME fid = create_new_frame (frame, 0);
190 fatal ("internal: create_new_frame returned invalid frame id");
193 fid->pc = FRAME_SAVED_PC (fid);
201 * This routine appears to be passed a size by which to increase the
202 * stack. It then executes a save instruction in the inferior to
203 * increase the stack by this amount. Only the register window system
204 * should be affected by this; the program counter & etc. will not be.
206 * This instructions used for this purpose are:
208 * sethi %hi(0x0),g1 *
211 * sethi %hi(0x0),g1 *
214 * sethi %hi(0x0),g0 (nop)
216 * I presume that these set g1 to be the negative of the size, do a
217 * save (putting the stack pointer at sp - size) and restore the
218 * original contents of g1. A * indicates that the actual value of
219 * the instruction is modified below.
221 static int save_insn_opcodes[] = {
222 0x03000000, 0x82007ee0, 0x9de38001, 0x03000000,
223 0x82007ee0, 0x91d02001, 0x01000000 };
225 /* Neither do_save_insn or do_restore_insn save stack configuration
226 (current_frame, etc),
227 since the stack is in an indeterminate state through the call to
228 each of them. That responsibility of the routine which calls them. */
234 int g1 = read_register (G1_REGNUM);
235 CORE_ADDR sp = read_register (SP_REGNUM);
236 CORE_ADDR pc = read_register (PC_REGNUM);
237 CORE_ADDR npc = read_register (NPC_REGNUM);
238 CORE_ADDR fake_pc = sp - sizeof (save_insn_opcodes);
239 struct inferior_status inf_status;
241 save_inferior_status (&inf_status, 0); /* Don't restore stack info */
245 save_insn_opcodes[0] = 0x03000000 | ((-size >> 10) & 0x3fffff);
246 save_insn_opcodes[1] = 0x82006000 | (-size & 0x3ff);
247 save_insn_opcodes[3] = 0x03000000 | ((g1 >> 10) & 0x3fffff);
248 save_insn_opcodes[4] = 0x82006000 | (g1 & 0x3ff);
249 write_memory (fake_pc, (char *)save_insn_opcodes, sizeof (save_insn_opcodes));
251 clear_proceed_status ();
253 proceed (fake_pc, 0, 0);
255 write_register (PC_REGNUM, pc);
256 write_register (NPC_REGNUM, npc);
257 restore_inferior_status (&inf_status);
261 * This routine takes a program counter value. It restores the
262 * register window system to the frame above the current one.
263 * THIS ROUTINE CLOBBERS PC AND NPC IN THE TARGET!
266 /* The following insns translate to:
272 static int restore_insn_opcodes[] = { 0x81e80000, 0x91d02001, 0x01000000 };
277 CORE_ADDR sp = read_register (SP_REGNUM);
278 CORE_ADDR fake_pc = sp - sizeof (restore_insn_opcodes);
279 struct inferior_status inf_status;
281 save_inferior_status (&inf_status, 0); /* Don't restore stack info */
283 write_memory (fake_pc, (char *)restore_insn_opcodes,
284 sizeof (restore_insn_opcodes));
286 clear_proceed_status ();
288 proceed (fake_pc, 0, 0);
290 restore_inferior_status (&inf_status);
293 /* Given a pc value, skip it forward past the function prologue by
294 disassembling instructions that appear to be a prologue.
296 If FRAMELESS_P is set, we are only testing to see if the function
297 is frameless. This allows a quicker answer.
299 This routine should be more specific in its actions; making sure
300 that it uses the same register in the initial prologue section. */
302 skip_prologue (start_pc, frameless_p)
308 unsigned long int code;
314 unsigned int imm22:22;
323 unsigned int simm13:13;
328 CORE_ADDR pc = start_pc;
330 x.i = read_memory_integer (pc, 4);
332 /* Recognize the `sethi' insn and record its destination. */
333 if (x.sethi.op == 0 && x.sethi.op2 == 4)
337 x.i = read_memory_integer (pc, 4);
340 /* Recognize an add immediate value to register to either %g1 or
341 the destination register recorded above. Actually, this might
342 well recognize several different arithmetic operations.
343 It doesn't check that rs1 == rd because in theory "sub %g0, 5, %g1"
344 followed by "save %sp, %g1, %sp" is a valid prologue (Not that
345 I imagine any compiler really does that, however). */
346 if (x.add.op == 2 && x.add.i && (x.add.rd == 1 || x.add.rd == dest))
349 x.i = read_memory_integer (pc, 4);
352 /* This recognizes any SAVE insn. But why do the XOR and then
353 the compare? That's identical to comparing against 60 (as long
354 as there isn't any sign extension). */
355 if (x.add.op == 2 && (x.add.op3 ^ 32) == 28)
358 if (frameless_p) /* If the save is all we care about, */
359 return pc; /* return before doing more work */
360 x.i = read_memory_integer (pc, 4);
364 /* Without a save instruction, it's not a prologue. */
368 /* Now we need to recognize stores into the frame from the input
369 registers. This recognizes all non alternate stores of input
370 register, into a location offset from the frame pointer. */
372 && (x.add.op3 & 0x3c) == 4 /* Store, non-alternate. */
373 && (x.add.rd & 0x18) == 0x18 /* Input register. */
374 && x.add.i /* Immediate mode. */
375 && x.add.rs1 == 30 /* Off of frame pointer. */
376 /* Into reserved stack space. */
377 && x.add.simm13 >= 0x44
378 && x.add.simm13 < 0x5b)
381 x.i = read_memory_integer (pc, 4);
386 /* Check instruction at ADDR to see if it is an annulled branch.
387 All other instructions will go to NPC or will trap.
388 Set *TARGET if we find a canidate branch; set to zero if not. */
391 isannulled (instruction, addr, target)
393 CORE_ADDR addr, *target;
395 branch_type val = not_branch;
396 long int offset; /* Must be signed for sign-extend. */
399 unsigned long int code;
406 unsigned int disp22:22;
411 insn.code = instruction;
414 && (insn.b.op2 == 2 || insn.b.op2 == 6 || insn.b.op2 == 7))
416 if (insn.b.cond == 8)
417 val = insn.b.a ? baa : ba;
419 val = insn.b.a ? bicca : bicc;
420 offset = 4 * ((int) (insn.b.disp22 << 10) >> 10);
421 *target = addr + offset;
427 /* sparc_frame_find_saved_regs ()
429 Stores, into a struct frame_saved_regs,
430 the addresses of the saved registers of frame described by FRAME_INFO.
431 This includes special registers such as pc and fp saved in special
432 ways in the stack frame. sp is even more special:
433 the address we return for it IS the sp for the next frame.
435 Note that on register window machines, we are currently making the
436 assumption that window registers are being saved somewhere in the
437 frame in which they are being used. If they are stored in an
438 inferior frame, find_saved_register will break.
440 On the Sun 4, the only time all registers are saved is when
441 a dummy frame is involved. Otherwise, the only saved registers
442 are the LOCAL and IN registers which are saved as a result
443 of the "save/restore" opcodes. This condition is determined
444 by address rather than by value.
446 The "pc" is not stored in a frame on the SPARC. (What is stored
447 is a return address minus 8.) sparc_pop_frame knows how to
448 deal with that. Other routines might or might not.
450 See tm-sparc.h (PUSH_FRAME and friends) for CRITICAL information
451 about how this works. */
454 sparc_frame_find_saved_regs (fi, saved_regs_addr)
455 struct frame_info *fi;
456 struct frame_saved_regs *saved_regs_addr;
459 FRAME_ADDR frame = read_register (FP_REGNUM);
460 FRAME fid = FRAME_INFO_ID (fi);
463 fatal ("Bad frame info struct in FRAME_FIND_SAVED_REGS");
465 bzero (saved_regs_addr, sizeof (*saved_regs_addr));
468 if (fi->pc >= frame - CALL_DUMMY_LENGTH - 0x140
469 && fi->pc <= frame) */
471 if (fi->pc >= (fi->bottom ? fi->bottom :
472 read_register (SP_REGNUM))
473 && fi->pc <= FRAME_FP(fi))
475 /* Dummy frame. All but the window regs are in there somewhere. */
476 for (regnum = G1_REGNUM; regnum < G1_REGNUM+7; regnum++)
477 saved_regs_addr->regs[regnum] =
478 frame + (regnum - G0_REGNUM) * 4 - 0xa0;
479 for (regnum = I0_REGNUM; regnum < I0_REGNUM+8; regnum++)
480 saved_regs_addr->regs[regnum] =
481 frame + (regnum - I0_REGNUM) * 4 - 0xc0;
482 for (regnum = FP0_REGNUM; regnum < FP0_REGNUM + 32; regnum++)
483 saved_regs_addr->regs[regnum] =
484 frame + (regnum - FP0_REGNUM) * 4 - 0x80;
485 for (regnum = Y_REGNUM; regnum < NUM_REGS; regnum++)
486 saved_regs_addr->regs[regnum] =
487 frame + (regnum - Y_REGNUM) * 4 - 0xe0;
489 fi->bottom : read_register (SP_REGNUM);
493 /* Normal frame. Just Local and In registers */
495 fi->bottom : read_register (SP_REGNUM);
496 for (regnum = L0_REGNUM; regnum < L0_REGNUM+16; regnum++)
497 saved_regs_addr->regs[regnum] = frame + (regnum-L0_REGNUM) * 4;
501 /* Pull off either the next frame pointer or the stack pointer */
502 FRAME_ADDR next_next_frame =
505 read_register (SP_REGNUM));
506 for (regnum = O0_REGNUM; regnum < O0_REGNUM+8; regnum++)
507 saved_regs_addr->regs[regnum] = next_next_frame + regnum * 4;
509 /* Otherwise, whatever we would get from ptrace(GETREGS) is accurate */
510 saved_regs_addr->regs[SP_REGNUM] = FRAME_FP (fi);
513 /* Push an empty stack frame, and record in it the current PC, regs, etc.
515 Note that the write's are of registers in the context of the newly
516 pushed frame. Thus the the fp*'s, the g*'s, the i*'s, and
517 the randoms, of the new frame, are being saved. The locals and outs
518 are new; they don't need to be saved. The i's and l's of
519 the last frame were saved by the do_save_insn in the register
520 file (now on the stack, since a context switch happended imm after).
522 The return pointer register %i7 does not have
523 the pc saved into it (return from this frame will be accomplished
524 by a POP_FRAME). In fact, we must leave it unclobbered, since we
525 must preserve it in the calling routine except across call instructions. */
527 /* Definitely see tm-sparc.h for more doc of the frame format here. */
530 sparc_push_dummy_frame ()
533 char register_temp[REGISTER_BYTES];
535 do_save_insn (0x140); /* FIXME where does this value come from? */
536 fp = read_register (FP_REGNUM);
538 read_register_bytes (REGISTER_BYTE (FP0_REGNUM), register_temp, 32 * 4);
539 write_memory (fp - 0x80, register_temp, 32 * 4);
541 read_register_bytes (REGISTER_BYTE (G0_REGNUM), register_temp, 8 * 4);
542 write_memory (fp - 0xa0, register_temp, 8 * 4);
544 read_register_bytes (REGISTER_BYTE (I0_REGNUM), register_temp, 8 * 4);
545 write_memory (fp - 0xc0, register_temp, 8 * 4);
547 /* Y, PS, WIM, TBR, PC, NPC, FPS, CPS regs */
548 read_register_bytes (REGISTER_BYTE (Y_REGNUM), register_temp, 8 * 4);
549 write_memory (fp - 0xe0, register_temp, 8 * 4);
552 /* Discard from the stack the innermost frame, restoring all saved registers.
554 Note that the values stored in fsr by get_frame_saved_regs are *in
555 the context of the called frame*. What this means is that the i
556 regs of fsr must be restored into the o regs of the (calling) frame that
557 we pop into. We don't care about the output regs of the calling frame,
558 since unless it's a dummy frame, it won't have any output regs in it.
560 We never have to bother with %l (local) regs, since the called routine's
561 locals get tossed, and the calling routine's locals are already saved
564 /* Definitely see tm-sparc.h for more doc of the frame format here. */
569 register FRAME frame = get_current_frame ();
570 register CORE_ADDR pc;
571 struct frame_saved_regs fsr;
572 struct frame_info *fi;
573 char raw_buffer[REGISTER_BYTES];
575 fi = get_frame_info (frame);
576 get_frame_saved_regs (fi, &fsr);
578 if (fsr.regs[FP0_REGNUM])
580 read_memory (fsr.regs[FP0_REGNUM], raw_buffer, 32 * 4);
581 write_register_bytes (REGISTER_BYTE (FP0_REGNUM), raw_buffer, 32 * 4);
583 if (fsr.regs[G1_REGNUM])
585 read_memory (fsr.regs[G1_REGNUM], raw_buffer, 7 * 4);
586 write_register_bytes (REGISTER_BYTE (G1_REGNUM), raw_buffer, 7 * 4);
588 if (fsr.regs[I0_REGNUM])
590 read_memory (fsr.regs[I0_REGNUM], raw_buffer, 8 * 4);
591 write_register_bytes (REGISTER_BYTE (O0_REGNUM), raw_buffer, 8 * 4);
593 if (fsr.regs[PS_REGNUM])
594 write_register (PS_REGNUM, read_memory_integer (fsr.regs[PS_REGNUM], 4));
595 if (fsr.regs[Y_REGNUM])
596 write_register (Y_REGNUM, read_memory_integer (fsr.regs[Y_REGNUM], 4));
597 if (fsr.regs[PC_REGNUM])
599 /* Explicitly specified PC (and maybe NPC) -- just restore them. */
600 write_register (PC_REGNUM, read_memory_integer (fsr.regs[PC_REGNUM], 4));
601 if (fsr.regs[NPC_REGNUM])
602 write_register (NPC_REGNUM,
603 read_memory_integer (fsr.regs[NPC_REGNUM], 4));
605 else if (fsr.regs[I7_REGNUM])
607 /* Return address in %i7 -- adjust it, then restore PC and NPC from it */
608 pc = PC_ADJUST (read_memory_integer (fsr.regs[I7_REGNUM], 4));
609 write_register (PC_REGNUM, pc);
610 write_register (NPC_REGNUM, pc + 4);
612 flush_cached_frames ();
613 set_current_frame ( create_new_frame (read_register (FP_REGNUM),
617 /* On the Sun 4 under SunOS, the compile will leave a fake insn which
618 encodes the structure size being returned. If we detect such
619 a fake insn, step past it. */
628 err = target_read_memory (pc + 8, (char *)&insn, sizeof(long));
629 SWAP_TARGET_AND_HOST (&insn, sizeof(long));
630 if ((err == 0) && (insn & 0xfffffe00) == 0)
637 /* Structure of SPARC extended floating point numbers.
638 This information is not currently used by GDB, since no current SPARC
639 implementations support extended float. */
641 const struct ext_format ext_format_sparc[] = {
642 /* tot sbyte smask expbyte manbyte */
643 { 16, 0, 0x80, 0,1, 4,8 }, /* sparc */