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