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