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