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