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