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