xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/alpha-tdep.c (revision e670fd5c413e99c2f6a37901bb21c537fcd322d2)
1 /* Target-dependent code for the ALPHA architecture, for GDB, the GNU Debugger.
2 
3    Copyright (C) 1993-2019 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19 
20 #include "defs.h"
21 #include "frame.h"
22 #include "frame-unwind.h"
23 #include "frame-base.h"
24 #include "dwarf2-frame.h"
25 #include "inferior.h"
26 #include "symtab.h"
27 #include "value.h"
28 #include "gdbcmd.h"
29 #include "gdbcore.h"
30 #include "dis-asm.h"
31 #include "symfile.h"
32 #include "objfiles.h"
33 #include "linespec.h"
34 #include "regcache.h"
35 #include "reggroups.h"
36 #include "arch-utils.h"
37 #include "osabi.h"
38 #include "block.h"
39 #include "infcall.h"
40 #include "trad-frame.h"
41 
42 #include "elf-bfd.h"
43 
44 #include "alpha-tdep.h"
45 #include <algorithm>
46 
47 /* Instruction decoding.  The notations for registers, immediates and
48    opcodes are the same as the one used in Compaq's Alpha architecture
49    handbook.  */
50 
51 #define INSN_OPCODE(insn) ((insn & 0xfc000000) >> 26)
52 
53 /* Memory instruction format */
54 #define MEM_RA(insn) ((insn & 0x03e00000) >> 21)
55 #define MEM_RB(insn) ((insn & 0x001f0000) >> 16)
56 #define MEM_DISP(insn) \
57   (((insn & 0x8000) == 0) ? (insn & 0xffff) : -((-insn) & 0xffff))
58 
59 static const int lda_opcode = 0x08;
60 static const int stq_opcode = 0x2d;
61 
62 /* Branch instruction format */
63 #define BR_RA(insn) MEM_RA(insn)
64 
65 static const int br_opcode = 0x30;
66 static const int bne_opcode = 0x3d;
67 
68 /* Operate instruction format */
69 #define OPR_FUNCTION(insn) ((insn & 0xfe0) >> 5)
70 #define OPR_HAS_IMMEDIATE(insn) ((insn & 0x1000) == 0x1000)
71 #define OPR_RA(insn) MEM_RA(insn)
72 #define OPR_RC(insn) ((insn & 0x1f))
73 #define OPR_LIT(insn) ((insn & 0x1fe000) >> 13)
74 
75 static const int subq_opcode = 0x10;
76 static const int subq_function = 0x29;
77 
78 
79 /* Return the name of the REGNO register.
80 
81    An empty name corresponds to a register number that used to
82    be used for a virtual register.  That virtual register has
83    been removed, but the index is still reserved to maintain
84    compatibility with existing remote alpha targets.  */
85 
86 static const char *
87 alpha_register_name (struct gdbarch *gdbarch, int regno)
88 {
89   static const char * const register_names[] =
90   {
91     "v0",   "t0",   "t1",   "t2",   "t3",   "t4",   "t5",   "t6",
92     "t7",   "s0",   "s1",   "s2",   "s3",   "s4",   "s5",   "fp",
93     "a0",   "a1",   "a2",   "a3",   "a4",   "a5",   "t8",   "t9",
94     "t10",  "t11",  "ra",   "t12",  "at",   "gp",   "sp",   "zero",
95     "f0",   "f1",   "f2",   "f3",   "f4",   "f5",   "f6",   "f7",
96     "f8",   "f9",   "f10",  "f11",  "f12",  "f13",  "f14",  "f15",
97     "f16",  "f17",  "f18",  "f19",  "f20",  "f21",  "f22",  "f23",
98     "f24",  "f25",  "f26",  "f27",  "f28",  "f29",  "f30",  "fpcr",
99     "pc",   "",     "unique"
100   };
101 
102   if (regno < 0)
103     return NULL;
104   if (regno >= ARRAY_SIZE(register_names))
105     return NULL;
106   return register_names[regno];
107 }
108 
109 static int
110 alpha_cannot_fetch_register (struct gdbarch *gdbarch, int regno)
111 {
112   return (strlen (alpha_register_name (gdbarch, regno)) == 0);
113 }
114 
115 static int
116 alpha_cannot_store_register (struct gdbarch *gdbarch, int regno)
117 {
118   return (regno == ALPHA_ZERO_REGNUM
119           || strlen (alpha_register_name (gdbarch, regno)) == 0);
120 }
121 
122 static struct type *
123 alpha_register_type (struct gdbarch *gdbarch, int regno)
124 {
125   if (regno == ALPHA_SP_REGNUM || regno == ALPHA_GP_REGNUM)
126     return builtin_type (gdbarch)->builtin_data_ptr;
127   if (regno == ALPHA_PC_REGNUM)
128     return builtin_type (gdbarch)->builtin_func_ptr;
129 
130   /* Don't need to worry about little vs big endian until
131      some jerk tries to port to alpha-unicosmk.  */
132   if (regno >= ALPHA_FP0_REGNUM && regno < ALPHA_FP0_REGNUM + 31)
133     return builtin_type (gdbarch)->builtin_double;
134 
135   return builtin_type (gdbarch)->builtin_int64;
136 }
137 
138 /* Is REGNUM a member of REGGROUP?  */
139 
140 static int
141 alpha_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
142 			   struct reggroup *group)
143 {
144   /* Filter out any registers eliminated, but whose regnum is
145      reserved for backward compatibility, e.g. the vfp.  */
146   if (gdbarch_register_name (gdbarch, regnum) == NULL
147       || *gdbarch_register_name (gdbarch, regnum) == '\0')
148     return 0;
149 
150   if (group == all_reggroup)
151     return 1;
152 
153   /* Zero should not be saved or restored.  Technically it is a general
154      register (just as $f31 would be a float if we represented it), but
155      there's no point displaying it during "info regs", so leave it out
156      of all groups except for "all".  */
157   if (regnum == ALPHA_ZERO_REGNUM)
158     return 0;
159 
160   /* All other registers are saved and restored.  */
161   if (group == save_reggroup || group == restore_reggroup)
162     return 1;
163 
164   /* All other groups are non-overlapping.  */
165 
166   /* Since this is really a PALcode memory slot...  */
167   if (regnum == ALPHA_UNIQUE_REGNUM)
168     return group == system_reggroup;
169 
170   /* Force the FPCR to be considered part of the floating point state.  */
171   if (regnum == ALPHA_FPCR_REGNUM)
172     return group == float_reggroup;
173 
174   if (regnum >= ALPHA_FP0_REGNUM && regnum < ALPHA_FP0_REGNUM + 31)
175     return group == float_reggroup;
176   else
177     return group == general_reggroup;
178 }
179 
180 /* The following represents exactly the conversion performed by
181    the LDS instruction.  This applies to both single-precision
182    floating point and 32-bit integers.  */
183 
184 static void
185 alpha_lds (struct gdbarch *gdbarch, void *out, const void *in)
186 {
187   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
188   ULONGEST mem
189     = extract_unsigned_integer ((const gdb_byte *) in, 4, byte_order);
190   ULONGEST frac    = (mem >>  0) & 0x7fffff;
191   ULONGEST sign    = (mem >> 31) & 1;
192   ULONGEST exp_msb = (mem >> 30) & 1;
193   ULONGEST exp_low = (mem >> 23) & 0x7f;
194   ULONGEST exp, reg;
195 
196   exp = (exp_msb << 10) | exp_low;
197   if (exp_msb)
198     {
199       if (exp_low == 0x7f)
200 	exp = 0x7ff;
201     }
202   else
203     {
204       if (exp_low != 0x00)
205 	exp |= 0x380;
206     }
207 
208   reg = (sign << 63) | (exp << 52) | (frac << 29);
209   store_unsigned_integer ((gdb_byte *) out, 8, byte_order, reg);
210 }
211 
212 /* Similarly, this represents exactly the conversion performed by
213    the STS instruction.  */
214 
215 static void
216 alpha_sts (struct gdbarch *gdbarch, void *out, const void *in)
217 {
218   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
219   ULONGEST reg, mem;
220 
221   reg = extract_unsigned_integer ((const gdb_byte *) in, 8, byte_order);
222   mem = ((reg >> 32) & 0xc0000000) | ((reg >> 29) & 0x3fffffff);
223   store_unsigned_integer ((gdb_byte *) out, 4, byte_order, mem);
224 }
225 
226 /* The alpha needs a conversion between register and memory format if the
227    register is a floating point register and memory format is float, as the
228    register format must be double or memory format is an integer with 4
229    bytes, as the representation of integers in floating point
230    registers is different.  */
231 
232 static int
233 alpha_convert_register_p (struct gdbarch *gdbarch, int regno,
234 			  struct type *type)
235 {
236   return (regno >= ALPHA_FP0_REGNUM && regno < ALPHA_FP0_REGNUM + 31
237 	  && TYPE_LENGTH (type) == 4);
238 }
239 
240 static int
241 alpha_register_to_value (struct frame_info *frame, int regnum,
242 			 struct type *valtype, gdb_byte *out,
243 			int *optimizedp, int *unavailablep)
244 {
245   struct gdbarch *gdbarch = get_frame_arch (frame);
246   struct value *value = get_frame_register_value (frame, regnum);
247 
248   gdb_assert (value != NULL);
249   *optimizedp = value_optimized_out (value);
250   *unavailablep = !value_entirely_available (value);
251 
252   if (*optimizedp || *unavailablep)
253     {
254       release_value (value);
255       return 0;
256     }
257 
258   /* Convert to VALTYPE.  */
259 
260   gdb_assert (TYPE_LENGTH (valtype) == 4);
261   alpha_sts (gdbarch, out, value_contents_all (value));
262 
263   release_value (value);
264   return 1;
265 }
266 
267 static void
268 alpha_value_to_register (struct frame_info *frame, int regnum,
269 			 struct type *valtype, const gdb_byte *in)
270 {
271   gdb_byte out[ALPHA_REGISTER_SIZE];
272 
273   gdb_assert (TYPE_LENGTH (valtype) == 4);
274   gdb_assert (register_size (get_frame_arch (frame), regnum)
275 	      <= ALPHA_REGISTER_SIZE);
276   alpha_lds (get_frame_arch (frame), out, in);
277 
278   put_frame_register (frame, regnum, out);
279 }
280 
281 
282 /* The alpha passes the first six arguments in the registers, the rest on
283    the stack.  The register arguments are stored in ARG_REG_BUFFER, and
284    then moved into the register file; this simplifies the passing of a
285    large struct which extends from the registers to the stack, plus avoids
286    three ptrace invocations per word.
287 
288    We don't bother tracking which register values should go in integer
289    regs or fp regs; we load the same values into both.
290 
291    If the called function is returning a structure, the address of the
292    structure to be returned is passed as a hidden first argument.  */
293 
294 static CORE_ADDR
295 alpha_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
296 		       struct regcache *regcache, CORE_ADDR bp_addr,
297 		       int nargs, struct value **args, CORE_ADDR sp,
298 		       function_call_return_method return_method,
299 		       CORE_ADDR struct_addr)
300 {
301   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
302   int i;
303   int accumulate_size = (return_method == return_method_struct) ? 8 : 0;
304   struct alpha_arg
305     {
306       const gdb_byte *contents;
307       int len;
308       int offset;
309     };
310   struct alpha_arg *alpha_args = XALLOCAVEC (struct alpha_arg, nargs);
311   struct alpha_arg *m_arg;
312   gdb_byte arg_reg_buffer[ALPHA_REGISTER_SIZE * ALPHA_NUM_ARG_REGS];
313   int required_arg_regs;
314   CORE_ADDR func_addr = find_function_addr (function, NULL);
315 
316   /* The ABI places the address of the called function in T12.  */
317   regcache_cooked_write_signed (regcache, ALPHA_T12_REGNUM, func_addr);
318 
319   /* Set the return address register to point to the entry point
320      of the program, where a breakpoint lies in wait.  */
321   regcache_cooked_write_signed (regcache, ALPHA_RA_REGNUM, bp_addr);
322 
323   /* Lay out the arguments in memory.  */
324   for (i = 0, m_arg = alpha_args; i < nargs; i++, m_arg++)
325     {
326       struct value *arg = args[i];
327       struct type *arg_type = check_typedef (value_type (arg));
328 
329       /* Cast argument to long if necessary as the compiler does it too.  */
330       switch (TYPE_CODE (arg_type))
331 	{
332 	case TYPE_CODE_INT:
333 	case TYPE_CODE_BOOL:
334 	case TYPE_CODE_CHAR:
335 	case TYPE_CODE_RANGE:
336 	case TYPE_CODE_ENUM:
337 	  if (TYPE_LENGTH (arg_type) == 4)
338 	    {
339 	      /* 32-bit values must be sign-extended to 64 bits
340 		 even if the base data type is unsigned.  */
341 	      arg_type = builtin_type (gdbarch)->builtin_int32;
342 	      arg = value_cast (arg_type, arg);
343 	    }
344 	  if (TYPE_LENGTH (arg_type) < ALPHA_REGISTER_SIZE)
345 	    {
346 	      arg_type = builtin_type (gdbarch)->builtin_int64;
347 	      arg = value_cast (arg_type, arg);
348 	    }
349 	  break;
350 
351 	case TYPE_CODE_FLT:
352 	  /* "float" arguments loaded in registers must be passed in
353 	     register format, aka "double".  */
354 	  if (accumulate_size < sizeof (arg_reg_buffer)
355 	      && TYPE_LENGTH (arg_type) == 4)
356 	    {
357 	      arg_type = builtin_type (gdbarch)->builtin_double;
358 	      arg = value_cast (arg_type, arg);
359 	    }
360 	  /* Tru64 5.1 has a 128-bit long double, and passes this by
361 	     invisible reference.  No one else uses this data type.  */
362 	  else if (TYPE_LENGTH (arg_type) == 16)
363 	    {
364 	      /* Allocate aligned storage.  */
365 	      sp = (sp & -16) - 16;
366 
367 	      /* Write the real data into the stack.  */
368 	      write_memory (sp, value_contents (arg), 16);
369 
370 	      /* Construct the indirection.  */
371 	      arg_type = lookup_pointer_type (arg_type);
372 	      arg = value_from_pointer (arg_type, sp);
373 	    }
374 	  break;
375 
376 	case TYPE_CODE_COMPLEX:
377 	  /* ??? The ABI says that complex values are passed as two
378 	     separate scalar values.  This distinction only matters
379 	     for complex float.  However, GCC does not implement this.  */
380 
381 	  /* Tru64 5.1 has a 128-bit long double, and passes this by
382 	     invisible reference.  */
383 	  if (TYPE_LENGTH (arg_type) == 32)
384 	    {
385 	      /* Allocate aligned storage.  */
386 	      sp = (sp & -16) - 16;
387 
388 	      /* Write the real data into the stack.  */
389 	      write_memory (sp, value_contents (arg), 32);
390 
391 	      /* Construct the indirection.  */
392 	      arg_type = lookup_pointer_type (arg_type);
393 	      arg = value_from_pointer (arg_type, sp);
394 	    }
395 	  break;
396 
397 	default:
398 	  break;
399 	}
400       m_arg->len = TYPE_LENGTH (arg_type);
401       m_arg->offset = accumulate_size;
402       accumulate_size = (accumulate_size + m_arg->len + 7) & ~7;
403       m_arg->contents = value_contents (arg);
404     }
405 
406   /* Determine required argument register loads, loading an argument register
407      is expensive as it uses three ptrace calls.  */
408   required_arg_regs = accumulate_size / 8;
409   if (required_arg_regs > ALPHA_NUM_ARG_REGS)
410     required_arg_regs = ALPHA_NUM_ARG_REGS;
411 
412   /* Make room for the arguments on the stack.  */
413   if (accumulate_size < sizeof(arg_reg_buffer))
414     accumulate_size = 0;
415   else
416     accumulate_size -= sizeof(arg_reg_buffer);
417   sp -= accumulate_size;
418 
419   /* Keep sp aligned to a multiple of 16 as the ABI requires.  */
420   sp &= ~15;
421 
422   /* `Push' arguments on the stack.  */
423   for (i = nargs; m_arg--, --i >= 0;)
424     {
425       const gdb_byte *contents = m_arg->contents;
426       int offset = m_arg->offset;
427       int len = m_arg->len;
428 
429       /* Copy the bytes destined for registers into arg_reg_buffer.  */
430       if (offset < sizeof(arg_reg_buffer))
431 	{
432 	  if (offset + len <= sizeof(arg_reg_buffer))
433 	    {
434 	      memcpy (arg_reg_buffer + offset, contents, len);
435 	      continue;
436 	    }
437 	  else
438 	    {
439 	      int tlen = sizeof(arg_reg_buffer) - offset;
440 	      memcpy (arg_reg_buffer + offset, contents, tlen);
441 	      offset += tlen;
442 	      contents += tlen;
443 	      len -= tlen;
444 	    }
445 	}
446 
447       /* Everything else goes to the stack.  */
448       write_memory (sp + offset - sizeof(arg_reg_buffer), contents, len);
449     }
450   if (return_method == return_method_struct)
451     store_unsigned_integer (arg_reg_buffer, ALPHA_REGISTER_SIZE,
452 			    byte_order, struct_addr);
453 
454   /* Load the argument registers.  */
455   for (i = 0; i < required_arg_regs; i++)
456     {
457       regcache->cooked_write (ALPHA_A0_REGNUM + i,
458 			      arg_reg_buffer + i * ALPHA_REGISTER_SIZE);
459       regcache->cooked_write (ALPHA_FPA0_REGNUM + i,
460 			      arg_reg_buffer + i * ALPHA_REGISTER_SIZE);
461     }
462 
463   /* Finally, update the stack pointer.  */
464   regcache_cooked_write_signed (regcache, ALPHA_SP_REGNUM, sp);
465 
466   return sp;
467 }
468 
469 /* Extract from REGCACHE the value about to be returned from a function
470    and copy it into VALBUF.  */
471 
472 static void
473 alpha_extract_return_value (struct type *valtype, struct regcache *regcache,
474 			    gdb_byte *valbuf)
475 {
476   struct gdbarch *gdbarch = regcache->arch ();
477   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
478   gdb_byte raw_buffer[ALPHA_REGISTER_SIZE];
479   ULONGEST l;
480 
481   switch (TYPE_CODE (valtype))
482     {
483     case TYPE_CODE_FLT:
484       switch (TYPE_LENGTH (valtype))
485 	{
486 	case 4:
487 	  regcache->cooked_read (ALPHA_FP0_REGNUM, raw_buffer);
488 	  alpha_sts (gdbarch, valbuf, raw_buffer);
489 	  break;
490 
491 	case 8:
492 	  regcache->cooked_read (ALPHA_FP0_REGNUM, valbuf);
493 	  break;
494 
495 	case 16:
496 	  regcache_cooked_read_unsigned (regcache, ALPHA_V0_REGNUM, &l);
497 	  read_memory (l, valbuf, 16);
498 	  break;
499 
500 	default:
501 	  internal_error (__FILE__, __LINE__,
502 			  _("unknown floating point width"));
503 	}
504       break;
505 
506     case TYPE_CODE_COMPLEX:
507       switch (TYPE_LENGTH (valtype))
508 	{
509 	case 8:
510 	  /* ??? This isn't correct wrt the ABI, but it's what GCC does.  */
511 	  regcache->cooked_read (ALPHA_FP0_REGNUM, valbuf);
512 	  break;
513 
514 	case 16:
515 	  regcache->cooked_read (ALPHA_FP0_REGNUM, valbuf);
516 	  regcache->cooked_read (ALPHA_FP0_REGNUM + 1, valbuf + 8);
517 	  break;
518 
519 	case 32:
520 	  regcache_cooked_read_unsigned (regcache, ALPHA_V0_REGNUM, &l);
521 	  read_memory (l, valbuf, 32);
522 	  break;
523 
524 	default:
525 	  internal_error (__FILE__, __LINE__,
526 			  _("unknown floating point width"));
527 	}
528       break;
529 
530     default:
531       /* Assume everything else degenerates to an integer.  */
532       regcache_cooked_read_unsigned (regcache, ALPHA_V0_REGNUM, &l);
533       store_unsigned_integer (valbuf, TYPE_LENGTH (valtype), byte_order, l);
534       break;
535     }
536 }
537 
538 /* Insert the given value into REGCACHE as if it was being
539    returned by a function.  */
540 
541 static void
542 alpha_store_return_value (struct type *valtype, struct regcache *regcache,
543 			  const gdb_byte *valbuf)
544 {
545   struct gdbarch *gdbarch = regcache->arch ();
546   gdb_byte raw_buffer[ALPHA_REGISTER_SIZE];
547   ULONGEST l;
548 
549   switch (TYPE_CODE (valtype))
550     {
551     case TYPE_CODE_FLT:
552       switch (TYPE_LENGTH (valtype))
553 	{
554 	case 4:
555 	  alpha_lds (gdbarch, raw_buffer, valbuf);
556 	  regcache->cooked_write (ALPHA_FP0_REGNUM, raw_buffer);
557 	  break;
558 
559 	case 8:
560 	  regcache->cooked_write (ALPHA_FP0_REGNUM, valbuf);
561 	  break;
562 
563 	case 16:
564 	  /* FIXME: 128-bit long doubles are returned like structures:
565 	     by writing into indirect storage provided by the caller
566 	     as the first argument.  */
567 	  error (_("Cannot set a 128-bit long double return value."));
568 
569 	default:
570 	  internal_error (__FILE__, __LINE__,
571 			  _("unknown floating point width"));
572 	}
573       break;
574 
575     case TYPE_CODE_COMPLEX:
576       switch (TYPE_LENGTH (valtype))
577 	{
578 	case 8:
579 	  /* ??? This isn't correct wrt the ABI, but it's what GCC does.  */
580 	  regcache->cooked_write (ALPHA_FP0_REGNUM, valbuf);
581 	  break;
582 
583 	case 16:
584 	  regcache->cooked_write (ALPHA_FP0_REGNUM, valbuf);
585 	  regcache->cooked_write (ALPHA_FP0_REGNUM + 1, valbuf + 8);
586 	  break;
587 
588 	case 32:
589 	  /* FIXME: 128-bit long doubles are returned like structures:
590 	     by writing into indirect storage provided by the caller
591 	     as the first argument.  */
592 	  error (_("Cannot set a 128-bit long double return value."));
593 
594 	default:
595 	  internal_error (__FILE__, __LINE__,
596 			  _("unknown floating point width"));
597 	}
598       break;
599 
600     default:
601       /* Assume everything else degenerates to an integer.  */
602       /* 32-bit values must be sign-extended to 64 bits
603 	 even if the base data type is unsigned.  */
604       if (TYPE_LENGTH (valtype) == 4)
605 	valtype = builtin_type (gdbarch)->builtin_int32;
606       l = unpack_long (valtype, valbuf);
607       regcache_cooked_write_unsigned (regcache, ALPHA_V0_REGNUM, l);
608       break;
609     }
610 }
611 
612 static enum return_value_convention
613 alpha_return_value (struct gdbarch *gdbarch, struct value *function,
614 		    struct type *type, struct regcache *regcache,
615 		    gdb_byte *readbuf, const gdb_byte *writebuf)
616 {
617   enum type_code code = TYPE_CODE (type);
618 
619   if ((code == TYPE_CODE_STRUCT
620        || code == TYPE_CODE_UNION
621        || code == TYPE_CODE_ARRAY)
622       && gdbarch_tdep (gdbarch)->return_in_memory (type))
623     {
624       if (readbuf)
625 	{
626 	  ULONGEST addr;
627 	  regcache_raw_read_unsigned (regcache, ALPHA_V0_REGNUM, &addr);
628 	  read_memory (addr, readbuf, TYPE_LENGTH (type));
629 	}
630 
631       return RETURN_VALUE_ABI_RETURNS_ADDRESS;
632     }
633 
634   if (readbuf)
635     alpha_extract_return_value (type, regcache, readbuf);
636   if (writebuf)
637     alpha_store_return_value (type, regcache, writebuf);
638 
639   return RETURN_VALUE_REGISTER_CONVENTION;
640 }
641 
642 static int
643 alpha_return_in_memory_always (struct type *type)
644 {
645   return 1;
646 }
647 
648 
649 constexpr gdb_byte alpha_break_insn[] = { 0x80, 0, 0, 0 }; /* call_pal bpt */
650 
651 typedef BP_MANIPULATION (alpha_break_insn) alpha_breakpoint;
652 
653 
654 /* This returns the PC of the first insn after the prologue.
655    If we can't find the prologue, then return 0.  */
656 
657 CORE_ADDR
658 alpha_after_prologue (CORE_ADDR pc)
659 {
660   struct symtab_and_line sal;
661   CORE_ADDR func_addr, func_end;
662 
663   if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
664     return 0;
665 
666   sal = find_pc_line (func_addr, 0);
667   if (sal.end < func_end)
668     return sal.end;
669 
670   /* The line after the prologue is after the end of the function.  In this
671      case, tell the caller to find the prologue the hard way.  */
672   return 0;
673 }
674 
675 /* Read an instruction from memory at PC, looking through breakpoints.  */
676 
677 unsigned int
678 alpha_read_insn (struct gdbarch *gdbarch, CORE_ADDR pc)
679 {
680   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
681   gdb_byte buf[ALPHA_INSN_SIZE];
682   int res;
683 
684   res = target_read_memory (pc, buf, sizeof (buf));
685   if (res != 0)
686     memory_error (TARGET_XFER_E_IO, pc);
687   return extract_unsigned_integer (buf, sizeof (buf), byte_order);
688 }
689 
690 /* To skip prologues, I use this predicate.  Returns either PC itself
691    if the code at PC does not look like a function prologue; otherwise
692    returns an address that (if we're lucky) follows the prologue.  If
693    LENIENT, then we must skip everything which is involved in setting
694    up the frame (it's OK to skip more, just so long as we don't skip
695    anything which might clobber the registers which are being saved.  */
696 
697 static CORE_ADDR
698 alpha_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
699 {
700   unsigned long inst;
701   int offset;
702   CORE_ADDR post_prologue_pc;
703   gdb_byte buf[ALPHA_INSN_SIZE];
704 
705   /* Silently return the unaltered pc upon memory errors.
706      This could happen on OSF/1 if decode_line_1 tries to skip the
707      prologue for quickstarted shared library functions when the
708      shared library is not yet mapped in.
709      Reading target memory is slow over serial lines, so we perform
710      this check only if the target has shared libraries (which all
711      Alpha targets do).  */
712   if (target_read_memory (pc, buf, sizeof (buf)))
713     return pc;
714 
715   /* See if we can determine the end of the prologue via the symbol table.
716      If so, then return either PC, or the PC after the prologue, whichever
717      is greater.  */
718 
719   post_prologue_pc = alpha_after_prologue (pc);
720   if (post_prologue_pc != 0)
721     return std::max (pc, post_prologue_pc);
722 
723   /* Can't determine prologue from the symbol table, need to examine
724      instructions.  */
725 
726   /* Skip the typical prologue instructions.  These are the stack adjustment
727      instruction and the instructions that save registers on the stack
728      or in the gcc frame.  */
729   for (offset = 0; offset < 100; offset += ALPHA_INSN_SIZE)
730     {
731       inst = alpha_read_insn (gdbarch, pc + offset);
732 
733       if ((inst & 0xffff0000) == 0x27bb0000)	/* ldah $gp,n($t12) */
734 	continue;
735       if ((inst & 0xffff0000) == 0x23bd0000)	/* lda $gp,n($gp) */
736 	continue;
737       if ((inst & 0xffff0000) == 0x23de0000)	/* lda $sp,n($sp) */
738 	continue;
739       if ((inst & 0xffe01fff) == 0x43c0153e)	/* subq $sp,n,$sp */
740 	continue;
741 
742       if (((inst & 0xfc1f0000) == 0xb41e0000		/* stq reg,n($sp) */
743 	   || (inst & 0xfc1f0000) == 0x9c1e0000)	/* stt reg,n($sp) */
744 	  && (inst & 0x03e00000) != 0x03e00000)		/* reg != $zero */
745 	continue;
746 
747       if (inst == 0x47de040f)			/* bis sp,sp,fp */
748 	continue;
749       if (inst == 0x47fe040f)			/* bis zero,sp,fp */
750 	continue;
751 
752       break;
753     }
754   return pc + offset;
755 }
756 
757 /* GNU ld for alpha is so clever that the redundant GP load in function
758    entrypoint is skipped.  We must therefore skip initial GP loads; otherwise
759    breakpoints in function entrypoints can also be skipped.  */
760 
761 static CORE_ADDR
762 alpha_skip_entrypoint (struct gdbarch *gdbarch, CORE_ADDR pc)
763 {
764   unsigned long inst;
765   gdb_byte buf[ALPHA_INSN_SIZE];
766 
767   /* Refer to the comment in alpha_skip_prologue above.  */
768   if (target_read_memory (pc, buf, sizeof (buf)))
769     return pc;
770 
771   /* Skip a GP load in the first two words in the function entrypoint.  */
772   inst = alpha_read_insn (gdbarch, pc);
773   if ((inst & 0xffff0000) != 0x27bb0000)	/* ldah $gp,n($t12) */
774     return pc;
775   inst = alpha_read_insn (gdbarch, pc + ALPHA_INSN_SIZE);
776   if ((inst & 0xffff0000) != 0x23bd0000)	/* lda $gp,n($gp) */
777     return pc;
778 
779   return pc + 2 * ALPHA_INSN_SIZE;
780 }
781 
782 
783 static const int ldl_l_opcode = 0x2a;
784 static const int ldq_l_opcode = 0x2b;
785 static const int stl_c_opcode = 0x2e;
786 static const int stq_c_opcode = 0x2f;
787 
788 /* Checks for an atomic sequence of instructions beginning with a LDL_L/LDQ_L
789    instruction and ending with a STL_C/STQ_C instruction.  If such a sequence
790    is found, attempt to step through it.  A breakpoint is placed at the end of
791    the sequence.  */
792 
793 static std::vector<CORE_ADDR>
794 alpha_deal_with_atomic_sequence (struct gdbarch *gdbarch, CORE_ADDR pc)
795 {
796   CORE_ADDR breaks[2] = {CORE_ADDR_MAX, CORE_ADDR_MAX};
797   CORE_ADDR loc = pc;
798   CORE_ADDR closing_insn; /* Instruction that closes the atomic sequence.  */
799   unsigned int insn = alpha_read_insn (gdbarch, loc);
800   int insn_count;
801   int index;
802   int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed).  */
803   const int atomic_sequence_length = 16; /* Instruction sequence length.  */
804   int bc_insn_count = 0; /* Conditional branch instruction count.  */
805 
806   /* Assume all atomic sequences start with a LDL_L/LDQ_L instruction.  */
807   if (INSN_OPCODE (insn) != ldl_l_opcode
808       && INSN_OPCODE (insn) != ldq_l_opcode)
809     return {};
810 
811   /* Assume that no atomic sequence is longer than "atomic_sequence_length"
812      instructions.  */
813   for (insn_count = 0; insn_count < atomic_sequence_length; ++insn_count)
814     {
815       loc += ALPHA_INSN_SIZE;
816       insn = alpha_read_insn (gdbarch, loc);
817 
818       /* Assume that there is at most one branch in the atomic
819 	 sequence.  If a branch is found, put a breakpoint in
820 	 its destination address.  */
821       if (INSN_OPCODE (insn) >= br_opcode)
822 	{
823 	  int immediate = (insn & 0x001fffff) << 2;
824 
825 	  immediate = (immediate ^ 0x400000) - 0x400000;
826 
827 	  if (bc_insn_count >= 1)
828 	    return {}; /* More than one branch found, fallback
829 			  to the standard single-step code.  */
830 
831 	  breaks[1] = loc + ALPHA_INSN_SIZE + immediate;
832 
833 	  bc_insn_count++;
834 	  last_breakpoint++;
835 	}
836 
837       if (INSN_OPCODE (insn) == stl_c_opcode
838 	  || INSN_OPCODE (insn) == stq_c_opcode)
839 	break;
840     }
841 
842   /* Assume that the atomic sequence ends with a STL_C/STQ_C instruction.  */
843   if (INSN_OPCODE (insn) != stl_c_opcode
844       && INSN_OPCODE (insn) != stq_c_opcode)
845     return {};
846 
847   closing_insn = loc;
848   loc += ALPHA_INSN_SIZE;
849 
850   /* Insert a breakpoint right after the end of the atomic sequence.  */
851   breaks[0] = loc;
852 
853   /* Check for duplicated breakpoints.  Check also for a breakpoint
854      placed (branch instruction's destination) anywhere in sequence.  */
855   if (last_breakpoint
856       && (breaks[1] == breaks[0]
857 	  || (breaks[1] >= pc && breaks[1] <= closing_insn)))
858     last_breakpoint = 0;
859 
860   std::vector<CORE_ADDR> next_pcs;
861 
862   for (index = 0; index <= last_breakpoint; index++)
863     next_pcs.push_back (breaks[index]);
864 
865   return next_pcs;
866 }
867 
868 
869 /* Figure out where the longjmp will land.
870    We expect the first arg to be a pointer to the jmp_buf structure from
871    which we extract the PC (JB_PC) that we will land at.  The PC is copied
872    into the "pc".  This routine returns true on success.  */
873 
874 static int
875 alpha_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
876 {
877   struct gdbarch *gdbarch = get_frame_arch (frame);
878   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
879   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
880   CORE_ADDR jb_addr;
881   gdb_byte raw_buffer[ALPHA_REGISTER_SIZE];
882 
883   jb_addr = get_frame_register_unsigned (frame, ALPHA_A0_REGNUM);
884 
885   if (target_read_memory (jb_addr + (tdep->jb_pc * tdep->jb_elt_size),
886 			  raw_buffer, tdep->jb_elt_size))
887     return 0;
888 
889   *pc = extract_unsigned_integer (raw_buffer, tdep->jb_elt_size, byte_order);
890   return 1;
891 }
892 
893 
894 /* Frame unwinder for signal trampolines.  We use alpha tdep bits that
895    describe the location and shape of the sigcontext structure.  After
896    that, all registers are in memory, so it's easy.  */
897 /* ??? Shouldn't we be able to do this generically, rather than with
898    OSABI data specific to Alpha?  */
899 
900 struct alpha_sigtramp_unwind_cache
901 {
902   CORE_ADDR sigcontext_addr;
903 };
904 
905 static struct alpha_sigtramp_unwind_cache *
906 alpha_sigtramp_frame_unwind_cache (struct frame_info *this_frame,
907 				   void **this_prologue_cache)
908 {
909   struct alpha_sigtramp_unwind_cache *info;
910   struct gdbarch_tdep *tdep;
911 
912   if (*this_prologue_cache)
913     return (struct alpha_sigtramp_unwind_cache *) *this_prologue_cache;
914 
915   info = FRAME_OBSTACK_ZALLOC (struct alpha_sigtramp_unwind_cache);
916   *this_prologue_cache = info;
917 
918   tdep = gdbarch_tdep (get_frame_arch (this_frame));
919   info->sigcontext_addr = tdep->sigcontext_addr (this_frame);
920 
921   return info;
922 }
923 
924 /* Return the address of REGNUM in a sigtramp frame.  Since this is
925    all arithmetic, it doesn't seem worthwhile to cache it.  */
926 
927 static CORE_ADDR
928 alpha_sigtramp_register_address (struct gdbarch *gdbarch,
929 				 CORE_ADDR sigcontext_addr, int regnum)
930 {
931   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
932 
933   if (regnum >= 0 && regnum < 32)
934     return sigcontext_addr + tdep->sc_regs_offset + regnum * 8;
935   else if (regnum >= ALPHA_FP0_REGNUM && regnum < ALPHA_FP0_REGNUM + 32)
936     return sigcontext_addr + tdep->sc_fpregs_offset + regnum * 8;
937   else if (regnum == ALPHA_PC_REGNUM)
938     return sigcontext_addr + tdep->sc_pc_offset;
939 
940   return 0;
941 }
942 
943 /* Given a GDB frame, determine the address of the calling function's
944    frame.  This will be used to create a new GDB frame struct.  */
945 
946 static void
947 alpha_sigtramp_frame_this_id (struct frame_info *this_frame,
948 			      void **this_prologue_cache,
949 			      struct frame_id *this_id)
950 {
951   struct gdbarch *gdbarch = get_frame_arch (this_frame);
952   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
953   struct alpha_sigtramp_unwind_cache *info
954     = alpha_sigtramp_frame_unwind_cache (this_frame, this_prologue_cache);
955   CORE_ADDR stack_addr, code_addr;
956 
957   /* If the OSABI couldn't locate the sigcontext, give up.  */
958   if (info->sigcontext_addr == 0)
959     return;
960 
961   /* If we have dynamic signal trampolines, find their start.
962      If we do not, then we must assume there is a symbol record
963      that can provide the start address.  */
964   if (tdep->dynamic_sigtramp_offset)
965     {
966       int offset;
967       code_addr = get_frame_pc (this_frame);
968       offset = tdep->dynamic_sigtramp_offset (gdbarch, code_addr);
969       if (offset >= 0)
970 	code_addr -= offset;
971       else
972 	code_addr = 0;
973     }
974   else
975     code_addr = get_frame_func (this_frame);
976 
977   /* The stack address is trivially read from the sigcontext.  */
978   stack_addr = alpha_sigtramp_register_address (gdbarch, info->sigcontext_addr,
979 						ALPHA_SP_REGNUM);
980   stack_addr = get_frame_memory_unsigned (this_frame, stack_addr,
981 					  ALPHA_REGISTER_SIZE);
982 
983   *this_id = frame_id_build (stack_addr, code_addr);
984 }
985 
986 /* Retrieve the value of REGNUM in FRAME.  Don't give up!  */
987 
988 static struct value *
989 alpha_sigtramp_frame_prev_register (struct frame_info *this_frame,
990 				    void **this_prologue_cache, int regnum)
991 {
992   struct alpha_sigtramp_unwind_cache *info
993     = alpha_sigtramp_frame_unwind_cache (this_frame, this_prologue_cache);
994   CORE_ADDR addr;
995 
996   if (info->sigcontext_addr != 0)
997     {
998       /* All integer and fp registers are stored in memory.  */
999       addr = alpha_sigtramp_register_address (get_frame_arch (this_frame),
1000 					      info->sigcontext_addr, regnum);
1001       if (addr != 0)
1002         return frame_unwind_got_memory (this_frame, regnum, addr);
1003     }
1004 
1005   /* This extra register may actually be in the sigcontext, but our
1006      current description of it in alpha_sigtramp_frame_unwind_cache
1007      doesn't include it.  Too bad.  Fall back on whatever's in the
1008      outer frame.  */
1009   return frame_unwind_got_register (this_frame, regnum, regnum);
1010 }
1011 
1012 static int
1013 alpha_sigtramp_frame_sniffer (const struct frame_unwind *self,
1014                               struct frame_info *this_frame,
1015                               void **this_prologue_cache)
1016 {
1017   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1018   CORE_ADDR pc = get_frame_pc (this_frame);
1019   const char *name;
1020 
1021   /* NOTE: cagney/2004-04-30: Do not copy/clone this code.  Instead
1022      look at tramp-frame.h and other simplier per-architecture
1023      sigtramp unwinders.  */
1024 
1025   /* We shouldn't even bother to try if the OSABI didn't register a
1026      sigcontext_addr handler or pc_in_sigtramp hander.  */
1027   if (gdbarch_tdep (gdbarch)->sigcontext_addr == NULL)
1028     return 0;
1029   if (gdbarch_tdep (gdbarch)->pc_in_sigtramp == NULL)
1030     return 0;
1031 
1032   /* Otherwise we should be in a signal frame.  */
1033   find_pc_partial_function (pc, &name, NULL, NULL);
1034   if (gdbarch_tdep (gdbarch)->pc_in_sigtramp (gdbarch, pc, name))
1035     return 1;
1036 
1037   return 0;
1038 }
1039 
1040 static const struct frame_unwind alpha_sigtramp_frame_unwind = {
1041   SIGTRAMP_FRAME,
1042   default_frame_unwind_stop_reason,
1043   alpha_sigtramp_frame_this_id,
1044   alpha_sigtramp_frame_prev_register,
1045   NULL,
1046   alpha_sigtramp_frame_sniffer
1047 };
1048 
1049 
1050 
1051 /* Heuristic_proc_start may hunt through the text section for a long
1052    time across a 2400 baud serial line.  Allows the user to limit this
1053    search.  */
1054 static int heuristic_fence_post = 0;
1055 
1056 /* Attempt to locate the start of the function containing PC.  We assume that
1057    the previous function ends with an about_to_return insn.  Not foolproof by
1058    any means, since gcc is happy to put the epilogue in the middle of a
1059    function.  But we're guessing anyway...  */
1060 
1061 static CORE_ADDR
1062 alpha_heuristic_proc_start (struct gdbarch *gdbarch, CORE_ADDR pc)
1063 {
1064   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1065   CORE_ADDR last_non_nop = pc;
1066   CORE_ADDR fence = pc - heuristic_fence_post;
1067   CORE_ADDR orig_pc = pc;
1068   CORE_ADDR func;
1069   struct inferior *inf;
1070 
1071   if (pc == 0)
1072     return 0;
1073 
1074   /* First see if we can find the start of the function from minimal
1075      symbol information.  This can succeed with a binary that doesn't
1076      have debug info, but hasn't been stripped.  */
1077   func = get_pc_function_start (pc);
1078   if (func)
1079     return func;
1080 
1081   if (heuristic_fence_post == -1
1082       || fence < tdep->vm_min_address)
1083     fence = tdep->vm_min_address;
1084 
1085   /* Search back for previous return; also stop at a 0, which might be
1086      seen for instance before the start of a code section.  Don't include
1087      nops, since this usually indicates padding between functions.  */
1088   for (pc -= ALPHA_INSN_SIZE; pc >= fence; pc -= ALPHA_INSN_SIZE)
1089     {
1090       unsigned int insn = alpha_read_insn (gdbarch, pc);
1091       switch (insn)
1092 	{
1093 	case 0:			/* invalid insn */
1094 	case 0x6bfa8001:	/* ret $31,($26),1 */
1095 	  return last_non_nop;
1096 
1097 	case 0x2ffe0000:	/* unop: ldq_u $31,0($30) */
1098 	case 0x47ff041f:	/* nop: bis $31,$31,$31 */
1099 	  break;
1100 
1101 	default:
1102 	  last_non_nop = pc;
1103 	  break;
1104 	}
1105     }
1106 
1107   inf = current_inferior ();
1108 
1109   /* It's not clear to me why we reach this point when stopping quietly,
1110      but with this test, at least we don't print out warnings for every
1111      child forked (eg, on decstation).  22apr93 rich@cygnus.com.  */
1112   if (inf->control.stop_soon == NO_STOP_QUIETLY)
1113     {
1114       static int blurb_printed = 0;
1115 
1116       if (fence == tdep->vm_min_address)
1117 	warning (_("Hit beginning of text section without finding \
1118 enclosing function for address %s"), paddress (gdbarch, orig_pc));
1119       else
1120 	warning (_("Hit heuristic-fence-post without finding \
1121 enclosing function for address %s"), paddress (gdbarch, orig_pc));
1122 
1123       if (!blurb_printed)
1124 	{
1125 	  printf_filtered (_("\
1126 This warning occurs if you are debugging a function without any symbols\n\
1127 (for example, in a stripped executable).  In that case, you may wish to\n\
1128 increase the size of the search with the `set heuristic-fence-post' command.\n\
1129 \n\
1130 Otherwise, you told GDB there was a function where there isn't one, or\n\
1131 (more likely) you have encountered a bug in GDB.\n"));
1132 	  blurb_printed = 1;
1133 	}
1134     }
1135 
1136   return 0;
1137 }
1138 
1139 /* Fallback alpha frame unwinder.  Uses instruction scanning and knows
1140    something about the traditional layout of alpha stack frames.  */
1141 
1142 struct alpha_heuristic_unwind_cache
1143 {
1144   CORE_ADDR vfp;
1145   CORE_ADDR start_pc;
1146   struct trad_frame_saved_reg *saved_regs;
1147   int return_reg;
1148 };
1149 
1150 /* If a probing loop sequence starts at PC, simulate it and compute
1151    FRAME_SIZE and PC after its execution.  Otherwise, return with PC and
1152    FRAME_SIZE unchanged.  */
1153 
1154 static void
1155 alpha_heuristic_analyze_probing_loop (struct gdbarch *gdbarch, CORE_ADDR *pc,
1156 				      int *frame_size)
1157 {
1158   CORE_ADDR cur_pc = *pc;
1159   int cur_frame_size = *frame_size;
1160   int nb_of_iterations, reg_index, reg_probe;
1161   unsigned int insn;
1162 
1163   /* The following pattern is recognized as a probing loop:
1164 
1165         lda     REG_INDEX,NB_OF_ITERATIONS
1166         lda     REG_PROBE,<immediate>(sp)
1167 
1168      LOOP_START:
1169         stq     zero,<immediate>(REG_PROBE)
1170         subq    REG_INDEX,0x1,REG_INDEX
1171         lda     REG_PROBE,<immediate>(REG_PROBE)
1172         bne     REG_INDEX, LOOP_START
1173 
1174         lda     sp,<immediate>(REG_PROBE)
1175 
1176      If anything different is found, the function returns without
1177      changing PC and FRAME_SIZE.  Otherwise, PC will point immediately
1178      after this sequence, and FRAME_SIZE will be updated.  */
1179 
1180   /* lda     REG_INDEX,NB_OF_ITERATIONS */
1181 
1182   insn = alpha_read_insn (gdbarch, cur_pc);
1183   if (INSN_OPCODE (insn) != lda_opcode)
1184     return;
1185   reg_index = MEM_RA (insn);
1186   nb_of_iterations = MEM_DISP (insn);
1187 
1188   /* lda     REG_PROBE,<immediate>(sp) */
1189 
1190   cur_pc += ALPHA_INSN_SIZE;
1191   insn = alpha_read_insn (gdbarch, cur_pc);
1192   if (INSN_OPCODE (insn) != lda_opcode
1193       || MEM_RB (insn) != ALPHA_SP_REGNUM)
1194     return;
1195   reg_probe = MEM_RA (insn);
1196   cur_frame_size -= MEM_DISP (insn);
1197 
1198   /* stq     zero,<immediate>(REG_PROBE) */
1199 
1200   cur_pc += ALPHA_INSN_SIZE;
1201   insn = alpha_read_insn (gdbarch, cur_pc);
1202   if (INSN_OPCODE (insn) != stq_opcode
1203       || MEM_RA (insn) != 0x1f
1204       || MEM_RB (insn) != reg_probe)
1205     return;
1206 
1207   /* subq    REG_INDEX,0x1,REG_INDEX */
1208 
1209   cur_pc += ALPHA_INSN_SIZE;
1210   insn = alpha_read_insn (gdbarch, cur_pc);
1211   if (INSN_OPCODE (insn) != subq_opcode
1212       || !OPR_HAS_IMMEDIATE (insn)
1213       || OPR_FUNCTION (insn) != subq_function
1214       || OPR_LIT(insn) != 1
1215       || OPR_RA (insn) != reg_index
1216       || OPR_RC (insn) != reg_index)
1217     return;
1218 
1219   /* lda     REG_PROBE,<immediate>(REG_PROBE) */
1220 
1221   cur_pc += ALPHA_INSN_SIZE;
1222   insn = alpha_read_insn (gdbarch, cur_pc);
1223   if (INSN_OPCODE (insn) != lda_opcode
1224       || MEM_RA (insn) != reg_probe
1225       || MEM_RB (insn) != reg_probe)
1226     return;
1227   cur_frame_size -= MEM_DISP (insn) * nb_of_iterations;
1228 
1229   /* bne     REG_INDEX, LOOP_START */
1230 
1231   cur_pc += ALPHA_INSN_SIZE;
1232   insn = alpha_read_insn (gdbarch, cur_pc);
1233   if (INSN_OPCODE (insn) != bne_opcode
1234       || MEM_RA (insn) != reg_index)
1235     return;
1236 
1237   /* lda     sp,<immediate>(REG_PROBE) */
1238 
1239   cur_pc += ALPHA_INSN_SIZE;
1240   insn = alpha_read_insn (gdbarch, cur_pc);
1241   if (INSN_OPCODE (insn) != lda_opcode
1242       || MEM_RA (insn) != ALPHA_SP_REGNUM
1243       || MEM_RB (insn) != reg_probe)
1244     return;
1245   cur_frame_size -= MEM_DISP (insn);
1246 
1247   *pc = cur_pc;
1248   *frame_size = cur_frame_size;
1249 }
1250 
1251 static struct alpha_heuristic_unwind_cache *
1252 alpha_heuristic_frame_unwind_cache (struct frame_info *this_frame,
1253 				    void **this_prologue_cache,
1254 				    CORE_ADDR start_pc)
1255 {
1256   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1257   struct alpha_heuristic_unwind_cache *info;
1258   ULONGEST val;
1259   CORE_ADDR limit_pc, cur_pc;
1260   int frame_reg, frame_size, return_reg, reg;
1261 
1262   if (*this_prologue_cache)
1263     return (struct alpha_heuristic_unwind_cache *) *this_prologue_cache;
1264 
1265   info = FRAME_OBSTACK_ZALLOC (struct alpha_heuristic_unwind_cache);
1266   *this_prologue_cache = info;
1267   info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
1268 
1269   limit_pc = get_frame_pc (this_frame);
1270   if (start_pc == 0)
1271     start_pc = alpha_heuristic_proc_start (gdbarch, limit_pc);
1272   info->start_pc = start_pc;
1273 
1274   frame_reg = ALPHA_SP_REGNUM;
1275   frame_size = 0;
1276   return_reg = -1;
1277 
1278   /* If we've identified a likely place to start, do code scanning.  */
1279   if (start_pc != 0)
1280     {
1281       /* Limit the forward search to 50 instructions.  */
1282       if (start_pc + 200 < limit_pc)
1283 	limit_pc = start_pc + 200;
1284 
1285       for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += ALPHA_INSN_SIZE)
1286 	{
1287 	  unsigned int word = alpha_read_insn (gdbarch, cur_pc);
1288 
1289 	  if ((word & 0xffff0000) == 0x23de0000)	/* lda $sp,n($sp) */
1290 	    {
1291 	      if (word & 0x8000)
1292 		{
1293 		  /* Consider only the first stack allocation instruction
1294 		     to contain the static size of the frame.  */
1295 		  if (frame_size == 0)
1296 		    frame_size = (-word) & 0xffff;
1297 		}
1298 	      else
1299 		{
1300 		  /* Exit loop if a positive stack adjustment is found, which
1301 		     usually means that the stack cleanup code in the function
1302 		     epilogue is reached.  */
1303 		  break;
1304 		}
1305 	    }
1306 	  else if ((word & 0xfc1f0000) == 0xb41e0000)	/* stq reg,n($sp) */
1307 	    {
1308 	      reg = (word & 0x03e00000) >> 21;
1309 
1310               /* Ignore this instruction if we have already encountered
1311                  an instruction saving the same register earlier in the
1312                  function code.  The current instruction does not tell
1313                  us where the original value upon function entry is saved.
1314                  All it says is that the function we are scanning reused
1315                  that register for some computation of its own, and is now
1316                  saving its result.  */
1317               if (trad_frame_addr_p(info->saved_regs, reg))
1318                 continue;
1319 
1320 	      if (reg == 31)
1321 		continue;
1322 
1323 	      /* Do not compute the address where the register was saved yet,
1324 		 because we don't know yet if the offset will need to be
1325 		 relative to $sp or $fp (we can not compute the address
1326 		 relative to $sp if $sp is updated during the execution of
1327 		 the current subroutine, for instance when doing some alloca).
1328 		 So just store the offset for the moment, and compute the
1329 		 address later when we know whether this frame has a frame
1330 		 pointer or not.  */
1331 	      /* Hack: temporarily add one, so that the offset is non-zero
1332 		 and we can tell which registers have save offsets below.  */
1333 	      info->saved_regs[reg].addr = (word & 0xffff) + 1;
1334 
1335 	      /* Starting with OSF/1-3.2C, the system libraries are shipped
1336 		 without local symbols, but they still contain procedure
1337 		 descriptors without a symbol reference. GDB is currently
1338 		 unable to find these procedure descriptors and uses
1339 		 heuristic_proc_desc instead.
1340 		 As some low level compiler support routines (__div*, __add*)
1341 		 use a non-standard return address register, we have to
1342 		 add some heuristics to determine the return address register,
1343 		 or stepping over these routines will fail.
1344 		 Usually the return address register is the first register
1345 		 saved on the stack, but assembler optimization might
1346 		 rearrange the register saves.
1347 		 So we recognize only a few registers (t7, t9, ra) within
1348 		 the procedure prologue as valid return address registers.
1349 		 If we encounter a return instruction, we extract the
1350 		 return address register from it.
1351 
1352 		 FIXME: Rewriting GDB to access the procedure descriptors,
1353 		 e.g. via the minimal symbol table, might obviate this
1354 		 hack.  */
1355 	      if (return_reg == -1
1356 		  && cur_pc < (start_pc + 80)
1357 		  && (reg == ALPHA_T7_REGNUM
1358 		      || reg == ALPHA_T9_REGNUM
1359 		      || reg == ALPHA_RA_REGNUM))
1360 		return_reg = reg;
1361 	    }
1362 	  else if ((word & 0xffe0ffff) == 0x6be08001)	/* ret zero,reg,1 */
1363 	    return_reg = (word >> 16) & 0x1f;
1364 	  else if (word == 0x47de040f)			/* bis sp,sp,fp */
1365 	    frame_reg = ALPHA_GCC_FP_REGNUM;
1366 	  else if (word == 0x47fe040f)			/* bis zero,sp,fp */
1367 	    frame_reg = ALPHA_GCC_FP_REGNUM;
1368 
1369 	  alpha_heuristic_analyze_probing_loop (gdbarch, &cur_pc, &frame_size);
1370 	}
1371 
1372       /* If we haven't found a valid return address register yet, keep
1373 	 searching in the procedure prologue.  */
1374       if (return_reg == -1)
1375 	{
1376 	  while (cur_pc < (limit_pc + 80) && cur_pc < (start_pc + 80))
1377 	    {
1378 	      unsigned int word = alpha_read_insn (gdbarch, cur_pc);
1379 
1380 	      if ((word & 0xfc1f0000) == 0xb41e0000)	/* stq reg,n($sp) */
1381 		{
1382 		  reg = (word & 0x03e00000) >> 21;
1383 		  if (reg == ALPHA_T7_REGNUM
1384 		      || reg == ALPHA_T9_REGNUM
1385 		      || reg == ALPHA_RA_REGNUM)
1386 		    {
1387 		      return_reg = reg;
1388 		      break;
1389 		    }
1390 		}
1391 	      else if ((word & 0xffe0ffff) == 0x6be08001) /* ret zero,reg,1 */
1392 		{
1393 		  return_reg = (word >> 16) & 0x1f;
1394 		  break;
1395 		}
1396 
1397 	      cur_pc += ALPHA_INSN_SIZE;
1398 	    }
1399 	}
1400     }
1401 
1402   /* Failing that, do default to the customary RA.  */
1403   if (return_reg == -1)
1404     return_reg = ALPHA_RA_REGNUM;
1405   info->return_reg = return_reg;
1406 
1407   val = get_frame_register_unsigned (this_frame, frame_reg);
1408   info->vfp = val + frame_size;
1409 
1410   /* Convert offsets to absolute addresses.  See above about adding
1411      one to the offsets to make all detected offsets non-zero.  */
1412   for (reg = 0; reg < ALPHA_NUM_REGS; ++reg)
1413     if (trad_frame_addr_p(info->saved_regs, reg))
1414       info->saved_regs[reg].addr += val - 1;
1415 
1416   /* The stack pointer of the previous frame is computed by popping
1417      the current stack frame.  */
1418   if (!trad_frame_addr_p (info->saved_regs, ALPHA_SP_REGNUM))
1419    trad_frame_set_value (info->saved_regs, ALPHA_SP_REGNUM, info->vfp);
1420 
1421   return info;
1422 }
1423 
1424 /* Given a GDB frame, determine the address of the calling function's
1425    frame.  This will be used to create a new GDB frame struct.  */
1426 
1427 static void
1428 alpha_heuristic_frame_this_id (struct frame_info *this_frame,
1429 			       void **this_prologue_cache,
1430 			       struct frame_id *this_id)
1431 {
1432   struct alpha_heuristic_unwind_cache *info
1433     = alpha_heuristic_frame_unwind_cache (this_frame, this_prologue_cache, 0);
1434 
1435   *this_id = frame_id_build (info->vfp, info->start_pc);
1436 }
1437 
1438 /* Retrieve the value of REGNUM in FRAME.  Don't give up!  */
1439 
1440 static struct value *
1441 alpha_heuristic_frame_prev_register (struct frame_info *this_frame,
1442 				     void **this_prologue_cache, int regnum)
1443 {
1444   struct alpha_heuristic_unwind_cache *info
1445     = alpha_heuristic_frame_unwind_cache (this_frame, this_prologue_cache, 0);
1446 
1447   /* The PC of the previous frame is stored in the link register of
1448      the current frame.  Frob regnum so that we pull the value from
1449      the correct place.  */
1450   if (regnum == ALPHA_PC_REGNUM)
1451     regnum = info->return_reg;
1452 
1453   return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
1454 }
1455 
1456 static const struct frame_unwind alpha_heuristic_frame_unwind = {
1457   NORMAL_FRAME,
1458   default_frame_unwind_stop_reason,
1459   alpha_heuristic_frame_this_id,
1460   alpha_heuristic_frame_prev_register,
1461   NULL,
1462   default_frame_sniffer
1463 };
1464 
1465 static CORE_ADDR
1466 alpha_heuristic_frame_base_address (struct frame_info *this_frame,
1467 				    void **this_prologue_cache)
1468 {
1469   struct alpha_heuristic_unwind_cache *info
1470     = alpha_heuristic_frame_unwind_cache (this_frame, this_prologue_cache, 0);
1471 
1472   return info->vfp;
1473 }
1474 
1475 static const struct frame_base alpha_heuristic_frame_base = {
1476   &alpha_heuristic_frame_unwind,
1477   alpha_heuristic_frame_base_address,
1478   alpha_heuristic_frame_base_address,
1479   alpha_heuristic_frame_base_address
1480 };
1481 
1482 /* Just like reinit_frame_cache, but with the right arguments to be
1483    callable as an sfunc.  Used by the "set heuristic-fence-post" command.  */
1484 
1485 static void
1486 reinit_frame_cache_sfunc (const char *args,
1487 			  int from_tty, struct cmd_list_element *c)
1488 {
1489   reinit_frame_cache ();
1490 }
1491 
1492 
1493 /* Assuming NEXT_FRAME->prev is a dummy, return the frame ID of that
1494    dummy frame.  The frame ID's base needs to match the TOS value
1495    saved by save_dummy_frame_tos(), and the PC match the dummy frame's
1496    breakpoint.  */
1497 
1498 static struct frame_id
1499 alpha_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1500 {
1501   ULONGEST base;
1502   base = get_frame_register_unsigned (this_frame, ALPHA_SP_REGNUM);
1503   return frame_id_build (base, get_frame_pc (this_frame));
1504 }
1505 
1506 static CORE_ADDR
1507 alpha_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
1508 {
1509   ULONGEST pc;
1510   pc = frame_unwind_register_unsigned (next_frame, ALPHA_PC_REGNUM);
1511   return pc;
1512 }
1513 
1514 
1515 /* Helper routines for alpha*-nat.c files to move register sets to and
1516    from core files.  The UNIQUE pointer is allowed to be NULL, as most
1517    targets don't supply this value in their core files.  */
1518 
1519 void
1520 alpha_supply_int_regs (struct regcache *regcache, int regno,
1521 		       const void *r0_r30, const void *pc, const void *unique)
1522 {
1523   const gdb_byte *regs = (const gdb_byte *) r0_r30;
1524   int i;
1525 
1526   for (i = 0; i < 31; ++i)
1527     if (regno == i || regno == -1)
1528       regcache->raw_supply (i, regs + i * 8);
1529 
1530   if (regno == ALPHA_ZERO_REGNUM || regno == -1)
1531     {
1532       const gdb_byte zero[8] = { 0 };
1533 
1534       regcache->raw_supply (ALPHA_ZERO_REGNUM, zero);
1535     }
1536 
1537   if (regno == ALPHA_PC_REGNUM || regno == -1)
1538     regcache->raw_supply (ALPHA_PC_REGNUM, pc);
1539 
1540   if (regno == ALPHA_UNIQUE_REGNUM || regno == -1)
1541     regcache->raw_supply (ALPHA_UNIQUE_REGNUM, unique);
1542 }
1543 
1544 void
1545 alpha_fill_int_regs (const struct regcache *regcache,
1546 		     int regno, void *r0_r30, void *pc, void *unique)
1547 {
1548   gdb_byte *regs = (gdb_byte *) r0_r30;
1549   int i;
1550 
1551   for (i = 0; i < 31; ++i)
1552     if (regno == i || regno == -1)
1553       regcache->raw_collect (i, regs + i * 8);
1554 
1555   if (regno == ALPHA_PC_REGNUM || regno == -1)
1556     regcache->raw_collect (ALPHA_PC_REGNUM, pc);
1557 
1558   if (unique && (regno == ALPHA_UNIQUE_REGNUM || regno == -1))
1559     regcache->raw_collect (ALPHA_UNIQUE_REGNUM, unique);
1560 }
1561 
1562 void
1563 alpha_supply_fp_regs (struct regcache *regcache, int regno,
1564 		      const void *f0_f30, const void *fpcr)
1565 {
1566   const gdb_byte *regs = (const gdb_byte *) f0_f30;
1567   int i;
1568 
1569   for (i = ALPHA_FP0_REGNUM; i < ALPHA_FP0_REGNUM + 31; ++i)
1570     if (regno == i || regno == -1)
1571       regcache->raw_supply (i, regs + (i - ALPHA_FP0_REGNUM) * 8);
1572 
1573   if (regno == ALPHA_FPCR_REGNUM || regno == -1)
1574     regcache->raw_supply (ALPHA_FPCR_REGNUM, fpcr);
1575 }
1576 
1577 void
1578 alpha_fill_fp_regs (const struct regcache *regcache,
1579 		    int regno, void *f0_f30, void *fpcr)
1580 {
1581   gdb_byte *regs = (gdb_byte *) f0_f30;
1582   int i;
1583 
1584   for (i = ALPHA_FP0_REGNUM; i < ALPHA_FP0_REGNUM + 31; ++i)
1585     if (regno == i || regno == -1)
1586       regcache->raw_collect (i, regs + (i - ALPHA_FP0_REGNUM) * 8);
1587 
1588   if (regno == ALPHA_FPCR_REGNUM || regno == -1)
1589     regcache->raw_collect (ALPHA_FPCR_REGNUM, fpcr);
1590 }
1591 
1592 
1593 
1594 /* Return nonzero if the G_floating register value in REG is equal to
1595    zero for FP control instructions.  */
1596 
1597 static int
1598 fp_register_zero_p (LONGEST reg)
1599 {
1600   /* Check that all bits except the sign bit are zero.  */
1601   const LONGEST zero_mask = ((LONGEST) 1 << 63) ^ -1;
1602 
1603   return ((reg & zero_mask) == 0);
1604 }
1605 
1606 /* Return the value of the sign bit for the G_floating register
1607    value held in REG.  */
1608 
1609 static int
1610 fp_register_sign_bit (LONGEST reg)
1611 {
1612   const LONGEST sign_mask = (LONGEST) 1 << 63;
1613 
1614   return ((reg & sign_mask) != 0);
1615 }
1616 
1617 /* alpha_software_single_step() is called just before we want to resume
1618    the inferior, if we want to single-step it but there is no hardware
1619    or kernel single-step support (NetBSD on Alpha, for example).  We find
1620    the target of the coming instruction and breakpoint it.  */
1621 
1622 static CORE_ADDR
1623 alpha_next_pc (struct regcache *regcache, CORE_ADDR pc)
1624 {
1625   struct gdbarch *gdbarch = regcache->arch ();
1626   unsigned int insn;
1627   unsigned int op;
1628   int regno;
1629   int offset;
1630   LONGEST rav;
1631 
1632   insn = alpha_read_insn (gdbarch, pc);
1633 
1634   /* Opcode is top 6 bits.  */
1635   op = (insn >> 26) & 0x3f;
1636 
1637   if (op == 0x1a)
1638     {
1639       /* Jump format: target PC is:
1640 	 RB & ~3  */
1641       return (regcache_raw_get_unsigned (regcache, (insn >> 16) & 0x1f) & ~3);
1642     }
1643 
1644   if ((op & 0x30) == 0x30)
1645     {
1646       /* Branch format: target PC is:
1647 	 (new PC) + (4 * sext(displacement))  */
1648       if (op == 0x30		/* BR */
1649 	  || op == 0x34)	/* BSR */
1650 	{
1651  branch_taken:
1652           offset = (insn & 0x001fffff);
1653 	  if (offset & 0x00100000)
1654 	    offset  |= 0xffe00000;
1655 	  offset *= ALPHA_INSN_SIZE;
1656 	  return (pc + ALPHA_INSN_SIZE + offset);
1657 	}
1658 
1659       /* Need to determine if branch is taken; read RA.  */
1660       regno = (insn >> 21) & 0x1f;
1661       switch (op)
1662         {
1663           case 0x31:              /* FBEQ */
1664           case 0x36:              /* FBGE */
1665           case 0x37:              /* FBGT */
1666           case 0x33:              /* FBLE */
1667           case 0x32:              /* FBLT */
1668           case 0x35:              /* FBNE */
1669             regno += gdbarch_fp0_regnum (gdbarch);
1670 	}
1671 
1672       rav = regcache_raw_get_signed (regcache, regno);
1673 
1674       switch (op)
1675 	{
1676 	case 0x38:		/* BLBC */
1677 	  if ((rav & 1) == 0)
1678 	    goto branch_taken;
1679 	  break;
1680 	case 0x3c:		/* BLBS */
1681 	  if (rav & 1)
1682 	    goto branch_taken;
1683 	  break;
1684 	case 0x39:		/* BEQ */
1685 	  if (rav == 0)
1686 	    goto branch_taken;
1687 	  break;
1688 	case 0x3d:		/* BNE */
1689 	  if (rav != 0)
1690 	    goto branch_taken;
1691 	  break;
1692 	case 0x3a:		/* BLT */
1693 	  if (rav < 0)
1694 	    goto branch_taken;
1695 	  break;
1696 	case 0x3b:		/* BLE */
1697 	  if (rav <= 0)
1698 	    goto branch_taken;
1699 	  break;
1700 	case 0x3f:		/* BGT */
1701 	  if (rav > 0)
1702 	    goto branch_taken;
1703 	  break;
1704 	case 0x3e:		/* BGE */
1705 	  if (rav >= 0)
1706 	    goto branch_taken;
1707 	  break;
1708 
1709         /* Floating point branches.  */
1710 
1711         case 0x31:              /* FBEQ */
1712           if (fp_register_zero_p (rav))
1713             goto branch_taken;
1714           break;
1715         case 0x36:              /* FBGE */
1716           if (fp_register_sign_bit (rav) == 0 || fp_register_zero_p (rav))
1717             goto branch_taken;
1718           break;
1719         case 0x37:              /* FBGT */
1720           if (fp_register_sign_bit (rav) == 0 && ! fp_register_zero_p (rav))
1721             goto branch_taken;
1722           break;
1723         case 0x33:              /* FBLE */
1724           if (fp_register_sign_bit (rav) == 1 || fp_register_zero_p (rav))
1725             goto branch_taken;
1726           break;
1727         case 0x32:              /* FBLT */
1728           if (fp_register_sign_bit (rav) == 1 && ! fp_register_zero_p (rav))
1729             goto branch_taken;
1730           break;
1731         case 0x35:              /* FBNE */
1732           if (! fp_register_zero_p (rav))
1733             goto branch_taken;
1734           break;
1735 	}
1736     }
1737 
1738   /* Not a branch or branch not taken; target PC is:
1739      pc + 4  */
1740   return (pc + ALPHA_INSN_SIZE);
1741 }
1742 
1743 std::vector<CORE_ADDR>
1744 alpha_software_single_step (struct regcache *regcache)
1745 {
1746   struct gdbarch *gdbarch = regcache->arch ();
1747 
1748   CORE_ADDR pc = regcache_read_pc (regcache);
1749 
1750   std::vector<CORE_ADDR> next_pcs
1751     = alpha_deal_with_atomic_sequence (gdbarch, pc);
1752   if (!next_pcs.empty ())
1753     return next_pcs;
1754 
1755   CORE_ADDR next_pc = alpha_next_pc (regcache, pc);
1756   return {next_pc};
1757 }
1758 
1759 
1760 /* Initialize the current architecture based on INFO.  If possible, re-use an
1761    architecture from ARCHES, which is a list of architectures already created
1762    during this debugging session.
1763 
1764    Called e.g. at program startup, when reading a core file, and when reading
1765    a binary file.  */
1766 
1767 static struct gdbarch *
1768 alpha_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1769 {
1770   struct gdbarch_tdep *tdep;
1771   struct gdbarch *gdbarch;
1772 
1773   /* Find a candidate among extant architectures.  */
1774   arches = gdbarch_list_lookup_by_info (arches, &info);
1775   if (arches != NULL)
1776     return arches->gdbarch;
1777 
1778   tdep = XCNEW (struct gdbarch_tdep);
1779   gdbarch = gdbarch_alloc (&info, tdep);
1780 
1781   /* Lowest text address.  This is used by heuristic_proc_start()
1782      to decide when to stop looking.  */
1783   tdep->vm_min_address = (CORE_ADDR) 0x120000000LL;
1784 
1785   tdep->dynamic_sigtramp_offset = NULL;
1786   tdep->sigcontext_addr = NULL;
1787   tdep->sc_pc_offset = 2 * 8;
1788   tdep->sc_regs_offset = 4 * 8;
1789   tdep->sc_fpregs_offset = tdep->sc_regs_offset + 32 * 8 + 8;
1790 
1791   tdep->jb_pc = -1;	/* longjmp support not enabled by default.  */
1792 
1793   tdep->return_in_memory = alpha_return_in_memory_always;
1794 
1795   /* Type sizes */
1796   set_gdbarch_short_bit (gdbarch, 16);
1797   set_gdbarch_int_bit (gdbarch, 32);
1798   set_gdbarch_long_bit (gdbarch, 64);
1799   set_gdbarch_long_long_bit (gdbarch, 64);
1800   set_gdbarch_wchar_bit (gdbarch, 64);
1801   set_gdbarch_wchar_signed (gdbarch, 0);
1802   set_gdbarch_float_bit (gdbarch, 32);
1803   set_gdbarch_double_bit (gdbarch, 64);
1804   set_gdbarch_long_double_bit (gdbarch, 64);
1805   set_gdbarch_ptr_bit (gdbarch, 64);
1806 
1807   /* Register info */
1808   set_gdbarch_num_regs (gdbarch, ALPHA_NUM_REGS);
1809   set_gdbarch_sp_regnum (gdbarch, ALPHA_SP_REGNUM);
1810   set_gdbarch_pc_regnum (gdbarch, ALPHA_PC_REGNUM);
1811   set_gdbarch_fp0_regnum (gdbarch, ALPHA_FP0_REGNUM);
1812 
1813   set_gdbarch_register_name (gdbarch, alpha_register_name);
1814   set_gdbarch_register_type (gdbarch, alpha_register_type);
1815 
1816   set_gdbarch_cannot_fetch_register (gdbarch, alpha_cannot_fetch_register);
1817   set_gdbarch_cannot_store_register (gdbarch, alpha_cannot_store_register);
1818 
1819   set_gdbarch_convert_register_p (gdbarch, alpha_convert_register_p);
1820   set_gdbarch_register_to_value (gdbarch, alpha_register_to_value);
1821   set_gdbarch_value_to_register (gdbarch, alpha_value_to_register);
1822 
1823   set_gdbarch_register_reggroup_p (gdbarch, alpha_register_reggroup_p);
1824 
1825   /* Prologue heuristics.  */
1826   set_gdbarch_skip_prologue (gdbarch, alpha_skip_prologue);
1827 
1828   /* Entrypoint heuristics.  */
1829   set_gdbarch_skip_entrypoint (gdbarch, alpha_skip_entrypoint);
1830 
1831   /* Call info.  */
1832 
1833   set_gdbarch_return_value (gdbarch, alpha_return_value);
1834 
1835   /* Settings for calling functions in the inferior.  */
1836   set_gdbarch_push_dummy_call (gdbarch, alpha_push_dummy_call);
1837 
1838   /* Methods for saving / extracting a dummy frame's ID.  */
1839   set_gdbarch_dummy_id (gdbarch, alpha_dummy_id);
1840 
1841   /* Return the unwound PC value.  */
1842   set_gdbarch_unwind_pc (gdbarch, alpha_unwind_pc);
1843 
1844   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
1845   set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
1846 
1847   set_gdbarch_breakpoint_kind_from_pc (gdbarch,
1848 				       alpha_breakpoint::kind_from_pc);
1849   set_gdbarch_sw_breakpoint_from_kind (gdbarch,
1850 				       alpha_breakpoint::bp_from_kind);
1851   set_gdbarch_decr_pc_after_break (gdbarch, ALPHA_INSN_SIZE);
1852   set_gdbarch_cannot_step_breakpoint (gdbarch, 1);
1853 
1854   /* Handles single stepping of atomic sequences.  */
1855   set_gdbarch_software_single_step (gdbarch, alpha_software_single_step);
1856 
1857   /* Hook in ABI-specific overrides, if they have been registered.  */
1858   gdbarch_init_osabi (info, gdbarch);
1859 
1860   /* Now that we have tuned the configuration, set a few final things
1861      based on what the OS ABI has told us.  */
1862 
1863   if (tdep->jb_pc >= 0)
1864     set_gdbarch_get_longjmp_target (gdbarch, alpha_get_longjmp_target);
1865 
1866   frame_unwind_append_unwinder (gdbarch, &alpha_sigtramp_frame_unwind);
1867   frame_unwind_append_unwinder (gdbarch, &alpha_heuristic_frame_unwind);
1868 
1869   frame_base_set_default (gdbarch, &alpha_heuristic_frame_base);
1870 
1871   return gdbarch;
1872 }
1873 
1874 void
1875 alpha_dwarf2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1876 {
1877   dwarf2_append_unwinders (gdbarch);
1878   frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
1879 }
1880 
1881 void
1882 _initialize_alpha_tdep (void)
1883 {
1884 
1885   gdbarch_register (bfd_arch_alpha, alpha_gdbarch_init, NULL);
1886 
1887   /* Let the user set the fence post for heuristic_proc_start.  */
1888 
1889   /* We really would like to have both "0" and "unlimited" work, but
1890      command.c doesn't deal with that.  So make it a var_zinteger
1891      because the user can always use "999999" or some such for unlimited.  */
1892   /* We need to throw away the frame cache when we set this, since it
1893      might change our ability to get backtraces.  */
1894   add_setshow_zinteger_cmd ("heuristic-fence-post", class_support,
1895 			    &heuristic_fence_post, _("\
1896 Set the distance searched for the start of a function."), _("\
1897 Show the distance searched for the start of a function."), _("\
1898 If you are debugging a stripped executable, GDB needs to search through the\n\
1899 program for the start of a function.  This command sets the distance of the\n\
1900 search.  The only need to set it is when debugging a stripped executable."),
1901 			    reinit_frame_cache_sfunc,
1902 			    NULL, /* FIXME: i18n: The distance searched for
1903 				     the start of a function is \"%d\".  */
1904 			    &setlist, &showlist);
1905 }
1906