xref: /openbsd/gnu/usr.bin/binutils/gdb/alpha-tdep.c (revision 78b63d65)
1 /* Target-dependent code for the ALPHA architecture, for GDB, the GNU Debugger.
2    Copyright 1993, 1994, 1995, 1996 Free Software Foundation, Inc.
3 
4 This file is part of GDB.
5 
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.
10 
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.
15 
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
19 
20 #include "defs.h"
21 #include "frame.h"
22 #include "inferior.h"
23 #include "symtab.h"
24 #include "value.h"
25 #include "gdbcmd.h"
26 #include "gdbcore.h"
27 #include "dis-asm.h"
28 #include "symfile.h"
29 #include "objfiles.h"
30 #include "gdb_string.h"
31 
32 /* FIXME: Some of this code should perhaps be merged with mips-tdep.c.  */
33 
34 /* FIXME: Put this declaration in frame.h.  */
35 extern struct obstack frame_cache_obstack;
36 
37 
38 /* Forward declarations.  */
39 
40 static alpha_extra_func_info_t push_sigtramp_desc PARAMS ((CORE_ADDR low_addr));
41 
42 static CORE_ADDR read_next_frame_reg PARAMS ((struct frame_info *, int));
43 
44 static CORE_ADDR heuristic_proc_start PARAMS ((CORE_ADDR));
45 
46 static alpha_extra_func_info_t heuristic_proc_desc PARAMS ((CORE_ADDR,
47 							    CORE_ADDR,
48 							    struct frame_info *));
49 
50 static alpha_extra_func_info_t find_proc_desc PARAMS ((CORE_ADDR,
51 						       struct frame_info *));
52 
53 #if 0
54 static int alpha_in_lenient_prologue PARAMS ((CORE_ADDR, CORE_ADDR));
55 #endif
56 
57 static void reinit_frame_cache_sfunc PARAMS ((char *, int,
58 					      struct cmd_list_element *));
59 
60 static CORE_ADDR after_prologue PARAMS ((CORE_ADDR pc,
61 					 alpha_extra_func_info_t proc_desc));
62 
63 static int alpha_in_prologue PARAMS ((CORE_ADDR pc,
64 				alpha_extra_func_info_t proc_desc));
65 
66 /* Heuristic_proc_start may hunt through the text section for a long
67    time across a 2400 baud serial line.  Allows the user to limit this
68    search.  */
69 static unsigned int heuristic_fence_post = 0;
70 
71 /* Layout of a stack frame on the alpha:
72 
73                 |				|
74  pdr members:	|  7th ... nth arg,		|
75                 |  `pushed' by caller.		|
76                 |				|
77 ----------------|-------------------------------|<--  old_sp == vfp
78    ^  ^  ^  ^	|				|
79    |  |  |  |	|				|
80    |  |localoff	|  Copies of 1st .. 6th		|
81    |  |  |  |	|  argument if necessary.	|
82    |  |  |  v	|				|
83    |  |  |  ---	|-------------------------------|<-- FRAME_LOCALS_ADDRESS
84    |  |  |      |				|
85    |  |  |      |  Locals and temporaries.	|
86    |  |  |      |				|
87    |  |  |      |-------------------------------|
88    |  |  |      |				|
89    |-fregoffset	|  Saved float registers.	|
90    |  |  |      |  F9				|
91    |  |  |      |   .				|
92    |  |  |      |   .				|
93    |  |  |      |  F2				|
94    |  |  v      |				|
95    |  |  -------|-------------------------------|
96    |  |         |				|
97    |  |         |  Saved registers.		|
98    |  |         |  S6				|
99    |-regoffset	|   .				|
100    |  |         |   .				|
101    |  |         |  S0				|
102    |  |         |  pdr.pcreg			|
103    |  v         |				|
104    |  ----------|-------------------------------|
105    |            |				|
106  frameoffset    |  Argument build area, gets	|
107    |            |  7th ... nth arg for any	|
108    |            |  called procedure.		|
109    v            |  				|
110    -------------|-------------------------------|<-- sp
111                 |				|
112 */
113 
114 #define PROC_LOW_ADDR(proc) ((proc)->pdr.adr) /* least address */
115 #define PROC_HIGH_ADDR(proc) ((proc)->pdr.iline) /* upper address bound */
116 #define PROC_DUMMY_FRAME(proc) ((proc)->pdr.iopt) /* frame for CALL_DUMMY */
117 #define PROC_FRAME_OFFSET(proc) ((proc)->pdr.frameoffset)
118 #define PROC_FRAME_REG(proc) ((proc)->pdr.framereg)
119 #define PROC_REG_MASK(proc) ((proc)->pdr.regmask)
120 #define PROC_FREG_MASK(proc) ((proc)->pdr.fregmask)
121 #define PROC_REG_OFFSET(proc) ((proc)->pdr.regoffset)
122 #define PROC_FREG_OFFSET(proc) ((proc)->pdr.fregoffset)
123 #define PROC_PC_REG(proc) ((proc)->pdr.pcreg)
124 #define PROC_LOCALOFF(proc) ((proc)->pdr.localoff)
125 #define PROC_SYMBOL(proc) (*(struct symbol**)&(proc)->pdr.isym)
126 #define _PROC_MAGIC_ 0x0F0F0F0F
127 #define PROC_DESC_IS_DUMMY(proc) ((proc)->pdr.isym == _PROC_MAGIC_)
128 #define SET_PROC_DESC_IS_DUMMY(proc) ((proc)->pdr.isym = _PROC_MAGIC_)
129 
130 struct linked_proc_info
131 {
132   struct alpha_extra_func_info info;
133   struct linked_proc_info *next;
134 } *linked_proc_desc_table = NULL;
135 
136 
137 /* Under Linux, signal handler invocations can be identified by the
138    designated code sequence that is used to return from a signal
139    handler.  In particular, the return address of a signal handler
140    points to the following sequence (the first instruction is quadword
141    aligned):
142 
143 	bis $30,$30,$16
144 	addq $31,0x67,$0
145 	call_pal callsys
146 
147    Each instruction has a unique encoding, so we simply attempt to
148    match the instruction the pc is pointing to with any of the above
149    instructions.  If there is a hit, we know the offset to the start
150    of the designated sequence and can then check whether we really are
151    executing in a designated sequence.  If not, -1 is returned,
152    otherwise the offset from the start of the desingated sequence is
153    returned.
154 
155    There is a slight chance of false hits: code could jump into the
156    middle of the designated sequence, in which case there is no
157    guarantee that we are in the middle of a sigreturn syscall.  Don't
158    think this will be a problem in praxis, though.
159 */
160 
161 long
162 alpha_linux_sigtramp_offset (CORE_ADDR pc)
163 {
164   unsigned int i[3], w;
165   long off;
166 
167   if (read_memory_nobpt(pc, (char *) &w, 4) != 0)
168     return -1;
169 
170   off = -1;
171   switch (w)
172     {
173     case 0x47de0410: off = 0; break;	/* bis $30,$30,$16 */
174     case 0x43ecf400: off = 4; break;	/* addq $31,0x67,$0 */
175     case 0x00000083: off = 8; break;	/* call_pal callsys */
176     default:	     return -1;
177     }
178   pc -= off;
179   if (pc & 0x7)
180     {
181       /* designated sequence is not quadword aligned */
182       return -1;
183     }
184 
185   if (read_memory_nobpt(pc, (char *) i, sizeof(i)) != 0)
186     return -1;
187 
188   if (i[0] == 0x47de0410 && i[1] == 0x43ecf400 && i[2] == 0x00000083)
189     return off;
190 
191   return -1;
192 }
193 
194 
195 /* Under OSF/1, the __sigtramp routine is frameless and has a frame
196    size of zero, but we are able to backtrace through it.  */
197 CORE_ADDR
198 alpha_osf_skip_sigtramp_frame (frame, pc)
199      struct frame_info *frame;
200      CORE_ADDR pc;
201 {
202   char *name;
203   find_pc_partial_function (pc, &name, (CORE_ADDR *)NULL, (CORE_ADDR *)NULL);
204   if (IN_SIGTRAMP (pc, name))
205     return frame->frame;
206   else
207     return 0;
208 }
209 
210 
211 /* Dynamically create a signal-handler caller procedure descriptor for
212    the signal-handler return code starting at address LOW_ADDR.  The
213    descriptor is added to the linked_proc_desc_table.  */
214 
215 static alpha_extra_func_info_t
216 push_sigtramp_desc (low_addr)
217      CORE_ADDR low_addr;
218 {
219   struct linked_proc_info *link;
220   alpha_extra_func_info_t proc_desc;
221 
222   link = (struct linked_proc_info *)
223     xmalloc (sizeof (struct linked_proc_info));
224   link->next = linked_proc_desc_table;
225   linked_proc_desc_table = link;
226 
227   proc_desc = &link->info;
228 
229   proc_desc->numargs = 0;
230   PROC_LOW_ADDR (proc_desc)	= low_addr;
231   PROC_HIGH_ADDR (proc_desc)	= low_addr + 3 * 4;
232   PROC_DUMMY_FRAME (proc_desc)	= 0;
233   PROC_FRAME_OFFSET (proc_desc)	= 0x298; /* sizeof(struct sigcontext_struct) */
234   PROC_FRAME_REG (proc_desc)	= SP_REGNUM;
235   PROC_REG_MASK (proc_desc)	= 0xffff;
236   PROC_FREG_MASK (proc_desc)	= 0xffff;
237   PROC_PC_REG (proc_desc)	= 26;
238   PROC_LOCALOFF (proc_desc)	= 0;
239   SET_PROC_DESC_IS_DYN_SIGTRAMP (proc_desc);
240   return (proc_desc);
241 }
242 
243 
244 /* Guaranteed to set frame->saved_regs to some values (it never leaves it
245    NULL).  */
246 
247 void
248 alpha_find_saved_regs (frame)
249      struct frame_info *frame;
250 {
251   int ireg;
252   CORE_ADDR reg_position;
253   unsigned long mask;
254   alpha_extra_func_info_t proc_desc;
255   int returnreg;
256 
257   frame->saved_regs = (struct frame_saved_regs *)
258     obstack_alloc (&frame_cache_obstack, sizeof(struct frame_saved_regs));
259   memset (frame->saved_regs, 0, sizeof (struct frame_saved_regs));
260 
261   /* If it is the frame for __sigtramp, the saved registers are located
262      in a sigcontext structure somewhere on the stack. __sigtramp
263      passes a pointer to the sigcontext structure on the stack.
264      If the stack layout for __sigtramp changes, or if sigcontext offsets
265      change, we might have to update this code.  */
266 #ifndef SIGFRAME_PC_OFF
267 #define SIGFRAME_PC_OFF		(2 * 8)
268 #define SIGFRAME_REGSAVE_OFF	(4 * 8)
269 #define SIGFRAME_FPREGSAVE_OFF	(SIGFRAME_REGSAVE_OFF + 32 * 8 + 8)
270 #endif
271   if (frame->signal_handler_caller)
272     {
273       CORE_ADDR sigcontext_addr;
274 
275       sigcontext_addr = SIGCONTEXT_ADDR (frame);
276       for (ireg = 0; ireg < 32; ireg++)
277 	{
278  	  reg_position = sigcontext_addr + SIGFRAME_REGSAVE_OFF + ireg * 8;
279  	  frame->saved_regs->regs[ireg] = reg_position;
280 	}
281       for (ireg = 0; ireg < 32; ireg++)
282 	{
283  	  reg_position = sigcontext_addr + SIGFRAME_FPREGSAVE_OFF + ireg * 8;
284  	  frame->saved_regs->regs[FP0_REGNUM + ireg] = reg_position;
285 	}
286       frame->saved_regs->regs[PC_REGNUM] = sigcontext_addr + SIGFRAME_PC_OFF;
287       return;
288     }
289 
290   proc_desc = frame->proc_desc;
291   if (proc_desc == NULL)
292     /* I'm not sure how/whether this can happen.  Normally when we can't
293        find a proc_desc, we "synthesize" one using heuristic_proc_desc
294        and set the saved_regs right away.  */
295     return;
296 
297   /* Fill in the offsets for the registers which gen_mask says
298      were saved.  */
299 
300   reg_position = frame->frame + PROC_REG_OFFSET (proc_desc);
301   mask = PROC_REG_MASK (proc_desc);
302 
303   returnreg = PROC_PC_REG (proc_desc);
304 
305   /* Note that RA is always saved first, regardless of its actual
306      register number.  */
307   if (mask & (1 << returnreg))
308     {
309       frame->saved_regs->regs[returnreg] = reg_position;
310       reg_position += 8;
311       mask &= ~(1 << returnreg); /* Clear bit for RA so we
312 				    don't save again later. */
313     }
314 
315   for (ireg = 0; ireg <= 31 ; ++ireg)
316     if (mask & (1 << ireg))
317       {
318 	frame->saved_regs->regs[ireg] = reg_position;
319 	reg_position += 8;
320       }
321 
322   /* Fill in the offsets for the registers which float_mask says
323      were saved.  */
324 
325   reg_position = frame->frame + PROC_FREG_OFFSET (proc_desc);
326   mask = PROC_FREG_MASK (proc_desc);
327 
328   for (ireg = 0; ireg <= 31 ; ++ireg)
329     if (mask & (1 << ireg))
330       {
331 	frame->saved_regs->regs[FP0_REGNUM+ireg] = reg_position;
332 	reg_position += 8;
333       }
334 
335   frame->saved_regs->regs[PC_REGNUM] = frame->saved_regs->regs[returnreg];
336 }
337 
338 static CORE_ADDR
339 read_next_frame_reg(fi, regno)
340      struct frame_info *fi;
341      int regno;
342 {
343   for (; fi; fi = fi->next)
344     {
345       /* We have to get the saved sp from the sigcontext
346 	 if it is a signal handler frame.  */
347       if (regno == SP_REGNUM && !fi->signal_handler_caller)
348 	return fi->frame;
349       else
350 	{
351 	  if (fi->saved_regs == NULL)
352 	    alpha_find_saved_regs (fi);
353 	  if (fi->saved_regs->regs[regno])
354 	    return read_memory_integer(fi->saved_regs->regs[regno], 8);
355 	}
356     }
357   return read_register(regno);
358 }
359 
360 CORE_ADDR
361 alpha_frame_saved_pc(frame)
362      struct frame_info *frame;
363 {
364   alpha_extra_func_info_t proc_desc = frame->proc_desc;
365   /* We have to get the saved pc from the sigcontext
366      if it is a signal handler frame.  */
367   int pcreg = frame->signal_handler_caller ? PC_REGNUM : frame->pc_reg;
368 
369   if (proc_desc && PROC_DESC_IS_DUMMY(proc_desc))
370       return read_memory_integer(frame->frame - 8, 8);
371 
372   return read_next_frame_reg(frame, pcreg);
373 }
374 
375 CORE_ADDR
376 alpha_saved_pc_after_call (frame)
377      struct frame_info *frame;
378 {
379   CORE_ADDR pc = frame->pc;
380   CORE_ADDR tmp;
381   alpha_extra_func_info_t proc_desc;
382   int pcreg;
383 
384   /* Skip over shared library trampoline if necessary.  */
385   tmp = SKIP_TRAMPOLINE_CODE (pc);
386   if (tmp != 0)
387     pc = tmp;
388 
389   proc_desc = find_proc_desc (pc, frame->next);
390   pcreg = proc_desc ? PROC_PC_REG (proc_desc) : RA_REGNUM;
391 
392   if (frame->signal_handler_caller)
393     return alpha_frame_saved_pc (frame);
394   else
395     return read_register (pcreg);
396 }
397 
398 
399 static struct alpha_extra_func_info temp_proc_desc;
400 static struct frame_saved_regs temp_saved_regs;
401 
402 /* This fencepost looks highly suspicious to me.  Removing it also
403    seems suspicious as it could affect remote debugging across serial
404    lines.  */
405 
406 static CORE_ADDR
407 heuristic_proc_start(pc)
408     CORE_ADDR pc;
409 {
410     CORE_ADDR start_pc = pc;
411     CORE_ADDR fence = start_pc - heuristic_fence_post;
412 
413     if (start_pc == 0)	return 0;
414 
415     if (heuristic_fence_post == UINT_MAX
416 	|| fence < VM_MIN_ADDRESS)
417       fence = VM_MIN_ADDRESS;
418 
419     /* search back for previous return */
420     for (start_pc -= 4; ; start_pc -= 4)
421 	if (start_pc < fence)
422 	  {
423 	    /* It's not clear to me why we reach this point when
424 	       stop_soon_quietly, but with this test, at least we
425 	       don't print out warnings for every child forked (eg, on
426 	       decstation).  22apr93 rich@cygnus.com.  */
427 	    if (!stop_soon_quietly)
428 	      {
429 		static int blurb_printed = 0;
430 
431 		if (fence == VM_MIN_ADDRESS)
432 		  warning("Hit beginning of text section without finding");
433 		else
434 		  warning("Hit heuristic-fence-post without finding");
435 
436 		warning("enclosing function for address 0x%lx", pc);
437 		if (!blurb_printed)
438 		  {
439 		    printf_filtered ("\
440 This warning occurs if you are debugging a function without any symbols\n\
441 (for example, in a stripped executable).  In that case, you may wish to\n\
442 increase the size of the search with the `set heuristic-fence-post' command.\n\
443 \n\
444 Otherwise, you told GDB there was a function where there isn't one, or\n\
445 (more likely) you have encountered a bug in GDB.\n");
446 		    blurb_printed = 1;
447 		  }
448 	      }
449 
450 	    return 0;
451 	  }
452 	else if (ABOUT_TO_RETURN(start_pc))
453 	    break;
454 
455     start_pc += 4; /* skip return */
456     return start_pc;
457 }
458 
459 static alpha_extra_func_info_t
460 heuristic_proc_desc(start_pc, limit_pc, next_frame)
461     CORE_ADDR start_pc, limit_pc;
462     struct frame_info *next_frame;
463 {
464     CORE_ADDR sp = read_next_frame_reg (next_frame, SP_REGNUM);
465     CORE_ADDR cur_pc;
466     int frame_size;
467     int has_frame_reg = 0;
468     unsigned long reg_mask = 0;
469     int pcreg = -1;
470 
471     if (start_pc == 0)
472       return NULL;
473     memset (&temp_proc_desc, '\0', sizeof(temp_proc_desc));
474     memset (&temp_saved_regs, '\0', sizeof(struct frame_saved_regs));
475     PROC_LOW_ADDR (&temp_proc_desc) = start_pc;
476 
477     if (start_pc + 200 < limit_pc)
478       limit_pc = start_pc + 200;
479     frame_size = 0;
480     for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += 4)
481       {
482         char buf[4];
483 	unsigned long word;
484 	int status;
485 
486 	status = read_memory_nobpt (cur_pc, buf, 4);
487 	if (status)
488 	  memory_error (status, cur_pc);
489 	word = extract_unsigned_integer (buf, 4);
490 
491 	if ((word & 0xffff0000) == 0x23de0000)		/* lda $sp,n($sp) */
492 	  {
493 	    if (word & 0x8000)
494 	      frame_size += (-word) & 0xffff;
495 	    else
496 	      /* Exit loop if a positive stack adjustment is found, which
497 		 usually means that the stack cleanup code in the function
498 		 epilogue is reached.  */
499 	      break;
500 	  }
501 	else if ((word & 0xfc1f0000) == 0xb41e0000	/* stq reg,n($sp) */
502 		 && (word & 0xffff0000) != 0xb7fe0000)	/* reg != $zero */
503 	  {
504 	    int reg = (word & 0x03e00000) >> 21;
505 	    reg_mask |= 1 << reg;
506 	    temp_saved_regs.regs[reg] = sp + (short)word;
507 
508 	    /* Starting with OSF/1-3.2C, the system libraries are shipped
509 	       without local symbols, but they still contain procedure
510 	       descriptors without a symbol reference. GDB is currently
511 	       unable to find these procedure descriptors and uses
512 	       heuristic_proc_desc instead.
513 	       As some low level compiler support routines (__div*, __add*)
514 	       use a non-standard return address register, we have to
515 	       add some heuristics to determine the return address register,
516 	       or stepping over these routines will fail.
517 	       Usually the return address register is the first register
518 	       saved on the stack, but assembler optimization might
519 	       rearrange the register saves.
520 	       So we recognize only a few registers (t7, t9, ra) within
521 	       the procedure prologue as valid return address registers.
522 
523 	       FIXME: Rewriting GDB to access the procedure descriptors,
524 	       e.g. via the minimal symbol table, might obviate this hack.  */
525 	    if (pcreg == -1
526 		&& cur_pc < (start_pc + 20)
527 		&& (reg == T7_REGNUM || reg == T9_REGNUM || reg == RA_REGNUM))
528 	      pcreg = reg;
529 	  }
530 	else if (word == 0x47de040f)			/* bis sp,sp fp */
531 	  has_frame_reg = 1;
532       }
533     if (pcreg == -1)
534       {
535 	/* If we haven't found a valid return address register yet,
536 	   keep searching in the procedure prologue.  */
537 	while (cur_pc < (limit_pc + 20) && cur_pc < (start_pc + 20))
538 	  {
539 	    char buf[4];
540 	    unsigned long word;
541 	    int status;
542 
543 	    status = read_memory_nobpt (cur_pc, buf, 4);
544 	    if (status)
545 	      memory_error (status, cur_pc);
546 	    cur_pc += 4;
547 	    word = extract_unsigned_integer (buf, 4);
548 
549 	    if ((word & 0xfc1f0000) == 0xb41e0000	/* stq reg,n($sp) */
550 		&& (word & 0xffff0000) != 0xb7fe0000)	/* reg != $zero */
551 	      {
552 		int reg = (word & 0x03e00000) >> 21;
553 		if (reg == T7_REGNUM || reg == T9_REGNUM || reg == RA_REGNUM)
554 		  {
555 		    pcreg = reg;
556 		    break;
557 		  }
558 	      }
559 	  }
560       }
561 
562     if (has_frame_reg)
563       PROC_FRAME_REG(&temp_proc_desc) = GCC_FP_REGNUM;
564     else
565       PROC_FRAME_REG(&temp_proc_desc) = SP_REGNUM;
566     PROC_FRAME_OFFSET(&temp_proc_desc) = frame_size;
567     PROC_REG_MASK(&temp_proc_desc) = reg_mask;
568     PROC_PC_REG(&temp_proc_desc) = (pcreg == -1) ? RA_REGNUM : pcreg;
569     PROC_LOCALOFF(&temp_proc_desc) = 0;	/* XXX - bogus */
570     return &temp_proc_desc;
571 }
572 
573 /* This returns the PC of the first inst after the prologue.  If we can't
574    find the prologue, then return 0.  */
575 
576 static CORE_ADDR
577 after_prologue (pc, proc_desc)
578      CORE_ADDR pc;
579      alpha_extra_func_info_t proc_desc;
580 {
581   struct symtab_and_line sal;
582   CORE_ADDR func_addr, func_end;
583 
584   if (!proc_desc)
585     proc_desc = find_proc_desc (pc, NULL);
586 
587   if (proc_desc)
588     {
589       if (PROC_DESC_IS_DYN_SIGTRAMP (proc_desc))
590 	return PROC_LOW_ADDR (proc_desc);	/* "prologue" is in kernel */
591 
592       /* If function is frameless, then we need to do it the hard way.  I
593 	 strongly suspect that frameless always means prologueless... */
594       if (PROC_FRAME_REG (proc_desc) == SP_REGNUM
595 	  && PROC_FRAME_OFFSET (proc_desc) == 0)
596 	return 0;
597     }
598 
599   if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
600     return 0;			/* Unknown */
601 
602   sal = find_pc_line (func_addr, 0);
603 
604   if (sal.end < func_end)
605     return sal.end;
606 
607   /* The line after the prologue is after the end of the function.  In this
608      case, tell the caller to find the prologue the hard way.  */
609 
610   return 0;
611 }
612 
613 /* Return non-zero if we *might* be in a function prologue.  Return zero if we
614    are definitively *not* in a function prologue.  */
615 
616 static int
617 alpha_in_prologue (pc, proc_desc)
618      CORE_ADDR pc;
619      alpha_extra_func_info_t proc_desc;
620 {
621   CORE_ADDR after_prologue_pc;
622 
623   after_prologue_pc = after_prologue (pc, proc_desc);
624 
625   if (after_prologue_pc == 0
626       || pc < after_prologue_pc)
627     return 1;
628   else
629     return 0;
630 }
631 
632 static alpha_extra_func_info_t
633 find_proc_desc (pc, next_frame)
634     CORE_ADDR pc;
635     struct frame_info *next_frame;
636 {
637   alpha_extra_func_info_t proc_desc;
638   struct block *b;
639   struct symbol *sym;
640   CORE_ADDR startaddr;
641 
642   /* Try to get the proc_desc from the linked call dummy proc_descs
643      if the pc is in the call dummy.
644      This is hairy. In the case of nested dummy calls we have to find the
645      right proc_desc, but we might not yet know the frame for the dummy
646      as it will be contained in the proc_desc we are searching for.
647      So we have to find the proc_desc whose frame is closest to the current
648      stack pointer.  */
649 
650   if (PC_IN_CALL_DUMMY (pc, 0, 0))
651     {
652       struct linked_proc_info *link;
653       CORE_ADDR sp = read_next_frame_reg (next_frame, SP_REGNUM);
654       alpha_extra_func_info_t found_proc_desc = NULL;
655       long min_distance = LONG_MAX;
656 
657       for (link = linked_proc_desc_table; link; link = link->next)
658 	{
659 	  long distance = (CORE_ADDR) PROC_DUMMY_FRAME (&link->info) - sp;
660 	  if (distance > 0 && distance < min_distance)
661 	    {
662 	      min_distance = distance;
663 	      found_proc_desc = &link->info;
664 	    }
665 	}
666       if (found_proc_desc != NULL)
667 	return found_proc_desc;
668     }
669 
670   b = block_for_pc(pc);
671 
672   find_pc_partial_function (pc, NULL, &startaddr, NULL);
673   if (b == NULL)
674     sym = NULL;
675   else
676     {
677       if (startaddr > BLOCK_START (b))
678 	/* This is the "pathological" case referred to in a comment in
679 	   print_frame_info.  It might be better to move this check into
680 	   symbol reading.  */
681 	sym = NULL;
682       else
683 	sym = lookup_symbol (MIPS_EFI_SYMBOL_NAME, b, LABEL_NAMESPACE,
684 			     0, NULL);
685     }
686 
687   /* If we never found a PDR for this function in symbol reading, then
688      examine prologues to find the information.  */
689   if (sym && ((mips_extra_func_info_t) SYMBOL_VALUE (sym))->pdr.framereg == -1)
690     sym = NULL;
691 
692   if (sym)
693     {
694 	/* IF this is the topmost frame AND
695 	 * (this proc does not have debugging information OR
696 	 * the PC is in the procedure prologue)
697 	 * THEN create a "heuristic" proc_desc (by analyzing
698 	 * the actual code) to replace the "official" proc_desc.
699 	 */
700 	proc_desc = (alpha_extra_func_info_t)SYMBOL_VALUE(sym);
701 	if (next_frame == NULL)
702 	  {
703 	    if (PROC_DESC_IS_DUMMY (proc_desc) || alpha_in_prologue (pc, proc_desc))
704 	      {
705 		alpha_extra_func_info_t found_heuristic =
706 		  heuristic_proc_desc (PROC_LOW_ADDR (proc_desc),
707 				       pc, next_frame);
708 		if (found_heuristic)
709 		  {
710 		    PROC_LOCALOFF (found_heuristic) =
711 		      PROC_LOCALOFF (proc_desc);
712 		    PROC_PC_REG (found_heuristic) = PROC_PC_REG (proc_desc);
713 		    proc_desc = found_heuristic;
714 		  }
715 	      }
716 	  }
717     }
718   else
719     {
720       long offset;
721 
722       /* Is linked_proc_desc_table really necessary?  It only seems to be used
723 	 by procedure call dummys.  However, the procedures being called ought
724 	 to have their own proc_descs, and even if they don't,
725 	 heuristic_proc_desc knows how to create them! */
726 
727       register struct linked_proc_info *link;
728       for (link = linked_proc_desc_table; link; link = link->next)
729 	  if (PROC_LOW_ADDR(&link->info) <= pc
730 	      && PROC_HIGH_ADDR(&link->info) > pc)
731 	      return &link->info;
732 
733       /* If PC is inside a dynamically generated sigtramp handler,
734 	 create and push a procedure descriptor for that code: */
735       offset = DYNAMIC_SIGTRAMP_OFFSET (pc);
736       if (offset >= 0)
737 	return push_sigtramp_desc (pc - offset);
738 
739       /* If heuristic_fence_post is non-zero, determine the procedure
740 	 start address by examining the instructions.
741 	 This allows us to find the start address of static functions which
742 	 have no symbolic information, as startaddr would have been set to
743 	 the preceding global function start address by the
744 	 find_pc_partial_function call above.  */
745       if (startaddr == 0 || heuristic_fence_post != 0)
746 	startaddr = heuristic_proc_start (pc);
747 
748       proc_desc =
749 	heuristic_proc_desc (startaddr, pc, next_frame);
750     }
751   return proc_desc;
752 }
753 
754 alpha_extra_func_info_t cached_proc_desc;
755 
756 CORE_ADDR
757 alpha_frame_chain(frame)
758     struct frame_info *frame;
759 {
760     alpha_extra_func_info_t proc_desc;
761     CORE_ADDR saved_pc = FRAME_SAVED_PC(frame);
762 
763     if (saved_pc == 0 || inside_entry_file (saved_pc))
764       return 0;
765 
766     proc_desc = find_proc_desc(saved_pc, frame);
767     if (!proc_desc)
768       return 0;
769 
770     cached_proc_desc = proc_desc;
771 
772     /* Fetch the frame pointer for a dummy frame from the procedure
773        descriptor.  */
774     if (PROC_DESC_IS_DUMMY(proc_desc))
775       return (CORE_ADDR) PROC_DUMMY_FRAME(proc_desc);
776 
777     /* If no frame pointer and frame size is zero, we must be at end
778        of stack (or otherwise hosed).  If we don't check frame size,
779        we loop forever if we see a zero size frame.  */
780     if (PROC_FRAME_REG (proc_desc) == SP_REGNUM
781 	&& PROC_FRAME_OFFSET (proc_desc) == 0
782 	/* The previous frame from a sigtramp frame might be frameless
783 	   and have frame size zero.  */
784 	&& !frame->signal_handler_caller)
785       return FRAME_PAST_SIGTRAMP_FRAME (frame, saved_pc);
786     else
787       return read_next_frame_reg(frame, PROC_FRAME_REG(proc_desc))
788 	     + PROC_FRAME_OFFSET(proc_desc);
789 }
790 
791 void
792 init_extra_frame_info (frame)
793      struct frame_info *frame;
794 {
795   /* Use proc_desc calculated in frame_chain */
796   alpha_extra_func_info_t proc_desc =
797     frame->next ? cached_proc_desc : find_proc_desc(frame->pc, frame->next);
798 
799   frame->saved_regs = NULL;
800   frame->localoff = 0;
801   frame->pc_reg = RA_REGNUM;
802   frame->proc_desc = proc_desc == &temp_proc_desc ? 0 : proc_desc;
803   if (proc_desc)
804     {
805       /* Get the locals offset and the saved pc register from the
806 	 procedure descriptor, they are valid even if we are in the
807 	 middle of the prologue.  */
808       frame->localoff = PROC_LOCALOFF(proc_desc);
809       frame->pc_reg = PROC_PC_REG(proc_desc);
810 
811       /* Fixup frame-pointer - only needed for top frame */
812 
813       /* Fetch the frame pointer for a dummy frame from the procedure
814 	 descriptor.  */
815       if (PROC_DESC_IS_DUMMY(proc_desc))
816 	frame->frame = (CORE_ADDR) PROC_DUMMY_FRAME(proc_desc);
817 
818       /* This may not be quite right, if proc has a real frame register.
819 	 Get the value of the frame relative sp, procedure might have been
820 	 interrupted by a signal at it's very start.  */
821       else if (frame->pc == PROC_LOW_ADDR (proc_desc)
822 	       && !PROC_DESC_IS_DYN_SIGTRAMP (proc_desc))
823 	frame->frame = read_next_frame_reg (frame->next, SP_REGNUM);
824       else
825 	frame->frame = read_next_frame_reg (frame->next, PROC_FRAME_REG (proc_desc))
826 	  + PROC_FRAME_OFFSET (proc_desc);
827 
828       if (proc_desc == &temp_proc_desc)
829 	{
830 	  char *name;
831 
832 	  /* Do not set the saved registers for a sigtramp frame,
833 	     alpha_find_saved_registers will do that for us.
834 	     We can't use frame->signal_handler_caller, it is not yet set.  */
835 	  find_pc_partial_function (frame->pc, &name,
836 				    (CORE_ADDR *)NULL,(CORE_ADDR *)NULL);
837 	  if (!IN_SIGTRAMP (frame->pc, name))
838 	    {
839 	      frame->saved_regs = (struct frame_saved_regs*)
840 		obstack_alloc (&frame_cache_obstack,
841 			       sizeof (struct frame_saved_regs));
842 	      *frame->saved_regs = temp_saved_regs;
843 	      frame->saved_regs->regs[PC_REGNUM]
844 		= frame->saved_regs->regs[RA_REGNUM];
845 	    }
846 	}
847     }
848 }
849 
850 /* ALPHA stack frames are almost impenetrable.  When execution stops,
851    we basically have to look at symbol information for the function
852    that we stopped in, which tells us *which* register (if any) is
853    the base of the frame pointer, and what offset from that register
854    the frame itself is at.
855 
856    This presents a problem when trying to examine a stack in memory
857    (that isn't executing at the moment), using the "frame" command.  We
858    don't have a PC, nor do we have any registers except SP.
859 
860    This routine takes two arguments, SP and PC, and tries to make the
861    cached frames look as if these two arguments defined a frame on the
862    cache.  This allows the rest of info frame to extract the important
863    arguments without difficulty.  */
864 
865 struct frame_info *
866 setup_arbitrary_frame (argc, argv)
867      int argc;
868      CORE_ADDR *argv;
869 {
870   if (argc != 2)
871     error ("ALPHA frame specifications require two arguments: sp and pc");
872 
873   return create_new_frame (argv[0], argv[1]);
874 }
875 
876 /* The alpha passes the first six arguments in the registers, the rest on
877    the stack. The register arguments are eventually transferred to the
878    argument transfer area immediately below the stack by the called function
879    anyway. So we `push' at least six arguments on the stack, `reload' the
880    argument registers and then adjust the stack pointer to point past the
881    sixth argument. This algorithm simplifies the passing of a large struct
882    which extends from the registers to the stack.
883    If the called function is returning a structure, the address of the
884    structure to be returned is passed as a hidden first argument.  */
885 
886 CORE_ADDR
887 alpha_push_arguments (nargs, args, sp, struct_return, struct_addr)
888      int nargs;
889      value_ptr *args;
890      CORE_ADDR sp;
891      int struct_return;
892      CORE_ADDR struct_addr;
893 {
894   register i;
895   int accumulate_size = struct_return ? 8 : 0;
896   int arg_regs_size = ALPHA_NUM_ARG_REGS * 8;
897   struct alpha_arg { char *contents; int len; int offset; };
898   struct alpha_arg *alpha_args =
899       (struct alpha_arg*)alloca (nargs * sizeof (struct alpha_arg));
900   register struct alpha_arg *m_arg;
901   char raw_buffer[sizeof (CORE_ADDR)];
902   int required_arg_regs;
903 
904   for (i = 0, m_arg = alpha_args; i < nargs; i++, m_arg++)
905     {
906       value_ptr arg = args[i];
907       struct type *arg_type = check_typedef (VALUE_TYPE (arg));
908       /* Cast argument to long if necessary as the compiler does it too.  */
909       switch (TYPE_CODE (arg_type))
910 	{
911 	case TYPE_CODE_INT:
912 	case TYPE_CODE_BOOL:
913 	case TYPE_CODE_CHAR:
914 	case TYPE_CODE_RANGE:
915 	case TYPE_CODE_ENUM:
916 	  if (TYPE_LENGTH (arg_type) < TYPE_LENGTH (builtin_type_long))
917 	    {
918 	      arg_type = builtin_type_long;
919 	      arg = value_cast (arg_type, arg);
920 	    }
921 	  break;
922 	default:
923 	  break;
924 	}
925       m_arg->len = TYPE_LENGTH (arg_type);
926       m_arg->offset = accumulate_size;
927       accumulate_size = (accumulate_size + m_arg->len + 7) & ~7;
928       m_arg->contents = VALUE_CONTENTS(arg);
929     }
930 
931   /* Determine required argument register loads, loading an argument register
932      is expensive as it uses three ptrace calls.  */
933   required_arg_regs = accumulate_size / 8;
934   if (required_arg_regs > ALPHA_NUM_ARG_REGS)
935     required_arg_regs = ALPHA_NUM_ARG_REGS;
936 
937   /* Make room for the arguments on the stack.  */
938   if (accumulate_size < arg_regs_size)
939     accumulate_size = arg_regs_size;
940   sp -= accumulate_size;
941 
942   /* Keep sp aligned to a multiple of 16 as the compiler does it too.  */
943   sp &= ~15;
944 
945   /* `Push' arguments on the stack.  */
946   for (i = nargs; m_arg--, --i >= 0; )
947     write_memory(sp + m_arg->offset, m_arg->contents, m_arg->len);
948   if (struct_return)
949     {
950       store_address (raw_buffer, sizeof (CORE_ADDR), struct_addr);
951       write_memory (sp, raw_buffer, sizeof (CORE_ADDR));
952     }
953 
954   /* Load the argument registers.  */
955   for (i = 0; i < required_arg_regs; i++)
956     {
957       LONGEST val;
958 
959       val = read_memory_integer (sp + i * 8, 8);
960       write_register (A0_REGNUM + i, val);
961       write_register (FPA0_REGNUM + i, val);
962     }
963 
964   return sp + arg_regs_size;
965 }
966 
967 void
968 alpha_push_dummy_frame()
969 {
970   int ireg;
971   struct linked_proc_info *link;
972   alpha_extra_func_info_t proc_desc;
973   CORE_ADDR sp = read_register (SP_REGNUM);
974   CORE_ADDR save_address;
975   char raw_buffer[MAX_REGISTER_RAW_SIZE];
976   unsigned long mask;
977 
978   link = (struct linked_proc_info *) xmalloc(sizeof (struct linked_proc_info));
979   link->next = linked_proc_desc_table;
980   linked_proc_desc_table = link;
981 
982   proc_desc = &link->info;
983 
984   /*
985    * The registers we must save are all those not preserved across
986    * procedure calls.
987    * In addition, we must save the PC and RA.
988    *
989    * Dummy frame layout:
990    *  (high memory)
991    * 	Saved PC
992    *    Saved F30
993    *    ...
994    *    Saved F0
995    *	Saved R29
996    *	...
997    *	Saved R0
998    *	Saved R26 (RA)
999    *	Parameter build area
1000    *  (low memory)
1001    */
1002 
1003 /* MASK(i,j) == (1<<i) + (1<<(i+1)) + ... + (1<<j)). Assume i<=j<31. */
1004 #define MASK(i,j) (((1L << ((j)+1)) - 1) ^ ((1L << (i)) - 1))
1005 #define GEN_REG_SAVE_MASK (MASK(0,8) | MASK(16,29))
1006 #define GEN_REG_SAVE_COUNT 24
1007 #define FLOAT_REG_SAVE_MASK (MASK(0,1) | MASK(10,30))
1008 #define FLOAT_REG_SAVE_COUNT 23
1009   /* The special register is the PC as we have no bit for it in the save masks.
1010      alpha_frame_saved_pc knows where the pc is saved in a dummy frame.  */
1011 #define SPECIAL_REG_SAVE_COUNT 1
1012 
1013   PROC_REG_MASK(proc_desc) = GEN_REG_SAVE_MASK;
1014   PROC_FREG_MASK(proc_desc) = FLOAT_REG_SAVE_MASK;
1015   /* PROC_REG_OFFSET is the offset from the dummy frame to the saved RA,
1016      but keep SP aligned to a multiple of 16.  */
1017   PROC_REG_OFFSET(proc_desc) =
1018     - ((8 * (SPECIAL_REG_SAVE_COUNT
1019 	    + GEN_REG_SAVE_COUNT
1020 	    + FLOAT_REG_SAVE_COUNT)
1021 	+ 15) & ~15);
1022   PROC_FREG_OFFSET(proc_desc) =
1023     PROC_REG_OFFSET(proc_desc) + 8 * GEN_REG_SAVE_COUNT;
1024 
1025   /* Save general registers.
1026      The return address register is the first saved register, all other
1027      registers follow in ascending order.
1028      The PC is saved immediately below the SP.  */
1029   save_address = sp + PROC_REG_OFFSET(proc_desc);
1030   store_address (raw_buffer, 8, read_register (RA_REGNUM));
1031   write_memory (save_address, raw_buffer, 8);
1032   save_address += 8;
1033   mask = PROC_REG_MASK(proc_desc) & 0xffffffffL;
1034   for (ireg = 0; mask; ireg++, mask >>= 1)
1035     if (mask & 1)
1036       {
1037 	if (ireg == RA_REGNUM)
1038 	  continue;
1039 	store_address (raw_buffer, 8, read_register (ireg));
1040 	write_memory (save_address, raw_buffer, 8);
1041 	save_address += 8;
1042       }
1043 
1044   store_address (raw_buffer, 8, read_register (PC_REGNUM));
1045   write_memory (sp - 8, raw_buffer, 8);
1046 
1047   /* Save floating point registers.  */
1048   save_address = sp + PROC_FREG_OFFSET(proc_desc);
1049   mask = PROC_FREG_MASK(proc_desc) & 0xffffffffL;
1050   for (ireg = 0; mask; ireg++, mask >>= 1)
1051     if (mask & 1)
1052       {
1053 	store_address (raw_buffer, 8, read_register (ireg + FP0_REGNUM));
1054 	write_memory (save_address, raw_buffer, 8);
1055 	save_address += 8;
1056       }
1057 
1058   /* Set and save the frame address for the dummy.
1059      This is tricky. The only registers that are suitable for a frame save
1060      are those that are preserved across procedure calls (s0-s6). But if
1061      a read system call is interrupted and then a dummy call is made
1062      (see testsuite/gdb.t17/interrupt.exp) the dummy call hangs till the read
1063      is satisfied. Then it returns with the s0-s6 registers set to the values
1064      on entry to the read system call and our dummy frame pointer would be
1065      destroyed. So we save the dummy frame in the proc_desc and handle the
1066      retrieval of the frame pointer of a dummy specifically. The frame register
1067      is set to the virtual frame (pseudo) register, it's value will always
1068      be read as zero and will help us to catch any errors in the dummy frame
1069      retrieval code.  */
1070   PROC_DUMMY_FRAME(proc_desc) = sp;
1071   PROC_FRAME_REG(proc_desc) = FP_REGNUM;
1072   PROC_FRAME_OFFSET(proc_desc) = 0;
1073   sp += PROC_REG_OFFSET(proc_desc);
1074   write_register (SP_REGNUM, sp);
1075 
1076   PROC_LOW_ADDR(proc_desc) = CALL_DUMMY_ADDRESS ();
1077   PROC_HIGH_ADDR(proc_desc) = PROC_LOW_ADDR(proc_desc) + 4;
1078 
1079   SET_PROC_DESC_IS_DUMMY(proc_desc);
1080   PROC_PC_REG(proc_desc) = RA_REGNUM;
1081 }
1082 
1083 void
1084 alpha_pop_frame()
1085 {
1086   register int regnum;
1087   struct frame_info *frame = get_current_frame ();
1088   CORE_ADDR new_sp = frame->frame;
1089 
1090   alpha_extra_func_info_t proc_desc = frame->proc_desc;
1091 
1092   write_register (PC_REGNUM, FRAME_SAVED_PC(frame));
1093   if (frame->saved_regs == NULL)
1094     alpha_find_saved_regs (frame);
1095   if (proc_desc)
1096     {
1097       for (regnum = 32; --regnum >= 0; )
1098 	if (PROC_REG_MASK(proc_desc) & (1 << regnum))
1099 	  write_register (regnum,
1100 			  read_memory_integer (frame->saved_regs->regs[regnum],
1101 					       8));
1102       for (regnum = 32; --regnum >= 0; )
1103 	if (PROC_FREG_MASK(proc_desc) & (1 << regnum))
1104 	  write_register (regnum + FP0_REGNUM,
1105 			  read_memory_integer (frame->saved_regs->regs[regnum + FP0_REGNUM], 8));
1106     }
1107   write_register (SP_REGNUM, new_sp);
1108   flush_cached_frames ();
1109 
1110   if (proc_desc && (PROC_DESC_IS_DUMMY(proc_desc)
1111 		    || PROC_DESC_IS_DYN_SIGTRAMP (proc_desc)))
1112     {
1113       struct linked_proc_info *pi_ptr, *prev_ptr;
1114 
1115       for (pi_ptr = linked_proc_desc_table, prev_ptr = NULL;
1116 	   pi_ptr != NULL;
1117 	   prev_ptr = pi_ptr, pi_ptr = pi_ptr->next)
1118 	{
1119 	  if (&pi_ptr->info == proc_desc)
1120 	    break;
1121 	}
1122 
1123       if (pi_ptr == NULL)
1124 	error ("Can't locate dummy extra frame info\n");
1125 
1126       if (prev_ptr != NULL)
1127 	prev_ptr->next = pi_ptr->next;
1128       else
1129 	linked_proc_desc_table = pi_ptr->next;
1130 
1131       free (pi_ptr);
1132     }
1133 }
1134 
1135 /* To skip prologues, I use this predicate.  Returns either PC itself
1136    if the code at PC does not look like a function prologue; otherwise
1137    returns an address that (if we're lucky) follows the prologue.  If
1138    LENIENT, then we must skip everything which is involved in setting
1139    up the frame (it's OK to skip more, just so long as we don't skip
1140    anything which might clobber the registers which are being saved.
1141    Currently we must not skip more on the alpha, but we might the lenient
1142    stuff some day.  */
1143 
1144 CORE_ADDR
1145 alpha_skip_prologue (pc, lenient)
1146      CORE_ADDR pc;
1147      int lenient;
1148 {
1149     unsigned long inst;
1150     int offset;
1151     CORE_ADDR post_prologue_pc;
1152     char buf[4];
1153 
1154 #ifdef GDB_TARGET_HAS_SHARED_LIBS
1155     /* Silently return the unaltered pc upon memory errors.
1156        This could happen on OSF/1 if decode_line_1 tries to skip the
1157        prologue for quickstarted shared library functions when the
1158        shared library is not yet mapped in.
1159        Reading target memory is slow over serial lines, so we perform
1160        this check only if the target has shared libraries.  */
1161     if (target_read_memory (pc, buf, 4))
1162       return pc;
1163 #endif
1164 
1165     /* See if we can determine the end of the prologue via the symbol table.
1166        If so, then return either PC, or the PC after the prologue, whichever
1167        is greater.  */
1168 
1169     post_prologue_pc = after_prologue (pc, NULL);
1170 
1171     if (post_prologue_pc != 0)
1172       return max (pc, post_prologue_pc);
1173 
1174     /* Can't determine prologue from the symbol table, need to examine
1175        instructions.  */
1176 
1177     /* Skip the typical prologue instructions. These are the stack adjustment
1178        instruction and the instructions that save registers on the stack
1179        or in the gcc frame.  */
1180     for (offset = 0; offset < 100; offset += 4)
1181       {
1182 	int status;
1183 
1184 	status = read_memory_nobpt (pc + offset, buf, 4);
1185 	if (status)
1186 	  memory_error (status, pc + offset);
1187 	inst = extract_unsigned_integer (buf, 4);
1188 
1189 	/* The alpha has no delay slots. But let's keep the lenient stuff,
1190 	   we might need it for something else in the future.  */
1191 	if (lenient && 0)
1192 	  continue;
1193 
1194 	if ((inst & 0xffff0000) == 0x27bb0000)	/* ldah $gp,n($t12) */
1195 	    continue;
1196 	if ((inst & 0xffff0000) == 0x23bd0000)	/* lda $gp,n($gp) */
1197 	    continue;
1198 	if ((inst & 0xffff0000) == 0x23de0000)	/* lda $sp,n($sp) */
1199 	    continue;
1200 	else if ((inst & 0xfc1f0000) == 0xb41e0000
1201 		 && (inst & 0xffff0000) != 0xb7fe0000)
1202 	    continue;				/* stq reg,n($sp) */
1203 						/* reg != $zero */
1204 	else if ((inst & 0xfc1f0000) == 0x9c1e0000
1205 		 && (inst & 0xffff0000) != 0x9ffe0000)
1206 	    continue;				/* stt reg,n($sp) */
1207 						/* reg != $zero */
1208 	else if (inst == 0x47de040f)		/* bis sp,sp,fp */
1209 	    continue;
1210 	else
1211 	    break;
1212     }
1213     return pc + offset;
1214 }
1215 
1216 #if 0
1217 /* Is address PC in the prologue (loosely defined) for function at
1218    STARTADDR?  */
1219 
1220 static int
1221 alpha_in_lenient_prologue (startaddr, pc)
1222      CORE_ADDR startaddr;
1223      CORE_ADDR pc;
1224 {
1225   CORE_ADDR end_prologue = alpha_skip_prologue (startaddr, 1);
1226   return pc >= startaddr && pc < end_prologue;
1227 }
1228 #endif
1229 
1230 /* The alpha needs a conversion between register and memory format if
1231    the register is a floating point register and
1232       memory format is float, as the register format must be double
1233    or
1234       memory format is an integer with 4 bytes or less, as the representation
1235       of integers in floating point registers is different. */
1236 void
1237 alpha_register_convert_to_virtual (regnum, valtype, raw_buffer, virtual_buffer)
1238     int regnum;
1239     struct type *valtype;
1240     char *raw_buffer;
1241     char *virtual_buffer;
1242 {
1243   if (TYPE_LENGTH (valtype) >= REGISTER_RAW_SIZE (regnum))
1244     {
1245       memcpy (virtual_buffer, raw_buffer, REGISTER_VIRTUAL_SIZE (regnum));
1246       return;
1247     }
1248 
1249   if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1250     {
1251       double d = extract_floating (raw_buffer, REGISTER_RAW_SIZE (regnum));
1252       store_floating (virtual_buffer, TYPE_LENGTH (valtype), d);
1253     }
1254   else if (TYPE_CODE (valtype) == TYPE_CODE_INT && TYPE_LENGTH (valtype) <= 4)
1255     {
1256       unsigned LONGEST l;
1257       l = extract_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum));
1258       l = ((l >> 32) & 0xc0000000) | ((l >> 29) & 0x3fffffff);
1259       store_unsigned_integer (virtual_buffer, TYPE_LENGTH (valtype), l);
1260     }
1261   else
1262     error ("Cannot retrieve value from floating point register");
1263 }
1264 
1265 void
1266 alpha_register_convert_to_raw (valtype, regnum, virtual_buffer, raw_buffer)
1267     struct type *valtype;
1268     int regnum;
1269     char *virtual_buffer;
1270     char *raw_buffer;
1271 {
1272   if (TYPE_LENGTH (valtype) >= REGISTER_RAW_SIZE (regnum))
1273     {
1274       memcpy (raw_buffer, virtual_buffer, REGISTER_RAW_SIZE (regnum));
1275       return;
1276     }
1277 
1278   if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1279     {
1280       double d = extract_floating (virtual_buffer, TYPE_LENGTH (valtype));
1281       store_floating (raw_buffer, REGISTER_RAW_SIZE (regnum), d);
1282     }
1283   else if (TYPE_CODE (valtype) == TYPE_CODE_INT && TYPE_LENGTH (valtype) <= 4)
1284     {
1285       unsigned LONGEST l;
1286       if (TYPE_UNSIGNED (valtype))
1287 	l = extract_unsigned_integer (virtual_buffer, TYPE_LENGTH (valtype));
1288       else
1289 	l = extract_signed_integer (virtual_buffer, TYPE_LENGTH (valtype));
1290       l = ((l & 0xc0000000) << 32) | ((l & 0x3fffffff) << 29);
1291       store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum), l);
1292     }
1293   else
1294     error ("Cannot store value in floating point register");
1295 }
1296 
1297 /* Given a return value in `regbuf' with a type `valtype',
1298    extract and copy its value into `valbuf'.  */
1299 
1300 void
1301 alpha_extract_return_value (valtype, regbuf, valbuf)
1302     struct type *valtype;
1303     char regbuf[REGISTER_BYTES];
1304     char *valbuf;
1305 {
1306   if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1307     alpha_register_convert_to_virtual (FP0_REGNUM, valtype,
1308 				       regbuf + REGISTER_BYTE (FP0_REGNUM),
1309 				       valbuf);
1310   else
1311     memcpy (valbuf, regbuf + REGISTER_BYTE (V0_REGNUM), TYPE_LENGTH (valtype));
1312 }
1313 
1314 /* Given a return value in `regbuf' with a type `valtype',
1315    write its value into the appropriate register.  */
1316 
1317 void
1318 alpha_store_return_value (valtype, valbuf)
1319     struct type *valtype;
1320     char *valbuf;
1321 {
1322   char raw_buffer[MAX_REGISTER_RAW_SIZE];
1323   int regnum = V0_REGNUM;
1324   int length = TYPE_LENGTH (valtype);
1325 
1326   if (TYPE_CODE (valtype) == TYPE_CODE_FLT)
1327     {
1328       regnum = FP0_REGNUM;
1329       length = REGISTER_RAW_SIZE (regnum);
1330       alpha_register_convert_to_raw (valtype, regnum, valbuf, raw_buffer);
1331     }
1332   else
1333     memcpy (raw_buffer, valbuf, length);
1334 
1335   write_register_bytes (REGISTER_BYTE (regnum), raw_buffer, length);
1336 }
1337 
1338 /* Just like reinit_frame_cache, but with the right arguments to be
1339    callable as an sfunc.  */
1340 
1341 static void
1342 reinit_frame_cache_sfunc (args, from_tty, c)
1343      char *args;
1344      int from_tty;
1345      struct cmd_list_element *c;
1346 {
1347   reinit_frame_cache ();
1348 }
1349 
1350 /* This is the definition of CALL_DUMMY_ADDRESS.  It's a heuristic that is used
1351    to find a convenient place in the text segment to stick a breakpoint to
1352    detect the completion of a target function call (ala call_function_by_hand).
1353  */
1354 
1355 CORE_ADDR
1356 alpha_call_dummy_address ()
1357 {
1358   CORE_ADDR entry;
1359   struct minimal_symbol *sym;
1360 
1361   entry = entry_point_address ();
1362 
1363   if (entry != 0)
1364     return entry;
1365 
1366   sym = lookup_minimal_symbol ("_Prelude", NULL, symfile_objfile);
1367 
1368   if (!sym || MSYMBOL_TYPE (sym) != mst_text)
1369     return 0;
1370   else
1371     return SYMBOL_VALUE_ADDRESS (sym) + 4;
1372 }
1373 
1374 void
1375 _initialize_alpha_tdep ()
1376 {
1377   struct cmd_list_element *c;
1378 
1379   tm_print_insn = print_insn_alpha;
1380 
1381   /* Let the user set the fence post for heuristic_proc_start.  */
1382 
1383   /* We really would like to have both "0" and "unlimited" work, but
1384      command.c doesn't deal with that.  So make it a var_zinteger
1385      because the user can always use "999999" or some such for unlimited.  */
1386   c = add_set_cmd ("heuristic-fence-post", class_support, var_zinteger,
1387 		   (char *) &heuristic_fence_post,
1388 		   "\
1389 Set the distance searched for the start of a function.\n\
1390 If you are debugging a stripped executable, GDB needs to search through the\n\
1391 program for the start of a function.  This command sets the distance of the\n\
1392 search.  The only need to set it is when debugging a stripped executable.",
1393 		   &setlist);
1394   /* We need to throw away the frame cache when we set this, since it
1395      might change our ability to get backtraces.  */
1396   c->function.sfunc = reinit_frame_cache_sfunc;
1397   add_show_from_set (c, &showlist);
1398 }
1399 
1400 #ifdef NO_SINGLE_STEP
1401 /*
1402  * If NO_SINGLE_STEP defined, we're simulating single step with
1403  * breakpoints, either because the kernel doesn't provide it or
1404  * Just Because We Want To.
1405  */
1406 
1407 /*
1408  * Branch types.  Only two types are distinguished:
1409  * conditional and unconditional.
1410  *
1411  * We don't bother to set breakpoint after an unconditional
1412  * branch, as it's (supposedly 8-) unconditional!
1413  */
1414 
1415 typedef enum {
1416 	Error, not_branch,
1417 	branch_conditional, branch_unconditional,
1418 } branch_type;
1419 
1420 /*
1421  * Information about the various breakpoints we may have set:
1422  * (1) their addresses, (2) whether or not we actually set them,
1423  * and (3) the previous contents of the memory.
1424  */
1425 
1426 static CORE_ADDR next_pc, target;
1427 static int brk_next_pc, brk_target;
1428 typedef char binsn_quantum[BREAKPOINT_MAX];
1429 static binsn_quantum brkmem_next_pc, brkmem_target;
1430 
1431 /*
1432  * Non-zero if we just simulated a single-step ptrace call.  This is
1433  * needed because we cannot remove the breakpoints in the inferior
1434  * process until after the `wait' in `wait_for_inferior'.
1435  */
1436 
1437 int one_stepped;
1438 
1439 /*
1440  * single_step() is called just before we want to resume the inferior,
1441  * if we want to single-step it but there is no hardware or kernel
1442  * single-step support (as in NetBSD, on the Alpha).  We find all the
1443  * possible targets of the coming instruction and breakpoint them.
1444  *
1445  * single_step() is also called just after the inferior stops.  IF we
1446  * had set up a simulated single-step, we undo our damage.
1447  */
1448 
1449 void
1450 single_step(ignore)
1451 	enum target_signal ignore;			/* pid, but we don't need it. */
1452 {
1453 	branch_type br, isbranch();
1454 	CORE_ADDR pc;
1455 	unsigned int pc_instruction;
1456 
1457 	pc = read_register(PC_REGNUM);
1458 
1459 	if (one_stepped) {
1460 		/*
1461 		 * The inferior has stopped.  Adjust the PC to
1462 		 * deal with the breakpoint we just took and
1463 		 * clean up the breakpoints we set.
1464 		 */
1465 
1466 		write_pc(pc - DECR_PC_AFTER_BREAK);
1467 
1468 		/* If no breakpoints set, we have a problem. */
1469 		if (!brk_next_pc && !brk_target)
1470 			abort();
1471 
1472 		if (brk_next_pc)
1473 			target_remove_breakpoint(next_pc, brkmem_next_pc);
1474 
1475 		if (brk_target)
1476 			target_remove_breakpoint(target, brkmem_target);
1477 
1478 		one_stepped = 0;
1479 		return;
1480 	}
1481 
1482 	pc_instruction = read_memory_integer(pc, sizeof(pc_instruction));
1483 	br = isbranch(pc_instruction, pc, &target);
1484 
1485 	switch (br) {
1486 	default:
1487 	case Error:
1488 		abort();
1489 
1490 	case not_branch:
1491 		next_pc = pc + 4;
1492 		brk_next_pc = 1;
1493 		brk_target = 0;
1494 		break;
1495 
1496 	case branch_unconditional:
1497 		brk_next_pc = 0;
1498 		brk_target = 1;
1499 		break;
1500 
1501 	case branch_conditional:
1502 		next_pc = pc + 4;
1503 		brk_next_pc = brk_target = 1;
1504 		break;
1505 	}
1506 
1507 	if (brk_next_pc)
1508 		target_insert_breakpoint(next_pc, brkmem_next_pc);
1509 	if (brk_target)
1510 		target_insert_breakpoint(target, brkmem_target);
1511 
1512 	/* Let it go. */
1513 	one_stepped = 1;
1514 }
1515 
1516 /*
1517  * Check instruction at ADDR to see if it is a branch or other
1518  * instruction whose target isn't pc+4.  All other instructions
1519  * will go to NPC or will trap.  Set *TARGET if we find a
1520  * candidate branch.
1521  */
1522 
1523 branch_type
1524 isbranch(instruction, addr, target)
1525 	unsigned int instruction;
1526 	CORE_ADDR addr, *target;
1527 {
1528 	branch_type val;
1529 	long offset;			/* Must be signed for sign-extend. */
1530 	union {
1531 		unsigned int code;			/* raw bits */
1532 		struct {				/* common bits */
1533 			unsigned int unk:26;
1534 			unsigned int op:6;
1535 		} common;
1536 		struct {				/* memory format */
1537 			         int disp:16;
1538 			unsigned int rb:5;
1539 			unsigned int ra:5;
1540 			unsigned int op:6;
1541 		} m;
1542 		struct {				/* branch format */
1543 				 int disp:21;
1544 			unsigned int ra:5;
1545 			unsigned int op:6;
1546 		} b;
1547 	} insn;
1548 
1549 	insn.code = instruction;
1550 	switch (insn.common.op) {
1551 	/*
1552 	 * memory-format branches.  all unconditional.
1553 	 */
1554 	case 0x1a:			/* JMP/RET/JSR/JSR_C; memory format */
1555 		val = branch_unconditional;
1556 
1557 		/*
1558 		 * Target PC is (contents of instruction's "RB") & ~3.
1559 		 */
1560 		*target = read_register(insn.m.rb) & ~3;
1561 		break;
1562 
1563 	/*
1564 	 * branch-format branches.  conditional unless otherwise noted.
1565 	 */
1566 	case 0x30:			/* BR; unconditional*/
1567 	case 0x31:			/* FBEQ */
1568 	case 0x32:			/* FBLT */
1569 	case 0x33:			/* FBLE */
1570 	case 0x34:			/* BSR; unconditional */
1571 	case 0x35:			/* FBNE */
1572 	case 0x36:			/* FBGE */
1573 	case 0x37:			/* FBGT */
1574 	case 0x38:			/* BLBC */
1575 	case 0x39:			/* BEQ */
1576 	case 0x3a:			/* BLT */
1577 	case 0x3b:			/* BLE */
1578 	case 0x3c:			/* BLBS */
1579 	case 0x3d:			/* BNE */
1580 	case 0x3e:			/* BGE */
1581 	case 0x3f:			/* BGT */
1582 
1583 		if (insn.b.op == 0x30 || insn.b.op == 0x34)
1584 			val = branch_unconditional;
1585 		else
1586 			val = branch_conditional;
1587 
1588 		/*
1589 		 * Branch format is easy.
1590 		 * Target PC is (new PC) + (4 * sign-ext(displacement)).
1591 		 */
1592 		offset = 4 + (4 * insn.b.disp);
1593 		*target = addr + offset;
1594 		break;
1595 
1596 
1597 	default:
1598 		val = not_branch;
1599 		break;
1600 	}
1601 
1602 	return val;
1603 }
1604 #endif
1605