Remove regcache_raw_supply
[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] = {-1, -1};
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 (regcache, i, regs + i * 8);
1528
1529   if (regno == ALPHA_PC_REGNUM || regno == -1)
1530     regcache_raw_collect (regcache, ALPHA_PC_REGNUM, pc);
1531
1532   if (unique && (regno == ALPHA_UNIQUE_REGNUM || regno == -1))
1533     regcache_raw_collect (regcache, 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 (regcache, i,
1561                             regs + (i - ALPHA_FP0_REGNUM) * 8);
1562
1563   if (regno == ALPHA_FPCR_REGNUM || regno == -1)
1564     regcache_raw_collect (regcache, ALPHA_FPCR_REGNUM, fpcr);
1565 }
1566
1567 \f
1568
1569 /* Return nonzero if the G_floating register value in REG is equal to
1570    zero for FP control instructions.  */
1571    
1572 static int
1573 fp_register_zero_p (LONGEST reg)
1574 {
1575   /* Check that all bits except the sign bit are zero.  */
1576   const LONGEST zero_mask = ((LONGEST) 1 << 63) ^ -1;
1577
1578   return ((reg & zero_mask) == 0);
1579 }
1580
1581 /* Return the value of the sign bit for the G_floating register
1582    value held in REG.  */
1583
1584 static int
1585 fp_register_sign_bit (LONGEST reg)
1586 {
1587   const LONGEST sign_mask = (LONGEST) 1 << 63;
1588
1589   return ((reg & sign_mask) != 0);
1590 }
1591
1592 /* alpha_software_single_step() is called just before we want to resume
1593    the inferior, if we want to single-step it but there is no hardware
1594    or kernel single-step support (NetBSD on Alpha, for example).  We find
1595    the target of the coming instruction and breakpoint it.  */
1596
1597 static CORE_ADDR
1598 alpha_next_pc (struct regcache *regcache, CORE_ADDR pc)
1599 {
1600   struct gdbarch *gdbarch = regcache->arch ();
1601   unsigned int insn;
1602   unsigned int op;
1603   int regno;
1604   int offset;
1605   LONGEST rav;
1606
1607   insn = alpha_read_insn (gdbarch, pc);
1608
1609   /* Opcode is top 6 bits.  */
1610   op = (insn >> 26) & 0x3f;
1611
1612   if (op == 0x1a)
1613     {
1614       /* Jump format: target PC is:
1615          RB & ~3  */
1616       return (regcache_raw_get_unsigned (regcache, (insn >> 16) & 0x1f) & ~3);
1617     }
1618
1619   if ((op & 0x30) == 0x30)
1620     {
1621       /* Branch format: target PC is:
1622          (new PC) + (4 * sext(displacement))  */
1623       if (op == 0x30            /* BR */
1624           || op == 0x34)        /* BSR */
1625         {
1626  branch_taken:
1627           offset = (insn & 0x001fffff);
1628           if (offset & 0x00100000)
1629             offset  |= 0xffe00000;
1630           offset *= ALPHA_INSN_SIZE;
1631           return (pc + ALPHA_INSN_SIZE + offset);
1632         }
1633
1634       /* Need to determine if branch is taken; read RA.  */
1635       regno = (insn >> 21) & 0x1f;
1636       switch (op)
1637         {
1638           case 0x31:              /* FBEQ */
1639           case 0x36:              /* FBGE */
1640           case 0x37:              /* FBGT */
1641           case 0x33:              /* FBLE */
1642           case 0x32:              /* FBLT */
1643           case 0x35:              /* FBNE */
1644             regno += gdbarch_fp0_regnum (gdbarch);
1645         }
1646       
1647       rav = regcache_raw_get_signed (regcache, regno);
1648
1649       switch (op)
1650         {
1651         case 0x38:              /* BLBC */
1652           if ((rav & 1) == 0)
1653             goto branch_taken;
1654           break;
1655         case 0x3c:              /* BLBS */
1656           if (rav & 1)
1657             goto branch_taken;
1658           break;
1659         case 0x39:              /* BEQ */
1660           if (rav == 0)
1661             goto branch_taken;
1662           break;
1663         case 0x3d:              /* BNE */
1664           if (rav != 0)
1665             goto branch_taken;
1666           break;
1667         case 0x3a:              /* BLT */
1668           if (rav < 0)
1669             goto branch_taken;
1670           break;
1671         case 0x3b:              /* BLE */
1672           if (rav <= 0)
1673             goto branch_taken;
1674           break;
1675         case 0x3f:              /* BGT */
1676           if (rav > 0)
1677             goto branch_taken;
1678           break;
1679         case 0x3e:              /* BGE */
1680           if (rav >= 0)
1681             goto branch_taken;
1682           break;
1683
1684         /* Floating point branches.  */
1685         
1686         case 0x31:              /* FBEQ */
1687           if (fp_register_zero_p (rav))
1688             goto branch_taken;
1689           break;
1690         case 0x36:              /* FBGE */
1691           if (fp_register_sign_bit (rav) == 0 || fp_register_zero_p (rav))
1692             goto branch_taken;
1693           break;
1694         case 0x37:              /* FBGT */
1695           if (fp_register_sign_bit (rav) == 0 && ! fp_register_zero_p (rav))
1696             goto branch_taken;
1697           break;
1698         case 0x33:              /* FBLE */
1699           if (fp_register_sign_bit (rav) == 1 || fp_register_zero_p (rav))
1700             goto branch_taken;
1701           break;
1702         case 0x32:              /* FBLT */
1703           if (fp_register_sign_bit (rav) == 1 && ! fp_register_zero_p (rav))
1704             goto branch_taken;
1705           break;
1706         case 0x35:              /* FBNE */
1707           if (! fp_register_zero_p (rav))
1708             goto branch_taken;
1709           break;
1710         }
1711     }
1712
1713   /* Not a branch or branch not taken; target PC is:
1714      pc + 4  */
1715   return (pc + ALPHA_INSN_SIZE);
1716 }
1717
1718 std::vector<CORE_ADDR>
1719 alpha_software_single_step (struct regcache *regcache)
1720 {
1721   struct gdbarch *gdbarch = regcache->arch ();
1722
1723   CORE_ADDR pc = regcache_read_pc (regcache);
1724
1725   std::vector<CORE_ADDR> next_pcs
1726     = alpha_deal_with_atomic_sequence (gdbarch, pc);
1727   if (!next_pcs.empty ())
1728     return next_pcs;
1729
1730   CORE_ADDR next_pc = alpha_next_pc (regcache, pc);
1731   return {next_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_software_single_step);
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 }