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