Handle printing information about PE format files which have 0 as the value of the...
[deliverable/binutils-gdb.git] / gdb / alpha-tdep.c
CommitLineData
c906108c 1/* Target-dependent code for the ALPHA architecture, for GDB, the GNU Debugger.
0fd88904 2
61baf725 3 Copyright (C) 1993-2017 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
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.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
19
20#include "defs.h"
615967cb 21#include "doublest.h"
c906108c 22#include "frame.h"
d2427a71
RH
23#include "frame-unwind.h"
24#include "frame-base.h"
baa490c4 25#include "dwarf2-frame.h"
c906108c
SS
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"
c5f0f3d0 34#include "linespec.h"
4e052eda 35#include "regcache.h"
615967cb 36#include "reggroups.h"
dc129d82 37#include "arch-utils.h"
4be87837 38#include "osabi.h"
fe898f56 39#include "block.h"
7d9b040b 40#include "infcall.h"
07ea644b 41#include "trad-frame.h"
dc129d82
JT
42
43#include "elf-bfd.h"
44
45#include "alpha-tdep.h"
325fac50 46#include <algorithm>
dc129d82 47
3a48e6ff
JG
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
60static const int lda_opcode = 0x08;
61static const int stq_opcode = 0x2d;
62
63/* Branch instruction format */
64#define BR_RA(insn) MEM_RA(insn)
65
46ad3598 66static const int br_opcode = 0x30;
3a48e6ff
JG
67static 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
76static const int subq_opcode = 0x10;
77static const int subq_function = 0x29;
78
c906108c 79\f
515921d7
JB
80/* Return the name of the REGNO register.
81
82 An empty name corresponds to a register number that used to
0963b4bd 83 be used for a virtual register. That virtual register has
515921d7
JB
84 been removed, but the index is still reserved to maintain
85 compatibility with existing remote alpha targets. */
86
fa88f677 87static const char *
d93859e2 88alpha_register_name (struct gdbarch *gdbarch, int regno)
636a6dfc 89{
5ab84872 90 static const char * const register_names[] =
636a6dfc
JT
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",
44d88583 100 "pc", "", "unique"
636a6dfc
JT
101 };
102
103 if (regno < 0)
5ab84872 104 return NULL;
e8d2d628 105 if (regno >= ARRAY_SIZE(register_names))
5ab84872
RH
106 return NULL;
107 return register_names[regno];
636a6dfc 108}
d734c450 109
dc129d82 110static int
64a3914f 111alpha_cannot_fetch_register (struct gdbarch *gdbarch, int regno)
d734c450 112{
4a1be8d2 113 return (strlen (alpha_register_name (gdbarch, regno)) == 0);
d734c450
JT
114}
115
dc129d82 116static int
64a3914f 117alpha_cannot_store_register (struct gdbarch *gdbarch, int regno)
d734c450 118{
515921d7 119 return (regno == ALPHA_ZERO_REGNUM
64a3914f 120 || strlen (alpha_register_name (gdbarch, regno)) == 0);
d734c450
JT
121}
122
dc129d82 123static struct type *
c483c494 124alpha_register_type (struct gdbarch *gdbarch, int regno)
0d056799 125{
72667056 126 if (regno == ALPHA_SP_REGNUM || regno == ALPHA_GP_REGNUM)
0dfff4cb 127 return builtin_type (gdbarch)->builtin_data_ptr;
72667056 128 if (regno == ALPHA_PC_REGNUM)
0dfff4cb 129 return builtin_type (gdbarch)->builtin_func_ptr;
72667056
RH
130
131 /* Don't need to worry about little vs big endian until
132 some jerk tries to port to alpha-unicosmk. */
b38b6be2 133 if (regno >= ALPHA_FP0_REGNUM && regno < ALPHA_FP0_REGNUM + 31)
27067745 134 return builtin_type (gdbarch)->builtin_double;
72667056 135
df4df182 136 return builtin_type (gdbarch)->builtin_int64;
0d056799 137}
f8453e34 138
615967cb
RH
139/* Is REGNUM a member of REGGROUP? */
140
141static int
142alpha_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. */
ec7cc0e8
UW
147 if (gdbarch_register_name (gdbarch, regnum) == NULL
148 || *gdbarch_register_name (gdbarch, regnum) == '\0')
615967cb
RH
149 return 0;
150
df4a182b
RH
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)
615967cb
RH
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
c483c494
RH
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
185static void
e17a4113 186alpha_lds (struct gdbarch *gdbarch, void *out, const void *in)
c483c494 187{
e17a4113 188 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
9a3c8263
SM
189 ULONGEST mem
190 = extract_unsigned_integer ((const gdb_byte *) in, 4, byte_order);
c483c494
RH
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);
9a3c8263 210 store_unsigned_integer ((gdb_byte *) out, 8, byte_order, reg);
c483c494
RH
211}
212
213/* Similarly, this represents exactly the conversion performed by
214 the STS instruction. */
215
39efb398 216static void
e17a4113 217alpha_sts (struct gdbarch *gdbarch, void *out, const void *in)
c483c494 218{
e17a4113 219 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
c483c494
RH
220 ULONGEST reg, mem;
221
9a3c8263 222 reg = extract_unsigned_integer ((const gdb_byte *) in, 8, byte_order);
c483c494 223 mem = ((reg >> 32) & 0xc0000000) | ((reg >> 29) & 0x3fffffff);
9a3c8263 224 store_unsigned_integer ((gdb_byte *) out, 4, byte_order, mem);
c483c494
RH
225}
226
d2427a71
RH
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
68fce50f 230 bytes, as the representation of integers in floating point
0963b4bd 231 registers is different. */
d2427a71 232
c483c494 233static int
0963b4bd
MS
234alpha_convert_register_p (struct gdbarch *gdbarch, int regno,
235 struct type *type)
14696584 236{
83acabca 237 return (regno >= ALPHA_FP0_REGNUM && regno < ALPHA_FP0_REGNUM + 31
68fce50f 238 && TYPE_LENGTH (type) == 4);
14696584
RH
239}
240
8dccd430 241static int
ff2e87ac 242alpha_register_to_value (struct frame_info *frame, int regnum,
8dccd430
PA
243 struct type *valtype, gdb_byte *out,
244 int *optimizedp, int *unavailablep)
5868c862 245{
8dccd430 246 struct gdbarch *gdbarch = get_frame_arch (frame);
2a1ce6ec
MK
247 gdb_byte in[MAX_REGISTER_SIZE];
248
8dccd430
PA
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
68fce50f
YQ
255 gdb_assert (TYPE_LENGTH (valtype) == 4);
256 alpha_sts (gdbarch, out, in);
257 *optimizedp = *unavailablep = 0;
258 return 1;
d2427a71 259}
5868c862 260
d2427a71 261static void
ff2e87ac 262alpha_value_to_register (struct frame_info *frame, int regnum,
5b819568 263 struct type *valtype, const gdb_byte *in)
d2427a71 264{
2a1ce6ec
MK
265 gdb_byte out[MAX_REGISTER_SIZE];
266
68fce50f
YQ
267 gdb_assert (TYPE_LENGTH (valtype) == 4);
268 alpha_lds (get_frame_arch (frame), out, in);
269
ff2e87ac 270 put_frame_register (frame, regnum, out);
5868c862
JT
271}
272
d2427a71
RH
273\f
274/* The alpha passes the first six arguments in the registers, the rest on
c88e30c0
RH
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
d2427a71
RH
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. */
c906108c 285
d2427a71 286static CORE_ADDR
7d9b040b 287alpha_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
c88e30c0
RH
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)
c906108c 291{
e17a4113 292 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
d2427a71
RH
293 int i;
294 int accumulate_size = struct_return ? 8 : 0;
d2427a71 295 struct alpha_arg
c906108c 296 {
f42a0a33 297 const gdb_byte *contents;
d2427a71
RH
298 int len;
299 int offset;
300 };
8d749320 301 struct alpha_arg *alpha_args = XALLOCAVEC (struct alpha_arg, nargs);
52f0bd74 302 struct alpha_arg *m_arg;
2a1ce6ec 303 gdb_byte arg_reg_buffer[ALPHA_REGISTER_SIZE * ALPHA_NUM_ARG_REGS];
d2427a71 304 int required_arg_regs;
7d9b040b 305 CORE_ADDR func_addr = find_function_addr (function, NULL);
c906108c 306
c88e30c0
RH
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. */
d2427a71
RH
315 for (i = 0, m_arg = alpha_args; i < nargs; i++, m_arg++)
316 {
317 struct value *arg = args[i];
4991999e 318 struct type *arg_type = check_typedef (value_type (arg));
c88e30c0 319
d2427a71
RH
320 /* Cast argument to long if necessary as the compiler does it too. */
321 switch (TYPE_CODE (arg_type))
c906108c 322 {
d2427a71
RH
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:
0ede8eca 328 if (TYPE_LENGTH (arg_type) == 4)
d2427a71 329 {
0ede8eca
RH
330 /* 32-bit values must be sign-extended to 64 bits
331 even if the base data type is unsigned. */
df4df182 332 arg_type = builtin_type (gdbarch)->builtin_int32;
0ede8eca
RH
333 arg = value_cast (arg_type, arg);
334 }
335 if (TYPE_LENGTH (arg_type) < ALPHA_REGISTER_SIZE)
336 {
df4df182 337 arg_type = builtin_type (gdbarch)->builtin_int64;
d2427a71
RH
338 arg = value_cast (arg_type, arg);
339 }
340 break;
7b5e1cb3 341
c88e30c0
RH
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 {
27067745 348 arg_type = builtin_type (gdbarch)->builtin_double;
c88e30c0
RH
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. */
0fd88904 359 write_memory (sp, value_contents (arg), 16);
c88e30c0
RH
360
361 /* Construct the indirection. */
362 arg_type = lookup_pointer_type (arg_type);
363 arg = value_from_pointer (arg_type, sp);
364 }
365 break;
7b5e1cb3
RH
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. */
0fd88904 380 write_memory (sp, value_contents (arg), 32);
7b5e1cb3
RH
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
d2427a71
RH
388 default:
389 break;
c906108c 390 }
d2427a71
RH
391 m_arg->len = TYPE_LENGTH (arg_type);
392 m_arg->offset = accumulate_size;
393 accumulate_size = (accumulate_size + m_arg->len + 7) & ~7;
f42a0a33 394 m_arg->contents = value_contents (arg);
c906108c
SS
395 }
396
d2427a71
RH
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;
c906108c 402
d2427a71 403 /* Make room for the arguments on the stack. */
c88e30c0
RH
404 if (accumulate_size < sizeof(arg_reg_buffer))
405 accumulate_size = 0;
406 else
407 accumulate_size -= sizeof(arg_reg_buffer);
d2427a71 408 sp -= accumulate_size;
c906108c 409
c88e30c0 410 /* Keep sp aligned to a multiple of 16 as the ABI requires. */
d2427a71 411 sp &= ~15;
c906108c 412
d2427a71
RH
413 /* `Push' arguments on the stack. */
414 for (i = nargs; m_arg--, --i >= 0;)
c906108c 415 {
f42a0a33 416 const gdb_byte *contents = m_arg->contents;
c88e30c0
RH
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);
c906108c 440 }
c88e30c0 441 if (struct_return)
e17a4113
UW
442 store_unsigned_integer (arg_reg_buffer, ALPHA_REGISTER_SIZE,
443 byte_order, struct_addr);
c906108c 444
d2427a71
RH
445 /* Load the argument registers. */
446 for (i = 0; i < required_arg_regs; i++)
447 {
09cc52fd
RH
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);
d2427a71 452 }
c906108c 453
09cc52fd
RH
454 /* Finally, update the stack pointer. */
455 regcache_cooked_write_signed (regcache, ALPHA_SP_REGNUM, sp);
456
c88e30c0 457 return sp;
c906108c
SS
458}
459
5ec2bb99
RH
460/* Extract from REGCACHE the value about to be returned from a function
461 and copy it into VALBUF. */
d2427a71 462
dc129d82 463static void
5ec2bb99 464alpha_extract_return_value (struct type *valtype, struct regcache *regcache,
5b819568 465 gdb_byte *valbuf)
140f9984 466{
e17a4113
UW
467 struct gdbarch *gdbarch = get_regcache_arch (regcache);
468 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2a1ce6ec 469 gdb_byte raw_buffer[ALPHA_REGISTER_SIZE];
5ec2bb99
RH
470 ULONGEST l;
471
472 switch (TYPE_CODE (valtype))
473 {
474 case TYPE_CODE_FLT:
744a8059 475 switch (TYPE_LENGTH (valtype))
5ec2bb99
RH
476 {
477 case 4:
478 regcache_cooked_read (regcache, ALPHA_FP0_REGNUM, raw_buffer);
e17a4113 479 alpha_sts (gdbarch, valbuf, raw_buffer);
5ec2bb99
RH
480 break;
481
482 case 8:
483 regcache_cooked_read (regcache, ALPHA_FP0_REGNUM, valbuf);
484 break;
485
24064b5c
RH
486 case 16:
487 regcache_cooked_read_unsigned (regcache, ALPHA_V0_REGNUM, &l);
488 read_memory (l, valbuf, 16);
489 break;
490
5ec2bb99 491 default:
0963b4bd
MS
492 internal_error (__FILE__, __LINE__,
493 _("unknown floating point width"));
5ec2bb99
RH
494 }
495 break;
496
7b5e1cb3 497 case TYPE_CODE_COMPLEX:
744a8059 498 switch (TYPE_LENGTH (valtype))
7b5e1cb3
RH
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);
2a1ce6ec 507 regcache_cooked_read (regcache, ALPHA_FP0_REGNUM + 1, valbuf + 8);
7b5e1cb3
RH
508 break;
509
510 case 32:
a9933661 511 regcache_cooked_read_unsigned (regcache, ALPHA_V0_REGNUM, &l);
7b5e1cb3
RH
512 read_memory (l, valbuf, 32);
513 break;
514
515 default:
0963b4bd
MS
516 internal_error (__FILE__, __LINE__,
517 _("unknown floating point width"));
7b5e1cb3
RH
518 }
519 break;
520
5ec2bb99
RH
521 default:
522 /* Assume everything else degenerates to an integer. */
523 regcache_cooked_read_unsigned (regcache, ALPHA_V0_REGNUM, &l);
744a8059 524 store_unsigned_integer (valbuf, TYPE_LENGTH (valtype), byte_order, l);
5ec2bb99
RH
525 break;
526 }
140f9984
JT
527}
528
5ec2bb99
RH
529/* Insert the given value into REGCACHE as if it was being
530 returned by a function. */
0d056799 531
d2427a71 532static void
5ec2bb99 533alpha_store_return_value (struct type *valtype, struct regcache *regcache,
5b819568 534 const gdb_byte *valbuf)
c906108c 535{
df4df182 536 struct gdbarch *gdbarch = get_regcache_arch (regcache);
2a1ce6ec 537 gdb_byte raw_buffer[ALPHA_REGISTER_SIZE];
5ec2bb99 538 ULONGEST l;
d2427a71 539
5ec2bb99 540 switch (TYPE_CODE (valtype))
c906108c 541 {
5ec2bb99 542 case TYPE_CODE_FLT:
744a8059 543 switch (TYPE_LENGTH (valtype))
5ec2bb99
RH
544 {
545 case 4:
e17a4113 546 alpha_lds (gdbarch, raw_buffer, valbuf);
f75d70cc
RH
547 regcache_cooked_write (regcache, ALPHA_FP0_REGNUM, raw_buffer);
548 break;
5ec2bb99
RH
549
550 case 8:
551 regcache_cooked_write (regcache, ALPHA_FP0_REGNUM, valbuf);
552 break;
553
24064b5c
RH
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. */
323e0a4a 558 error (_("Cannot set a 128-bit long double return value."));
24064b5c 559
5ec2bb99 560 default:
0963b4bd
MS
561 internal_error (__FILE__, __LINE__,
562 _("unknown floating point width"));
5ec2bb99
RH
563 }
564 break;
d2427a71 565
7b5e1cb3 566 case TYPE_CODE_COMPLEX:
744a8059 567 switch (TYPE_LENGTH (valtype))
7b5e1cb3
RH
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);
2a1ce6ec 576 regcache_cooked_write (regcache, ALPHA_FP0_REGNUM + 1, valbuf + 8);
7b5e1cb3
RH
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. */
323e0a4a 583 error (_("Cannot set a 128-bit long double return value."));
7b5e1cb3
RH
584
585 default:
0963b4bd
MS
586 internal_error (__FILE__, __LINE__,
587 _("unknown floating point width"));
7b5e1cb3
RH
588 }
589 break;
590
5ec2bb99
RH
591 default:
592 /* Assume everything else degenerates to an integer. */
0ede8eca
RH
593 /* 32-bit values must be sign-extended to 64 bits
594 even if the base data type is unsigned. */
744a8059 595 if (TYPE_LENGTH (valtype) == 4)
df4df182 596 valtype = builtin_type (gdbarch)->builtin_int32;
5ec2bb99
RH
597 l = unpack_long (valtype, valbuf);
598 regcache_cooked_write_unsigned (regcache, ALPHA_V0_REGNUM, l);
599 break;
600 }
c906108c
SS
601}
602
9823e921 603static enum return_value_convention
6a3a010b 604alpha_return_value (struct gdbarch *gdbarch, struct value *function,
c055b101
CV
605 struct type *type, struct regcache *regcache,
606 gdb_byte *readbuf, const gdb_byte *writebuf)
9823e921
RH
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
633static int
634alpha_return_in_memory_always (struct type *type)
635{
636 return 1;
637}
d2427a71 638\f
c906108c 639
04180708 640constexpr gdb_byte alpha_break_insn[] = { 0x80, 0, 0, 0 }; /* call_pal bpt */
598cc9dc 641
04180708 642typedef BP_MANIPULATION (alpha_break_insn) alpha_breakpoint;
c906108c 643
d2427a71
RH
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. */
c906108c 647
d2427a71
RH
648CORE_ADDR
649alpha_after_prologue (CORE_ADDR pc)
c906108c 650{
d2427a71
RH
651 struct symtab_and_line sal;
652 CORE_ADDR func_addr, func_end;
c906108c 653
d2427a71 654 if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end))
c5aa993b 655 return 0;
c906108c 656
d2427a71
RH
657 sal = find_pc_line (func_addr, 0);
658 if (sal.end < func_end)
659 return sal.end;
c5aa993b 660
d2427a71
RH
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;
c906108c
SS
664}
665
d2427a71
RH
666/* Read an instruction from memory at PC, looking through breakpoints. */
667
668unsigned int
e17a4113 669alpha_read_insn (struct gdbarch *gdbarch, CORE_ADDR pc)
c906108c 670{
e17a4113 671 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
e8d2d628 672 gdb_byte buf[ALPHA_INSN_SIZE];
d09f2c3f 673 int res;
c5aa993b 674
d09f2c3f
PA
675 res = target_read_memory (pc, buf, sizeof (buf));
676 if (res != 0)
677 memory_error (TARGET_XFER_E_IO, pc);
e17a4113 678 return extract_unsigned_integer (buf, sizeof (buf), byte_order);
d2427a71 679}
c5aa993b 680
d2427a71
RH
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. */
c906108c 687
d2427a71 688static CORE_ADDR
6093d2eb 689alpha_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
d2427a71
RH
690{
691 unsigned long inst;
692 int offset;
693 CORE_ADDR post_prologue_pc;
e8d2d628 694 gdb_byte buf[ALPHA_INSN_SIZE];
c906108c 695
d2427a71
RH
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). */
e8d2d628 703 if (target_read_memory (pc, buf, sizeof (buf)))
d2427a71 704 return pc;
c906108c 705
d2427a71
RH
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. */
c906108c 709
d2427a71
RH
710 post_prologue_pc = alpha_after_prologue (pc);
711 if (post_prologue_pc != 0)
325fac50 712 return std::max (pc, post_prologue_pc);
c906108c 713
d2427a71
RH
714 /* Can't determine prologue from the symbol table, need to examine
715 instructions. */
dc1b0db2 716
0963b4bd 717 /* Skip the typical prologue instructions. These are the stack adjustment
d2427a71
RH
718 instruction and the instructions that save registers on the stack
719 or in the gcc frame. */
e8d2d628 720 for (offset = 0; offset < 100; offset += ALPHA_INSN_SIZE)
d2427a71 721 {
e17a4113 722 inst = alpha_read_insn (gdbarch, pc + offset);
c906108c 723
d2427a71
RH
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;
c906108c 732
d2427a71
RH
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;
c906108c 737
d2427a71
RH
738 if (inst == 0x47de040f) /* bis sp,sp,fp */
739 continue;
740 if (inst == 0x47fe040f) /* bis zero,sp,fp */
741 continue;
c906108c 742
d2427a71 743 break;
c906108c 744 }
d2427a71
RH
745 return pc + offset;
746}
c906108c 747
46ad3598
UW
748\f
749static const int ldl_l_opcode = 0x2a;
750static const int ldq_l_opcode = 0x2b;
751static const int stl_c_opcode = 0x2e;
752static 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
a0ff9e1a 759static std::vector<CORE_ADDR>
f5ea389a 760alpha_deal_with_atomic_sequence (struct regcache *regcache)
46ad3598 761{
7ab2d087
YQ
762 struct gdbarch *gdbarch = get_regcache_arch (regcache);
763 CORE_ADDR pc = regcache_read_pc (regcache);
46ad3598
UW
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)
a0ff9e1a 777 return {};
46ad3598
UW
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)
a0ff9e1a
SM
796 return {}; /* More than one branch found, fallback
797 to the standard single-step code. */
46ad3598
UW
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)
a0ff9e1a 813 return {};
46ad3598
UW
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
a0ff9e1a
SM
828 std::vector<CORE_ADDR> next_pcs;
829
46ad3598 830 for (index = 0; index <= last_breakpoint; index++)
a0ff9e1a 831 next_pcs.push_back (breaks[index]);
46ad3598 832
93f9a11f 833 return next_pcs;
46ad3598
UW
834}
835
d2427a71
RH
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. */
c906108c
SS
841
842static int
60ade65d 843alpha_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
c906108c 844{
e17a4113
UW
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);
d2427a71 848 CORE_ADDR jb_addr;
2a1ce6ec 849 gdb_byte raw_buffer[ALPHA_REGISTER_SIZE];
c906108c 850
60ade65d 851 jb_addr = get_frame_register_unsigned (frame, ALPHA_A0_REGNUM);
c906108c 852
d2427a71
RH
853 if (target_read_memory (jb_addr + (tdep->jb_pc * tdep->jb_elt_size),
854 raw_buffer, tdep->jb_elt_size))
c906108c 855 return 0;
d2427a71 856
e17a4113 857 *pc = extract_unsigned_integer (raw_buffer, tdep->jb_elt_size, byte_order);
d2427a71 858 return 1;
c906108c
SS
859}
860
d2427a71
RH
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
868struct alpha_sigtramp_unwind_cache
c906108c 869{
d2427a71
RH
870 CORE_ADDR sigcontext_addr;
871};
c906108c 872
d2427a71 873static struct alpha_sigtramp_unwind_cache *
6834c9bb 874alpha_sigtramp_frame_unwind_cache (struct frame_info *this_frame,
d2427a71
RH
875 void **this_prologue_cache)
876{
877 struct alpha_sigtramp_unwind_cache *info;
878 struct gdbarch_tdep *tdep;
c906108c 879
d2427a71 880 if (*this_prologue_cache)
9a3c8263 881 return (struct alpha_sigtramp_unwind_cache *) *this_prologue_cache;
c906108c 882
d2427a71
RH
883 info = FRAME_OBSTACK_ZALLOC (struct alpha_sigtramp_unwind_cache);
884 *this_prologue_cache = info;
c906108c 885
6834c9bb
JB
886 tdep = gdbarch_tdep (get_frame_arch (this_frame));
887 info->sigcontext_addr = tdep->sigcontext_addr (this_frame);
c906108c 888
d2427a71 889 return info;
c906108c
SS
890}
891
138e7be5
MK
892/* Return the address of REGNUM in a sigtramp frame. Since this is
893 all arithmetic, it doesn't seem worthwhile to cache it. */
c5aa993b 894
d2427a71 895static CORE_ADDR
be8626e0
MD
896alpha_sigtramp_register_address (struct gdbarch *gdbarch,
897 CORE_ADDR sigcontext_addr, int regnum)
d2427a71 898{
be8626e0 899 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
138e7be5
MK
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;
c5aa993b 907
d2427a71 908 return 0;
c906108c
SS
909}
910
d2427a71
RH
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. */
140f9984 913
dc129d82 914static void
6834c9bb 915alpha_sigtramp_frame_this_id (struct frame_info *this_frame,
d2427a71
RH
916 void **this_prologue_cache,
917 struct frame_id *this_id)
c906108c 918{
6834c9bb 919 struct gdbarch *gdbarch = get_frame_arch (this_frame);
be8626e0 920 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
d2427a71 921 struct alpha_sigtramp_unwind_cache *info
6834c9bb 922 = alpha_sigtramp_frame_unwind_cache (this_frame, this_prologue_cache);
d2427a71
RH
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. */
d2427a71 932 if (tdep->dynamic_sigtramp_offset)
c906108c 933 {
d2427a71 934 int offset;
6834c9bb 935 code_addr = get_frame_pc (this_frame);
e17a4113 936 offset = tdep->dynamic_sigtramp_offset (gdbarch, code_addr);
d2427a71
RH
937 if (offset >= 0)
938 code_addr -= offset;
c906108c 939 else
d2427a71 940 code_addr = 0;
c906108c 941 }
d2427a71 942 else
6834c9bb 943 code_addr = get_frame_func (this_frame);
c906108c 944
d2427a71 945 /* The stack address is trivially read from the sigcontext. */
be8626e0 946 stack_addr = alpha_sigtramp_register_address (gdbarch, info->sigcontext_addr,
d2427a71 947 ALPHA_SP_REGNUM);
6834c9bb 948 stack_addr = get_frame_memory_unsigned (this_frame, stack_addr,
b21fd293 949 ALPHA_REGISTER_SIZE);
c906108c 950
d2427a71 951 *this_id = frame_id_build (stack_addr, code_addr);
c906108c
SS
952}
953
d2427a71 954/* Retrieve the value of REGNUM in FRAME. Don't give up! */
c906108c 955
6834c9bb
JB
956static struct value *
957alpha_sigtramp_frame_prev_register (struct frame_info *this_frame,
958 void **this_prologue_cache, int regnum)
c906108c 959{
d2427a71 960 struct alpha_sigtramp_unwind_cache *info
6834c9bb 961 = alpha_sigtramp_frame_unwind_cache (this_frame, this_prologue_cache);
d2427a71 962 CORE_ADDR addr;
c906108c 963
d2427a71 964 if (info->sigcontext_addr != 0)
c906108c 965 {
d2427a71 966 /* All integer and fp registers are stored in memory. */
6834c9bb 967 addr = alpha_sigtramp_register_address (get_frame_arch (this_frame),
be8626e0 968 info->sigcontext_addr, regnum);
d2427a71 969 if (addr != 0)
6834c9bb 970 return frame_unwind_got_memory (this_frame, regnum, addr);
c906108c
SS
971 }
972
d2427a71
RH
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. */
6834c9bb 977 return frame_unwind_got_register (this_frame, regnum, regnum);
d2427a71 978}
c906108c 979
6834c9bb
JB
980static int
981alpha_sigtramp_frame_sniffer (const struct frame_unwind *self,
982 struct frame_info *this_frame,
983 void **this_prologue_cache)
d2427a71 984{
6834c9bb
JB
985 struct gdbarch *gdbarch = get_frame_arch (this_frame);
986 CORE_ADDR pc = get_frame_pc (this_frame);
2c02bd72 987 const char *name;
c906108c 988
f2524b93
AC
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. */
ec7cc0e8 995 if (gdbarch_tdep (gdbarch)->sigcontext_addr == NULL)
6834c9bb 996 return 0;
ec7cc0e8 997 if (gdbarch_tdep (gdbarch)->pc_in_sigtramp == NULL)
6834c9bb 998 return 0;
c906108c 999
d2427a71
RH
1000 /* Otherwise we should be in a signal frame. */
1001 find_pc_partial_function (pc, &name, NULL, NULL);
e17a4113 1002 if (gdbarch_tdep (gdbarch)->pc_in_sigtramp (gdbarch, pc, name))
6834c9bb 1003 return 1;
c906108c 1004
6834c9bb 1005 return 0;
c906108c 1006}
6834c9bb
JB
1007
1008static const struct frame_unwind alpha_sigtramp_frame_unwind = {
1009 SIGTRAMP_FRAME,
8fbca658 1010 default_frame_unwind_stop_reason,
6834c9bb
JB
1011 alpha_sigtramp_frame_this_id,
1012 alpha_sigtramp_frame_prev_register,
1013 NULL,
1014 alpha_sigtramp_frame_sniffer
1015};
1016
d2427a71 1017\f
c906108c 1018
d2427a71
RH
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. */
44096aee 1022static int heuristic_fence_post = 0;
c906108c 1023
d2427a71
RH
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... */
c906108c 1028
d2427a71 1029static CORE_ADDR
be8626e0 1030alpha_heuristic_proc_start (struct gdbarch *gdbarch, CORE_ADDR pc)
d2427a71 1031{
be8626e0 1032 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
d2427a71
RH
1033 CORE_ADDR last_non_nop = pc;
1034 CORE_ADDR fence = pc - heuristic_fence_post;
1035 CORE_ADDR orig_pc = pc;
fbe586ae 1036 CORE_ADDR func;
d6b48e9c 1037 struct inferior *inf;
9e0b60a8 1038
d2427a71
RH
1039 if (pc == 0)
1040 return 0;
9e0b60a8 1041
fbe586ae
RH
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
44096aee 1049 if (heuristic_fence_post == -1
d2427a71
RH
1050 || fence < tdep->vm_min_address)
1051 fence = tdep->vm_min_address;
c906108c 1052
d2427a71
RH
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. */
e8d2d628 1056 for (pc -= ALPHA_INSN_SIZE; pc >= fence; pc -= ALPHA_INSN_SIZE)
c906108c 1057 {
e17a4113 1058 unsigned int insn = alpha_read_insn (gdbarch, pc);
d2427a71 1059 switch (insn)
c906108c 1060 {
d2427a71
RH
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;
c906108c 1072 }
d2427a71 1073 }
c906108c 1074
d6b48e9c
PA
1075 inf = current_inferior ();
1076
d2427a71
RH
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. */
16c381f0 1080 if (inf->control.stop_soon == NO_STOP_QUIETLY)
d2427a71
RH
1081 {
1082 static int blurb_printed = 0;
c906108c 1083
d2427a71 1084 if (fence == tdep->vm_min_address)
323e0a4a 1085 warning (_("Hit beginning of text section without finding \
5af949e3 1086enclosing function for address %s"), paddress (gdbarch, orig_pc));
c906108c 1087 else
323e0a4a 1088 warning (_("Hit heuristic-fence-post without finding \
5af949e3 1089enclosing function for address %s"), paddress (gdbarch, orig_pc));
c906108c 1090
d2427a71
RH
1091 if (!blurb_printed)
1092 {
323e0a4a 1093 printf_filtered (_("\
d2427a71
RH
1094This 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\
1096increase the size of the search with the `set heuristic-fence-post' command.\n\
1097\n\
1098Otherwise, you told GDB there was a function where there isn't one, or\n\
323e0a4a 1099(more likely) you have encountered a bug in GDB.\n"));
d2427a71
RH
1100 blurb_printed = 1;
1101 }
1102 }
c906108c 1103
d2427a71
RH
1104 return 0;
1105}
c906108c 1106
07ea644b
MD
1107/* Fallback alpha frame unwinder. Uses instruction scanning and knows
1108 something about the traditional layout of alpha stack frames. */
1109
1110struct 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
3a48e6ff
JG
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
1122static void
1123alpha_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
0963b4bd 1146 after this sequence, and FRAME_SIZE will be updated. */
3a48e6ff
JG
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
fbe586ae 1219static struct alpha_heuristic_unwind_cache *
6834c9bb 1220alpha_heuristic_frame_unwind_cache (struct frame_info *this_frame,
d2427a71
RH
1221 void **this_prologue_cache,
1222 CORE_ADDR start_pc)
1223{
6834c9bb 1224 struct gdbarch *gdbarch = get_frame_arch (this_frame);
d2427a71
RH
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;
c906108c 1229
d2427a71 1230 if (*this_prologue_cache)
9a3c8263 1231 return (struct alpha_heuristic_unwind_cache *) *this_prologue_cache;
c906108c 1232
d2427a71
RH
1233 info = FRAME_OBSTACK_ZALLOC (struct alpha_heuristic_unwind_cache);
1234 *this_prologue_cache = info;
6834c9bb 1235 info->saved_regs = trad_frame_alloc_saved_regs (this_frame);
c906108c 1236
6834c9bb 1237 limit_pc = get_frame_pc (this_frame);
d2427a71 1238 if (start_pc == 0)
be8626e0 1239 start_pc = alpha_heuristic_proc_start (gdbarch, limit_pc);
d2427a71 1240 info->start_pc = start_pc;
c906108c 1241
d2427a71
RH
1242 frame_reg = ALPHA_SP_REGNUM;
1243 frame_size = 0;
1244 return_reg = -1;
c906108c 1245
d2427a71
RH
1246 /* If we've identified a likely place to start, do code scanning. */
1247 if (start_pc != 0)
c5aa993b 1248 {
d2427a71
RH
1249 /* Limit the forward search to 50 instructions. */
1250 if (start_pc + 200 < limit_pc)
1251 limit_pc = start_pc + 200;
c5aa993b 1252
e8d2d628 1253 for (cur_pc = start_pc; cur_pc < limit_pc; cur_pc += ALPHA_INSN_SIZE)
d2427a71 1254 {
e17a4113 1255 unsigned int word = alpha_read_insn (gdbarch, cur_pc);
c5aa993b 1256
d2427a71
RH
1257 if ((word & 0xffff0000) == 0x23de0000) /* lda $sp,n($sp) */
1258 {
1259 if (word & 0x8000)
1260 {
1261 /* Consider only the first stack allocation instruction
0963b4bd 1262 to contain the static size of the frame. */
d2427a71
RH
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
d15bfd3a
AC
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. */
07ea644b 1285 if (trad_frame_addr_p(info->saved_regs, reg))
d15bfd3a
AC
1286 continue;
1287
d2427a71
RH
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. */
07ea644b 1301 info->saved_regs[reg].addr = (word & 0xffff) + 1;
d2427a71
RH
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
7a9dd1b2 1318 return address register from it.
d2427a71
RH
1319
1320 FIXME: Rewriting GDB to access the procedure descriptors,
0963b4bd
MS
1321 e.g. via the minimal symbol table, might obviate this
1322 hack. */
d2427a71
RH
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;
3a48e6ff
JG
1336
1337 alpha_heuristic_analyze_probing_loop (gdbarch, &cur_pc, &frame_size);
d2427a71 1338 }
c5aa993b 1339
d2427a71
RH
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 {
e17a4113 1346 unsigned int word = alpha_read_insn (gdbarch, cur_pc);
c5aa993b 1347
d2427a71
RH
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 }
85b32d22 1364
e8d2d628 1365 cur_pc += ALPHA_INSN_SIZE;
d2427a71
RH
1366 }
1367 }
c906108c 1368 }
c906108c 1369
d2427a71
RH
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;
f8453e34 1374
6834c9bb 1375 val = get_frame_register_unsigned (this_frame, frame_reg);
d2427a71 1376 info->vfp = val + frame_size;
c906108c 1377
d2427a71
RH
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)
07ea644b
MD
1381 if (trad_frame_addr_p(info->saved_regs, reg))
1382 info->saved_regs[reg].addr += val - 1;
d2427a71 1383
bfd66dd9
JB
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
d2427a71 1389 return info;
c906108c 1390}
c906108c 1391
d2427a71
RH
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
fbe586ae 1395static void
6834c9bb
JB
1396alpha_heuristic_frame_this_id (struct frame_info *this_frame,
1397 void **this_prologue_cache,
1398 struct frame_id *this_id)
c906108c 1399{
d2427a71 1400 struct alpha_heuristic_unwind_cache *info
6834c9bb 1401 = alpha_heuristic_frame_unwind_cache (this_frame, this_prologue_cache, 0);
c906108c 1402
d2427a71 1403 *this_id = frame_id_build (info->vfp, info->start_pc);
c906108c
SS
1404}
1405
d2427a71
RH
1406/* Retrieve the value of REGNUM in FRAME. Don't give up! */
1407
6834c9bb
JB
1408static struct value *
1409alpha_heuristic_frame_prev_register (struct frame_info *this_frame,
1410 void **this_prologue_cache, int regnum)
c906108c 1411{
d2427a71 1412 struct alpha_heuristic_unwind_cache *info
6834c9bb 1413 = alpha_heuristic_frame_unwind_cache (this_frame, this_prologue_cache, 0);
d2427a71
RH
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
6834c9bb 1421 return trad_frame_get_prev_register (this_frame, info->saved_regs, regnum);
95b80706
JT
1422}
1423
d2427a71
RH
1424static const struct frame_unwind alpha_heuristic_frame_unwind = {
1425 NORMAL_FRAME,
8fbca658 1426 default_frame_unwind_stop_reason,
d2427a71 1427 alpha_heuristic_frame_this_id,
6834c9bb
JB
1428 alpha_heuristic_frame_prev_register,
1429 NULL,
1430 default_frame_sniffer
d2427a71 1431};
c906108c 1432
fbe586ae 1433static CORE_ADDR
6834c9bb 1434alpha_heuristic_frame_base_address (struct frame_info *this_frame,
d2427a71 1435 void **this_prologue_cache)
c906108c 1436{
d2427a71 1437 struct alpha_heuristic_unwind_cache *info
6834c9bb 1438 = alpha_heuristic_frame_unwind_cache (this_frame, this_prologue_cache, 0);
c906108c 1439
d2427a71 1440 return info->vfp;
c906108c
SS
1441}
1442
d2427a71
RH
1443static 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
c906108c 1450/* Just like reinit_frame_cache, but with the right arguments to be
d2427a71 1451 callable as an sfunc. Used by the "set heuristic-fence-post" command. */
c906108c
SS
1452
1453static void
fba45db2 1454reinit_frame_cache_sfunc (char *args, int from_tty, struct cmd_list_element *c)
c906108c
SS
1455{
1456 reinit_frame_cache ();
1457}
1458
d2427a71 1459\f
d2427a71
RH
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. */
d734c450 1464
d2427a71 1465static struct frame_id
6834c9bb 1466alpha_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
0d056799 1467{
d2427a71 1468 ULONGEST base;
6834c9bb
JB
1469 base = get_frame_register_unsigned (this_frame, ALPHA_SP_REGNUM);
1470 return frame_id_build (base, get_frame_pc (this_frame));
0d056799
JT
1471}
1472
dc129d82 1473static CORE_ADDR
d2427a71 1474alpha_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
accc6d1f 1475{
d2427a71 1476 ULONGEST pc;
11411de3 1477 pc = frame_unwind_register_unsigned (next_frame, ALPHA_PC_REGNUM);
d2427a71 1478 return pc;
accc6d1f
JT
1479}
1480
98a8e1e5
RH
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
1486void
390c1522
UW
1487alpha_supply_int_regs (struct regcache *regcache, int regno,
1488 const void *r0_r30, const void *pc, const void *unique)
98a8e1e5 1489{
9a3c8263 1490 const gdb_byte *regs = (const gdb_byte *) r0_r30;
98a8e1e5
RH
1491 int i;
1492
1493 for (i = 0; i < 31; ++i)
1494 if (regno == i || regno == -1)
390c1522 1495 regcache_raw_supply (regcache, i, regs + i * 8);
98a8e1e5
RH
1496
1497 if (regno == ALPHA_ZERO_REGNUM || regno == -1)
4a1be8d2
PA
1498 {
1499 const gdb_byte zero[8] = { 0 };
1500
1501 regcache_raw_supply (regcache, ALPHA_ZERO_REGNUM, zero);
1502 }
98a8e1e5
RH
1503
1504 if (regno == ALPHA_PC_REGNUM || regno == -1)
390c1522 1505 regcache_raw_supply (regcache, ALPHA_PC_REGNUM, pc);
98a8e1e5
RH
1506
1507 if (regno == ALPHA_UNIQUE_REGNUM || regno == -1)
390c1522 1508 regcache_raw_supply (regcache, ALPHA_UNIQUE_REGNUM, unique);
98a8e1e5
RH
1509}
1510
1511void
390c1522
UW
1512alpha_fill_int_regs (const struct regcache *regcache,
1513 int regno, void *r0_r30, void *pc, void *unique)
98a8e1e5 1514{
9a3c8263 1515 gdb_byte *regs = (gdb_byte *) r0_r30;
98a8e1e5
RH
1516 int i;
1517
1518 for (i = 0; i < 31; ++i)
1519 if (regno == i || regno == -1)
390c1522 1520 regcache_raw_collect (regcache, i, regs + i * 8);
98a8e1e5
RH
1521
1522 if (regno == ALPHA_PC_REGNUM || regno == -1)
390c1522 1523 regcache_raw_collect (regcache, ALPHA_PC_REGNUM, pc);
98a8e1e5
RH
1524
1525 if (unique && (regno == ALPHA_UNIQUE_REGNUM || regno == -1))
390c1522 1526 regcache_raw_collect (regcache, ALPHA_UNIQUE_REGNUM, unique);
98a8e1e5
RH
1527}
1528
1529void
390c1522
UW
1530alpha_supply_fp_regs (struct regcache *regcache, int regno,
1531 const void *f0_f30, const void *fpcr)
98a8e1e5 1532{
9a3c8263 1533 const gdb_byte *regs = (const gdb_byte *) f0_f30;
98a8e1e5
RH
1534 int i;
1535
1536 for (i = ALPHA_FP0_REGNUM; i < ALPHA_FP0_REGNUM + 31; ++i)
1537 if (regno == i || regno == -1)
390c1522 1538 regcache_raw_supply (regcache, i,
2a1ce6ec 1539 regs + (i - ALPHA_FP0_REGNUM) * 8);
98a8e1e5
RH
1540
1541 if (regno == ALPHA_FPCR_REGNUM || regno == -1)
390c1522 1542 regcache_raw_supply (regcache, ALPHA_FPCR_REGNUM, fpcr);
98a8e1e5
RH
1543}
1544
1545void
390c1522
UW
1546alpha_fill_fp_regs (const struct regcache *regcache,
1547 int regno, void *f0_f30, void *fpcr)
98a8e1e5 1548{
9a3c8263 1549 gdb_byte *regs = (gdb_byte *) f0_f30;
98a8e1e5
RH
1550 int i;
1551
1552 for (i = ALPHA_FP0_REGNUM; i < ALPHA_FP0_REGNUM + 31; ++i)
1553 if (regno == i || regno == -1)
390c1522 1554 regcache_raw_collect (regcache, i,
2a1ce6ec 1555 regs + (i - ALPHA_FP0_REGNUM) * 8);
98a8e1e5
RH
1556
1557 if (regno == ALPHA_FPCR_REGNUM || regno == -1)
390c1522 1558 regcache_raw_collect (regcache, ALPHA_FPCR_REGNUM, fpcr);
98a8e1e5
RH
1559}
1560
d2427a71 1561\f
0de94d4b
JB
1562
1563/* Return nonzero if the G_floating register value in REG is equal to
1564 zero for FP control instructions. */
1565
1566static int
1567fp_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
1578static int
1579fp_register_sign_bit (LONGEST reg)
1580{
1581 const LONGEST sign_mask = (LONGEST) 1 << 63;
1582
1583 return ((reg & sign_mask) != 0);
1584}
1585
ec32e4be
JT
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
e0cd558a 1589 the target of the coming instruction and breakpoint it. */
ec32e4be
JT
1590
1591static CORE_ADDR
7ab2d087 1592alpha_next_pc (struct regcache *regcache, CORE_ADDR pc)
ec32e4be 1593{
7ab2d087 1594 struct gdbarch *gdbarch = get_regcache_arch (regcache);
ec32e4be
JT
1595 unsigned int insn;
1596 unsigned int op;
551e4f2e 1597 int regno;
ec32e4be
JT
1598 int offset;
1599 LONGEST rav;
1600
e17a4113 1601 insn = alpha_read_insn (gdbarch, pc);
ec32e4be 1602
0963b4bd 1603 /* Opcode is top 6 bits. */
ec32e4be
JT
1604 op = (insn >> 26) & 0x3f;
1605
1606 if (op == 0x1a)
1607 {
1608 /* Jump format: target PC is:
1609 RB & ~3 */
7ab2d087 1610 return (regcache_raw_get_unsigned (regcache, (insn >> 16) & 0x1f) & ~3);
ec32e4be
JT
1611 }
1612
1613 if ((op & 0x30) == 0x30)
1614 {
1615 /* Branch format: target PC is:
1616 (new PC) + (4 * sext(displacement)) */
f8bf5763
PM
1617 if (op == 0x30 /* BR */
1618 || op == 0x34) /* BSR */
ec32e4be
JT
1619 {
1620 branch_taken:
1621 offset = (insn & 0x001fffff);
1622 if (offset & 0x00100000)
1623 offset |= 0xffe00000;
e8d2d628
MK
1624 offset *= ALPHA_INSN_SIZE;
1625 return (pc + ALPHA_INSN_SIZE + offset);
ec32e4be
JT
1626 }
1627
1628 /* Need to determine if branch is taken; read RA. */
551e4f2e
JB
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 */
e17a4113 1638 regno += gdbarch_fp0_regnum (gdbarch);
551e4f2e
JB
1639 }
1640
7ab2d087 1641 rav = regcache_raw_get_signed (regcache, regno);
0de94d4b 1642
ec32e4be
JT
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;
d2427a71 1677
0de94d4b
JB
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;
ec32e4be
JT
1704 }
1705 }
1706
1707 /* Not a branch or branch not taken; target PC is:
1708 pc + 4 */
e8d2d628 1709 return (pc + ALPHA_INSN_SIZE);
ec32e4be
JT
1710}
1711
a0ff9e1a 1712std::vector<CORE_ADDR>
f5ea389a 1713alpha_software_single_step (struct regcache *regcache)
ec32e4be 1714{
7ab2d087 1715 struct gdbarch *gdbarch = get_regcache_arch (regcache);
93f9a11f 1716 CORE_ADDR pc;
ec32e4be 1717
a0ff9e1a 1718 pc = alpha_next_pc (regcache, regcache_read_pc (regcache));
ec32e4be 1719
a0ff9e1a 1720 return {pc};
c906108c
SS
1721}
1722
dc129d82 1723\f
dc129d82
JT
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
1731static struct gdbarch *
1732alpha_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
1733{
1734 struct gdbarch_tdep *tdep;
1735 struct gdbarch *gdbarch;
dc129d82 1736
dc129d82 1737 /* Find a candidate among extant architectures. */
4be87837
DJ
1738 arches = gdbarch_list_lookup_by_info (arches, &info);
1739 if (arches != NULL)
1740 return arches->gdbarch;
dc129d82 1741
cdd238da 1742 tdep = XCNEW (struct gdbarch_tdep);
dc129d82
JT
1743 gdbarch = gdbarch_alloc (&info, tdep);
1744
d2427a71
RH
1745 /* Lowest text address. This is used by heuristic_proc_start()
1746 to decide when to stop looking. */
594706e6 1747 tdep->vm_min_address = (CORE_ADDR) 0x120000000LL;
d9b023cc 1748
36a6271d 1749 tdep->dynamic_sigtramp_offset = NULL;
5868c862 1750 tdep->sigcontext_addr = NULL;
138e7be5
MK
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;
36a6271d 1754
0963b4bd 1755 tdep->jb_pc = -1; /* longjmp support not enabled by default. */
accc6d1f 1756
9823e921
RH
1757 tdep->return_in_memory = alpha_return_in_memory_always;
1758
dc129d82
JT
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);
53375380
PA
1764 set_gdbarch_wchar_bit (gdbarch, 64);
1765 set_gdbarch_wchar_signed (gdbarch, 0);
dc129d82
JT
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);
dc129d82
JT
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);
c483c494 1778 set_gdbarch_register_type (gdbarch, alpha_register_type);
dc129d82
JT
1779
1780 set_gdbarch_cannot_fetch_register (gdbarch, alpha_cannot_fetch_register);
1781 set_gdbarch_cannot_store_register (gdbarch, alpha_cannot_store_register);
1782
c483c494
RH
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);
dc129d82 1786
615967cb
RH
1787 set_gdbarch_register_reggroup_p (gdbarch, alpha_register_reggroup_p);
1788
d2427a71 1789 /* Prologue heuristics. */
dc129d82
JT
1790 set_gdbarch_skip_prologue (gdbarch, alpha_skip_prologue);
1791
d2427a71 1792 /* Call info. */
dc129d82 1793
9823e921 1794 set_gdbarch_return_value (gdbarch, alpha_return_value);
dc129d82
JT
1795
1796 /* Settings for calling functions in the inferior. */
c88e30c0 1797 set_gdbarch_push_dummy_call (gdbarch, alpha_push_dummy_call);
d2427a71
RH
1798
1799 /* Methods for saving / extracting a dummy frame's ID. */
6834c9bb 1800 set_gdbarch_dummy_id (gdbarch, alpha_dummy_id);
d2427a71
RH
1801
1802 /* Return the unwound PC value. */
1803 set_gdbarch_unwind_pc (gdbarch, alpha_unwind_pc);
dc129d82
JT
1804
1805 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
36a6271d 1806 set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
dc129d82 1807
04180708
YQ
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);
e8d2d628 1812 set_gdbarch_decr_pc_after_break (gdbarch, ALPHA_INSN_SIZE);
9d519230 1813 set_gdbarch_cannot_step_breakpoint (gdbarch, 1);
95b80706 1814
46ad3598
UW
1815 /* Handles single stepping of atomic sequences. */
1816 set_gdbarch_software_single_step (gdbarch, alpha_deal_with_atomic_sequence);
1817
44dffaac 1818 /* Hook in ABI-specific overrides, if they have been registered. */
4be87837 1819 gdbarch_init_osabi (info, gdbarch);
44dffaac 1820
accc6d1f
JT
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
6834c9bb
JB
1827 frame_unwind_append_unwinder (gdbarch, &alpha_sigtramp_frame_unwind);
1828 frame_unwind_append_unwinder (gdbarch, &alpha_heuristic_frame_unwind);
dc129d82 1829
d2427a71 1830 frame_base_set_default (gdbarch, &alpha_heuristic_frame_base);
accc6d1f 1831
d2427a71 1832 return gdbarch;
dc129d82
JT
1833}
1834
baa490c4
RH
1835void
1836alpha_dwarf2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
1837{
6834c9bb 1838 dwarf2_append_unwinders (gdbarch);
336d1bba 1839 frame_base_append_sniffer (gdbarch, dwarf2_frame_base_sniffer);
baa490c4
RH
1840}
1841
a78f21af
AC
1842extern initialize_file_ftype _initialize_alpha_tdep; /* -Wmissing-prototypes */
1843
c906108c 1844void
fba45db2 1845_initialize_alpha_tdep (void)
c906108c 1846{
c906108c 1847
d2427a71 1848 gdbarch_register (bfd_arch_alpha, alpha_gdbarch_init, NULL);
c906108c
SS
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. */
edefbb7c
AC
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,
7915a72c
AC
1858 &heuristic_fence_post, _("\
1859Set the distance searched for the start of a function."), _("\
1860Show the distance searched for the start of a function."), _("\
c906108c
SS
1861If you are debugging a stripped executable, GDB needs to search through the\n\
1862program for the start of a function. This command sets the distance of the\n\
323e0a4a 1863search. The only need to set it is when debugging a stripped executable."),
2c5b56ce 1864 reinit_frame_cache_sfunc,
0963b4bd
MS
1865 NULL, /* FIXME: i18n: The distance searched for
1866 the start of a function is \"%d\". */
edefbb7c 1867 &setlist, &showlist);
c906108c 1868}
This page took 1.087055 seconds and 4 git commands to generate.