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