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