1 /* Target-dependent code for the ALPHA architecture, for GDB, the GNU Debugger.
2 Copyright 1993, 1994 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
31 /* FIXME: Some of this code should perhaps be merged with mips-tdep.c. */
33 /* FIXME: Put this declaration in frame.h. */
34 extern struct obstack frame_cache_obstack;
37 /* Forward declarations. */
39 static CORE_ADDR read_next_frame_reg PARAMS ((struct frame_info *, int));
41 static CORE_ADDR heuristic_proc_start PARAMS ((CORE_ADDR));
43 static alpha_extra_func_info_t heuristic_proc_desc PARAMS ((CORE_ADDR,
45 struct frame_info *));
47 static alpha_extra_func_info_t find_proc_desc PARAMS ((CORE_ADDR, struct frame_info *));
49 static int alpha_in_lenient_prologue PARAMS ((CORE_ADDR, CORE_ADDR));
51 static void reinit_frame_cache_sfunc PARAMS ((char *, int, struct cmd_list_element *));
53 static CORE_ADDR after_prologue PARAMS ((CORE_ADDR pc,
54 alpha_extra_func_info_t proc_desc));
56 static int in_prologue PARAMS ((CORE_ADDR pc,
57 alpha_extra_func_info_t proc_desc));
59 /* Heuristic_proc_start may hunt through the text section for a long
60 time across a 2400 baud serial line. Allows the user to limit this
62 static unsigned int heuristic_fence_post = 0;
64 /* Layout of a stack frame on the alpha:
67 pdr members: | 7th ... nth arg, |
68 | `pushed' by caller. |
70 ----------------|-------------------------------|<-- old_sp == vfp
73 | |localoff | Copies of 1st .. 6th |
74 | | | | | argument if necessary. |
76 | | | --- |-------------------------------|<-- FRAME_LOCALS_ADDRESS
78 | | | | Locals and temporaries. |
80 | | | |-------------------------------|
82 |-fregoffset | Saved float registers. |
88 | | -------|-------------------------------|
90 | | | Saved registers. |
97 | ----------|-------------------------------|
99 frameoffset | Argument build area, gets |
100 | | 7th ... nth arg for any |
101 | | called procedure. |
103 -------------|-------------------------------|<-- sp
107 #define PROC_LOW_ADDR(proc) ((proc)->pdr.adr) /* least address */
108 #define PROC_HIGH_ADDR(proc) ((proc)->pdr.iline) /* upper address bound */
109 #define PROC_DUMMY_FRAME(proc) ((proc)->pdr.iopt) /* frame for CALL_DUMMY */
110 #define PROC_FRAME_OFFSET(proc) ((proc)->pdr.frameoffset)
111 #define PROC_FRAME_REG(proc) ((proc)->pdr.framereg)
112 #define PROC_REG_MASK(proc) ((proc)->pdr.regmask)
113 #define PROC_FREG_MASK(proc) ((proc)->pdr.fregmask)
114 #define PROC_REG_OFFSET(proc) ((proc)->pdr.regoffset)
115 #define PROC_FREG_OFFSET(proc) ((proc)->pdr.fregoffset)
116 #define PROC_PC_REG(proc) ((proc)->pdr.pcreg)
117 #define PROC_LOCALOFF(proc) ((proc)->pdr.localoff)
118 #define PROC_SYMBOL(proc) (*(struct symbol**)&(proc)->pdr.isym)
119 #define _PROC_MAGIC_ 0x0F0F0F0F
120 #define PROC_DESC_IS_DUMMY(proc) ((proc)->pdr.isym == _PROC_MAGIC_)
121 #define SET_PROC_DESC_IS_DUMMY(proc) ((proc)->pdr.isym = _PROC_MAGIC_)
123 struct linked_proc_info
125 struct alpha_extra_func_info info;
126 struct linked_proc_info *next;
127 } *linked_proc_desc_table = NULL;
130 /* Guaranteed to set fci->saved_regs to some values (it never leaves it
134 alpha_find_saved_regs (frame)
135 struct frame_info *frame;
138 CORE_ADDR reg_position;
140 alpha_extra_func_info_t proc_desc;
143 frame->saved_regs = (struct frame_saved_regs *)
144 obstack_alloc (&frame_cache_obstack, sizeof(struct frame_saved_regs));
145 memset (frame->saved_regs, 0, sizeof (struct frame_saved_regs));
147 proc_desc = frame->proc_desc;
148 if (proc_desc == NULL)
149 /* I'm not sure how/whether this can happen. Normally when we can't
150 find a proc_desc, we "synthesize" one using heuristic_proc_desc
151 and set the saved_regs right away. */
154 /* Fill in the offsets for the registers which gen_mask says
157 reg_position = frame->frame + PROC_REG_OFFSET (proc_desc);
158 mask = PROC_REG_MASK (proc_desc);
160 returnreg = PROC_PC_REG (proc_desc);
162 /* Note that RA is always saved first, regardless of it's actual
164 if (mask & (1 << returnreg))
166 frame->saved_regs->regs[returnreg] = reg_position;
168 mask &= ~(1 << returnreg); /* Clear bit for RA so we
169 don't save again later. */
172 for (ireg = 0; ireg <= 31 ; ++ireg)
173 if (mask & (1 << ireg))
175 frame->saved_regs->regs[ireg] = reg_position;
179 /* Fill in the offsets for the registers which float_mask says
182 reg_position = frame->frame + PROC_FREG_OFFSET (proc_desc);
183 mask = PROC_FREG_MASK (proc_desc);
185 for (ireg = 0; ireg <= 31 ; ++ireg)
186 if (mask & (1 << ireg))
188 frame->saved_regs->regs[FP0_REGNUM+ireg] = reg_position;
192 frame->saved_regs->regs[PC_REGNUM] = frame->saved_regs->regs[returnreg];
196 read_next_frame_reg(fi, regno)
197 struct frame_info *fi;
200 /* If it is the frame for sigtramp we have a pointer to the sigcontext
202 If the stack layout for __sigtramp changes or if sigcontext offsets
203 change we might have to update this code. */
204 #ifndef SIGFRAME_PC_OFF
205 #define SIGFRAME_PC_OFF (2 * 8)
206 #define SIGFRAME_REGSAVE_OFF (4 * 8)
208 for (; fi; fi = fi->next)
210 if (fi->signal_handler_caller)
213 CORE_ADDR sigcontext_addr = read_memory_integer(fi->frame, 8);
215 if (regno == PC_REGNUM)
216 offset = SIGFRAME_PC_OFF;
218 offset = SIGFRAME_REGSAVE_OFF + regno * 8;
221 return read_memory_integer(sigcontext_addr + offset, 8);
223 else if (regno == SP_REGNUM)
227 if (fi->saved_regs == NULL)
228 alpha_find_saved_regs (fi);
229 if (fi->saved_regs->regs[regno])
230 return read_memory_integer(fi->saved_regs->regs[regno], 8);
233 return read_register(regno);
237 alpha_frame_saved_pc(frame)
238 struct frame_info *frame;
240 alpha_extra_func_info_t proc_desc = frame->proc_desc;
241 /* We have to get the saved pc from the sigcontext
242 if it is a signal handler frame. */
243 int pcreg = frame->signal_handler_caller ? PC_REGNUM
244 : (proc_desc ? PROC_PC_REG(proc_desc) : RA_REGNUM);
246 if (proc_desc && PROC_DESC_IS_DUMMY(proc_desc))
247 return read_memory_integer(frame->frame - 8, 8);
249 return read_next_frame_reg(frame, pcreg);
253 alpha_saved_pc_after_call (frame)
254 struct frame_info *frame;
256 alpha_extra_func_info_t proc_desc = find_proc_desc (frame->pc, frame->next);
257 int pcreg = proc_desc ? PROC_PC_REG (proc_desc) : RA_REGNUM;
259 return read_register (pcreg);
263 static struct alpha_extra_func_info temp_proc_desc;
264 static struct frame_saved_regs temp_saved_regs;
266 /* This fencepost looks highly suspicious to me. Removing it also
267 seems suspicious as it could affect remote debugging across serial
271 heuristic_proc_start(pc)
274 CORE_ADDR start_pc = pc;
275 CORE_ADDR fence = start_pc - heuristic_fence_post;
277 if (start_pc == 0) return 0;
279 if (heuristic_fence_post == UINT_MAX
280 || fence < VM_MIN_ADDRESS)
281 fence = VM_MIN_ADDRESS;
283 /* search back for previous return */
284 for (start_pc -= 4; ; start_pc -= 4)
285 if (start_pc < fence)
287 /* It's not clear to me why we reach this point when
288 stop_soon_quietly, but with this test, at least we
289 don't print out warnings for every child forked (eg, on
291 if (!stop_soon_quietly)
293 static int blurb_printed = 0;
295 if (fence == VM_MIN_ADDRESS)
296 warning("Hit beginning of text section without finding");
298 warning("Hit heuristic-fence-post without finding");
300 warning("enclosing function for address 0x%lx", pc);
304 This warning occurs if you are debugging a function without any symbols\n\
305 (for example, in a stripped executable). In that case, you may wish to\n\
306 increase the size of the search with the `set heuristic-fence-post' command.\n\
308 Otherwise, you told GDB there was a function where there isn't one, or\n\
309 (more likely) you have encountered a bug in GDB.\n");
316 else if (ABOUT_TO_RETURN(start_pc))
319 start_pc += 4; /* skip return */
323 static alpha_extra_func_info_t
324 heuristic_proc_desc(start_pc, limit_pc, next_frame)
325 CORE_ADDR start_pc, limit_pc;
326 struct frame_info *next_frame;
328 CORE_ADDR sp = read_next_frame_reg (next_frame, SP_REGNUM);
331 int has_frame_reg = 0;
332 unsigned long reg_mask = 0;
336 memset (&temp_proc_desc, '\0', sizeof(temp_proc_desc));
337 memset (&temp_saved_regs, '\0', sizeof(struct frame_saved_regs));
338 PROC_LOW_ADDR (&temp_proc_desc) = start_pc;
340 if (start_pc + 200 < limit_pc)
341 limit_pc = start_pc + 200;
343 for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += 4)
349 status = read_memory_nobpt (cur_pc, buf, 4);
351 memory_error (status, cur_pc);
352 word = extract_unsigned_integer (buf, 4);
354 if ((word & 0xffff0000) == 0x23de0000) /* lda $sp,n($sp) */
355 frame_size += (-word) & 0xffff;
356 else if ((word & 0xfc1f0000) == 0xb41e0000 /* stq reg,n($sp) */
357 && (word & 0xffff0000) != 0xb7fe0000) /* reg != $zero */
359 int reg = (word & 0x03e00000) >> 21;
360 reg_mask |= 1 << reg;
361 temp_saved_regs.regs[reg] = sp + (short)word;
363 else if (word == 0x47de040f) /* bis sp,sp fp */
367 PROC_FRAME_REG(&temp_proc_desc) = GCC_FP_REGNUM;
369 PROC_FRAME_REG(&temp_proc_desc) = SP_REGNUM;
370 PROC_FRAME_OFFSET(&temp_proc_desc) = frame_size;
371 PROC_REG_MASK(&temp_proc_desc) = reg_mask;
372 PROC_PC_REG(&temp_proc_desc) = RA_REGNUM;
373 PROC_LOCALOFF(&temp_proc_desc) = 0; /* XXX - bogus */
374 return &temp_proc_desc;
377 /* This returns the PC of the first inst after the prologue. If we can't
378 find the prologue, then return 0. */
381 after_prologue (pc, proc_desc)
383 alpha_extra_func_info_t proc_desc;
386 struct symtab_and_line sal;
387 CORE_ADDR func_addr, func_end;
390 proc_desc = find_proc_desc (pc, NULL);
394 /* If function is frameless, then we need to do it the hard way. I
395 strongly suspect that frameless always means prologueless... */
396 if (PROC_FRAME_REG (proc_desc) == SP_REGNUM
397 && PROC_FRAME_OFFSET (proc_desc) == 0)
401 if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
402 return 0; /* Unknown */
404 sal = find_pc_line (func_addr, 0);
406 if (sal.end < func_end)
409 /* The line after the prologue is after the end of the function. In this
410 case, tell the caller to find the prologue the hard way. */
415 /* Return non-zero if we *might* be in a function prologue. Return zero if we
416 are definatly *not* in a function prologue. */
419 in_prologue (pc, proc_desc)
421 alpha_extra_func_info_t proc_desc;
423 CORE_ADDR after_prologue_pc;
425 after_prologue_pc = after_prologue (pc, proc_desc);
427 if (after_prologue_pc == 0
428 || pc < after_prologue_pc)
434 static alpha_extra_func_info_t
435 find_proc_desc (pc, next_frame)
437 struct frame_info *next_frame;
439 alpha_extra_func_info_t proc_desc;
444 /* Try to get the proc_desc from the linked call dummy proc_descs
445 if the pc is in the call dummy.
446 This is hairy. In the case of nested dummy calls we have to find the
447 right proc_desc, but we might not yet know the frame for the dummy
448 as it will be contained in the proc_desc we are searching for.
449 So we have to find the proc_desc whose frame is closest to the current
452 if (PC_IN_CALL_DUMMY (pc, 0, 0))
454 struct linked_proc_info *link;
455 CORE_ADDR sp = read_next_frame_reg (next_frame, SP_REGNUM);
456 alpha_extra_func_info_t found_proc_desc = NULL;
457 long min_distance = LONG_MAX;
459 for (link = linked_proc_desc_table; link; link = link->next)
461 long distance = (CORE_ADDR) PROC_DUMMY_FRAME (&link->info) - sp;
462 if (distance > 0 && distance < min_distance)
464 min_distance = distance;
465 found_proc_desc = &link->info;
468 if (found_proc_desc != NULL)
469 return found_proc_desc;
472 b = block_for_pc(pc);
474 find_pc_partial_function (pc, NULL, &startaddr, NULL);
479 if (startaddr > BLOCK_START (b))
480 /* This is the "pathological" case referred to in a comment in
481 print_frame_info. It might be better to move this check into
485 sym = lookup_symbol (MIPS_EFI_SYMBOL_NAME, b, LABEL_NAMESPACE,
491 /* IF this is the topmost frame AND
492 * (this proc does not have debugging information OR
493 * the PC is in the procedure prologue)
494 * THEN create a "heuristic" proc_desc (by analyzing
495 * the actual code) to replace the "official" proc_desc.
497 proc_desc = (alpha_extra_func_info_t)SYMBOL_VALUE(sym);
498 if (next_frame == NULL)
500 if (PROC_DESC_IS_DUMMY (proc_desc) || in_prologue (pc, proc_desc))
502 alpha_extra_func_info_t found_heuristic =
503 heuristic_proc_desc (PROC_LOW_ADDR (proc_desc),
505 PROC_LOCALOFF (found_heuristic) = PROC_LOCALOFF (proc_desc);
507 proc_desc = found_heuristic;
513 /* Is linked_proc_desc_table really necessary? It only seems to be used
514 by procedure call dummys. However, the procedures being called ought
515 to have their own proc_descs, and even if they don't,
516 heuristic_proc_desc knows how to create them! */
518 register struct linked_proc_info *link;
519 for (link = linked_proc_desc_table; link; link = link->next)
520 if (PROC_LOW_ADDR(&link->info) <= pc
521 && PROC_HIGH_ADDR(&link->info) > pc)
525 startaddr = heuristic_proc_start (pc);
528 heuristic_proc_desc (startaddr, pc, next_frame);
533 alpha_extra_func_info_t cached_proc_desc;
536 alpha_frame_chain(frame)
537 struct frame_info *frame;
539 alpha_extra_func_info_t proc_desc;
540 CORE_ADDR saved_pc = FRAME_SAVED_PC(frame);
542 if (saved_pc == 0 || inside_entry_file (saved_pc))
545 proc_desc = find_proc_desc(saved_pc, frame);
549 cached_proc_desc = proc_desc;
551 /* Fetch the frame pointer for a dummy frame from the procedure
553 if (PROC_DESC_IS_DUMMY(proc_desc))
554 return (CORE_ADDR) PROC_DUMMY_FRAME(proc_desc);
556 /* If no frame pointer and frame size is zero, we must be at end
557 of stack (or otherwise hosed). If we don't check frame size,
558 we loop forever if we see a zero size frame. */
559 if (PROC_FRAME_REG (proc_desc) == SP_REGNUM
560 && PROC_FRAME_OFFSET (proc_desc) == 0
561 /* The previous frame from a sigtramp frame might be frameless
562 and have frame size zero. */
563 && !frame->signal_handler_caller)
565 /* The alpha __sigtramp routine is frameless and has a frame size
566 of zero, but we are able to backtrace through it. */
568 find_pc_partial_function (saved_pc, &name,
569 (CORE_ADDR *)NULL, (CORE_ADDR *)NULL);
570 if (IN_SIGTRAMP (saved_pc, name))
576 return read_next_frame_reg(frame, PROC_FRAME_REG(proc_desc))
577 + PROC_FRAME_OFFSET(proc_desc);
581 init_extra_frame_info (frame)
582 struct frame_info *frame;
584 /* Use proc_desc calculated in frame_chain */
585 alpha_extra_func_info_t proc_desc =
586 frame->next ? cached_proc_desc : find_proc_desc(frame->pc, frame->next);
588 frame->saved_regs = NULL;
590 proc_desc == &temp_proc_desc ? 0 : proc_desc;
593 /* Get the locals offset from the procedure descriptor, it is valid
594 even if we are in the middle of the prologue. */
595 frame->localoff = PROC_LOCALOFF(proc_desc);
597 /* Fixup frame-pointer - only needed for top frame */
599 /* Fetch the frame pointer for a dummy frame from the procedure
601 if (PROC_DESC_IS_DUMMY(proc_desc))
602 frame->frame = (CORE_ADDR) PROC_DUMMY_FRAME(proc_desc);
604 /* This may not be quite right, if proc has a real frame register.
605 Get the value of the frame relative sp, procedure might have been
606 interrupted by a signal at it's very start. */
607 else if (frame->pc == PROC_LOW_ADDR (proc_desc) && !PROC_DESC_IS_DUMMY (proc_desc))
608 frame->frame = read_next_frame_reg (frame->next, SP_REGNUM);
610 frame->frame = read_next_frame_reg (frame->next, PROC_FRAME_REG (proc_desc))
611 + PROC_FRAME_OFFSET (proc_desc);
613 if (proc_desc == &temp_proc_desc)
615 frame->saved_regs = (struct frame_saved_regs*)
616 obstack_alloc (&frame_cache_obstack,
617 sizeof (struct frame_saved_regs));
618 *frame->saved_regs = temp_saved_regs;
619 frame->saved_regs->regs[PC_REGNUM] = frame->saved_regs->regs[RA_REGNUM];
624 /* ALPHA stack frames are almost impenetrable. When execution stops,
625 we basically have to look at symbol information for the function
626 that we stopped in, which tells us *which* register (if any) is
627 the base of the frame pointer, and what offset from that register
628 the frame itself is at.
630 This presents a problem when trying to examine a stack in memory
631 (that isn't executing at the moment), using the "frame" command. We
632 don't have a PC, nor do we have any registers except SP.
634 This routine takes two arguments, SP and PC, and tries to make the
635 cached frames look as if these two arguments defined a frame on the
636 cache. This allows the rest of info frame to extract the important
637 arguments without difficulty. */
640 setup_arbitrary_frame (argc, argv)
645 error ("ALPHA frame specifications require two arguments: sp and pc");
647 return create_new_frame (argv[0], argv[1]);
650 /* The alpha passes the first six arguments in the registers, the rest on
651 the stack. The register arguments are eventually transferred to the
652 argument transfer area immediately below the stack by the called function
653 anyway. So we `push' at least six arguments on the stack, `reload' the
654 argument registers and then adjust the stack pointer to point past the
655 sixth argument. This algorithm simplifies the passing of a large struct
656 which extends from the registers to the stack.
657 If the called function is returning a structure, the address of the
658 structure to be returned is passed as a hidden first argument. */
661 alpha_push_arguments (nargs, args, sp, struct_return, struct_addr)
666 CORE_ADDR struct_addr;
669 int accumulate_size = struct_return ? 8 : 0;
670 int arg_regs_size = ALPHA_NUM_ARG_REGS * 8;
671 struct alpha_arg { char *contents; int len; int offset; };
672 struct alpha_arg *alpha_args =
673 (struct alpha_arg*)alloca (nargs * sizeof (struct alpha_arg));
674 register struct alpha_arg *m_arg;
675 char raw_buffer[sizeof (CORE_ADDR)];
676 int required_arg_regs;
678 for (i = 0, m_arg = alpha_args; i < nargs; i++, m_arg++)
680 value_ptr arg = value_arg_coerce (args[i]);
681 /* Cast argument to long if necessary as the compiler does it too. */
682 if (TYPE_LENGTH (VALUE_TYPE (arg)) < TYPE_LENGTH (builtin_type_long))
683 arg = value_cast (builtin_type_long, arg);
684 m_arg->len = TYPE_LENGTH (VALUE_TYPE (arg));
685 m_arg->offset = accumulate_size;
686 accumulate_size = (accumulate_size + m_arg->len + 7) & ~7;
687 m_arg->contents = VALUE_CONTENTS(arg);
690 /* Determine required argument register loads, loading an argument register
691 is expensive as it uses three ptrace calls. */
692 required_arg_regs = accumulate_size / 8;
693 if (required_arg_regs > ALPHA_NUM_ARG_REGS)
694 required_arg_regs = ALPHA_NUM_ARG_REGS;
696 /* Make room for the arguments on the stack. */
697 if (accumulate_size < arg_regs_size)
698 accumulate_size = arg_regs_size;
699 sp -= accumulate_size;
701 /* Keep sp aligned to a multiple of 16 as the compiler does it too. */
704 /* `Push' arguments on the stack. */
705 for (i = nargs; m_arg--, --i >= 0; )
706 write_memory(sp + m_arg->offset, m_arg->contents, m_arg->len);
709 store_address (raw_buffer, sizeof (CORE_ADDR), struct_addr);
710 write_memory (sp, raw_buffer, sizeof (CORE_ADDR));
713 /* Load the argument registers. */
714 for (i = 0; i < required_arg_regs; i++)
718 val = read_memory_integer (sp + i * 8, 8);
719 write_register (A0_REGNUM + i, val);
720 write_register (FPA0_REGNUM + i, val);
723 return sp + arg_regs_size;
727 alpha_push_dummy_frame()
730 struct linked_proc_info *link;
731 alpha_extra_func_info_t proc_desc;
732 CORE_ADDR sp = read_register (SP_REGNUM);
733 CORE_ADDR save_address;
734 char raw_buffer[MAX_REGISTER_RAW_SIZE];
737 link = (struct linked_proc_info *) xmalloc(sizeof (struct linked_proc_info));
738 link->next = linked_proc_desc_table;
739 linked_proc_desc_table = link;
741 proc_desc = &link->info;
744 * The registers we must save are all those not preserved across
746 * In addition, we must save the PC and RA.
748 * Dummy frame layout:
758 * Parameter build area
762 /* MASK(i,j) == (1<<i) + (1<<(i+1)) + ... + (1<<j)). Assume i<=j<31. */
763 #define MASK(i,j) (((1L << ((j)+1)) - 1) ^ ((1L << (i)) - 1))
764 #define GEN_REG_SAVE_MASK (MASK(0,8) | MASK(16,29))
765 #define GEN_REG_SAVE_COUNT 24
766 #define FLOAT_REG_SAVE_MASK (MASK(0,1) | MASK(10,30))
767 #define FLOAT_REG_SAVE_COUNT 23
768 /* The special register is the PC as we have no bit for it in the save masks.
769 alpha_frame_saved_pc knows where the pc is saved in a dummy frame. */
770 #define SPECIAL_REG_SAVE_COUNT 1
772 PROC_REG_MASK(proc_desc) = GEN_REG_SAVE_MASK;
773 PROC_FREG_MASK(proc_desc) = FLOAT_REG_SAVE_MASK;
774 /* PROC_REG_OFFSET is the offset from the dummy frame to the saved RA,
775 but keep SP aligned to a multiple of 16. */
776 PROC_REG_OFFSET(proc_desc) =
777 - ((8 * (SPECIAL_REG_SAVE_COUNT
779 + FLOAT_REG_SAVE_COUNT)
781 PROC_FREG_OFFSET(proc_desc) =
782 PROC_REG_OFFSET(proc_desc) + 8 * GEN_REG_SAVE_COUNT;
784 /* Save general registers.
785 The return address register is the first saved register, all other
786 registers follow in ascending order.
787 The PC is saved immediately below the SP. */
788 save_address = sp + PROC_REG_OFFSET(proc_desc);
789 store_address (raw_buffer, 8, read_register (RA_REGNUM));
790 write_memory (save_address, raw_buffer, 8);
792 mask = PROC_REG_MASK(proc_desc) & 0xffffffffL;
793 for (ireg = 0; mask; ireg++, mask >>= 1)
796 if (ireg == RA_REGNUM)
798 store_address (raw_buffer, 8, read_register (ireg));
799 write_memory (save_address, raw_buffer, 8);
803 store_address (raw_buffer, 8, read_register (PC_REGNUM));
804 write_memory (sp - 8, raw_buffer, 8);
806 /* Save floating point registers. */
807 save_address = sp + PROC_FREG_OFFSET(proc_desc);
808 mask = PROC_FREG_MASK(proc_desc) & 0xffffffffL;
809 for (ireg = 0; mask; ireg++, mask >>= 1)
812 store_address (raw_buffer, 8, read_register (ireg + FP0_REGNUM));
813 write_memory (save_address, raw_buffer, 8);
817 /* Set and save the frame address for the dummy.
818 This is tricky. The only registers that are suitable for a frame save
819 are those that are preserved across procedure calls (s0-s6). But if
820 a read system call is interrupted and then a dummy call is made
821 (see testsuite/gdb.t17/interrupt.exp) the dummy call hangs till the read
822 is satisfied. Then it returns with the s0-s6 registers set to the values
823 on entry to the read system call and our dummy frame pointer would be
824 destroyed. So we save the dummy frame in the proc_desc and handle the
825 retrieval of the frame pointer of a dummy specifically. The frame register
826 is set to the virtual frame (pseudo) register, it's value will always
827 be read as zero and will help us to catch any errors in the dummy frame
829 PROC_DUMMY_FRAME(proc_desc) = sp;
830 PROC_FRAME_REG(proc_desc) = FP_REGNUM;
831 PROC_FRAME_OFFSET(proc_desc) = 0;
832 sp += PROC_REG_OFFSET(proc_desc);
833 write_register (SP_REGNUM, sp);
835 PROC_LOW_ADDR(proc_desc) = CALL_DUMMY_ADDRESS ();
836 PROC_HIGH_ADDR(proc_desc) = PROC_LOW_ADDR(proc_desc) + 4;
838 SET_PROC_DESC_IS_DUMMY(proc_desc);
839 PROC_PC_REG(proc_desc) = RA_REGNUM;
846 struct frame_info *frame = get_current_frame ();
847 CORE_ADDR new_sp = frame->frame;
849 alpha_extra_func_info_t proc_desc = frame->proc_desc;
851 write_register (PC_REGNUM, FRAME_SAVED_PC(frame));
852 if (frame->saved_regs == NULL)
853 alpha_find_saved_regs (frame);
856 for (regnum = 32; --regnum >= 0; )
857 if (PROC_REG_MASK(proc_desc) & (1 << regnum))
858 write_register (regnum,
859 read_memory_integer (frame->saved_regs->regs[regnum],
861 for (regnum = 32; --regnum >= 0; )
862 if (PROC_FREG_MASK(proc_desc) & (1 << regnum))
863 write_register (regnum + FP0_REGNUM,
864 read_memory_integer (frame->saved_regs->regs[regnum + FP0_REGNUM], 8));
866 write_register (SP_REGNUM, new_sp);
867 flush_cached_frames ();
869 if (proc_desc && PROC_DESC_IS_DUMMY(proc_desc))
871 struct linked_proc_info *pi_ptr, *prev_ptr;
873 for (pi_ptr = linked_proc_desc_table, prev_ptr = NULL;
875 prev_ptr = pi_ptr, pi_ptr = pi_ptr->next)
877 if (&pi_ptr->info == proc_desc)
882 error ("Can't locate dummy extra frame info\n");
884 if (prev_ptr != NULL)
885 prev_ptr->next = pi_ptr->next;
887 linked_proc_desc_table = pi_ptr->next;
893 /* To skip prologues, I use this predicate. Returns either PC itself
894 if the code at PC does not look like a function prologue; otherwise
895 returns an address that (if we're lucky) follows the prologue. If
896 LENIENT, then we must skip everything which is involved in setting
897 up the frame (it's OK to skip more, just so long as we don't skip
898 anything which might clobber the registers which are being saved.
899 Currently we must not skip more on the alpha, but we might the lenient
903 alpha_skip_prologue (pc, lenient)
909 CORE_ADDR post_prologue_pc;
912 #ifdef GDB_TARGET_HAS_SHARED_LIBS
913 /* Silently return the unaltered pc upon memory errors.
914 This could happen on OSF/1 if decode_line_1 tries to skip the
915 prologue for quickstarted shared library functions when the
916 shared library is not yet mapped in.
917 Reading target memory is slow over serial lines, so we perform
918 this check only if the target has shared libraries. */
919 if (target_read_memory (pc, buf, 4))
923 /* See if we can determine the end of the prologue via the symbol table.
924 If so, then return either PC, or the PC after the prologue, whichever
927 post_prologue_pc = after_prologue (pc, NULL);
929 if (post_prologue_pc != 0)
930 return max (pc, post_prologue_pc);
932 /* Can't determine prologue from the symbol table, need to examine
935 /* Skip the typical prologue instructions. These are the stack adjustment
936 instruction and the instructions that save registers on the stack
937 or in the gcc frame. */
938 for (offset = 0; offset < 100; offset += 4)
942 status = read_memory_nobpt (pc + offset, buf, 4);
944 memory_error (status, pc + offset);
945 inst = extract_unsigned_integer (buf, 4);
947 /* The alpha has no delay slots. But let's keep the lenient stuff,
948 we might need it for something else in the future. */
952 if ((inst & 0xffff0000) == 0x27bb0000) /* ldah $gp,n($t12) */
954 if ((inst & 0xffff0000) == 0x23bd0000) /* lda $gp,n($gp) */
956 if ((inst & 0xffff0000) == 0x23de0000) /* lda $sp,n($sp) */
958 else if ((inst & 0xfc1f0000) == 0xb41e0000
959 && (inst & 0xffff0000) != 0xb7fe0000)
960 continue; /* stq reg,n($sp) */
962 else if ((inst & 0xfc1f0000) == 0x9c1e0000
963 && (inst & 0xffff0000) != 0x9ffe0000)
964 continue; /* stt reg,n($sp) */
966 else if (inst == 0x47de040f) /* bis sp,sp,fp */
974 /* Is address PC in the prologue (loosely defined) for function at
978 alpha_in_lenient_prologue (startaddr, pc)
982 CORE_ADDR end_prologue = alpha_skip_prologue (startaddr, 1);
983 return pc >= startaddr && pc < end_prologue;
986 /* The alpha needs a conversion between register and memory format if
987 the register is a floating point register and
988 memory format is float, as the register format must be double
990 memory format is an integer with 4 bytes or less, as the representation
991 of integers in floating point registers is different. */
993 alpha_register_convert_to_virtual (regnum, valtype, raw_buffer, virtual_buffer)
995 struct type *valtype;
997 char *virtual_buffer;
999 if (TYPE_LENGTH (valtype) >= REGISTER_RAW_SIZE (regnum))
1001 memcpy (virtual_buffer, raw_buffer, REGISTER_VIRTUAL_SIZE (regnum));
1005 if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1007 double d = extract_floating (raw_buffer, REGISTER_RAW_SIZE (regnum));
1008 store_floating (virtual_buffer, TYPE_LENGTH (valtype), d);
1010 else if (TYPE_CODE (valtype) == TYPE_CODE_INT && TYPE_LENGTH (valtype) <= 4)
1013 l = extract_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum));
1014 l = ((l >> 32) & 0xc0000000) | ((l >> 29) & 0x3fffffff);
1015 store_unsigned_integer (virtual_buffer, TYPE_LENGTH (valtype), l);
1018 error ("Cannot retrieve value from floating point register");
1022 alpha_register_convert_to_raw (valtype, regnum, virtual_buffer, raw_buffer)
1023 struct type *valtype;
1025 char *virtual_buffer;
1028 if (TYPE_LENGTH (valtype) >= REGISTER_RAW_SIZE (regnum))
1030 memcpy (raw_buffer, virtual_buffer, REGISTER_RAW_SIZE (regnum));
1034 if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1036 double d = extract_floating (virtual_buffer, TYPE_LENGTH (valtype));
1037 store_floating (raw_buffer, REGISTER_RAW_SIZE (regnum), d);
1039 else if (TYPE_CODE (valtype) == TYPE_CODE_INT && TYPE_LENGTH (valtype) <= 4)
1042 if (TYPE_UNSIGNED (valtype))
1043 l = extract_unsigned_integer (virtual_buffer, TYPE_LENGTH (valtype));
1045 l = extract_signed_integer (virtual_buffer, TYPE_LENGTH (valtype));
1046 l = ((l & 0xc0000000) << 32) | ((l & 0x3fffffff) << 29);
1047 store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum), l);
1050 error ("Cannot store value in floating point register");
1053 /* Given a return value in `regbuf' with a type `valtype',
1054 extract and copy its value into `valbuf'. */
1057 alpha_extract_return_value (valtype, regbuf, valbuf)
1058 struct type *valtype;
1059 char regbuf[REGISTER_BYTES];
1064 regnum = TYPE_CODE (valtype) == TYPE_CODE_FLT ? FP0_REGNUM : V0_REGNUM;
1066 memcpy (valbuf, regbuf + REGISTER_BYTE (regnum), TYPE_LENGTH (valtype));
1069 /* Given a return value in `regbuf' with a type `valtype',
1070 write its value into the appropriate register. */
1073 alpha_store_return_value (valtype, valbuf)
1074 struct type *valtype;
1078 char raw_buffer[MAX_REGISTER_RAW_SIZE];
1080 regnum = TYPE_CODE (valtype) == TYPE_CODE_FLT ? FP0_REGNUM : V0_REGNUM;
1081 memcpy(raw_buffer, valbuf, TYPE_LENGTH (valtype));
1083 write_register_bytes(REGISTER_BYTE (regnum), raw_buffer, TYPE_LENGTH (valtype));
1086 /* Just like reinit_frame_cache, but with the right arguments to be
1087 callable as an sfunc. */
1090 reinit_frame_cache_sfunc (args, from_tty, c)
1093 struct cmd_list_element *c;
1095 reinit_frame_cache ();
1098 /* This is the definition of CALL_DUMMY_ADDRESS. It's a heuristic that is used
1099 to find a convenient place in the text segment to stick a breakpoint to
1100 detect the completion of a target function call (ala call_function_by_hand).
1104 alpha_call_dummy_address ()
1107 struct minimal_symbol *sym;
1109 entry = entry_point_address ();
1114 sym = lookup_minimal_symbol ("_Prelude", symfile_objfile);
1116 if (!sym || MSYMBOL_TYPE (sym) != mst_text)
1119 return SYMBOL_VALUE_ADDRESS (sym) + 4;
1123 _initialize_alpha_tdep ()
1125 struct cmd_list_element *c;
1127 tm_print_insn = print_insn_alpha;
1129 /* Let the user set the fence post for heuristic_proc_start. */
1131 /* We really would like to have both "0" and "unlimited" work, but
1132 command.c doesn't deal with that. So make it a var_zinteger
1133 because the user can always use "999999" or some such for unlimited. */
1134 c = add_set_cmd ("heuristic-fence-post", class_support, var_zinteger,
1135 (char *) &heuristic_fence_post,
1137 Set the distance searched for the start of a function.\n\
1138 If you are debugging a stripped executable, GDB needs to search through the\n\
1139 program for the start of a function. This command sets the distance of the\n\
1140 search. The only need to set it is when debugging a stripped executable.",
1142 /* We need to throw away the frame cache when we set this, since it
1143 might change our ability to get backtraces. */
1144 c->function.sfunc = reinit_frame_cache_sfunc;
1145 add_show_from_set (c, &showlist);