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