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