]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/ia64-tdep.c
Don't use print_insn_XXX in GDB
[thirdparty/binutils-gdb.git] / gdb / ia64-tdep.c
CommitLineData
16461d7d 1/* Target-dependent code for the IA-64 for GDB, the GNU debugger.
ca557f44 2
61baf725 3 Copyright (C) 1999-2017 Free Software Foundation, Inc.
16461d7d
KB
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
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
16461d7d
KB
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
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
16461d7d
KB
19
20#include "defs.h"
21#include "inferior.h"
16461d7d 22#include "gdbcore.h"
8064c6ae 23#include "arch-utils.h"
16461d7d 24#include "floatformat.h"
e6bb342a 25#include "gdbtypes.h"
4e052eda 26#include "regcache.h"
004d836a
JJ
27#include "reggroups.h"
28#include "frame.h"
29#include "frame-base.h"
30#include "frame-unwind.h"
d16aafd8 31#include "doublest.h"
fd0407d6 32#include "value.h"
16461d7d
KB
33#include "objfiles.h"
34#include "elf/common.h" /* for DT_PLTGOT value */
244bc108 35#include "elf-bfd.h"
a89aa300 36#include "dis-asm.h"
7d9b040b 37#include "infcall.h"
b33e8514 38#include "osabi.h"
9fc9f5e2 39#include "ia64-tdep.h"
0d5de010 40#include "cp-abi.h"
16461d7d 41
968d1cb4 42#ifdef HAVE_LIBUNWIND_IA64_H
8973ff21 43#include "elf/ia64.h" /* for PT_IA_64_UNWIND value */
05e7c244 44#include "ia64-libunwind-tdep.h"
c5a27d9c
JJ
45
46/* Note: KERNEL_START is supposed to be an address which is not going
47 to ever contain any valid unwind info. For ia64 linux, the choice
48 of 0xc000000000000000 is fairly safe since that's uncached space.
49
50 We use KERNEL_START as follows: after obtaining the kernel's
51 unwind table via getunwind(), we project its unwind data into
52 address-range KERNEL_START-(KERNEL_START+ktab_size) and then
53 when ia64_access_mem() sees a memory access to this
54 address-range, we redirect it to ktab instead.
55
56 None of this hackery is needed with a modern kernel/libcs
57 which uses the kernel virtual DSO to provide access to the
58 kernel's unwind info. In that case, ktab_size remains 0 and
59 hence the value of KERNEL_START doesn't matter. */
60
61#define KERNEL_START 0xc000000000000000ULL
62
63static size_t ktab_size = 0;
64struct ia64_table_entry
65 {
66 uint64_t start_offset;
67 uint64_t end_offset;
68 uint64_t info_offset;
69 };
70
71static struct ia64_table_entry *ktab = NULL;
72
968d1cb4
JJ
73#endif
74
698cb3f0
KB
75/* An enumeration of the different IA-64 instruction types. */
76
16461d7d
KB
77typedef enum instruction_type
78{
79 A, /* Integer ALU ; I-unit or M-unit */
80 I, /* Non-ALU integer; I-unit */
81 M, /* Memory ; M-unit */
82 F, /* Floating-point ; F-unit */
83 B, /* Branch ; B-unit */
84 L, /* Extended (L+X) ; I-unit */
85 X, /* Extended (L+X) ; I-unit */
86 undefined /* undefined or reserved */
87} instruction_type;
88
89/* We represent IA-64 PC addresses as the value of the instruction
90 pointer or'd with some bit combination in the low nibble which
91 represents the slot number in the bundle addressed by the
92 instruction pointer. The problem is that the Linux kernel
93 multiplies its slot numbers (for exceptions) by one while the
94 disassembler multiplies its slot numbers by 6. In addition, I've
95 heard it said that the simulator uses 1 as the multiplier.
96
97 I've fixed the disassembler so that the bytes_per_line field will
98 be the slot multiplier. If bytes_per_line comes in as zero, it
99 is set to six (which is how it was set up initially). -- objdump
100 displays pretty disassembly dumps with this value. For our purposes,
101 we'll set bytes_per_line to SLOT_MULTIPLIER. This is okay since we
1777feb0 102 never want to also display the raw bytes the way objdump does. */
16461d7d
KB
103
104#define SLOT_MULTIPLIER 1
105
1777feb0 106/* Length in bytes of an instruction bundle. */
16461d7d
KB
107
108#define BUNDLE_LEN 16
109
939c61fa
JK
110/* See the saved memory layout comment for ia64_memory_insert_breakpoint. */
111
112#if BREAKPOINT_MAX < BUNDLE_LEN - 2
113# error "BREAKPOINT_MAX < BUNDLE_LEN - 2"
114#endif
115
16461d7d
KB
116static gdbarch_init_ftype ia64_gdbarch_init;
117
118static gdbarch_register_name_ftype ia64_register_name;
004d836a 119static gdbarch_register_type_ftype ia64_register_type;
16461d7d 120static gdbarch_breakpoint_from_pc_ftype ia64_breakpoint_from_pc;
16461d7d 121static gdbarch_skip_prologue_ftype ia64_skip_prologue;
64a5b29c 122static struct type *is_float_or_hfa_type (struct type *t);
e17a4113
UW
123static CORE_ADDR ia64_find_global_pointer (struct gdbarch *gdbarch,
124 CORE_ADDR faddr);
16461d7d 125
004d836a 126#define NUM_IA64_RAW_REGS 462
16461d7d 127
ae0d01d6
AH
128/* Big enough to hold a FP register in bytes. */
129#define IA64_FP_REGISTER_SIZE 16
130
16461d7d 131static int sp_regnum = IA64_GR12_REGNUM;
16461d7d 132
1777feb0
MS
133/* NOTE: we treat the register stack registers r32-r127 as
134 pseudo-registers because they may not be accessible via the ptrace
135 register get/set interfaces. */
136
137enum pseudo_regs { FIRST_PSEUDO_REGNUM = NUM_IA64_RAW_REGS,
138 VBOF_REGNUM = IA64_NAT127_REGNUM + 1, V32_REGNUM,
004d836a 139 V127_REGNUM = V32_REGNUM + 95,
1777feb0
MS
140 VP0_REGNUM, VP16_REGNUM = VP0_REGNUM + 16,
141 VP63_REGNUM = VP0_REGNUM + 63, LAST_PSEUDO_REGNUM };
16461d7d
KB
142
143/* Array of register names; There should be ia64_num_regs strings in
144 the initializer. */
145
a121b7c1 146static const char *ia64_register_names[] =
16461d7d
KB
147{ "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
148 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
149 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
150 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
004d836a
JJ
151 "", "", "", "", "", "", "", "",
152 "", "", "", "", "", "", "", "",
153 "", "", "", "", "", "", "", "",
154 "", "", "", "", "", "", "", "",
155 "", "", "", "", "", "", "", "",
156 "", "", "", "", "", "", "", "",
157 "", "", "", "", "", "", "", "",
158 "", "", "", "", "", "", "", "",
159 "", "", "", "", "", "", "", "",
160 "", "", "", "", "", "", "", "",
161 "", "", "", "", "", "", "", "",
162 "", "", "", "", "", "", "", "",
16461d7d
KB
163
164 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
165 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
166 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
167 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
168 "f32", "f33", "f34", "f35", "f36", "f37", "f38", "f39",
169 "f40", "f41", "f42", "f43", "f44", "f45", "f46", "f47",
170 "f48", "f49", "f50", "f51", "f52", "f53", "f54", "f55",
171 "f56", "f57", "f58", "f59", "f60", "f61", "f62", "f63",
172 "f64", "f65", "f66", "f67", "f68", "f69", "f70", "f71",
173 "f72", "f73", "f74", "f75", "f76", "f77", "f78", "f79",
174 "f80", "f81", "f82", "f83", "f84", "f85", "f86", "f87",
175 "f88", "f89", "f90", "f91", "f92", "f93", "f94", "f95",
176 "f96", "f97", "f98", "f99", "f100", "f101", "f102", "f103",
177 "f104", "f105", "f106", "f107", "f108", "f109", "f110", "f111",
178 "f112", "f113", "f114", "f115", "f116", "f117", "f118", "f119",
179 "f120", "f121", "f122", "f123", "f124", "f125", "f126", "f127",
180
004d836a
JJ
181 "", "", "", "", "", "", "", "",
182 "", "", "", "", "", "", "", "",
183 "", "", "", "", "", "", "", "",
184 "", "", "", "", "", "", "", "",
185 "", "", "", "", "", "", "", "",
186 "", "", "", "", "", "", "", "",
187 "", "", "", "", "", "", "", "",
188 "", "", "", "", "", "", "", "",
16461d7d
KB
189
190 "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7",
191
192 "vfp", "vrap",
193
194 "pr", "ip", "psr", "cfm",
195
196 "kr0", "kr1", "kr2", "kr3", "kr4", "kr5", "kr6", "kr7",
197 "", "", "", "", "", "", "", "",
198 "rsc", "bsp", "bspstore", "rnat",
199 "", "fcr", "", "",
200 "eflag", "csd", "ssd", "cflg", "fsr", "fir", "fdr", "",
201 "ccv", "", "", "", "unat", "", "", "",
202 "fpsr", "", "", "", "itc",
203 "", "", "", "", "", "", "", "", "", "",
204 "", "", "", "", "", "", "", "", "",
205 "pfs", "lc", "ec",
206 "", "", "", "", "", "", "", "", "", "",
207 "", "", "", "", "", "", "", "", "", "",
208 "", "", "", "", "", "", "", "", "", "",
209 "", "", "", "", "", "", "", "", "", "",
210 "", "", "", "", "", "", "", "", "", "",
211 "", "", "", "", "", "", "", "", "", "",
212 "",
213 "nat0", "nat1", "nat2", "nat3", "nat4", "nat5", "nat6", "nat7",
214 "nat8", "nat9", "nat10", "nat11", "nat12", "nat13", "nat14", "nat15",
215 "nat16", "nat17", "nat18", "nat19", "nat20", "nat21", "nat22", "nat23",
216 "nat24", "nat25", "nat26", "nat27", "nat28", "nat29", "nat30", "nat31",
217 "nat32", "nat33", "nat34", "nat35", "nat36", "nat37", "nat38", "nat39",
218 "nat40", "nat41", "nat42", "nat43", "nat44", "nat45", "nat46", "nat47",
219 "nat48", "nat49", "nat50", "nat51", "nat52", "nat53", "nat54", "nat55",
220 "nat56", "nat57", "nat58", "nat59", "nat60", "nat61", "nat62", "nat63",
221 "nat64", "nat65", "nat66", "nat67", "nat68", "nat69", "nat70", "nat71",
222 "nat72", "nat73", "nat74", "nat75", "nat76", "nat77", "nat78", "nat79",
223 "nat80", "nat81", "nat82", "nat83", "nat84", "nat85", "nat86", "nat87",
224 "nat88", "nat89", "nat90", "nat91", "nat92", "nat93", "nat94", "nat95",
225 "nat96", "nat97", "nat98", "nat99", "nat100","nat101","nat102","nat103",
226 "nat104","nat105","nat106","nat107","nat108","nat109","nat110","nat111",
227 "nat112","nat113","nat114","nat115","nat116","nat117","nat118","nat119",
228 "nat120","nat121","nat122","nat123","nat124","nat125","nat126","nat127",
004d836a
JJ
229
230 "bof",
231
232 "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39",
233 "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47",
234 "r48", "r49", "r50", "r51", "r52", "r53", "r54", "r55",
235 "r56", "r57", "r58", "r59", "r60", "r61", "r62", "r63",
236 "r64", "r65", "r66", "r67", "r68", "r69", "r70", "r71",
237 "r72", "r73", "r74", "r75", "r76", "r77", "r78", "r79",
238 "r80", "r81", "r82", "r83", "r84", "r85", "r86", "r87",
239 "r88", "r89", "r90", "r91", "r92", "r93", "r94", "r95",
240 "r96", "r97", "r98", "r99", "r100", "r101", "r102", "r103",
241 "r104", "r105", "r106", "r107", "r108", "r109", "r110", "r111",
242 "r112", "r113", "r114", "r115", "r116", "r117", "r118", "r119",
243 "r120", "r121", "r122", "r123", "r124", "r125", "r126", "r127",
244
245 "p0", "p1", "p2", "p3", "p4", "p5", "p6", "p7",
246 "p8", "p9", "p10", "p11", "p12", "p13", "p14", "p15",
247 "p16", "p17", "p18", "p19", "p20", "p21", "p22", "p23",
248 "p24", "p25", "p26", "p27", "p28", "p29", "p30", "p31",
249 "p32", "p33", "p34", "p35", "p36", "p37", "p38", "p39",
250 "p40", "p41", "p42", "p43", "p44", "p45", "p46", "p47",
251 "p48", "p49", "p50", "p51", "p52", "p53", "p54", "p55",
252 "p56", "p57", "p58", "p59", "p60", "p61", "p62", "p63",
16461d7d
KB
253};
254
004d836a
JJ
255struct ia64_frame_cache
256{
257 CORE_ADDR base; /* frame pointer base for frame */
258 CORE_ADDR pc; /* function start pc for frame */
259 CORE_ADDR saved_sp; /* stack pointer for frame */
260 CORE_ADDR bsp; /* points at r32 for the current frame */
261 CORE_ADDR cfm; /* cfm value for current frame */
4afcc598 262 CORE_ADDR prev_cfm; /* cfm value for previous frame */
004d836a 263 int frameless;
1777feb0
MS
264 int sof; /* Size of frame (decoded from cfm value). */
265 int sol; /* Size of locals (decoded from cfm value). */
266 int sor; /* Number of rotating registers (decoded from
267 cfm value). */
004d836a
JJ
268 CORE_ADDR after_prologue;
269 /* Address of first instruction after the last
270 prologue instruction; Note that there may
271 be instructions from the function's body
1777feb0 272 intermingled with the prologue. */
004d836a
JJ
273 int mem_stack_frame_size;
274 /* Size of the memory stack frame (may be zero),
1777feb0 275 or -1 if it has not been determined yet. */
004d836a 276 int fp_reg; /* Register number (if any) used a frame pointer
244bc108 277 for this frame. 0 if no register is being used
1777feb0 278 as the frame pointer. */
004d836a
JJ
279
280 /* Saved registers. */
281 CORE_ADDR saved_regs[NUM_IA64_RAW_REGS];
282
283};
244bc108 284
27067745
UW
285static int
286floatformat_valid (const struct floatformat *fmt, const void *from)
287{
288 return 1;
289}
290
7458e667 291static const struct floatformat floatformat_ia64_ext_little =
27067745
UW
292{
293 floatformat_little, 82, 0, 1, 17, 65535, 0x1ffff, 18, 64,
7458e667
JB
294 floatformat_intbit_yes, "floatformat_ia64_ext_little", floatformat_valid, NULL
295};
296
297static const struct floatformat floatformat_ia64_ext_big =
298{
299 floatformat_big, 82, 46, 47, 17, 65535, 0x1ffff, 64, 64,
300 floatformat_intbit_yes, "floatformat_ia64_ext_big", floatformat_valid
27067745
UW
301};
302
303static const struct floatformat *floatformats_ia64_ext[2] =
304{
7458e667
JB
305 &floatformat_ia64_ext_big,
306 &floatformat_ia64_ext_little
27067745
UW
307};
308
309static struct type *
310ia64_ext_type (struct gdbarch *gdbarch)
311{
312 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
313
314 if (!tdep->ia64_ext_type)
315 tdep->ia64_ext_type
e9bb382b 316 = arch_float_type (gdbarch, 128, "builtin_type_ia64_ext",
27067745
UW
317 floatformats_ia64_ext);
318
319 return tdep->ia64_ext_type;
320}
321
63807e1d 322static int
004d836a
JJ
323ia64_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
324 struct reggroup *group)
16461d7d 325{
004d836a
JJ
326 int vector_p;
327 int float_p;
328 int raw_p;
329 if (group == all_reggroup)
330 return 1;
331 vector_p = TYPE_VECTOR (register_type (gdbarch, regnum));
332 float_p = TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT;
333 raw_p = regnum < NUM_IA64_RAW_REGS;
334 if (group == float_reggroup)
335 return float_p;
336 if (group == vector_reggroup)
337 return vector_p;
338 if (group == general_reggroup)
339 return (!vector_p && !float_p);
340 if (group == save_reggroup || group == restore_reggroup)
341 return raw_p;
342 return 0;
16461d7d
KB
343}
344
004d836a 345static const char *
d93859e2 346ia64_register_name (struct gdbarch *gdbarch, int reg)
16461d7d 347{
004d836a 348 return ia64_register_names[reg];
16461d7d
KB
349}
350
004d836a
JJ
351struct type *
352ia64_register_type (struct gdbarch *arch, int reg)
16461d7d 353{
004d836a 354 if (reg >= IA64_FR0_REGNUM && reg <= IA64_FR127_REGNUM)
27067745 355 return ia64_ext_type (arch);
004d836a 356 else
0dfff4cb 357 return builtin_type (arch)->builtin_long;
16461d7d
KB
358}
359
a78f21af 360static int
d3f73121 361ia64_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
16461d7d 362{
004d836a
JJ
363 if (reg >= IA64_GR32_REGNUM && reg <= IA64_GR127_REGNUM)
364 return V32_REGNUM + (reg - IA64_GR32_REGNUM);
365 return reg;
16461d7d
KB
366}
367
16461d7d
KB
368
369/* Extract ``len'' bits from an instruction bundle starting at
370 bit ``from''. */
371
244bc108 372static long long
948f8e3d 373extract_bit_field (const gdb_byte *bundle, int from, int len)
16461d7d
KB
374{
375 long long result = 0LL;
376 int to = from + len;
377 int from_byte = from / 8;
378 int to_byte = to / 8;
379 unsigned char *b = (unsigned char *) bundle;
380 unsigned char c;
381 int lshift;
382 int i;
383
384 c = b[from_byte];
385 if (from_byte == to_byte)
386 c = ((unsigned char) (c << (8 - to % 8))) >> (8 - to % 8);
387 result = c >> (from % 8);
388 lshift = 8 - (from % 8);
389
390 for (i = from_byte+1; i < to_byte; i++)
391 {
392 result |= ((long long) b[i]) << lshift;
393 lshift += 8;
394 }
395
396 if (from_byte < to_byte && (to % 8 != 0))
397 {
398 c = b[to_byte];
399 c = ((unsigned char) (c << (8 - to % 8))) >> (8 - to % 8);
400 result |= ((long long) c) << lshift;
401 }
402
403 return result;
404}
405
1777feb0 406/* Replace the specified bits in an instruction bundle. */
16461d7d 407
244bc108 408static void
948f8e3d 409replace_bit_field (gdb_byte *bundle, long long val, int from, int len)
16461d7d
KB
410{
411 int to = from + len;
412 int from_byte = from / 8;
413 int to_byte = to / 8;
414 unsigned char *b = (unsigned char *) bundle;
415 unsigned char c;
416
417 if (from_byte == to_byte)
418 {
419 unsigned char left, right;
420 c = b[from_byte];
421 left = (c >> (to % 8)) << (to % 8);
422 right = ((unsigned char) (c << (8 - from % 8))) >> (8 - from % 8);
423 c = (unsigned char) (val & 0xff);
424 c = (unsigned char) (c << (from % 8 + 8 - to % 8)) >> (8 - to % 8);
425 c |= right | left;
426 b[from_byte] = c;
427 }
428 else
429 {
430 int i;
431 c = b[from_byte];
432 c = ((unsigned char) (c << (8 - from % 8))) >> (8 - from % 8);
433 c = c | (val << (from % 8));
434 b[from_byte] = c;
435 val >>= 8 - from % 8;
436
437 for (i = from_byte+1; i < to_byte; i++)
438 {
439 c = val & 0xff;
440 val >>= 8;
441 b[i] = c;
442 }
443
444 if (to % 8 != 0)
445 {
446 unsigned char cv = (unsigned char) val;
447 c = b[to_byte];
448 c = c >> (to % 8) << (to % 8);
449 c |= ((unsigned char) (cv << (8 - to % 8))) >> (8 - to % 8);
450 b[to_byte] = c;
451 }
452 }
453}
454
455/* Return the contents of slot N (for N = 0, 1, or 2) in
1777feb0 456 and instruction bundle. */
16461d7d 457
244bc108 458static long long
948f8e3d 459slotN_contents (gdb_byte *bundle, int slotnum)
16461d7d
KB
460{
461 return extract_bit_field (bundle, 5+41*slotnum, 41);
462}
463
1777feb0 464/* Store an instruction in an instruction bundle. */
16461d7d 465
244bc108 466static void
948f8e3d 467replace_slotN_contents (gdb_byte *bundle, long long instr, int slotnum)
16461d7d
KB
468{
469 replace_bit_field (bundle, instr, 5+41*slotnum, 41);
470}
471
939c61fa 472static const enum instruction_type template_encoding_table[32][3] =
16461d7d
KB
473{
474 { M, I, I }, /* 00 */
475 { M, I, I }, /* 01 */
476 { M, I, I }, /* 02 */
477 { M, I, I }, /* 03 */
478 { M, L, X }, /* 04 */
479 { M, L, X }, /* 05 */
480 { undefined, undefined, undefined }, /* 06 */
481 { undefined, undefined, undefined }, /* 07 */
482 { M, M, I }, /* 08 */
483 { M, M, I }, /* 09 */
484 { M, M, I }, /* 0A */
485 { M, M, I }, /* 0B */
486 { M, F, I }, /* 0C */
487 { M, F, I }, /* 0D */
488 { M, M, F }, /* 0E */
489 { M, M, F }, /* 0F */
490 { M, I, B }, /* 10 */
491 { M, I, B }, /* 11 */
492 { M, B, B }, /* 12 */
493 { M, B, B }, /* 13 */
494 { undefined, undefined, undefined }, /* 14 */
495 { undefined, undefined, undefined }, /* 15 */
496 { B, B, B }, /* 16 */
497 { B, B, B }, /* 17 */
498 { M, M, B }, /* 18 */
499 { M, M, B }, /* 19 */
500 { undefined, undefined, undefined }, /* 1A */
501 { undefined, undefined, undefined }, /* 1B */
502 { M, F, B }, /* 1C */
503 { M, F, B }, /* 1D */
504 { undefined, undefined, undefined }, /* 1E */
505 { undefined, undefined, undefined }, /* 1F */
506};
507
508/* Fetch and (partially) decode an instruction at ADDR and return the
509 address of the next instruction to fetch. */
510
511static CORE_ADDR
512fetch_instruction (CORE_ADDR addr, instruction_type *it, long long *instr)
513{
948f8e3d 514 gdb_byte bundle[BUNDLE_LEN];
16461d7d 515 int slotnum = (int) (addr & 0x0f) / SLOT_MULTIPLIER;
fe978cb0 516 long long templ;
16461d7d
KB
517 int val;
518
c26e1c2b
KB
519 /* Warn about slot numbers greater than 2. We used to generate
520 an error here on the assumption that the user entered an invalid
521 address. But, sometimes GDB itself requests an invalid address.
522 This can (easily) happen when execution stops in a function for
523 which there are no symbols. The prologue scanner will attempt to
524 find the beginning of the function - if the nearest symbol
525 happens to not be aligned on a bundle boundary (16 bytes), the
526 resulting starting address will cause GDB to think that the slot
527 number is too large.
528
529 So we warn about it and set the slot number to zero. It is
530 not necessarily a fatal condition, particularly if debugging
531 at the assembly language level. */
16461d7d 532 if (slotnum > 2)
c26e1c2b 533 {
8a3fe4f8
AC
534 warning (_("Can't fetch instructions for slot numbers greater than 2.\n"
535 "Using slot 0 instead"));
c26e1c2b
KB
536 slotnum = 0;
537 }
16461d7d
KB
538
539 addr &= ~0x0f;
540
541 val = target_read_memory (addr, bundle, BUNDLE_LEN);
542
543 if (val != 0)
544 return 0;
545
546 *instr = slotN_contents (bundle, slotnum);
fe978cb0
PA
547 templ = extract_bit_field (bundle, 0, 5);
548 *it = template_encoding_table[(int)templ][slotnum];
16461d7d 549
64a5b29c 550 if (slotnum == 2 || (slotnum == 1 && *it == L))
16461d7d
KB
551 addr += 16;
552 else
553 addr += (slotnum + 1) * SLOT_MULTIPLIER;
554
555 return addr;
556}
557
558/* There are 5 different break instructions (break.i, break.b,
559 break.m, break.f, and break.x), but they all have the same
560 encoding. (The five bit template in the low five bits of the
561 instruction bundle distinguishes one from another.)
562
563 The runtime architecture manual specifies that break instructions
564 used for debugging purposes must have the upper two bits of the 21
565 bit immediate set to a 0 and a 1 respectively. A breakpoint
566 instruction encodes the most significant bit of its 21 bit
567 immediate at bit 36 of the 41 bit instruction. The penultimate msb
568 is at bit 25 which leads to the pattern below.
569
570 Originally, I had this set up to do, e.g, a "break.i 0x80000" But
571 it turns out that 0x80000 was used as the syscall break in the early
572 simulators. So I changed the pattern slightly to do "break.i 0x080001"
573 instead. But that didn't work either (I later found out that this
574 pattern was used by the simulator that I was using.) So I ended up
939c61fa
JK
575 using the pattern seen below.
576
577 SHADOW_CONTENTS has byte-based addressing (PLACED_ADDRESS and SHADOW_LEN)
578 while we need bit-based addressing as the instructions length is 41 bits and
579 we must not modify/corrupt the adjacent slots in the same bundle.
580 Fortunately we may store larger memory incl. the adjacent bits with the
581 original memory content (not the possibly already stored breakpoints there).
582 We need to be careful in ia64_memory_remove_breakpoint to always restore
583 only the specific bits of this instruction ignoring any adjacent stored
584 bits.
585
586 We use the original addressing with the low nibble in the range <0..2> which
587 gets incorrectly interpreted by generic non-ia64 breakpoint_restore_shadows
588 as the direct byte offset of SHADOW_CONTENTS. We store whole BUNDLE_LEN
589 bytes just without these two possibly skipped bytes to not to exceed to the
590 next bundle.
591
592 If we would like to store the whole bundle to SHADOW_CONTENTS we would have
593 to store already the base address (`address & ~0x0f') into PLACED_ADDRESS.
594 In such case there is no other place where to store
595 SLOTNUM (`adress & 0x0f', value in the range <0..2>). We need to know
596 SLOTNUM in ia64_memory_remove_breakpoint.
597
ca8b5032
JB
598 There is one special case where we need to be extra careful:
599 L-X instructions, which are instructions that occupy 2 slots
600 (The L part is always in slot 1, and the X part is always in
601 slot 2). We must refuse to insert breakpoints for an address
602 that points at slot 2 of a bundle where an L-X instruction is
603 present, since there is logically no instruction at that address.
604 However, to make things more interesting, the opcode of L-X
605 instructions is located in slot 2. This means that, to insert
606 a breakpoint at an address that points to slot 1, we actually
607 need to write the breakpoint in slot 2! Slot 1 is actually
608 the extended operand, so writing the breakpoint there would not
609 have the desired effect. Another side-effect of this issue
610 is that we need to make sure that the shadow contents buffer
611 does save byte 15 of our instruction bundle (this is the tail
612 end of slot 2, which wouldn't be saved if we were to insert
613 the breakpoint in slot 1).
614
939c61fa
JK
615 ia64 16-byte bundle layout:
616 | 5 bits | slot 0 with 41 bits | slot 1 with 41 bits | slot 2 with 41 bits |
617
618 The current addressing used by the code below:
619 original PC placed_address placed_size required covered
620 == bp_tgt->shadow_len reqd \subset covered
73a9714c
JB
621 0xABCDE0 0xABCDE0 0x10 <0x0...0x5> <0x0..0xF>
622 0xABCDE1 0xABCDE1 0xF <0x5...0xA> <0x1..0xF>
939c61fa 623 0xABCDE2 0xABCDE2 0xE <0xA...0xF> <0x2..0xF>
ca8b5032
JB
624
625 L-X instructions are treated a little specially, as explained above:
626 0xABCDE1 0xABCDE1 0xF <0xA...0xF> <0x1..0xF>
627
939c61fa
JK
628 `objdump -d' and some other tools show a bit unjustified offsets:
629 original PC byte where starts the instruction objdump offset
630 0xABCDE0 0xABCDE0 0xABCDE0
631 0xABCDE1 0xABCDE5 0xABCDE6
632 0xABCDE2 0xABCDEA 0xABCDEC
633 */
16461d7d 634
aaab4dba 635#define IA64_BREAKPOINT 0x00003333300LL
16461d7d
KB
636
637static int
ae4b2284
MD
638ia64_memory_insert_breakpoint (struct gdbarch *gdbarch,
639 struct bp_target_info *bp_tgt)
16461d7d 640{
0d5ed153 641 CORE_ADDR addr = bp_tgt->placed_address = bp_tgt->reqstd_address;
939c61fa 642 gdb_byte bundle[BUNDLE_LEN];
73a9714c 643 int slotnum = (int) (addr & 0x0f) / SLOT_MULTIPLIER, shadow_slotnum;
939c61fa 644 long long instr_breakpoint;
16461d7d 645 int val;
fe978cb0 646 int templ;
939c61fa 647 struct cleanup *cleanup;
16461d7d
KB
648
649 if (slotnum > 2)
8a3fe4f8 650 error (_("Can't insert breakpoint for slot numbers greater than 2."));
16461d7d
KB
651
652 addr &= ~0x0f;
653
b554e4bd
JK
654 /* Enable the automatic memory restoration from breakpoints while
655 we read our instruction bundle for the purpose of SHADOW_CONTENTS.
656 Otherwise, we could possibly store into the shadow parts of the adjacent
939c61fa
JK
657 placed breakpoints. It is due to our SHADOW_CONTENTS overlapping the real
658 breakpoint instruction bits region. */
b554e4bd 659 cleanup = make_show_memory_breakpoints_cleanup (0);
16461d7d 660 val = target_read_memory (addr, bundle, BUNDLE_LEN);
fbfaaae5
JK
661 if (val != 0)
662 {
663 do_cleanups (cleanup);
664 return val;
665 }
126fa72d 666
73a9714c
JB
667 /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
668 for addressing the SHADOW_CONTENTS placement. */
669 shadow_slotnum = slotnum;
670
ca8b5032
JB
671 /* Always cover the last byte of the bundle in case we are inserting
672 a breakpoint on an L-X instruction. */
73a9714c
JB
673 bp_tgt->shadow_len = BUNDLE_LEN - shadow_slotnum;
674
fe978cb0
PA
675 templ = extract_bit_field (bundle, 0, 5);
676 if (template_encoding_table[templ][slotnum] == X)
73a9714c 677 {
ca8b5032
JB
678 /* X unit types can only be used in slot 2, and are actually
679 part of a 2-slot L-X instruction. We cannot break at this
680 address, as this is the second half of an instruction that
681 lives in slot 1 of that bundle. */
73a9714c
JB
682 gdb_assert (slotnum == 2);
683 error (_("Can't insert breakpoint for non-existing slot X"));
684 }
fe978cb0 685 if (template_encoding_table[templ][slotnum] == L)
73a9714c 686 {
ca8b5032
JB
687 /* L unit types can only be used in slot 1. But the associated
688 opcode for that instruction is in slot 2, so bump the slot number
689 accordingly. */
73a9714c
JB
690 gdb_assert (slotnum == 1);
691 slotnum = 2;
692 }
939c61fa
JK
693
694 /* Store the whole bundle, except for the initial skipped bytes by the slot
695 number interpreted as bytes offset in PLACED_ADDRESS. */
1777feb0
MS
696 memcpy (bp_tgt->shadow_contents, bundle + shadow_slotnum,
697 bp_tgt->shadow_len);
939c61fa 698
b554e4bd
JK
699 /* Re-read the same bundle as above except that, this time, read it in order
700 to compute the new bundle inside which we will be inserting the
701 breakpoint. Therefore, disable the automatic memory restoration from
702 breakpoints while we read our instruction bundle. Otherwise, the general
703 restoration mechanism kicks in and we would possibly remove parts of the
704 adjacent placed breakpoints. It is due to our SHADOW_CONTENTS overlapping
705 the real breakpoint instruction bits region. */
706 make_show_memory_breakpoints_cleanup (1);
fbfaaae5
JK
707 val = target_read_memory (addr, bundle, BUNDLE_LEN);
708 if (val != 0)
709 {
710 do_cleanups (cleanup);
711 return val;
712 }
b554e4bd 713
939c61fa
JK
714 /* Breakpoints already present in the code will get deteacted and not get
715 reinserted by bp_loc_is_permanent. Multiple breakpoints at the same
716 location cannot induce the internal error as they are optimized into
717 a single instance by update_global_location_list. */
718 instr_breakpoint = slotN_contents (bundle, slotnum);
719 if (instr_breakpoint == IA64_BREAKPOINT)
720 internal_error (__FILE__, __LINE__,
721 _("Address %s already contains a breakpoint."),
5af949e3 722 paddress (gdbarch, bp_tgt->placed_address));
aaab4dba 723 replace_slotN_contents (bundle, IA64_BREAKPOINT, slotnum);
939c61fa 724
73a9714c 725 val = target_write_memory (addr + shadow_slotnum, bundle + shadow_slotnum,
fbfaaae5 726 bp_tgt->shadow_len);
16461d7d 727
939c61fa 728 do_cleanups (cleanup);
16461d7d
KB
729 return val;
730}
731
732static int
ae4b2284
MD
733ia64_memory_remove_breakpoint (struct gdbarch *gdbarch,
734 struct bp_target_info *bp_tgt)
16461d7d 735{
8181d85f 736 CORE_ADDR addr = bp_tgt->placed_address;
939c61fa 737 gdb_byte bundle_mem[BUNDLE_LEN], bundle_saved[BUNDLE_LEN];
73a9714c 738 int slotnum = (addr & 0x0f) / SLOT_MULTIPLIER, shadow_slotnum;
939c61fa 739 long long instr_breakpoint, instr_saved;
16461d7d 740 int val;
fe978cb0 741 int templ;
1de34ab7 742 struct cleanup *cleanup;
16461d7d
KB
743
744 addr &= ~0x0f;
745
1de34ab7
JB
746 /* Disable the automatic memory restoration from breakpoints while
747 we read our instruction bundle. Otherwise, the general restoration
939c61fa
JK
748 mechanism kicks in and we would possibly remove parts of the adjacent
749 placed breakpoints. It is due to our SHADOW_CONTENTS overlapping the real
750 breakpoint instruction bits region. */
1de34ab7 751 cleanup = make_show_memory_breakpoints_cleanup (1);
939c61fa 752 val = target_read_memory (addr, bundle_mem, BUNDLE_LEN);
fbfaaae5
JK
753 if (val != 0)
754 {
755 do_cleanups (cleanup);
756 return val;
757 }
126fa72d 758
73a9714c
JB
759 /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
760 for addressing the SHADOW_CONTENTS placement. */
761 shadow_slotnum = slotnum;
762
fe978cb0
PA
763 templ = extract_bit_field (bundle_mem, 0, 5);
764 if (template_encoding_table[templ][slotnum] == X)
73a9714c 765 {
ca8b5032
JB
766 /* X unit types can only be used in slot 2, and are actually
767 part of a 2-slot L-X instruction. We refuse to insert
768 breakpoints at this address, so there should be no reason
769 for us attempting to remove one there, except if the program's
770 code somehow got modified in memory. */
73a9714c 771 gdb_assert (slotnum == 2);
ca8b5032
JB
772 warning (_("Cannot remove breakpoint at address %s from non-existing "
773 "X-type slot, memory has changed underneath"),
73a9714c
JB
774 paddress (gdbarch, bp_tgt->placed_address));
775 do_cleanups (cleanup);
776 return -1;
777 }
fe978cb0 778 if (template_encoding_table[templ][slotnum] == L)
73a9714c 779 {
ca8b5032
JB
780 /* L unit types can only be used in slot 1. But the breakpoint
781 was actually saved using slot 2, so update the slot number
782 accordingly. */
73a9714c
JB
783 gdb_assert (slotnum == 1);
784 slotnum = 2;
785 }
939c61fa 786
cd6c3b4f 787 gdb_assert (bp_tgt->shadow_len == BUNDLE_LEN - shadow_slotnum);
939c61fa
JK
788
789 instr_breakpoint = slotN_contents (bundle_mem, slotnum);
790 if (instr_breakpoint != IA64_BREAKPOINT)
126fa72d 791 {
939c61fa
JK
792 warning (_("Cannot remove breakpoint at address %s, "
793 "no break instruction at such address."),
5af949e3 794 paddress (gdbarch, bp_tgt->placed_address));
a58162c2 795 do_cleanups (cleanup);
939c61fa 796 return -1;
126fa72d
PS
797 }
798
939c61fa
JK
799 /* Extract the original saved instruction from SLOTNUM normalizing its
800 bit-shift for INSTR_SAVED. */
801 memcpy (bundle_saved, bundle_mem, BUNDLE_LEN);
73a9714c
JB
802 memcpy (bundle_saved + shadow_slotnum, bp_tgt->shadow_contents,
803 bp_tgt->shadow_len);
939c61fa
JK
804 instr_saved = slotN_contents (bundle_saved, slotnum);
805
ca8b5032
JB
806 /* In BUNDLE_MEM, be careful to modify only the bits belonging to SLOTNUM
807 and not any of the other ones that are stored in SHADOW_CONTENTS. */
939c61fa 808 replace_slotN_contents (bundle_mem, instr_saved, slotnum);
dd110abf 809 val = target_write_raw_memory (addr, bundle_mem, BUNDLE_LEN);
16461d7d 810
1de34ab7 811 do_cleanups (cleanup);
16461d7d
KB
812 return val;
813}
814
cd6c3b4f
YQ
815/* Implement the breakpoint_kind_from_pc gdbarch method. */
816
817static int
818ia64_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
819{
820 /* A place holder of gdbarch method breakpoint_kind_from_pc. */
821 return 0;
822}
823
939c61fa
JK
824/* As gdbarch_breakpoint_from_pc ranges have byte granularity and ia64
825 instruction slots ranges are bit-granular (41 bits) we have to provide an
826 extended range as described for ia64_memory_insert_breakpoint. We also take
827 care of preserving the `break' instruction 21-bit (or 62-bit) parameter to
828 make a match for permanent breakpoints. */
829
830static const gdb_byte *
1777feb0
MS
831ia64_breakpoint_from_pc (struct gdbarch *gdbarch,
832 CORE_ADDR *pcptr, int *lenptr)
16461d7d 833{
939c61fa
JK
834 CORE_ADDR addr = *pcptr;
835 static gdb_byte bundle[BUNDLE_LEN];
73a9714c 836 int slotnum = (int) (*pcptr & 0x0f) / SLOT_MULTIPLIER, shadow_slotnum;
939c61fa
JK
837 long long instr_fetched;
838 int val;
fe978cb0 839 int templ;
939c61fa
JK
840 struct cleanup *cleanup;
841
842 if (slotnum > 2)
843 error (_("Can't insert breakpoint for slot numbers greater than 2."));
844
845 addr &= ~0x0f;
846
847 /* Enable the automatic memory restoration from breakpoints while
848 we read our instruction bundle to match bp_loc_is_permanent. */
849 cleanup = make_show_memory_breakpoints_cleanup (0);
850 val = target_read_memory (addr, bundle, BUNDLE_LEN);
851 do_cleanups (cleanup);
852
853 /* The memory might be unreachable. This can happen, for instance,
854 when the user inserts a breakpoint at an invalid address. */
855 if (val != 0)
856 return NULL;
857
73a9714c
JB
858 /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
859 for addressing the SHADOW_CONTENTS placement. */
860 shadow_slotnum = slotnum;
861
862 /* Cover always the last byte of the bundle for the L-X slot case. */
863 *lenptr = BUNDLE_LEN - shadow_slotnum;
864
939c61fa
JK
865 /* Check for L type instruction in slot 1, if present then bump up the slot
866 number to the slot 2. */
fe978cb0
PA
867 templ = extract_bit_field (bundle, 0, 5);
868 if (template_encoding_table[templ][slotnum] == X)
73a9714c
JB
869 {
870 gdb_assert (slotnum == 2);
871 error (_("Can't insert breakpoint for non-existing slot X"));
872 }
fe978cb0 873 if (template_encoding_table[templ][slotnum] == L)
73a9714c
JB
874 {
875 gdb_assert (slotnum == 1);
876 slotnum = 2;
877 }
939c61fa
JK
878
879 /* A break instruction has its all its opcode bits cleared except for
880 the parameter value. For L+X slot pair we are at the X slot (slot 2) so
881 we should not touch the L slot - the upper 41 bits of the parameter. */
882 instr_fetched = slotN_contents (bundle, slotnum);
116e0965 883 instr_fetched &= 0x1003ffffc0LL;
939c61fa
JK
884 replace_slotN_contents (bundle, instr_fetched, slotnum);
885
73a9714c 886 return bundle + shadow_slotnum;
16461d7d
KB
887}
888
a78f21af 889static CORE_ADDR
61a1198a 890ia64_read_pc (struct regcache *regcache)
16461d7d 891{
61a1198a
UW
892 ULONGEST psr_value, pc_value;
893 int slot_num;
894
895 regcache_cooked_read_unsigned (regcache, IA64_PSR_REGNUM, &psr_value);
896 regcache_cooked_read_unsigned (regcache, IA64_IP_REGNUM, &pc_value);
897 slot_num = (psr_value >> 41) & 3;
16461d7d
KB
898
899 return pc_value | (slot_num * SLOT_MULTIPLIER);
900}
901
54a5c8d8 902void
61a1198a 903ia64_write_pc (struct regcache *regcache, CORE_ADDR new_pc)
16461d7d
KB
904{
905 int slot_num = (int) (new_pc & 0xf) / SLOT_MULTIPLIER;
61a1198a
UW
906 ULONGEST psr_value;
907
908 regcache_cooked_read_unsigned (regcache, IA64_PSR_REGNUM, &psr_value);
16461d7d 909 psr_value &= ~(3LL << 41);
61a1198a 910 psr_value |= (ULONGEST)(slot_num & 0x3) << 41;
16461d7d
KB
911
912 new_pc &= ~0xfLL;
913
61a1198a
UW
914 regcache_cooked_write_unsigned (regcache, IA64_PSR_REGNUM, psr_value);
915 regcache_cooked_write_unsigned (regcache, IA64_IP_REGNUM, new_pc);
16461d7d
KB
916}
917
918#define IS_NaT_COLLECTION_ADDR(addr) ((((addr) >> 3) & 0x3f) == 0x3f)
919
920/* Returns the address of the slot that's NSLOTS slots away from
1777feb0 921 the address ADDR. NSLOTS may be positive or negative. */
16461d7d
KB
922static CORE_ADDR
923rse_address_add(CORE_ADDR addr, int nslots)
924{
925 CORE_ADDR new_addr;
926 int mandatory_nat_slots = nslots / 63;
927 int direction = nslots < 0 ? -1 : 1;
928
929 new_addr = addr + 8 * (nslots + mandatory_nat_slots);
930
931 if ((new_addr >> 9) != ((addr + 8 * 64 * mandatory_nat_slots) >> 9))
932 new_addr += 8 * direction;
933
934 if (IS_NaT_COLLECTION_ADDR(new_addr))
935 new_addr += 8 * direction;
936
937 return new_addr;
938}
939
05d1431c 940static enum register_status
004d836a 941ia64_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
88d82102 942 int regnum, gdb_byte *buf)
16461d7d 943{
e17a4113 944 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
05d1431c 945 enum register_status status;
e17a4113 946
004d836a 947 if (regnum >= V32_REGNUM && regnum <= V127_REGNUM)
244bc108 948 {
88d82102 949#ifdef HAVE_LIBUNWIND_IA64_H
1777feb0
MS
950 /* First try and use the libunwind special reg accessor,
951 otherwise fallback to standard logic. */
c5a27d9c 952 if (!libunwind_is_initialized ()
45ecac4b 953 || libunwind_get_reg_special (gdbarch, regcache, regnum, buf) != 0)
88d82102 954#endif
004d836a 955 {
1777feb0
MS
956 /* The fallback position is to assume that r32-r127 are
957 found sequentially in memory starting at $bof. This
958 isn't always true, but without libunwind, this is the
959 best we can do. */
05d1431c 960 enum register_status status;
c5a27d9c
JJ
961 ULONGEST cfm;
962 ULONGEST bsp;
963 CORE_ADDR reg;
05d1431c
PA
964
965 status = regcache_cooked_read_unsigned (regcache,
966 IA64_BSP_REGNUM, &bsp);
967 if (status != REG_VALID)
968 return status;
969
970 status = regcache_cooked_read_unsigned (regcache,
971 IA64_CFM_REGNUM, &cfm);
972 if (status != REG_VALID)
973 return status;
974
c5a27d9c 975 /* The bsp points at the end of the register frame so we
1777feb0
MS
976 subtract the size of frame from it to get start of
977 register frame. */
c5a27d9c
JJ
978 bsp = rse_address_add (bsp, -(cfm & 0x7f));
979
980 if ((cfm & 0x7f) > regnum - V32_REGNUM)
981 {
982 ULONGEST reg_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
e17a4113
UW
983 reg = read_memory_integer ((CORE_ADDR)reg_addr, 8, byte_order);
984 store_unsigned_integer (buf, register_size (gdbarch, regnum),
985 byte_order, reg);
c5a27d9c
JJ
986 }
987 else
e17a4113
UW
988 store_unsigned_integer (buf, register_size (gdbarch, regnum),
989 byte_order, 0);
004d836a 990 }
004d836a
JJ
991 }
992 else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT31_REGNUM)
993 {
994 ULONGEST unatN_val;
995 ULONGEST unat;
05d1431c
PA
996 status = regcache_cooked_read_unsigned (regcache, IA64_UNAT_REGNUM, &unat);
997 if (status != REG_VALID)
998 return status;
004d836a 999 unatN_val = (unat & (1LL << (regnum - IA64_NAT0_REGNUM))) != 0;
e17a4113
UW
1000 store_unsigned_integer (buf, register_size (gdbarch, regnum),
1001 byte_order, unatN_val);
004d836a
JJ
1002 }
1003 else if (IA64_NAT32_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
1004 {
1005 ULONGEST natN_val = 0;
1006 ULONGEST bsp;
1007 ULONGEST cfm;
1008 CORE_ADDR gr_addr = 0;
05d1431c
PA
1009 status = regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
1010 if (status != REG_VALID)
1011 return status;
1012 status = regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1013 if (status != REG_VALID)
1014 return status;
004d836a
JJ
1015
1016 /* The bsp points at the end of the register frame so we
1017 subtract the size of frame from it to get start of register frame. */
1018 bsp = rse_address_add (bsp, -(cfm & 0x7f));
1019
1020 if ((cfm & 0x7f) > regnum - V32_REGNUM)
1021 gr_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
1022
1023 if (gr_addr != 0)
1024 {
1025 /* Compute address of nat collection bits. */
1026 CORE_ADDR nat_addr = gr_addr | 0x1f8;
1027 CORE_ADDR nat_collection;
1028 int nat_bit;
1029 /* If our nat collection address is bigger than bsp, we have to get
1030 the nat collection from rnat. Otherwise, we fetch the nat
1031 collection from the computed address. */
1032 if (nat_addr >= bsp)
1777feb0
MS
1033 regcache_cooked_read_unsigned (regcache, IA64_RNAT_REGNUM,
1034 &nat_collection);
004d836a 1035 else
e17a4113 1036 nat_collection = read_memory_integer (nat_addr, 8, byte_order);
004d836a
JJ
1037 nat_bit = (gr_addr >> 3) & 0x3f;
1038 natN_val = (nat_collection >> nat_bit) & 1;
1039 }
1040
e17a4113
UW
1041 store_unsigned_integer (buf, register_size (gdbarch, regnum),
1042 byte_order, natN_val);
244bc108 1043 }
004d836a
JJ
1044 else if (regnum == VBOF_REGNUM)
1045 {
1046 /* A virtual register frame start is provided for user convenience.
1777feb0 1047 It can be calculated as the bsp - sof (sizeof frame). */
004d836a
JJ
1048 ULONGEST bsp, vbsp;
1049 ULONGEST cfm;
05d1431c
PA
1050 status = regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
1051 if (status != REG_VALID)
1052 return status;
1053 status = regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1054 if (status != REG_VALID)
1055 return status;
004d836a
JJ
1056
1057 /* The bsp points at the end of the register frame so we
1058 subtract the size of frame from it to get beginning of frame. */
1059 vbsp = rse_address_add (bsp, -(cfm & 0x7f));
e17a4113
UW
1060 store_unsigned_integer (buf, register_size (gdbarch, regnum),
1061 byte_order, vbsp);
004d836a
JJ
1062 }
1063 else if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
1064 {
1065 ULONGEST pr;
1066 ULONGEST cfm;
1067 ULONGEST prN_val;
05d1431c
PA
1068 status = regcache_cooked_read_unsigned (regcache, IA64_PR_REGNUM, &pr);
1069 if (status != REG_VALID)
1070 return status;
1071 status = regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1072 if (status != REG_VALID)
1073 return status;
004d836a
JJ
1074
1075 if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
1076 {
1077 /* Fetch predicate register rename base from current frame
1777feb0 1078 marker for this frame. */
004d836a
JJ
1079 int rrb_pr = (cfm >> 32) & 0x3f;
1080
1777feb0 1081 /* Adjust the register number to account for register rotation. */
004d836a
JJ
1082 regnum = VP16_REGNUM
1083 + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
1084 }
1085 prN_val = (pr & (1LL << (regnum - VP0_REGNUM))) != 0;
e17a4113
UW
1086 store_unsigned_integer (buf, register_size (gdbarch, regnum),
1087 byte_order, prN_val);
004d836a
JJ
1088 }
1089 else
088568da 1090 memset (buf, 0, register_size (gdbarch, regnum));
05d1431c
PA
1091
1092 return REG_VALID;
16461d7d
KB
1093}
1094
004d836a
JJ
1095static void
1096ia64_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
88d82102 1097 int regnum, const gdb_byte *buf)
16461d7d 1098{
e17a4113
UW
1099 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1100
004d836a 1101 if (regnum >= V32_REGNUM && regnum <= V127_REGNUM)
244bc108 1102 {
004d836a
JJ
1103 ULONGEST bsp;
1104 ULONGEST cfm;
004d836a
JJ
1105 regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
1106 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1107
1108 bsp = rse_address_add (bsp, -(cfm & 0x7f));
1109
1110 if ((cfm & 0x7f) > regnum - V32_REGNUM)
1111 {
1112 ULONGEST reg_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
ce746418 1113 write_memory (reg_addr, buf, 8);
004d836a
JJ
1114 }
1115 }
1116 else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT31_REGNUM)
1117 {
1118 ULONGEST unatN_val, unat, unatN_mask;
1119 regcache_cooked_read_unsigned (regcache, IA64_UNAT_REGNUM, &unat);
1777feb0
MS
1120 unatN_val = extract_unsigned_integer (buf, register_size (gdbarch,
1121 regnum),
e17a4113 1122 byte_order);
004d836a
JJ
1123 unatN_mask = (1LL << (regnum - IA64_NAT0_REGNUM));
1124 if (unatN_val == 0)
1125 unat &= ~unatN_mask;
1126 else if (unatN_val == 1)
1127 unat |= unatN_mask;
1128 regcache_cooked_write_unsigned (regcache, IA64_UNAT_REGNUM, unat);
1129 }
1130 else if (IA64_NAT32_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
1131 {
1132 ULONGEST natN_val;
1133 ULONGEST bsp;
1134 ULONGEST cfm;
1135 CORE_ADDR gr_addr = 0;
1136 regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
1137 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1138
1139 /* The bsp points at the end of the register frame so we
1140 subtract the size of frame from it to get start of register frame. */
1141 bsp = rse_address_add (bsp, -(cfm & 0x7f));
1142
1143 if ((cfm & 0x7f) > regnum - V32_REGNUM)
1144 gr_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
1145
1777feb0
MS
1146 natN_val = extract_unsigned_integer (buf, register_size (gdbarch,
1147 regnum),
e17a4113 1148 byte_order);
004d836a
JJ
1149
1150 if (gr_addr != 0 && (natN_val == 0 || natN_val == 1))
1151 {
1152 /* Compute address of nat collection bits. */
1153 CORE_ADDR nat_addr = gr_addr | 0x1f8;
1154 CORE_ADDR nat_collection;
1155 int natN_bit = (gr_addr >> 3) & 0x3f;
1156 ULONGEST natN_mask = (1LL << natN_bit);
1157 /* If our nat collection address is bigger than bsp, we have to get
1158 the nat collection from rnat. Otherwise, we fetch the nat
1159 collection from the computed address. */
1160 if (nat_addr >= bsp)
1161 {
05d1431c
PA
1162 regcache_cooked_read_unsigned (regcache,
1163 IA64_RNAT_REGNUM,
1777feb0 1164 &nat_collection);
004d836a
JJ
1165 if (natN_val)
1166 nat_collection |= natN_mask;
1167 else
1168 nat_collection &= ~natN_mask;
1777feb0
MS
1169 regcache_cooked_write_unsigned (regcache, IA64_RNAT_REGNUM,
1170 nat_collection);
004d836a
JJ
1171 }
1172 else
1173 {
948f8e3d 1174 gdb_byte nat_buf[8];
e17a4113 1175 nat_collection = read_memory_integer (nat_addr, 8, byte_order);
004d836a
JJ
1176 if (natN_val)
1177 nat_collection |= natN_mask;
1178 else
1179 nat_collection &= ~natN_mask;
e17a4113
UW
1180 store_unsigned_integer (nat_buf, register_size (gdbarch, regnum),
1181 byte_order, nat_collection);
004d836a
JJ
1182 write_memory (nat_addr, nat_buf, 8);
1183 }
1184 }
1185 }
1186 else if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
1187 {
1188 ULONGEST pr;
1189 ULONGEST cfm;
1190 ULONGEST prN_val;
1191 ULONGEST prN_mask;
1192
1193 regcache_cooked_read_unsigned (regcache, IA64_PR_REGNUM, &pr);
1194 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1195
1196 if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
1197 {
1198 /* Fetch predicate register rename base from current frame
1777feb0 1199 marker for this frame. */
004d836a
JJ
1200 int rrb_pr = (cfm >> 32) & 0x3f;
1201
1777feb0 1202 /* Adjust the register number to account for register rotation. */
004d836a
JJ
1203 regnum = VP16_REGNUM
1204 + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
1205 }
e17a4113
UW
1206 prN_val = extract_unsigned_integer (buf, register_size (gdbarch, regnum),
1207 byte_order);
004d836a
JJ
1208 prN_mask = (1LL << (regnum - VP0_REGNUM));
1209 if (prN_val == 0)
1210 pr &= ~prN_mask;
1211 else if (prN_val == 1)
1212 pr |= prN_mask;
1213 regcache_cooked_write_unsigned (regcache, IA64_PR_REGNUM, pr);
244bc108 1214 }
16461d7d
KB
1215}
1216
004d836a
JJ
1217/* The ia64 needs to convert between various ieee floating-point formats
1218 and the special ia64 floating point register format. */
1219
1220static int
0abe36f5 1221ia64_convert_register_p (struct gdbarch *gdbarch, int regno, struct type *type)
004d836a 1222{
83acabca 1223 return (regno >= IA64_FR0_REGNUM && regno <= IA64_FR127_REGNUM
88954b49 1224 && TYPE_CODE (type) == TYPE_CODE_FLT
27067745 1225 && type != ia64_ext_type (gdbarch));
004d836a
JJ
1226}
1227
8dccd430 1228static int
004d836a 1229ia64_register_to_value (struct frame_info *frame, int regnum,
8dccd430
PA
1230 struct type *valtype, gdb_byte *out,
1231 int *optimizedp, int *unavailablep)
004d836a 1232{
27067745 1233 struct gdbarch *gdbarch = get_frame_arch (frame);
ae0d01d6 1234 gdb_byte in[IA64_FP_REGISTER_SIZE];
8dccd430
PA
1235
1236 /* Convert to TYPE. */
1237 if (!get_frame_register_bytes (frame, regnum, 0,
1238 register_size (gdbarch, regnum),
1239 in, optimizedp, unavailablep))
1240 return 0;
1241
27067745 1242 convert_typed_floating (in, ia64_ext_type (gdbarch), out, valtype);
8dccd430
PA
1243 *optimizedp = *unavailablep = 0;
1244 return 1;
004d836a
JJ
1245}
1246
1247static void
1248ia64_value_to_register (struct frame_info *frame, int regnum,
88d82102 1249 struct type *valtype, const gdb_byte *in)
004d836a 1250{
27067745 1251 struct gdbarch *gdbarch = get_frame_arch (frame);
ae0d01d6 1252 gdb_byte out[IA64_FP_REGISTER_SIZE];
27067745 1253 convert_typed_floating (in, valtype, out, ia64_ext_type (gdbarch));
004d836a
JJ
1254 put_frame_register (frame, regnum, out);
1255}
1256
1257
58ab00f9
KB
1258/* Limit the number of skipped non-prologue instructions since examining
1259 of the prologue is expensive. */
5ea2bd7f 1260static int max_skip_non_prologue_insns = 40;
58ab00f9
KB
1261
1262/* Given PC representing the starting address of a function, and
1263 LIM_PC which is the (sloppy) limit to which to scan when looking
1264 for a prologue, attempt to further refine this limit by using
1265 the line data in the symbol table. If successful, a better guess
1266 on where the prologue ends is returned, otherwise the previous
1267 value of lim_pc is returned. TRUST_LIMIT is a pointer to a flag
1268 which will be set to indicate whether the returned limit may be
1269 used with no further scanning in the event that the function is
1270 frameless. */
1271
634aa483
AC
1272/* FIXME: cagney/2004-02-14: This function and logic have largely been
1273 superseded by skip_prologue_using_sal. */
1274
58ab00f9
KB
1275static CORE_ADDR
1276refine_prologue_limit (CORE_ADDR pc, CORE_ADDR lim_pc, int *trust_limit)
1277{
1278 struct symtab_and_line prologue_sal;
1279 CORE_ADDR start_pc = pc;
39312971
JB
1280 CORE_ADDR end_pc;
1281
1282 /* The prologue can not possibly go past the function end itself,
1283 so we can already adjust LIM_PC accordingly. */
1284 if (find_pc_partial_function (pc, NULL, NULL, &end_pc) && end_pc < lim_pc)
1285 lim_pc = end_pc;
58ab00f9
KB
1286
1287 /* Start off not trusting the limit. */
1288 *trust_limit = 0;
1289
1290 prologue_sal = find_pc_line (pc, 0);
1291 if (prologue_sal.line != 0)
1292 {
1293 int i;
1294 CORE_ADDR addr = prologue_sal.end;
1295
1296 /* Handle the case in which compiler's optimizer/scheduler
1297 has moved instructions into the prologue. We scan ahead
1298 in the function looking for address ranges whose corresponding
1299 line number is less than or equal to the first one that we
1300 found for the function. (It can be less than when the
1301 scheduler puts a body instruction before the first prologue
1302 instruction.) */
1303 for (i = 2 * max_skip_non_prologue_insns;
1304 i > 0 && (lim_pc == 0 || addr < lim_pc);
1305 i--)
1306 {
1307 struct symtab_and_line sal;
1308
1309 sal = find_pc_line (addr, 0);
1310 if (sal.line == 0)
1311 break;
1312 if (sal.line <= prologue_sal.line
1313 && sal.symtab == prologue_sal.symtab)
1314 {
1315 prologue_sal = sal;
1316 }
1317 addr = sal.end;
1318 }
1319
1320 if (lim_pc == 0 || prologue_sal.end < lim_pc)
1321 {
1322 lim_pc = prologue_sal.end;
1323 if (start_pc == get_pc_function_start (lim_pc))
1324 *trust_limit = 1;
1325 }
1326 }
1327 return lim_pc;
1328}
1329
16461d7d
KB
1330#define isScratch(_regnum_) ((_regnum_) == 2 || (_regnum_) == 3 \
1331 || (8 <= (_regnum_) && (_regnum_) <= 11) \
1332 || (14 <= (_regnum_) && (_regnum_) <= 31))
1333#define imm9(_instr_) \
1334 ( ((((_instr_) & 0x01000000000LL) ? -1 : 0) << 8) \
1335 | (((_instr_) & 0x00008000000LL) >> 20) \
1336 | (((_instr_) & 0x00000001fc0LL) >> 6))
1337
004d836a
JJ
1338/* Allocate and initialize a frame cache. */
1339
1340static struct ia64_frame_cache *
1341ia64_alloc_frame_cache (void)
1342{
1343 struct ia64_frame_cache *cache;
1344 int i;
1345
1346 cache = FRAME_OBSTACK_ZALLOC (struct ia64_frame_cache);
1347
1348 /* Base address. */
1349 cache->base = 0;
1350 cache->pc = 0;
1351 cache->cfm = 0;
4afcc598 1352 cache->prev_cfm = 0;
004d836a
JJ
1353 cache->sof = 0;
1354 cache->sol = 0;
1355 cache->sor = 0;
1356 cache->bsp = 0;
1357 cache->fp_reg = 0;
1358 cache->frameless = 1;
1359
1360 for (i = 0; i < NUM_IA64_RAW_REGS; i++)
1361 cache->saved_regs[i] = 0;
1362
1363 return cache;
1364}
1365
16461d7d 1366static CORE_ADDR
15c1e57f
JB
1367examine_prologue (CORE_ADDR pc, CORE_ADDR lim_pc,
1368 struct frame_info *this_frame,
1369 struct ia64_frame_cache *cache)
16461d7d
KB
1370{
1371 CORE_ADDR next_pc;
1372 CORE_ADDR last_prologue_pc = pc;
16461d7d
KB
1373 instruction_type it;
1374 long long instr;
16461d7d
KB
1375 int cfm_reg = 0;
1376 int ret_reg = 0;
1377 int fp_reg = 0;
1378 int unat_save_reg = 0;
1379 int pr_save_reg = 0;
1380 int mem_stack_frame_size = 0;
1381 int spill_reg = 0;
1382 CORE_ADDR spill_addr = 0;
0927a22b
KB
1383 char instores[8];
1384 char infpstores[8];
5ea2bd7f 1385 char reg_contents[256];
58ab00f9 1386 int trust_limit;
004d836a
JJ
1387 int frameless = 1;
1388 int i;
1389 CORE_ADDR addr;
e362b510 1390 gdb_byte buf[8];
004d836a 1391 CORE_ADDR bof, sor, sol, sof, cfm, rrb_gr;
0927a22b
KB
1392
1393 memset (instores, 0, sizeof instores);
1394 memset (infpstores, 0, sizeof infpstores);
5ea2bd7f 1395 memset (reg_contents, 0, sizeof reg_contents);
16461d7d 1396
004d836a
JJ
1397 if (cache->after_prologue != 0
1398 && cache->after_prologue <= lim_pc)
1399 return cache->after_prologue;
16461d7d 1400
58ab00f9 1401 lim_pc = refine_prologue_limit (pc, lim_pc, &trust_limit);
16461d7d 1402 next_pc = fetch_instruction (pc, &it, &instr);
5ea2bd7f
JJ
1403
1404 /* We want to check if we have a recognizable function start before we
1405 look ahead for a prologue. */
16461d7d
KB
1406 if (pc < lim_pc && next_pc
1407 && it == M && ((instr & 0x1ee0000003fLL) == 0x02c00000000LL))
1408 {
5ea2bd7f 1409 /* alloc - start of a regular function. */
16461d7d
KB
1410 int sol = (int) ((instr & 0x00007f00000LL) >> 20);
1411 int sof = (int) ((instr & 0x000000fe000LL) >> 13);
16461d7d 1412 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
004d836a
JJ
1413
1414 /* Verify that the current cfm matches what we think is the
1415 function start. If we have somehow jumped within a function,
1416 we do not want to interpret the prologue and calculate the
1777feb0
MS
1417 addresses of various registers such as the return address.
1418 We will instead treat the frame as frameless. */
15c1e57f 1419 if (!this_frame ||
004d836a
JJ
1420 (sof == (cache->cfm & 0x7f) &&
1421 sol == ((cache->cfm >> 7) & 0x7f)))
1422 frameless = 0;
1423
16461d7d
KB
1424 cfm_reg = rN;
1425 last_prologue_pc = next_pc;
1426 pc = next_pc;
1427 }
1428 else
58ab00f9 1429 {
5ea2bd7f
JJ
1430 /* Look for a leaf routine. */
1431 if (pc < lim_pc && next_pc
1432 && (it == I || it == M)
1433 && ((instr & 0x1ee00000000LL) == 0x10800000000LL))
1434 {
1435 /* adds rN = imm14, rM (or mov rN, rM when imm14 is 0) */
1436 int imm = (int) ((((instr & 0x01000000000LL) ? -1 : 0) << 13)
1437 | ((instr & 0x001f8000000LL) >> 20)
1438 | ((instr & 0x000000fe000LL) >> 13));
1439 int rM = (int) ((instr & 0x00007f00000LL) >> 20);
1440 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1441 int qp = (int) (instr & 0x0000000003fLL);
1442 if (qp == 0 && rN == 2 && imm == 0 && rM == 12 && fp_reg == 0)
1443 {
1777feb0 1444 /* mov r2, r12 - beginning of leaf routine. */
5ea2bd7f 1445 fp_reg = rN;
5ea2bd7f
JJ
1446 last_prologue_pc = next_pc;
1447 }
1448 }
1449
1450 /* If we don't recognize a regular function or leaf routine, we are
1451 done. */
1452 if (!fp_reg)
1453 {
1454 pc = lim_pc;
1455 if (trust_limit)
1456 last_prologue_pc = lim_pc;
1457 }
58ab00f9 1458 }
16461d7d
KB
1459
1460 /* Loop, looking for prologue instructions, keeping track of
1777feb0 1461 where preserved registers were spilled. */
16461d7d
KB
1462 while (pc < lim_pc)
1463 {
1464 next_pc = fetch_instruction (pc, &it, &instr);
1465 if (next_pc == 0)
1466 break;
1467
594706e6 1468 if (it == B && ((instr & 0x1e1f800003fLL) != 0x04000000000LL))
0927a22b 1469 {
1777feb0 1470 /* Exit loop upon hitting a non-nop branch instruction. */
102d615a
JJ
1471 if (trust_limit)
1472 lim_pc = pc;
1473 break;
1474 }
1475 else if (((instr & 0x3fLL) != 0LL) &&
1476 (frameless || ret_reg != 0))
1477 {
1478 /* Exit loop upon hitting a predicated instruction if
1479 we already have the return register or if we are frameless. */
5ea2bd7f
JJ
1480 if (trust_limit)
1481 lim_pc = pc;
0927a22b
KB
1482 break;
1483 }
1484 else if (it == I && ((instr & 0x1eff8000000LL) == 0x00188000000LL))
16461d7d
KB
1485 {
1486 /* Move from BR */
1487 int b2 = (int) ((instr & 0x0000000e000LL) >> 13);
1488 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1489 int qp = (int) (instr & 0x0000000003f);
1490
1491 if (qp == 0 && b2 == 0 && rN >= 32 && ret_reg == 0)
1492 {
1493 ret_reg = rN;
1494 last_prologue_pc = next_pc;
1495 }
1496 }
1497 else if ((it == I || it == M)
1498 && ((instr & 0x1ee00000000LL) == 0x10800000000LL))
1499 {
1500 /* adds rN = imm14, rM (or mov rN, rM when imm14 is 0) */
1501 int imm = (int) ((((instr & 0x01000000000LL) ? -1 : 0) << 13)
1502 | ((instr & 0x001f8000000LL) >> 20)
1503 | ((instr & 0x000000fe000LL) >> 13));
1504 int rM = (int) ((instr & 0x00007f00000LL) >> 20);
1505 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1506 int qp = (int) (instr & 0x0000000003fLL);
1507
1508 if (qp == 0 && rN >= 32 && imm == 0 && rM == 12 && fp_reg == 0)
1509 {
1510 /* mov rN, r12 */
1511 fp_reg = rN;
1512 last_prologue_pc = next_pc;
1513 }
1514 else if (qp == 0 && rN == 12 && rM == 12)
1515 {
1516 /* adds r12, -mem_stack_frame_size, r12 */
1517 mem_stack_frame_size -= imm;
1518 last_prologue_pc = next_pc;
1519 }
1520 else if (qp == 0 && rN == 2
1521 && ((rM == fp_reg && fp_reg != 0) || rM == 12))
1522 {
004d836a 1523 CORE_ADDR saved_sp = 0;
16461d7d
KB
1524 /* adds r2, spilloffset, rFramePointer
1525 or
1526 adds r2, spilloffset, r12
1527
1528 Get ready for stf.spill or st8.spill instructions.
1777feb0 1529 The address to start spilling at is loaded into r2.
16461d7d
KB
1530 FIXME: Why r2? That's what gcc currently uses; it
1531 could well be different for other compilers. */
1532
1777feb0 1533 /* Hmm... whether or not this will work will depend on
16461d7d
KB
1534 where the pc is. If it's still early in the prologue
1535 this'll be wrong. FIXME */
15c1e57f 1536 if (this_frame)
004d836a 1537 {
e17a4113 1538 struct gdbarch *gdbarch = get_frame_arch (this_frame);
5c99fcf8
AH
1539 saved_sp = get_frame_register_unsigned (this_frame,
1540 sp_regnum);
004d836a
JJ
1541 }
1542 spill_addr = saved_sp
16461d7d
KB
1543 + (rM == 12 ? 0 : mem_stack_frame_size)
1544 + imm;
1545 spill_reg = rN;
1546 last_prologue_pc = next_pc;
1547 }
b7d038ae 1548 else if (qp == 0 && rM >= 32 && rM < 40 && !instores[rM-32] &&
5ea2bd7f
JJ
1549 rN < 256 && imm == 0)
1550 {
1777feb0 1551 /* mov rN, rM where rM is an input register. */
5ea2bd7f
JJ
1552 reg_contents[rN] = rM;
1553 last_prologue_pc = next_pc;
1554 }
1555 else if (frameless && qp == 0 && rN == fp_reg && imm == 0 &&
1556 rM == 2)
1557 {
1558 /* mov r12, r2 */
1559 last_prologue_pc = next_pc;
1560 break;
1561 }
16461d7d
KB
1562 }
1563 else if (it == M
1564 && ( ((instr & 0x1efc0000000LL) == 0x0eec0000000LL)
1565 || ((instr & 0x1ffc8000000LL) == 0x0cec0000000LL) ))
1566 {
1567 /* stf.spill [rN] = fM, imm9
1568 or
1569 stf.spill [rN] = fM */
1570
1571 int imm = imm9(instr);
1572 int rN = (int) ((instr & 0x00007f00000LL) >> 20);
1573 int fM = (int) ((instr & 0x000000fe000LL) >> 13);
1574 int qp = (int) (instr & 0x0000000003fLL);
1575 if (qp == 0 && rN == spill_reg && spill_addr != 0
1576 && ((2 <= fM && fM <= 5) || (16 <= fM && fM <= 31)))
1577 {
004d836a 1578 cache->saved_regs[IA64_FR0_REGNUM + fM] = spill_addr;
16461d7d 1579
594706e6 1580 if ((instr & 0x1efc0000000LL) == 0x0eec0000000LL)
16461d7d
KB
1581 spill_addr += imm;
1582 else
1777feb0 1583 spill_addr = 0; /* last one; must be done. */
16461d7d
KB
1584 last_prologue_pc = next_pc;
1585 }
1586 }
1587 else if ((it == M && ((instr & 0x1eff8000000LL) == 0x02110000000LL))
1588 || (it == I && ((instr & 0x1eff8000000LL) == 0x00050000000LL)) )
1589 {
1590 /* mov.m rN = arM
1591 or
1592 mov.i rN = arM */
1593
1594 int arM = (int) ((instr & 0x00007f00000LL) >> 20);
1595 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1596 int qp = (int) (instr & 0x0000000003fLL);
1597 if (qp == 0 && isScratch (rN) && arM == 36 /* ar.unat */)
1598 {
1599 /* We have something like "mov.m r3 = ar.unat". Remember the
1777feb0 1600 r3 (or whatever) and watch for a store of this register... */
16461d7d
KB
1601 unat_save_reg = rN;
1602 last_prologue_pc = next_pc;
1603 }
1604 }
1605 else if (it == I && ((instr & 0x1eff8000000LL) == 0x00198000000LL))
1606 {
1607 /* mov rN = pr */
1608 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1609 int qp = (int) (instr & 0x0000000003fLL);
1610 if (qp == 0 && isScratch (rN))
1611 {
1612 pr_save_reg = rN;
1613 last_prologue_pc = next_pc;
1614 }
1615 }
1616 else if (it == M
1617 && ( ((instr & 0x1ffc8000000LL) == 0x08cc0000000LL)
1618 || ((instr & 0x1efc0000000LL) == 0x0acc0000000LL)))
1619 {
1620 /* st8 [rN] = rM
1621 or
1622 st8 [rN] = rM, imm9 */
1623 int rN = (int) ((instr & 0x00007f00000LL) >> 20);
1624 int rM = (int) ((instr & 0x000000fe000LL) >> 13);
1625 int qp = (int) (instr & 0x0000000003fLL);
5ea2bd7f 1626 int indirect = rM < 256 ? reg_contents[rM] : 0;
16461d7d
KB
1627 if (qp == 0 && rN == spill_reg && spill_addr != 0
1628 && (rM == unat_save_reg || rM == pr_save_reg))
1629 {
1630 /* We've found a spill of either the UNAT register or the PR
1631 register. (Well, not exactly; what we've actually found is
1632 a spill of the register that UNAT or PR was moved to).
1777feb0 1633 Record that fact and move on... */
16461d7d
KB
1634 if (rM == unat_save_reg)
1635 {
1777feb0 1636 /* Track UNAT register. */
004d836a 1637 cache->saved_regs[IA64_UNAT_REGNUM] = spill_addr;
16461d7d
KB
1638 unat_save_reg = 0;
1639 }
1640 else
1641 {
1777feb0 1642 /* Track PR register. */
004d836a 1643 cache->saved_regs[IA64_PR_REGNUM] = spill_addr;
16461d7d
KB
1644 pr_save_reg = 0;
1645 }
1646 if ((instr & 0x1efc0000000LL) == 0x0acc0000000LL)
1647 /* st8 [rN] = rM, imm9 */
1648 spill_addr += imm9(instr);
1649 else
1777feb0 1650 spill_addr = 0; /* Must be done spilling. */
16461d7d
KB
1651 last_prologue_pc = next_pc;
1652 }
0927a22b
KB
1653 else if (qp == 0 && 32 <= rM && rM < 40 && !instores[rM-32])
1654 {
1777feb0 1655 /* Allow up to one store of each input register. */
0927a22b
KB
1656 instores[rM-32] = 1;
1657 last_prologue_pc = next_pc;
1658 }
5ea2bd7f
JJ
1659 else if (qp == 0 && 32 <= indirect && indirect < 40 &&
1660 !instores[indirect-32])
1661 {
1662 /* Allow an indirect store of an input register. */
1663 instores[indirect-32] = 1;
1664 last_prologue_pc = next_pc;
1665 }
0927a22b
KB
1666 }
1667 else if (it == M && ((instr & 0x1ff08000000LL) == 0x08c00000000LL))
1668 {
1669 /* One of
1670 st1 [rN] = rM
1671 st2 [rN] = rM
1672 st4 [rN] = rM
1673 st8 [rN] = rM
1674 Note that the st8 case is handled in the clause above.
1675
1777feb0
MS
1676 Advance over stores of input registers. One store per input
1677 register is permitted. */
0927a22b
KB
1678 int rM = (int) ((instr & 0x000000fe000LL) >> 13);
1679 int qp = (int) (instr & 0x0000000003fLL);
5ea2bd7f 1680 int indirect = rM < 256 ? reg_contents[rM] : 0;
0927a22b
KB
1681 if (qp == 0 && 32 <= rM && rM < 40 && !instores[rM-32])
1682 {
1683 instores[rM-32] = 1;
1684 last_prologue_pc = next_pc;
1685 }
5ea2bd7f
JJ
1686 else if (qp == 0 && 32 <= indirect && indirect < 40 &&
1687 !instores[indirect-32])
1688 {
1689 /* Allow an indirect store of an input register. */
1690 instores[indirect-32] = 1;
1691 last_prologue_pc = next_pc;
1692 }
0927a22b
KB
1693 }
1694 else if (it == M && ((instr & 0x1ff88000000LL) == 0x0cc80000000LL))
1695 {
1696 /* Either
1697 stfs [rN] = fM
1698 or
1699 stfd [rN] = fM
1700
1701 Advance over stores of floating point input registers. Again
1777feb0 1702 one store per register is permitted. */
0927a22b
KB
1703 int fM = (int) ((instr & 0x000000fe000LL) >> 13);
1704 int qp = (int) (instr & 0x0000000003fLL);
1705 if (qp == 0 && 8 <= fM && fM < 16 && !infpstores[fM - 8])
1706 {
1707 infpstores[fM-8] = 1;
1708 last_prologue_pc = next_pc;
1709 }
16461d7d
KB
1710 }
1711 else if (it == M
1712 && ( ((instr & 0x1ffc8000000LL) == 0x08ec0000000LL)
1713 || ((instr & 0x1efc0000000LL) == 0x0aec0000000LL)))
1714 {
1715 /* st8.spill [rN] = rM
1716 or
1717 st8.spill [rN] = rM, imm9 */
1718 int rN = (int) ((instr & 0x00007f00000LL) >> 20);
1719 int rM = (int) ((instr & 0x000000fe000LL) >> 13);
1720 int qp = (int) (instr & 0x0000000003fLL);
1721 if (qp == 0 && rN == spill_reg && 4 <= rM && rM <= 7)
1722 {
1723 /* We've found a spill of one of the preserved general purpose
1724 regs. Record the spill address and advance the spill
1777feb0 1725 register if appropriate. */
004d836a 1726 cache->saved_regs[IA64_GR0_REGNUM + rM] = spill_addr;
16461d7d
KB
1727 if ((instr & 0x1efc0000000LL) == 0x0aec0000000LL)
1728 /* st8.spill [rN] = rM, imm9 */
1729 spill_addr += imm9(instr);
1730 else
1777feb0 1731 spill_addr = 0; /* Done spilling. */
16461d7d
KB
1732 last_prologue_pc = next_pc;
1733 }
1734 }
16461d7d
KB
1735
1736 pc = next_pc;
1737 }
1738
15c1e57f
JB
1739 /* If not frameless and we aren't called by skip_prologue, then we need
1740 to calculate registers for the previous frame which will be needed
1741 later. */
16461d7d 1742
15c1e57f 1743 if (!frameless && this_frame)
da50a4b7 1744 {
e17a4113
UW
1745 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1746 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1747
004d836a
JJ
1748 /* Extract the size of the rotating portion of the stack
1749 frame and the register rename base from the current
1777feb0 1750 frame marker. */
004d836a
JJ
1751 cfm = cache->cfm;
1752 sor = cache->sor;
1753 sof = cache->sof;
1754 sol = cache->sol;
1755 rrb_gr = (cfm >> 18) & 0x7f;
1756
1757 /* Find the bof (beginning of frame). */
1758 bof = rse_address_add (cache->bsp, -sof);
1759
1760 for (i = 0, addr = bof;
1761 i < sof;
1762 i++, addr += 8)
1763 {
1764 if (IS_NaT_COLLECTION_ADDR (addr))
1765 {
1766 addr += 8;
1767 }
1768 if (i+32 == cfm_reg)
1769 cache->saved_regs[IA64_CFM_REGNUM] = addr;
1770 if (i+32 == ret_reg)
1771 cache->saved_regs[IA64_VRAP_REGNUM] = addr;
1772 if (i+32 == fp_reg)
1773 cache->saved_regs[IA64_VFP_REGNUM] = addr;
1774 }
16461d7d 1775
1777feb0 1776 /* For the previous argument registers we require the previous bof.
004d836a 1777 If we can't find the previous cfm, then we can do nothing. */
4afcc598 1778 cfm = 0;
004d836a
JJ
1779 if (cache->saved_regs[IA64_CFM_REGNUM] != 0)
1780 {
e17a4113
UW
1781 cfm = read_memory_integer (cache->saved_regs[IA64_CFM_REGNUM],
1782 8, byte_order);
4afcc598
JJ
1783 }
1784 else if (cfm_reg != 0)
1785 {
15c1e57f 1786 get_frame_register (this_frame, cfm_reg, buf);
e17a4113 1787 cfm = extract_unsigned_integer (buf, 8, byte_order);
4afcc598
JJ
1788 }
1789 cache->prev_cfm = cfm;
1790
1791 if (cfm != 0)
1792 {
004d836a
JJ
1793 sor = ((cfm >> 14) & 0xf) * 8;
1794 sof = (cfm & 0x7f);
1795 sol = (cfm >> 7) & 0x7f;
1796 rrb_gr = (cfm >> 18) & 0x7f;
1797
15c1e57f
JB
1798 /* The previous bof only requires subtraction of the sol (size of
1799 locals) due to the overlap between output and input of
1800 subsequent frames. */
004d836a
JJ
1801 bof = rse_address_add (bof, -sol);
1802
1803 for (i = 0, addr = bof;
1804 i < sof;
1805 i++, addr += 8)
1806 {
1807 if (IS_NaT_COLLECTION_ADDR (addr))
1808 {
1809 addr += 8;
1810 }
1811 if (i < sor)
1777feb0
MS
1812 cache->saved_regs[IA64_GR32_REGNUM
1813 + ((i + (sor - rrb_gr)) % sor)]
004d836a
JJ
1814 = addr;
1815 else
1816 cache->saved_regs[IA64_GR32_REGNUM + i] = addr;
1817 }
1818
1819 }
1820 }
1821
5ea2bd7f
JJ
1822 /* Try and trust the lim_pc value whenever possible. */
1823 if (trust_limit && lim_pc >= last_prologue_pc)
004d836a
JJ
1824 last_prologue_pc = lim_pc;
1825
1826 cache->frameless = frameless;
1827 cache->after_prologue = last_prologue_pc;
1828 cache->mem_stack_frame_size = mem_stack_frame_size;
1829 cache->fp_reg = fp_reg;
5ea2bd7f 1830
16461d7d
KB
1831 return last_prologue_pc;
1832}
1833
1834CORE_ADDR
6093d2eb 1835ia64_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
16461d7d 1836{
004d836a
JJ
1837 struct ia64_frame_cache cache;
1838 cache.base = 0;
1839 cache.after_prologue = 0;
1840 cache.cfm = 0;
1841 cache.bsp = 0;
1842
1777feb0
MS
1843 /* Call examine_prologue with - as third argument since we don't
1844 have a next frame pointer to send. */
004d836a 1845 return examine_prologue (pc, pc+1024, 0, &cache);
16461d7d
KB
1846}
1847
004d836a
JJ
1848
1849/* Normal frames. */
1850
1851static struct ia64_frame_cache *
15c1e57f 1852ia64_frame_cache (struct frame_info *this_frame, void **this_cache)
16461d7d 1853{
e17a4113
UW
1854 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1855 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
004d836a 1856 struct ia64_frame_cache *cache;
e362b510 1857 gdb_byte buf[8];
870f88f7 1858 CORE_ADDR cfm;
16461d7d 1859
004d836a 1860 if (*this_cache)
9a3c8263 1861 return (struct ia64_frame_cache *) *this_cache;
16461d7d 1862
004d836a
JJ
1863 cache = ia64_alloc_frame_cache ();
1864 *this_cache = cache;
16461d7d 1865
15c1e57f 1866 get_frame_register (this_frame, sp_regnum, buf);
e17a4113 1867 cache->saved_sp = extract_unsigned_integer (buf, 8, byte_order);
16461d7d 1868
004d836a
JJ
1869 /* We always want the bsp to point to the end of frame.
1870 This way, we can always get the beginning of frame (bof)
1871 by subtracting frame size. */
15c1e57f 1872 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
e17a4113 1873 cache->bsp = extract_unsigned_integer (buf, 8, byte_order);
004d836a 1874
15c1e57f 1875 get_frame_register (this_frame, IA64_PSR_REGNUM, buf);
004d836a 1876
15c1e57f 1877 get_frame_register (this_frame, IA64_CFM_REGNUM, buf);
e17a4113 1878 cfm = extract_unsigned_integer (buf, 8, byte_order);
004d836a
JJ
1879
1880 cache->sof = (cfm & 0x7f);
1881 cache->sol = (cfm >> 7) & 0x7f;
1882 cache->sor = ((cfm >> 14) & 0xf) * 8;
1883
1884 cache->cfm = cfm;
1885
15c1e57f 1886 cache->pc = get_frame_func (this_frame);
004d836a
JJ
1887
1888 if (cache->pc != 0)
15c1e57f 1889 examine_prologue (cache->pc, get_frame_pc (this_frame), this_frame, cache);
004d836a
JJ
1890
1891 cache->base = cache->saved_sp + cache->mem_stack_frame_size;
1892
1893 return cache;
16461d7d
KB
1894}
1895
a78f21af 1896static void
15c1e57f 1897ia64_frame_this_id (struct frame_info *this_frame, void **this_cache,
004d836a 1898 struct frame_id *this_id)
16461d7d 1899{
5af949e3 1900 struct gdbarch *gdbarch = get_frame_arch (this_frame);
004d836a 1901 struct ia64_frame_cache *cache =
15c1e57f 1902 ia64_frame_cache (this_frame, this_cache);
16461d7d 1903
c5a27d9c 1904 /* If outermost frame, mark with null frame id. */
005ca36a 1905 if (cache->base != 0)
c5a27d9c 1906 (*this_id) = frame_id_build_special (cache->base, cache->pc, cache->bsp);
4afcc598
JJ
1907 if (gdbarch_debug >= 1)
1908 fprintf_unfiltered (gdb_stdlog,
1777feb0
MS
1909 "regular frame id: code %s, stack %s, "
1910 "special %s, this_frame %s\n",
5af949e3
UW
1911 paddress (gdbarch, this_id->code_addr),
1912 paddress (gdbarch, this_id->stack_addr),
1913 paddress (gdbarch, cache->bsp),
dfc3cd0e 1914 host_address_to_string (this_frame));
004d836a 1915}
244bc108 1916
15c1e57f
JB
1917static struct value *
1918ia64_frame_prev_register (struct frame_info *this_frame, void **this_cache,
1919 int regnum)
004d836a 1920{
15c1e57f 1921 struct gdbarch *gdbarch = get_frame_arch (this_frame);
e17a4113 1922 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
15c1e57f 1923 struct ia64_frame_cache *cache = ia64_frame_cache (this_frame, this_cache);
e362b510 1924 gdb_byte buf[8];
004d836a
JJ
1925
1926 gdb_assert (regnum >= 0);
244bc108 1927
004d836a 1928 if (!target_has_registers)
8a3fe4f8 1929 error (_("No registers."));
244bc108 1930
088568da 1931 if (regnum == gdbarch_sp_regnum (gdbarch))
15c1e57f
JB
1932 return frame_unwind_got_constant (this_frame, regnum, cache->base);
1933
16461d7d
KB
1934 else if (regnum == IA64_BSP_REGNUM)
1935 {
15c1e57f
JB
1936 struct value *val;
1937 CORE_ADDR prev_cfm, bsp, prev_bsp;
1938
1939 /* We want to calculate the previous bsp as the end of the previous
1940 register stack frame. This corresponds to what the hardware bsp
1941 register will be if we pop the frame back which is why we might
1942 have been called. We know the beginning of the current frame is
1943 cache->bsp - cache->sof. This value in the previous frame points
1944 to the start of the output registers. We can calculate the end of
1945 that frame by adding the size of output:
1946 (sof (size of frame) - sol (size of locals)). */
1947 val = ia64_frame_prev_register (this_frame, this_cache, IA64_CFM_REGNUM);
e17a4113
UW
1948 prev_cfm = extract_unsigned_integer (value_contents_all (val),
1949 8, byte_order);
004d836a 1950 bsp = rse_address_add (cache->bsp, -(cache->sof));
15c1e57f
JB
1951 prev_bsp =
1952 rse_address_add (bsp, (prev_cfm & 0x7f) - ((prev_cfm >> 7) & 0x7f));
004d836a 1953
15c1e57f 1954 return frame_unwind_got_constant (this_frame, regnum, prev_bsp);
004d836a 1955 }
15c1e57f 1956
004d836a
JJ
1957 else if (regnum == IA64_CFM_REGNUM)
1958 {
4afcc598
JJ
1959 CORE_ADDR addr = cache->saved_regs[IA64_CFM_REGNUM];
1960
1961 if (addr != 0)
15c1e57f
JB
1962 return frame_unwind_got_memory (this_frame, regnum, addr);
1963
1964 if (cache->prev_cfm)
1965 return frame_unwind_got_constant (this_frame, regnum, cache->prev_cfm);
1966
1967 if (cache->frameless)
1968 return frame_unwind_got_register (this_frame, IA64_PFS_REGNUM,
1969 IA64_PFS_REGNUM);
1970 return frame_unwind_got_register (this_frame, regnum, 0);
16461d7d 1971 }
15c1e57f 1972
16461d7d
KB
1973 else if (regnum == IA64_VFP_REGNUM)
1974 {
1975 /* If the function in question uses an automatic register (r32-r127)
1976 for the frame pointer, it'll be found by ia64_find_saved_register()
1977 above. If the function lacks one of these frame pointers, we can
004d836a 1978 still provide a value since we know the size of the frame. */
15c1e57f 1979 return frame_unwind_got_constant (this_frame, regnum, cache->base);
16461d7d 1980 }
15c1e57f 1981
004d836a 1982 else if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
16461d7d 1983 {
15c1e57f
JB
1984 struct value *pr_val;
1985 ULONGEST prN;
1986
1987 pr_val = ia64_frame_prev_register (this_frame, this_cache,
1988 IA64_PR_REGNUM);
004d836a 1989 if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
3a854e23
KB
1990 {
1991 /* Fetch predicate register rename base from current frame
004d836a
JJ
1992 marker for this frame. */
1993 int rrb_pr = (cache->cfm >> 32) & 0x3f;
3a854e23 1994
004d836a 1995 /* Adjust the register number to account for register rotation. */
15c1e57f 1996 regnum = VP16_REGNUM + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
3a854e23 1997 }
15c1e57f
JB
1998 prN = extract_bit_field (value_contents_all (pr_val),
1999 regnum - VP0_REGNUM, 1);
2000 return frame_unwind_got_constant (this_frame, regnum, prN);
16461d7d 2001 }
15c1e57f 2002
16461d7d
KB
2003 else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT31_REGNUM)
2004 {
15c1e57f
JB
2005 struct value *unat_val;
2006 ULONGEST unatN;
2007 unat_val = ia64_frame_prev_register (this_frame, this_cache,
2008 IA64_UNAT_REGNUM);
2009 unatN = extract_bit_field (value_contents_all (unat_val),
2010 regnum - IA64_NAT0_REGNUM, 1);
2011 return frame_unwind_got_constant (this_frame, regnum, unatN);
16461d7d 2012 }
15c1e57f 2013
16461d7d
KB
2014 else if (IA64_NAT32_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
2015 {
2016 int natval = 0;
2017 /* Find address of general register corresponding to nat bit we're
004d836a
JJ
2018 interested in. */
2019 CORE_ADDR gr_addr;
244bc108 2020
15c1e57f
JB
2021 gr_addr = cache->saved_regs[regnum - IA64_NAT0_REGNUM + IA64_GR0_REGNUM];
2022
004d836a 2023 if (gr_addr != 0)
244bc108 2024 {
004d836a 2025 /* Compute address of nat collection bits. */
16461d7d 2026 CORE_ADDR nat_addr = gr_addr | 0x1f8;
004d836a 2027 CORE_ADDR bsp;
16461d7d
KB
2028 CORE_ADDR nat_collection;
2029 int nat_bit;
15c1e57f 2030
16461d7d
KB
2031 /* If our nat collection address is bigger than bsp, we have to get
2032 the nat collection from rnat. Otherwise, we fetch the nat
004d836a 2033 collection from the computed address. */
15c1e57f 2034 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
e17a4113 2035 bsp = extract_unsigned_integer (buf, 8, byte_order);
16461d7d 2036 if (nat_addr >= bsp)
004d836a 2037 {
15c1e57f 2038 get_frame_register (this_frame, IA64_RNAT_REGNUM, buf);
e17a4113 2039 nat_collection = extract_unsigned_integer (buf, 8, byte_order);
004d836a 2040 }
16461d7d 2041 else
e17a4113 2042 nat_collection = read_memory_integer (nat_addr, 8, byte_order);
16461d7d
KB
2043 nat_bit = (gr_addr >> 3) & 0x3f;
2044 natval = (nat_collection >> nat_bit) & 1;
2045 }
004d836a 2046
15c1e57f 2047 return frame_unwind_got_constant (this_frame, regnum, natval);
244bc108 2048 }
15c1e57f 2049
244bc108
KB
2050 else if (regnum == IA64_IP_REGNUM)
2051 {
004d836a 2052 CORE_ADDR pc = 0;
4afcc598 2053 CORE_ADDR addr = cache->saved_regs[IA64_VRAP_REGNUM];
004d836a 2054
4afcc598 2055 if (addr != 0)
15c1e57f
JB
2056 {
2057 read_memory (addr, buf, register_size (gdbarch, IA64_IP_REGNUM));
e17a4113 2058 pc = extract_unsigned_integer (buf, 8, byte_order);
15c1e57f 2059 }
4afcc598 2060 else if (cache->frameless)
004d836a 2061 {
15c1e57f 2062 get_frame_register (this_frame, IA64_BR0_REGNUM, buf);
e17a4113 2063 pc = extract_unsigned_integer (buf, 8, byte_order);
244bc108 2064 }
004d836a 2065 pc &= ~0xf;
15c1e57f 2066 return frame_unwind_got_constant (this_frame, regnum, pc);
244bc108 2067 }
15c1e57f 2068
004d836a 2069 else if (regnum == IA64_PSR_REGNUM)
244bc108 2070 {
15c1e57f
JB
2071 /* We don't know how to get the complete previous PSR, but we need it
2072 for the slot information when we unwind the pc (pc is formed of IP
2073 register plus slot information from PSR). To get the previous
2074 slot information, we mask it off the return address. */
004d836a 2075 ULONGEST slot_num = 0;
15c1e57f 2076 CORE_ADDR pc = 0;
004d836a 2077 CORE_ADDR psr = 0;
4afcc598 2078 CORE_ADDR addr = cache->saved_regs[IA64_VRAP_REGNUM];
004d836a 2079
15c1e57f 2080 get_frame_register (this_frame, IA64_PSR_REGNUM, buf);
e17a4113 2081 psr = extract_unsigned_integer (buf, 8, byte_order);
004d836a 2082
4afcc598 2083 if (addr != 0)
244bc108 2084 {
088568da 2085 read_memory (addr, buf, register_size (gdbarch, IA64_IP_REGNUM));
e17a4113 2086 pc = extract_unsigned_integer (buf, 8, byte_order);
244bc108 2087 }
4afcc598 2088 else if (cache->frameless)
004d836a 2089 {
15c1e57f 2090 get_frame_register (this_frame, IA64_BR0_REGNUM, buf);
e17a4113 2091 pc = extract_unsigned_integer (buf, 8, byte_order);
004d836a
JJ
2092 }
2093 psr &= ~(3LL << 41);
2094 slot_num = pc & 0x3LL;
2095 psr |= (CORE_ADDR)slot_num << 41;
15c1e57f 2096 return frame_unwind_got_constant (this_frame, regnum, psr);
004d836a 2097 }
15c1e57f 2098
4afcc598
JJ
2099 else if (regnum == IA64_BR0_REGNUM)
2100 {
4afcc598 2101 CORE_ADDR addr = cache->saved_regs[IA64_BR0_REGNUM];
15c1e57f 2102
4afcc598 2103 if (addr != 0)
15c1e57f
JB
2104 return frame_unwind_got_memory (this_frame, regnum, addr);
2105
2106 return frame_unwind_got_constant (this_frame, regnum, 0);
4afcc598 2107 }
15c1e57f
JB
2108
2109 else if ((regnum >= IA64_GR32_REGNUM && regnum <= IA64_GR127_REGNUM)
2110 || (regnum >= V32_REGNUM && regnum <= V127_REGNUM))
004d836a
JJ
2111 {
2112 CORE_ADDR addr = 0;
15c1e57f 2113
004d836a
JJ
2114 if (regnum >= V32_REGNUM)
2115 regnum = IA64_GR32_REGNUM + (regnum - V32_REGNUM);
2116 addr = cache->saved_regs[regnum];
244bc108 2117 if (addr != 0)
15c1e57f
JB
2118 return frame_unwind_got_memory (this_frame, regnum, addr);
2119
2120 if (cache->frameless)
244bc108 2121 {
15c1e57f
JB
2122 struct value *reg_val;
2123 CORE_ADDR prev_cfm, prev_bsp, prev_bof;
2124
2125 /* FIXME: brobecker/2008-05-01: Doesn't this seem redundant
2126 with the same code above? */
004d836a
JJ
2127 if (regnum >= V32_REGNUM)
2128 regnum = IA64_GR32_REGNUM + (regnum - V32_REGNUM);
15c1e57f
JB
2129 reg_val = ia64_frame_prev_register (this_frame, this_cache,
2130 IA64_CFM_REGNUM);
2131 prev_cfm = extract_unsigned_integer (value_contents_all (reg_val),
e17a4113 2132 8, byte_order);
15c1e57f
JB
2133 reg_val = ia64_frame_prev_register (this_frame, this_cache,
2134 IA64_BSP_REGNUM);
2135 prev_bsp = extract_unsigned_integer (value_contents_all (reg_val),
e17a4113 2136 8, byte_order);
004d836a
JJ
2137 prev_bof = rse_address_add (prev_bsp, -(prev_cfm & 0x7f));
2138
2139 addr = rse_address_add (prev_bof, (regnum - IA64_GR32_REGNUM));
15c1e57f 2140 return frame_unwind_got_memory (this_frame, regnum, addr);
244bc108 2141 }
15c1e57f
JB
2142
2143 return frame_unwind_got_constant (this_frame, regnum, 0);
16461d7d 2144 }
15c1e57f
JB
2145
2146 else /* All other registers. */
16461d7d 2147 {
004d836a 2148 CORE_ADDR addr = 0;
15c1e57f 2149
3a854e23
KB
2150 if (IA64_FR32_REGNUM <= regnum && regnum <= IA64_FR127_REGNUM)
2151 {
2152 /* Fetch floating point register rename base from current
004d836a
JJ
2153 frame marker for this frame. */
2154 int rrb_fr = (cache->cfm >> 25) & 0x7f;
3a854e23
KB
2155
2156 /* Adjust the floating point register number to account for
004d836a 2157 register rotation. */
3a854e23
KB
2158 regnum = IA64_FR32_REGNUM
2159 + ((regnum - IA64_FR32_REGNUM) + rrb_fr) % 96;
2160 }
2161
004d836a
JJ
2162 /* If we have stored a memory address, access the register. */
2163 addr = cache->saved_regs[regnum];
2164 if (addr != 0)
15c1e57f 2165 return frame_unwind_got_memory (this_frame, regnum, addr);
004d836a
JJ
2166 /* Otherwise, punt and get the current value of the register. */
2167 else
15c1e57f 2168 return frame_unwind_got_register (this_frame, regnum, regnum);
16461d7d 2169 }
16461d7d 2170}
004d836a
JJ
2171
2172static const struct frame_unwind ia64_frame_unwind =
2173{
2174 NORMAL_FRAME,
8fbca658 2175 default_frame_unwind_stop_reason,
004d836a 2176 &ia64_frame_this_id,
15c1e57f
JB
2177 &ia64_frame_prev_register,
2178 NULL,
2179 default_frame_sniffer
004d836a
JJ
2180};
2181
004d836a
JJ
2182/* Signal trampolines. */
2183
2184static void
15c1e57f 2185ia64_sigtramp_frame_init_saved_regs (struct frame_info *this_frame,
2685572f 2186 struct ia64_frame_cache *cache)
004d836a 2187{
e17a4113
UW
2188 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2189 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2685572f
UW
2190
2191 if (tdep->sigcontext_register_address)
004d836a
JJ
2192 {
2193 int regno;
2194
1777feb0
MS
2195 cache->saved_regs[IA64_VRAP_REGNUM]
2196 = tdep->sigcontext_register_address (gdbarch, cache->base,
2197 IA64_IP_REGNUM);
2198 cache->saved_regs[IA64_CFM_REGNUM]
2199 = tdep->sigcontext_register_address (gdbarch, cache->base,
2200 IA64_CFM_REGNUM);
2201 cache->saved_regs[IA64_PSR_REGNUM]
2202 = tdep->sigcontext_register_address (gdbarch, cache->base,
2203 IA64_PSR_REGNUM);
2204 cache->saved_regs[IA64_BSP_REGNUM]
2205 = tdep->sigcontext_register_address (gdbarch, cache->base,
2206 IA64_BSP_REGNUM);
2207 cache->saved_regs[IA64_RNAT_REGNUM]
2208 = tdep->sigcontext_register_address (gdbarch, cache->base,
2209 IA64_RNAT_REGNUM);
2210 cache->saved_regs[IA64_CCV_REGNUM]
2211 = tdep->sigcontext_register_address (gdbarch, cache->base,
2212 IA64_CCV_REGNUM);
2213 cache->saved_regs[IA64_UNAT_REGNUM]
2214 = tdep->sigcontext_register_address (gdbarch, cache->base,
2215 IA64_UNAT_REGNUM);
2216 cache->saved_regs[IA64_FPSR_REGNUM]
2217 = tdep->sigcontext_register_address (gdbarch, cache->base,
2218 IA64_FPSR_REGNUM);
2219 cache->saved_regs[IA64_PFS_REGNUM]
2220 = tdep->sigcontext_register_address (gdbarch, cache->base,
2221 IA64_PFS_REGNUM);
2222 cache->saved_regs[IA64_LC_REGNUM]
2223 = tdep->sigcontext_register_address (gdbarch, cache->base,
2224 IA64_LC_REGNUM);
2225
004d836a 2226 for (regno = IA64_GR1_REGNUM; regno <= IA64_GR31_REGNUM; regno++)
4afcc598 2227 cache->saved_regs[regno] =
e17a4113 2228 tdep->sigcontext_register_address (gdbarch, cache->base, regno);
004d836a
JJ
2229 for (regno = IA64_BR0_REGNUM; regno <= IA64_BR7_REGNUM; regno++)
2230 cache->saved_regs[regno] =
e17a4113 2231 tdep->sigcontext_register_address (gdbarch, cache->base, regno);
932644f0 2232 for (regno = IA64_FR2_REGNUM; regno <= IA64_FR31_REGNUM; regno++)
004d836a 2233 cache->saved_regs[regno] =
e17a4113 2234 tdep->sigcontext_register_address (gdbarch, cache->base, regno);
004d836a
JJ
2235 }
2236}
2237
2238static struct ia64_frame_cache *
15c1e57f 2239ia64_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
004d836a 2240{
e17a4113
UW
2241 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2242 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
004d836a 2243 struct ia64_frame_cache *cache;
e362b510 2244 gdb_byte buf[8];
004d836a
JJ
2245
2246 if (*this_cache)
9a3c8263 2247 return (struct ia64_frame_cache *) *this_cache;
004d836a
JJ
2248
2249 cache = ia64_alloc_frame_cache ();
2250
15c1e57f 2251 get_frame_register (this_frame, sp_regnum, buf);
4afcc598
JJ
2252 /* Note that frame size is hard-coded below. We cannot calculate it
2253 via prologue examination. */
e17a4113 2254 cache->base = extract_unsigned_integer (buf, 8, byte_order) + 16;
4afcc598 2255
15c1e57f 2256 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
e17a4113 2257 cache->bsp = extract_unsigned_integer (buf, 8, byte_order);
4afcc598 2258
15c1e57f 2259 get_frame_register (this_frame, IA64_CFM_REGNUM, buf);
e17a4113 2260 cache->cfm = extract_unsigned_integer (buf, 8, byte_order);
4afcc598 2261 cache->sof = cache->cfm & 0x7f;
004d836a 2262
15c1e57f 2263 ia64_sigtramp_frame_init_saved_regs (this_frame, cache);
004d836a
JJ
2264
2265 *this_cache = cache;
2266 return cache;
2267}
2268
2269static void
15c1e57f
JB
2270ia64_sigtramp_frame_this_id (struct frame_info *this_frame,
2271 void **this_cache, struct frame_id *this_id)
004d836a 2272{
5af949e3 2273 struct gdbarch *gdbarch = get_frame_arch (this_frame);
004d836a 2274 struct ia64_frame_cache *cache =
15c1e57f 2275 ia64_sigtramp_frame_cache (this_frame, this_cache);
004d836a 2276
15c1e57f
JB
2277 (*this_id) = frame_id_build_special (cache->base,
2278 get_frame_pc (this_frame),
2279 cache->bsp);
4afcc598
JJ
2280 if (gdbarch_debug >= 1)
2281 fprintf_unfiltered (gdb_stdlog,
1777feb0
MS
2282 "sigtramp frame id: code %s, stack %s, "
2283 "special %s, this_frame %s\n",
5af949e3
UW
2284 paddress (gdbarch, this_id->code_addr),
2285 paddress (gdbarch, this_id->stack_addr),
2286 paddress (gdbarch, cache->bsp),
dfc3cd0e 2287 host_address_to_string (this_frame));
004d836a
JJ
2288}
2289
15c1e57f
JB
2290static struct value *
2291ia64_sigtramp_frame_prev_register (struct frame_info *this_frame,
2292 void **this_cache, int regnum)
004d836a 2293{
4afcc598 2294 struct ia64_frame_cache *cache =
15c1e57f 2295 ia64_sigtramp_frame_cache (this_frame, this_cache);
4afcc598
JJ
2296
2297 gdb_assert (regnum >= 0);
2298
2299 if (!target_has_registers)
8a3fe4f8 2300 error (_("No registers."));
4afcc598 2301
4afcc598
JJ
2302 if (regnum == IA64_IP_REGNUM)
2303 {
2304 CORE_ADDR pc = 0;
2305 CORE_ADDR addr = cache->saved_regs[IA64_VRAP_REGNUM];
2306
2307 if (addr != 0)
2308 {
5c99fcf8
AH
2309 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2310 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2311 pc = read_memory_unsigned_integer (addr, 8, byte_order);
4afcc598
JJ
2312 }
2313 pc &= ~0xf;
15c1e57f 2314 return frame_unwind_got_constant (this_frame, regnum, pc);
4afcc598 2315 }
15c1e57f
JB
2316
2317 else if ((regnum >= IA64_GR32_REGNUM && regnum <= IA64_GR127_REGNUM)
2318 || (regnum >= V32_REGNUM && regnum <= V127_REGNUM))
4afcc598
JJ
2319 {
2320 CORE_ADDR addr = 0;
15c1e57f 2321
4afcc598
JJ
2322 if (regnum >= V32_REGNUM)
2323 regnum = IA64_GR32_REGNUM + (regnum - V32_REGNUM);
2324 addr = cache->saved_regs[regnum];
2325 if (addr != 0)
15c1e57f
JB
2326 return frame_unwind_got_memory (this_frame, regnum, addr);
2327
2328 return frame_unwind_got_constant (this_frame, regnum, 0);
4afcc598 2329 }
15c1e57f
JB
2330
2331 else /* All other registers not listed above. */
4afcc598 2332 {
4afcc598 2333 CORE_ADDR addr = cache->saved_regs[regnum];
15c1e57f 2334
4afcc598 2335 if (addr != 0)
15c1e57f 2336 return frame_unwind_got_memory (this_frame, regnum, addr);
004d836a 2337
15c1e57f
JB
2338 return frame_unwind_got_constant (this_frame, regnum, 0);
2339 }
004d836a
JJ
2340}
2341
15c1e57f
JB
2342static int
2343ia64_sigtramp_frame_sniffer (const struct frame_unwind *self,
2344 struct frame_info *this_frame,
2345 void **this_cache)
004d836a 2346{
15c1e57f 2347 struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
74174d2e
UW
2348 if (tdep->pc_in_sigtramp)
2349 {
15c1e57f 2350 CORE_ADDR pc = get_frame_pc (this_frame);
004d836a 2351
74174d2e 2352 if (tdep->pc_in_sigtramp (pc))
15c1e57f 2353 return 1;
74174d2e 2354 }
004d836a 2355
15c1e57f 2356 return 0;
004d836a 2357}
15c1e57f
JB
2358
2359static const struct frame_unwind ia64_sigtramp_frame_unwind =
2360{
2361 SIGTRAMP_FRAME,
8fbca658 2362 default_frame_unwind_stop_reason,
15c1e57f
JB
2363 ia64_sigtramp_frame_this_id,
2364 ia64_sigtramp_frame_prev_register,
2365 NULL,
2366 ia64_sigtramp_frame_sniffer
2367};
2368
004d836a
JJ
2369\f
2370
2371static CORE_ADDR
15c1e57f 2372ia64_frame_base_address (struct frame_info *this_frame, void **this_cache)
004d836a 2373{
15c1e57f 2374 struct ia64_frame_cache *cache = ia64_frame_cache (this_frame, this_cache);
004d836a
JJ
2375
2376 return cache->base;
2377}
2378
2379static const struct frame_base ia64_frame_base =
2380{
2381 &ia64_frame_unwind,
2382 ia64_frame_base_address,
2383 ia64_frame_base_address,
2384 ia64_frame_base_address
2385};
16461d7d 2386
968d1cb4
JJ
2387#ifdef HAVE_LIBUNWIND_IA64_H
2388
2389struct ia64_unwind_table_entry
2390 {
2391 unw_word_t start_offset;
2392 unw_word_t end_offset;
2393 unw_word_t info_offset;
2394 };
2395
2396static __inline__ uint64_t
2397ia64_rse_slot_num (uint64_t addr)
2398{
2399 return (addr >> 3) & 0x3f;
2400}
2401
2402/* Skip over a designated number of registers in the backing
2403 store, remembering every 64th position is for NAT. */
2404static __inline__ uint64_t
2405ia64_rse_skip_regs (uint64_t addr, long num_regs)
2406{
2407 long delta = ia64_rse_slot_num(addr) + num_regs;
2408
2409 if (num_regs < 0)
2410 delta -= 0x3e;
2411 return addr + ((num_regs + delta/0x3f) << 3);
2412}
2413
05e7c244
JK
2414/* Gdb ia64-libunwind-tdep callback function to convert from an ia64 gdb
2415 register number to a libunwind register number. */
968d1cb4
JJ
2416static int
2417ia64_gdb2uw_regnum (int regnum)
2418{
2419 if (regnum == sp_regnum)
2420 return UNW_IA64_SP;
2421 else if (regnum == IA64_BSP_REGNUM)
2422 return UNW_IA64_BSP;
2423 else if ((unsigned) (regnum - IA64_GR0_REGNUM) < 128)
2424 return UNW_IA64_GR + (regnum - IA64_GR0_REGNUM);
2425 else if ((unsigned) (regnum - V32_REGNUM) < 95)
2426 return UNW_IA64_GR + 32 + (regnum - V32_REGNUM);
2427 else if ((unsigned) (regnum - IA64_FR0_REGNUM) < 128)
2428 return UNW_IA64_FR + (regnum - IA64_FR0_REGNUM);
2429 else if ((unsigned) (regnum - IA64_PR0_REGNUM) < 64)
2430 return -1;
2431 else if ((unsigned) (regnum - IA64_BR0_REGNUM) < 8)
2432 return UNW_IA64_BR + (regnum - IA64_BR0_REGNUM);
2433 else if (regnum == IA64_PR_REGNUM)
2434 return UNW_IA64_PR;
2435 else if (regnum == IA64_IP_REGNUM)
2436 return UNW_REG_IP;
2437 else if (regnum == IA64_CFM_REGNUM)
2438 return UNW_IA64_CFM;
2439 else if ((unsigned) (regnum - IA64_AR0_REGNUM) < 128)
2440 return UNW_IA64_AR + (regnum - IA64_AR0_REGNUM);
2441 else if ((unsigned) (regnum - IA64_NAT0_REGNUM) < 128)
2442 return UNW_IA64_NAT + (regnum - IA64_NAT0_REGNUM);
2443 else
2444 return -1;
2445}
2446
05e7c244
JK
2447/* Gdb ia64-libunwind-tdep callback function to convert from a libunwind
2448 register number to a ia64 gdb register number. */
968d1cb4
JJ
2449static int
2450ia64_uw2gdb_regnum (int uw_regnum)
2451{
2452 if (uw_regnum == UNW_IA64_SP)
2453 return sp_regnum;
2454 else if (uw_regnum == UNW_IA64_BSP)
2455 return IA64_BSP_REGNUM;
2456 else if ((unsigned) (uw_regnum - UNW_IA64_GR) < 32)
2457 return IA64_GR0_REGNUM + (uw_regnum - UNW_IA64_GR);
2458 else if ((unsigned) (uw_regnum - UNW_IA64_GR) < 128)
2459 return V32_REGNUM + (uw_regnum - (IA64_GR0_REGNUM + 32));
2460 else if ((unsigned) (uw_regnum - UNW_IA64_FR) < 128)
2461 return IA64_FR0_REGNUM + (uw_regnum - UNW_IA64_FR);
2462 else if ((unsigned) (uw_regnum - UNW_IA64_BR) < 8)
2463 return IA64_BR0_REGNUM + (uw_regnum - UNW_IA64_BR);
2464 else if (uw_regnum == UNW_IA64_PR)
2465 return IA64_PR_REGNUM;
2466 else if (uw_regnum == UNW_REG_IP)
2467 return IA64_IP_REGNUM;
2468 else if (uw_regnum == UNW_IA64_CFM)
2469 return IA64_CFM_REGNUM;
2470 else if ((unsigned) (uw_regnum - UNW_IA64_AR) < 128)
2471 return IA64_AR0_REGNUM + (uw_regnum - UNW_IA64_AR);
2472 else if ((unsigned) (uw_regnum - UNW_IA64_NAT) < 128)
2473 return IA64_NAT0_REGNUM + (uw_regnum - UNW_IA64_NAT);
2474 else
2475 return -1;
2476}
2477
05e7c244
JK
2478/* Gdb ia64-libunwind-tdep callback function to reveal if register is
2479 a float register or not. */
968d1cb4
JJ
2480static int
2481ia64_is_fpreg (int uw_regnum)
2482{
2483 return unw_is_fpreg (uw_regnum);
2484}
77ca787b 2485
968d1cb4
JJ
2486/* Libunwind callback accessor function for general registers. */
2487static int
2488ia64_access_reg (unw_addr_space_t as, unw_regnum_t uw_regnum, unw_word_t *val,
2489 int write, void *arg)
2490{
2491 int regnum = ia64_uw2gdb_regnum (uw_regnum);
5c99fcf8 2492 unw_word_t bsp, sof, cfm, psr, ip;
bfb0d950 2493 struct frame_info *this_frame = (struct frame_info *) arg;
5af949e3 2494 struct gdbarch *gdbarch = get_frame_arch (this_frame);
e17a4113 2495 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
968d1cb4 2496 long new_sof, old_sof;
968d1cb4 2497
45ecac4b
UW
2498 /* We never call any libunwind routines that need to write registers. */
2499 gdb_assert (!write);
968d1cb4 2500
45ecac4b 2501 switch (uw_regnum)
968d1cb4 2502 {
45ecac4b
UW
2503 case UNW_REG_IP:
2504 /* Libunwind expects to see the pc value which means the slot number
2505 from the psr must be merged with the ip word address. */
5c99fcf8
AH
2506 ip = get_frame_register_unsigned (this_frame, IA64_IP_REGNUM);
2507 psr = get_frame_register_unsigned (this_frame, IA64_PSR_REGNUM);
45ecac4b
UW
2508 *val = ip | ((psr >> 41) & 0x3);
2509 break;
2510
2511 case UNW_IA64_AR_BSP:
1777feb0
MS
2512 /* Libunwind expects to see the beginning of the current
2513 register frame so we must account for the fact that
2514 ptrace() will return a value for bsp that points *after*
2515 the current register frame. */
5c99fcf8
AH
2516 bsp = get_frame_register_unsigned (this_frame, IA64_BSP_REGNUM);
2517 cfm = get_frame_register_unsigned (this_frame, IA64_CFM_REGNUM);
77ca787b 2518 sof = gdbarch_tdep (gdbarch)->size_of_register_frame (this_frame, cfm);
45ecac4b
UW
2519 *val = ia64_rse_skip_regs (bsp, -sof);
2520 break;
968d1cb4 2521
45ecac4b
UW
2522 case UNW_IA64_AR_BSPSTORE:
2523 /* Libunwind wants bspstore to be after the current register frame.
2524 This is what ptrace() and gdb treats as the regular bsp value. */
5c99fcf8 2525 *val = get_frame_register_unsigned (this_frame, IA64_BSP_REGNUM);
45ecac4b
UW
2526 break;
2527
2528 default:
2529 /* For all other registers, just unwind the value directly. */
5c99fcf8 2530 *val = get_frame_register_unsigned (this_frame, regnum);
45ecac4b 2531 break;
968d1cb4 2532 }
45ecac4b
UW
2533
2534 if (gdbarch_debug >= 1)
2535 fprintf_unfiltered (gdb_stdlog,
5af949e3 2536 " access_reg: from cache: %4s=%s\n",
45ecac4b
UW
2537 (((unsigned) regnum <= IA64_NAT127_REGNUM)
2538 ? ia64_register_names[regnum] : "r??"),
2edfe795 2539 paddress (gdbarch, *val));
968d1cb4
JJ
2540 return 0;
2541}
2542
2543/* Libunwind callback accessor function for floating-point registers. */
2544static int
1777feb0
MS
2545ia64_access_fpreg (unw_addr_space_t as, unw_regnum_t uw_regnum,
2546 unw_fpreg_t *val, int write, void *arg)
968d1cb4
JJ
2547{
2548 int regnum = ia64_uw2gdb_regnum (uw_regnum);
bfb0d950 2549 struct frame_info *this_frame = (struct frame_info *) arg;
968d1cb4 2550
45ecac4b
UW
2551 /* We never call any libunwind routines that need to write registers. */
2552 gdb_assert (!write);
2553
2b692d32 2554 get_frame_register (this_frame, regnum, (gdb_byte *) val);
45ecac4b 2555
968d1cb4
JJ
2556 return 0;
2557}
2558
c5a27d9c
JJ
2559/* Libunwind callback accessor function for top-level rse registers. */
2560static int
1777feb0
MS
2561ia64_access_rse_reg (unw_addr_space_t as, unw_regnum_t uw_regnum,
2562 unw_word_t *val, int write, void *arg)
c5a27d9c
JJ
2563{
2564 int regnum = ia64_uw2gdb_regnum (uw_regnum);
5c99fcf8 2565 unw_word_t bsp, sof, cfm, psr, ip;
bfb0d950 2566 struct regcache *regcache = (struct regcache *) arg;
5af949e3 2567 struct gdbarch *gdbarch = get_regcache_arch (regcache);
e17a4113 2568 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
c5a27d9c
JJ
2569 long new_sof, old_sof;
2570
45ecac4b
UW
2571 /* We never call any libunwind routines that need to write registers. */
2572 gdb_assert (!write);
c5a27d9c 2573
45ecac4b 2574 switch (uw_regnum)
c5a27d9c 2575 {
45ecac4b
UW
2576 case UNW_REG_IP:
2577 /* Libunwind expects to see the pc value which means the slot number
2578 from the psr must be merged with the ip word address. */
5c99fcf8
AH
2579 regcache_cooked_read_unsigned (regcache, IA64_IP_REGNUM, &ip);
2580 regcache_cooked_read_unsigned (regcache, IA64_PSR_REGNUM, &psr);
45ecac4b
UW
2581 *val = ip | ((psr >> 41) & 0x3);
2582 break;
c5a27d9c 2583
45ecac4b 2584 case UNW_IA64_AR_BSP:
1777feb0
MS
2585 /* Libunwind expects to see the beginning of the current
2586 register frame so we must account for the fact that
2587 ptrace() will return a value for bsp that points *after*
2588 the current register frame. */
5c99fcf8
AH
2589 regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
2590 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
45ecac4b
UW
2591 sof = (cfm & 0x7f);
2592 *val = ia64_rse_skip_regs (bsp, -sof);
2593 break;
c5a27d9c 2594
45ecac4b
UW
2595 case UNW_IA64_AR_BSPSTORE:
2596 /* Libunwind wants bspstore to be after the current register frame.
2597 This is what ptrace() and gdb treats as the regular bsp value. */
5c99fcf8 2598 regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, val);
45ecac4b 2599 break;
c5a27d9c 2600
45ecac4b
UW
2601 default:
2602 /* For all other registers, just unwind the value directly. */
5c99fcf8 2603 regcache_cooked_read_unsigned (regcache, regnum, val);
45ecac4b 2604 break;
c5a27d9c
JJ
2605 }
2606
2607 if (gdbarch_debug >= 1)
2608 fprintf_unfiltered (gdb_stdlog,
5af949e3 2609 " access_rse_reg: from cache: %4s=%s\n",
c5a27d9c
JJ
2610 (((unsigned) regnum <= IA64_NAT127_REGNUM)
2611 ? ia64_register_names[regnum] : "r??"),
5af949e3 2612 paddress (gdbarch, *val));
c5a27d9c
JJ
2613
2614 return 0;
2615}
2616
45ecac4b
UW
2617/* Libunwind callback accessor function for top-level fp registers. */
2618static int
2619ia64_access_rse_fpreg (unw_addr_space_t as, unw_regnum_t uw_regnum,
2620 unw_fpreg_t *val, int write, void *arg)
2621{
2622 int regnum = ia64_uw2gdb_regnum (uw_regnum);
bfb0d950 2623 struct regcache *regcache = (struct regcache *) arg;
45ecac4b
UW
2624
2625 /* We never call any libunwind routines that need to write registers. */
2626 gdb_assert (!write);
2627
2b692d32 2628 regcache_cooked_read (regcache, regnum, (gdb_byte *) val);
45ecac4b
UW
2629
2630 return 0;
2631}
2632
968d1cb4
JJ
2633/* Libunwind callback accessor function for accessing memory. */
2634static int
2635ia64_access_mem (unw_addr_space_t as,
2636 unw_word_t addr, unw_word_t *val,
2637 int write, void *arg)
2638{
c5a27d9c
JJ
2639 if (addr - KERNEL_START < ktab_size)
2640 {
2641 unw_word_t *laddr = (unw_word_t*) ((char *) ktab
2642 + (addr - KERNEL_START));
2643
2644 if (write)
2645 *laddr = *val;
2646 else
2647 *val = *laddr;
2648 return 0;
2649 }
2650
968d1cb4
JJ
2651 /* XXX do we need to normalize byte-order here? */
2652 if (write)
2b692d32 2653 return target_write_memory (addr, (gdb_byte *) val, sizeof (unw_word_t));
968d1cb4 2654 else
2b692d32 2655 return target_read_memory (addr, (gdb_byte *) val, sizeof (unw_word_t));
968d1cb4
JJ
2656}
2657
2658/* Call low-level function to access the kernel unwind table. */
13547ab6
DJ
2659static LONGEST
2660getunwind_table (gdb_byte **buf_p)
968d1cb4
JJ
2661{
2662 LONGEST x;
c5a27d9c 2663
10d6c8cd
DJ
2664 /* FIXME drow/2005-09-10: This code used to call
2665 ia64_linux_xfer_unwind_table directly to fetch the unwind table
2666 for the currently running ia64-linux kernel. That data should
2667 come from the core file and be accessed via the auxv vector; if
2668 we want to preserve fall back to the running kernel's table, then
2669 we should find a way to override the corefile layer's
2670 xfer_partial method. */
968d1cb4 2671
13547ab6
DJ
2672 x = target_read_alloc (&current_target, TARGET_OBJECT_UNWIND_TABLE,
2673 NULL, buf_p);
2674
2675 return x;
968d1cb4 2676}
10d6c8cd 2677
968d1cb4
JJ
2678/* Get the kernel unwind table. */
2679static int
2680get_kernel_table (unw_word_t ip, unw_dyn_info_t *di)
2681{
c5a27d9c 2682 static struct ia64_table_entry *etab;
968d1cb4 2683
c5a27d9c 2684 if (!ktab)
968d1cb4 2685 {
13547ab6 2686 gdb_byte *ktab_buf;
eeec829c 2687 LONGEST size;
13547ab6 2688
eeec829c
DJ
2689 size = getunwind_table (&ktab_buf);
2690 if (size <= 0)
13547ab6 2691 return -UNW_ENOINFO;
eeec829c
DJ
2692
2693 ktab = (struct ia64_table_entry *) ktab_buf;
2694 ktab_size = size;
13547ab6 2695
968d1cb4 2696 for (etab = ktab; etab->start_offset; ++etab)
c5a27d9c 2697 etab->info_offset += KERNEL_START;
968d1cb4
JJ
2698 }
2699
2700 if (ip < ktab[0].start_offset || ip >= etab[-1].end_offset)
2701 return -UNW_ENOINFO;
2702
2703 di->format = UNW_INFO_FORMAT_TABLE;
2704 di->gp = 0;
2705 di->start_ip = ktab[0].start_offset;
2706 di->end_ip = etab[-1].end_offset;
2707 di->u.ti.name_ptr = (unw_word_t) "<kernel>";
2708 di->u.ti.segbase = 0;
2709 di->u.ti.table_len = ((char *) etab - (char *) ktab) / sizeof (unw_word_t);
2710 di->u.ti.table_data = (unw_word_t *) ktab;
2711
2712 if (gdbarch_debug >= 1)
2713 fprintf_unfiltered (gdb_stdlog, "get_kernel_table: found table `%s': "
5af949e3 2714 "segbase=%s, length=%s, gp=%s\n",
78ced177 2715 (char *) di->u.ti.name_ptr,
5af949e3 2716 hex_string (di->u.ti.segbase),
623d3eb1 2717 pulongest (di->u.ti.table_len),
5af949e3 2718 hex_string (di->gp));
968d1cb4
JJ
2719 return 0;
2720}
2721
2722/* Find the unwind table entry for a specified address. */
2723static int
2724ia64_find_unwind_table (struct objfile *objfile, unw_word_t ip,
2725 unw_dyn_info_t *dip, void **buf)
2726{
2727 Elf_Internal_Phdr *phdr, *p_text = NULL, *p_unwind = NULL;
2728 Elf_Internal_Ehdr *ehdr;
2729 unw_word_t segbase = 0;
2730 CORE_ADDR load_base;
2731 bfd *bfd;
2732 int i;
2733
2734 bfd = objfile->obfd;
2735
2736 ehdr = elf_tdata (bfd)->elf_header;
2737 phdr = elf_tdata (bfd)->phdr;
2738
2739 load_base = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2740
2741 for (i = 0; i < ehdr->e_phnum; ++i)
2742 {
2743 switch (phdr[i].p_type)
2744 {
2745 case PT_LOAD:
2746 if ((unw_word_t) (ip - load_base - phdr[i].p_vaddr)
2747 < phdr[i].p_memsz)
2748 p_text = phdr + i;
2749 break;
2750
2751 case PT_IA_64_UNWIND:
2752 p_unwind = phdr + i;
2753 break;
2754
2755 default:
2756 break;
2757 }
2758 }
2759
c5a27d9c 2760 if (!p_text || !p_unwind)
968d1cb4
JJ
2761 return -UNW_ENOINFO;
2762
c5a27d9c
JJ
2763 /* Verify that the segment that contains the IP also contains
2764 the static unwind table. If not, we may be in the Linux kernel's
1777feb0 2765 DSO gate page in which case the unwind table is another segment.
c5a27d9c
JJ
2766 Otherwise, we are dealing with runtime-generated code, for which we
2767 have no info here. */
968d1cb4
JJ
2768 segbase = p_text->p_vaddr + load_base;
2769
c5a27d9c
JJ
2770 if ((p_unwind->p_vaddr - p_text->p_vaddr) >= p_text->p_memsz)
2771 {
2772 int ok = 0;
2773 for (i = 0; i < ehdr->e_phnum; ++i)
2774 {
2775 if (phdr[i].p_type == PT_LOAD
2776 && (p_unwind->p_vaddr - phdr[i].p_vaddr) < phdr[i].p_memsz)
2777 {
2778 ok = 1;
2779 /* Get the segbase from the section containing the
2780 libunwind table. */
2781 segbase = phdr[i].p_vaddr + load_base;
2782 }
2783 }
2784 if (!ok)
2785 return -UNW_ENOINFO;
2786 }
2787
2788 dip->start_ip = p_text->p_vaddr + load_base;
968d1cb4 2789 dip->end_ip = dip->start_ip + p_text->p_memsz;
e17a4113 2790 dip->gp = ia64_find_global_pointer (get_objfile_arch (objfile), ip);
503ff15d
KB
2791 dip->format = UNW_INFO_FORMAT_REMOTE_TABLE;
2792 dip->u.rti.name_ptr = (unw_word_t) bfd_get_filename (bfd);
2793 dip->u.rti.segbase = segbase;
2794 dip->u.rti.table_len = p_unwind->p_memsz / sizeof (unw_word_t);
2795 dip->u.rti.table_data = p_unwind->p_vaddr + load_base;
968d1cb4
JJ
2796
2797 return 0;
2798}
2799
2800/* Libunwind callback accessor function to acquire procedure unwind-info. */
2801static int
2802ia64_find_proc_info_x (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi,
2803 int need_unwind_info, void *arg)
2804{
2805 struct obj_section *sec = find_pc_section (ip);
2806 unw_dyn_info_t di;
2807 int ret;
2808 void *buf = NULL;
2809
2810 if (!sec)
2811 {
2812 /* XXX This only works if the host and the target architecture are
2813 both ia64 and if the have (more or less) the same kernel
2814 version. */
2815 if (get_kernel_table (ip, &di) < 0)
2816 return -UNW_ENOINFO;
503ff15d
KB
2817
2818 if (gdbarch_debug >= 1)
5af949e3
UW
2819 fprintf_unfiltered (gdb_stdlog, "ia64_find_proc_info_x: %s -> "
2820 "(name=`%s',segbase=%s,start=%s,end=%s,gp=%s,"
2821 "length=%s,data=%s)\n",
2822 hex_string (ip), (char *)di.u.ti.name_ptr,
2823 hex_string (di.u.ti.segbase),
2824 hex_string (di.start_ip), hex_string (di.end_ip),
2825 hex_string (di.gp),
623d3eb1 2826 pulongest (di.u.ti.table_len),
5af949e3 2827 hex_string ((CORE_ADDR)di.u.ti.table_data));
968d1cb4
JJ
2828 }
2829 else
2830 {
2831 ret = ia64_find_unwind_table (sec->objfile, ip, &di, &buf);
2832 if (ret < 0)
2833 return ret;
968d1cb4 2834
503ff15d 2835 if (gdbarch_debug >= 1)
5af949e3
UW
2836 fprintf_unfiltered (gdb_stdlog, "ia64_find_proc_info_x: %s -> "
2837 "(name=`%s',segbase=%s,start=%s,end=%s,gp=%s,"
2838 "length=%s,data=%s)\n",
2839 hex_string (ip), (char *)di.u.rti.name_ptr,
2840 hex_string (di.u.rti.segbase),
2841 hex_string (di.start_ip), hex_string (di.end_ip),
2842 hex_string (di.gp),
623d3eb1 2843 pulongest (di.u.rti.table_len),
5af949e3 2844 hex_string (di.u.rti.table_data));
503ff15d 2845 }
968d1cb4 2846
503ff15d
KB
2847 ret = libunwind_search_unwind_table (&as, ip, &di, pi, need_unwind_info,
2848 arg);
968d1cb4
JJ
2849
2850 /* We no longer need the dyn info storage so free it. */
2851 xfree (buf);
2852
2853 return ret;
2854}
2855
2856/* Libunwind callback accessor function for cleanup. */
2857static void
2858ia64_put_unwind_info (unw_addr_space_t as,
2859 unw_proc_info_t *pip, void *arg)
2860{
2861 /* Nothing required for now. */
2862}
2863
2864/* Libunwind callback accessor function to get head of the dynamic
2865 unwind-info registration list. */
2866static int
2867ia64_get_dyn_info_list (unw_addr_space_t as,
2868 unw_word_t *dilap, void *arg)
2869{
2870 struct obj_section *text_sec;
2871 struct objfile *objfile;
2872 unw_word_t ip, addr;
2873 unw_dyn_info_t di;
2874 int ret;
2875
2876 if (!libunwind_is_initialized ())
2877 return -UNW_ENOINFO;
2878
2879 for (objfile = object_files; objfile; objfile = objfile->next)
2880 {
2881 void *buf = NULL;
2882
2883 text_sec = objfile->sections + SECT_OFF_TEXT (objfile);
8b7a6d61 2884 ip = obj_section_addr (text_sec);
968d1cb4
JJ
2885 ret = ia64_find_unwind_table (objfile, ip, &di, &buf);
2886 if (ret >= 0)
2887 {
503ff15d 2888 addr = libunwind_find_dyn_list (as, &di, arg);
968d1cb4
JJ
2889 /* We no longer need the dyn info storage so free it. */
2890 xfree (buf);
2891
2892 if (addr)
2893 {
2894 if (gdbarch_debug >= 1)
2895 fprintf_unfiltered (gdb_stdlog,
2896 "dynamic unwind table in objfile %s "
5af949e3 2897 "at %s (gp=%s)\n",
968d1cb4 2898 bfd_get_filename (objfile->obfd),
5af949e3 2899 hex_string (addr), hex_string (di.gp));
968d1cb4
JJ
2900 *dilap = addr;
2901 return 0;
2902 }
2903 }
2904 }
2905 return -UNW_ENOINFO;
2906}
2907
2908
2909/* Frame interface functions for libunwind. */
2910
2911static void
15c1e57f 2912ia64_libunwind_frame_this_id (struct frame_info *this_frame, void **this_cache,
7166c4a9 2913 struct frame_id *this_id)
968d1cb4 2914{
5af949e3 2915 struct gdbarch *gdbarch = get_frame_arch (this_frame);
e17a4113 2916 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
005ca36a 2917 struct frame_id id = outer_frame_id;
e362b510 2918 gdb_byte buf[8];
968d1cb4 2919 CORE_ADDR bsp;
c5a27d9c 2920
15c1e57f 2921 libunwind_frame_this_id (this_frame, this_cache, &id);
005ca36a 2922 if (frame_id_eq (id, outer_frame_id))
c5a27d9c 2923 {
005ca36a 2924 (*this_id) = outer_frame_id;
c5a27d9c
JJ
2925 return;
2926 }
968d1cb4 2927
c5a27d9c
JJ
2928 /* We must add the bsp as the special address for frame comparison
2929 purposes. */
15c1e57f 2930 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
e17a4113 2931 bsp = extract_unsigned_integer (buf, 8, byte_order);
968d1cb4 2932
15c1e57f 2933 (*this_id) = frame_id_build_special (id.stack_addr, id.code_addr, bsp);
968d1cb4
JJ
2934
2935 if (gdbarch_debug >= 1)
2936 fprintf_unfiltered (gdb_stdlog,
1777feb0
MS
2937 "libunwind frame id: code %s, stack %s, "
2938 "special %s, this_frame %s\n",
5af949e3
UW
2939 paddress (gdbarch, id.code_addr),
2940 paddress (gdbarch, id.stack_addr),
2941 paddress (gdbarch, bsp),
dfc3cd0e 2942 host_address_to_string (this_frame));
968d1cb4
JJ
2943}
2944
15c1e57f
JB
2945static struct value *
2946ia64_libunwind_frame_prev_register (struct frame_info *this_frame,
2947 void **this_cache, int regnum)
968d1cb4
JJ
2948{
2949 int reg = regnum;
15c1e57f 2950 struct gdbarch *gdbarch = get_frame_arch (this_frame);
e17a4113 2951 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
15c1e57f 2952 struct value *val;
968d1cb4
JJ
2953
2954 if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
2955 reg = IA64_PR_REGNUM;
2956 else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
2957 reg = IA64_UNAT_REGNUM;
2958
2959 /* Let libunwind do most of the work. */
15c1e57f 2960 val = libunwind_frame_prev_register (this_frame, this_cache, reg);
6672f2ae 2961
968d1cb4
JJ
2962 if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
2963 {
2964 ULONGEST prN_val;
2965
2966 if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
2967 {
2968 int rrb_pr = 0;
2969 ULONGEST cfm;
968d1cb4
JJ
2970
2971 /* Fetch predicate register rename base from current frame
2972 marker for this frame. */
5c99fcf8 2973 cfm = get_frame_register_unsigned (this_frame, IA64_CFM_REGNUM);
968d1cb4
JJ
2974 rrb_pr = (cfm >> 32) & 0x3f;
2975
2976 /* Adjust the register number to account for register rotation. */
15c1e57f 2977 regnum = VP16_REGNUM + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
968d1cb4 2978 }
15c1e57f 2979 prN_val = extract_bit_field (value_contents_all (val),
968d1cb4 2980 regnum - VP0_REGNUM, 1);
15c1e57f 2981 return frame_unwind_got_constant (this_frame, regnum, prN_val);
968d1cb4 2982 }
15c1e57f 2983
968d1cb4
JJ
2984 else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
2985 {
2986 ULONGEST unatN_val;
2987
15c1e57f
JB
2988 unatN_val = extract_bit_field (value_contents_all (val),
2989 regnum - IA64_NAT0_REGNUM, 1);
2990 return frame_unwind_got_constant (this_frame, regnum, unatN_val);
968d1cb4 2991 }
15c1e57f 2992
968d1cb4
JJ
2993 else if (regnum == IA64_BSP_REGNUM)
2994 {
15c1e57f
JB
2995 struct value *cfm_val;
2996 CORE_ADDR prev_bsp, prev_cfm;
2997
2998 /* We want to calculate the previous bsp as the end of the previous
2999 register stack frame. This corresponds to what the hardware bsp
3000 register will be if we pop the frame back which is why we might
3001 have been called. We know that libunwind will pass us back the
1777feb0 3002 beginning of the current frame so we should just add sof to it. */
e17a4113
UW
3003 prev_bsp = extract_unsigned_integer (value_contents_all (val),
3004 8, byte_order);
15c1e57f
JB
3005 cfm_val = libunwind_frame_prev_register (this_frame, this_cache,
3006 IA64_CFM_REGNUM);
e17a4113
UW
3007 prev_cfm = extract_unsigned_integer (value_contents_all (cfm_val),
3008 8, byte_order);
968d1cb4
JJ
3009 prev_bsp = rse_address_add (prev_bsp, (prev_cfm & 0x7f));
3010
15c1e57f 3011 return frame_unwind_got_constant (this_frame, regnum, prev_bsp);
968d1cb4 3012 }
15c1e57f
JB
3013 else
3014 return val;
3015}
968d1cb4 3016
15c1e57f
JB
3017static int
3018ia64_libunwind_frame_sniffer (const struct frame_unwind *self,
3019 struct frame_info *this_frame,
3020 void **this_cache)
3021{
3022 if (libunwind_is_initialized ()
3023 && libunwind_frame_sniffer (self, this_frame, this_cache))
3024 return 1;
3025
3026 return 0;
968d1cb4
JJ
3027}
3028
3029static const struct frame_unwind ia64_libunwind_frame_unwind =
3030{
3031 NORMAL_FRAME,
8fbca658 3032 default_frame_unwind_stop_reason,
968d1cb4 3033 ia64_libunwind_frame_this_id,
272dfcfd
AS
3034 ia64_libunwind_frame_prev_register,
3035 NULL,
15c1e57f 3036 ia64_libunwind_frame_sniffer,
272dfcfd 3037 libunwind_frame_dealloc_cache
968d1cb4
JJ
3038};
3039
c5a27d9c 3040static void
15c1e57f
JB
3041ia64_libunwind_sigtramp_frame_this_id (struct frame_info *this_frame,
3042 void **this_cache,
c5a27d9c
JJ
3043 struct frame_id *this_id)
3044{
5af949e3 3045 struct gdbarch *gdbarch = get_frame_arch (this_frame);
e17a4113 3046 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
e362b510 3047 gdb_byte buf[8];
c5a27d9c 3048 CORE_ADDR bsp;
005ca36a 3049 struct frame_id id = outer_frame_id;
c5a27d9c
JJ
3050 CORE_ADDR prev_ip;
3051
15c1e57f 3052 libunwind_frame_this_id (this_frame, this_cache, &id);
005ca36a 3053 if (frame_id_eq (id, outer_frame_id))
c5a27d9c 3054 {
005ca36a 3055 (*this_id) = outer_frame_id;
c5a27d9c
JJ
3056 return;
3057 }
3058
3059 /* We must add the bsp as the special address for frame comparison
3060 purposes. */
15c1e57f 3061 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
e17a4113 3062 bsp = extract_unsigned_integer (buf, 8, byte_order);
c5a27d9c
JJ
3063
3064 /* For a sigtramp frame, we don't make the check for previous ip being 0. */
3065 (*this_id) = frame_id_build_special (id.stack_addr, id.code_addr, bsp);
3066
3067 if (gdbarch_debug >= 1)
3068 fprintf_unfiltered (gdb_stdlog,
1777feb0
MS
3069 "libunwind sigtramp frame id: code %s, "
3070 "stack %s, special %s, this_frame %s\n",
5af949e3
UW
3071 paddress (gdbarch, id.code_addr),
3072 paddress (gdbarch, id.stack_addr),
3073 paddress (gdbarch, bsp),
dfc3cd0e 3074 host_address_to_string (this_frame));
c5a27d9c
JJ
3075}
3076
15c1e57f
JB
3077static struct value *
3078ia64_libunwind_sigtramp_frame_prev_register (struct frame_info *this_frame,
3079 void **this_cache, int regnum)
c5a27d9c 3080{
e17a4113
UW
3081 struct gdbarch *gdbarch = get_frame_arch (this_frame);
3082 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
15c1e57f
JB
3083 struct value *prev_ip_val;
3084 CORE_ADDR prev_ip;
c5a27d9c
JJ
3085
3086 /* If the previous frame pc value is 0, then we want to use the SIGCONTEXT
3087 method of getting previous registers. */
15c1e57f
JB
3088 prev_ip_val = libunwind_frame_prev_register (this_frame, this_cache,
3089 IA64_IP_REGNUM);
e17a4113
UW
3090 prev_ip = extract_unsigned_integer (value_contents_all (prev_ip_val),
3091 8, byte_order);
c5a27d9c
JJ
3092
3093 if (prev_ip == 0)
3094 {
3095 void *tmp_cache = NULL;
15c1e57f
JB
3096 return ia64_sigtramp_frame_prev_register (this_frame, &tmp_cache,
3097 regnum);
c5a27d9c
JJ
3098 }
3099 else
15c1e57f 3100 return ia64_libunwind_frame_prev_register (this_frame, this_cache, regnum);
c5a27d9c
JJ
3101}
3102
15c1e57f
JB
3103static int
3104ia64_libunwind_sigtramp_frame_sniffer (const struct frame_unwind *self,
3105 struct frame_info *this_frame,
3106 void **this_cache)
c5a27d9c
JJ
3107{
3108 if (libunwind_is_initialized ())
3109 {
15c1e57f
JB
3110 if (libunwind_sigtramp_frame_sniffer (self, this_frame, this_cache))
3111 return 1;
3112 return 0;
c5a27d9c
JJ
3113 }
3114 else
15c1e57f 3115 return ia64_sigtramp_frame_sniffer (self, this_frame, this_cache);
c5a27d9c
JJ
3116}
3117
15c1e57f
JB
3118static const struct frame_unwind ia64_libunwind_sigtramp_frame_unwind =
3119{
3120 SIGTRAMP_FRAME,
8fbca658 3121 default_frame_unwind_stop_reason,
15c1e57f
JB
3122 ia64_libunwind_sigtramp_frame_this_id,
3123 ia64_libunwind_sigtramp_frame_prev_register,
3124 NULL,
3125 ia64_libunwind_sigtramp_frame_sniffer
3126};
3127
968d1cb4 3128/* Set of libunwind callback acccessor functions. */
696759ad 3129unw_accessors_t ia64_unw_accessors =
968d1cb4
JJ
3130{
3131 ia64_find_proc_info_x,
3132 ia64_put_unwind_info,
3133 ia64_get_dyn_info_list,
3134 ia64_access_mem,
3135 ia64_access_reg,
3136 ia64_access_fpreg,
3137 /* resume */
3138 /* get_proc_name */
3139};
3140
c5a27d9c
JJ
3141/* Set of special libunwind callback acccessor functions specific for accessing
3142 the rse registers. At the top of the stack, we want libunwind to figure out
1777feb0
MS
3143 how to read r32 - r127. Though usually they are found sequentially in
3144 memory starting from $bof, this is not always true. */
696759ad 3145unw_accessors_t ia64_unw_rse_accessors =
c5a27d9c
JJ
3146{
3147 ia64_find_proc_info_x,
3148 ia64_put_unwind_info,
3149 ia64_get_dyn_info_list,
3150 ia64_access_mem,
3151 ia64_access_rse_reg,
45ecac4b 3152 ia64_access_rse_fpreg,
c5a27d9c
JJ
3153 /* resume */
3154 /* get_proc_name */
3155};
3156
05e7c244
JK
3157/* Set of ia64-libunwind-tdep gdb callbacks and data for generic
3158 ia64-libunwind-tdep code to use. */
696759ad 3159struct libunwind_descr ia64_libunwind_descr =
968d1cb4
JJ
3160{
3161 ia64_gdb2uw_regnum,
3162 ia64_uw2gdb_regnum,
3163 ia64_is_fpreg,
3164 &ia64_unw_accessors,
c5a27d9c 3165 &ia64_unw_rse_accessors,
968d1cb4
JJ
3166};
3167
3168#endif /* HAVE_LIBUNWIND_IA64_H */
3169
4c8b6ae0
UW
3170static int
3171ia64_use_struct_convention (struct type *type)
16461d7d 3172{
64a5b29c
KB
3173 struct type *float_elt_type;
3174
4c8b6ae0
UW
3175 /* Don't use the struct convention for anything but structure,
3176 union, or array types. */
3177 if (!(TYPE_CODE (type) == TYPE_CODE_STRUCT
3178 || TYPE_CODE (type) == TYPE_CODE_UNION
3179 || TYPE_CODE (type) == TYPE_CODE_ARRAY))
3180 return 0;
3181
64a5b29c
KB
3182 /* HFAs are structures (or arrays) consisting entirely of floating
3183 point values of the same length. Up to 8 of these are returned
3184 in registers. Don't use the struct convention when this is the
004d836a 3185 case. */
64a5b29c
KB
3186 float_elt_type = is_float_or_hfa_type (type);
3187 if (float_elt_type != NULL
3188 && TYPE_LENGTH (type) / TYPE_LENGTH (float_elt_type) <= 8)
3189 return 0;
3190
3191 /* Other structs of length 32 or less are returned in r8-r11.
004d836a 3192 Don't use the struct convention for those either. */
16461d7d
KB
3193 return TYPE_LENGTH (type) > 32;
3194}
3195
825d6d8a
JB
3196/* Return non-zero if TYPE is a structure or union type. */
3197
3198static int
3199ia64_struct_type_p (const struct type *type)
3200{
3201 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
3202 || TYPE_CODE (type) == TYPE_CODE_UNION);
3203}
3204
4c8b6ae0 3205static void
2d522557
AC
3206ia64_extract_return_value (struct type *type, struct regcache *regcache,
3207 gdb_byte *valbuf)
16461d7d 3208{
27067745 3209 struct gdbarch *gdbarch = get_regcache_arch (regcache);
64a5b29c
KB
3210 struct type *float_elt_type;
3211
3212 float_elt_type = is_float_or_hfa_type (type);
3213 if (float_elt_type != NULL)
3214 {
ae0d01d6 3215 gdb_byte from[IA64_FP_REGISTER_SIZE];
64a5b29c
KB
3216 int offset = 0;
3217 int regnum = IA64_FR8_REGNUM;
3218 int n = TYPE_LENGTH (type) / TYPE_LENGTH (float_elt_type);
3219
3220 while (n-- > 0)
3221 {
004d836a 3222 regcache_cooked_read (regcache, regnum, from);
27067745 3223 convert_typed_floating (from, ia64_ext_type (gdbarch),
1777feb0 3224 (char *)valbuf + offset, float_elt_type);
64a5b29c
KB
3225 offset += TYPE_LENGTH (float_elt_type);
3226 regnum++;
3227 }
3228 }
825d6d8a
JB
3229 else if (!ia64_struct_type_p (type) && TYPE_LENGTH (type) < 8)
3230 {
3231 /* This is an integral value, and its size is less than 8 bytes.
3232 These values are LSB-aligned, so extract the relevant bytes,
3233 and copy them into VALBUF. */
3234 /* brobecker/2005-12-30: Actually, all integral values are LSB aligned,
3235 so I suppose we should also add handling here for integral values
3236 whose size is greater than 8. But I wasn't able to create such
3237 a type, neither in C nor in Ada, so not worrying about these yet. */
3238 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3239 ULONGEST val;
3240
3241 regcache_cooked_read_unsigned (regcache, IA64_GR8_REGNUM, &val);
3242 store_unsigned_integer (valbuf, TYPE_LENGTH (type), byte_order, val);
3243 }
16461d7d 3244 else
004d836a
JJ
3245 {
3246 ULONGEST val;
3247 int offset = 0;
3248 int regnum = IA64_GR8_REGNUM;
27067745 3249 int reglen = TYPE_LENGTH (register_type (gdbarch, IA64_GR8_REGNUM));
004d836a
JJ
3250 int n = TYPE_LENGTH (type) / reglen;
3251 int m = TYPE_LENGTH (type) % reglen;
16461d7d 3252
004d836a
JJ
3253 while (n-- > 0)
3254 {
3255 ULONGEST val;
3256 regcache_cooked_read_unsigned (regcache, regnum, &val);
3257 memcpy ((char *)valbuf + offset, &val, reglen);
3258 offset += reglen;
3259 regnum++;
3260 }
16461d7d 3261
004d836a
JJ
3262 if (m)
3263 {
3264 regcache_cooked_read_unsigned (regcache, regnum, &val);
3265 memcpy ((char *)valbuf + offset, &val, m);
3266 }
3267 }
16461d7d
KB
3268}
3269
4c8b6ae0
UW
3270static void
3271ia64_store_return_value (struct type *type, struct regcache *regcache,
3272 const gdb_byte *valbuf)
3273{
27067745 3274 struct gdbarch *gdbarch = get_regcache_arch (regcache);
4c8b6ae0
UW
3275 struct type *float_elt_type;
3276
3277 float_elt_type = is_float_or_hfa_type (type);
3278 if (float_elt_type != NULL)
3279 {
ae0d01d6 3280 gdb_byte to[IA64_FP_REGISTER_SIZE];
4c8b6ae0
UW
3281 int offset = 0;
3282 int regnum = IA64_FR8_REGNUM;
3283 int n = TYPE_LENGTH (type) / TYPE_LENGTH (float_elt_type);
3284
3285 while (n-- > 0)
3286 {
3287 convert_typed_floating ((char *)valbuf + offset, float_elt_type,
27067745 3288 to, ia64_ext_type (gdbarch));
4c8b6ae0
UW
3289 regcache_cooked_write (regcache, regnum, to);
3290 offset += TYPE_LENGTH (float_elt_type);
3291 regnum++;
3292 }
3293 }
3294 else
3295 {
3296 ULONGEST val;
3297 int offset = 0;
3298 int regnum = IA64_GR8_REGNUM;
27067745 3299 int reglen = TYPE_LENGTH (register_type (gdbarch, IA64_GR8_REGNUM));
4c8b6ae0
UW
3300 int n = TYPE_LENGTH (type) / reglen;
3301 int m = TYPE_LENGTH (type) % reglen;
3302
3303 while (n-- > 0)
3304 {
3305 ULONGEST val;
3306 memcpy (&val, (char *)valbuf + offset, reglen);
3307 regcache_cooked_write_unsigned (regcache, regnum, val);
3308 offset += reglen;
3309 regnum++;
3310 }
3311
3312 if (m)
3313 {
3314 memcpy (&val, (char *)valbuf + offset, m);
3315 regcache_cooked_write_unsigned (regcache, regnum, val);
3316 }
3317 }
3318}
3319
3320static enum return_value_convention
6a3a010b 3321ia64_return_value (struct gdbarch *gdbarch, struct value *function,
c055b101
CV
3322 struct type *valtype, struct regcache *regcache,
3323 gdb_byte *readbuf, const gdb_byte *writebuf)
4c8b6ae0
UW
3324{
3325 int struct_return = ia64_use_struct_convention (valtype);
3326
3327 if (writebuf != NULL)
3328 {
3329 gdb_assert (!struct_return);
3330 ia64_store_return_value (valtype, regcache, writebuf);
3331 }
3332
3333 if (readbuf != NULL)
3334 {
3335 gdb_assert (!struct_return);
3336 ia64_extract_return_value (valtype, regcache, readbuf);
3337 }
3338
3339 if (struct_return)
3340 return RETURN_VALUE_STRUCT_CONVENTION;
3341 else
3342 return RETURN_VALUE_REGISTER_CONVENTION;
3343}
16461d7d 3344
64a5b29c
KB
3345static int
3346is_float_or_hfa_type_recurse (struct type *t, struct type **etp)
3347{
3348 switch (TYPE_CODE (t))
3349 {
3350 case TYPE_CODE_FLT:
3351 if (*etp)
3352 return TYPE_LENGTH (*etp) == TYPE_LENGTH (t);
3353 else
3354 {
3355 *etp = t;
3356 return 1;
3357 }
3358 break;
3359 case TYPE_CODE_ARRAY:
98f96ba1
KB
3360 return
3361 is_float_or_hfa_type_recurse (check_typedef (TYPE_TARGET_TYPE (t)),
3362 etp);
64a5b29c
KB
3363 break;
3364 case TYPE_CODE_STRUCT:
3365 {
3366 int i;
3367
3368 for (i = 0; i < TYPE_NFIELDS (t); i++)
98f96ba1
KB
3369 if (!is_float_or_hfa_type_recurse
3370 (check_typedef (TYPE_FIELD_TYPE (t, i)), etp))
64a5b29c
KB
3371 return 0;
3372 return 1;
3373 }
3374 break;
3375 default:
3376 return 0;
3377 break;
3378 }
3379}
3380
3381/* Determine if the given type is one of the floating point types or
3382 and HFA (which is a struct, array, or combination thereof whose
004d836a 3383 bottom-most elements are all of the same floating point type). */
64a5b29c
KB
3384
3385static struct type *
3386is_float_or_hfa_type (struct type *t)
3387{
3388 struct type *et = 0;
3389
3390 return is_float_or_hfa_type_recurse (t, &et) ? et : 0;
3391}
3392
3393
98f96ba1
KB
3394/* Return 1 if the alignment of T is such that the next even slot
3395 should be used. Return 0, if the next available slot should
3396 be used. (See section 8.5.1 of the IA-64 Software Conventions
004d836a 3397 and Runtime manual). */
98f96ba1
KB
3398
3399static int
3400slot_alignment_is_next_even (struct type *t)
3401{
3402 switch (TYPE_CODE (t))
3403 {
3404 case TYPE_CODE_INT:
3405 case TYPE_CODE_FLT:
3406 if (TYPE_LENGTH (t) > 8)
3407 return 1;
3408 else
3409 return 0;
3410 case TYPE_CODE_ARRAY:
3411 return
3412 slot_alignment_is_next_even (check_typedef (TYPE_TARGET_TYPE (t)));
3413 case TYPE_CODE_STRUCT:
3414 {
3415 int i;
3416
3417 for (i = 0; i < TYPE_NFIELDS (t); i++)
3418 if (slot_alignment_is_next_even
3419 (check_typedef (TYPE_FIELD_TYPE (t, i))))
3420 return 1;
3421 return 0;
3422 }
3423 default:
3424 return 0;
3425 }
3426}
3427
64a5b29c
KB
3428/* Attempt to find (and return) the global pointer for the given
3429 function.
3430
3431 This is a rather nasty bit of code searchs for the .dynamic section
3432 in the objfile corresponding to the pc of the function we're trying
3433 to call. Once it finds the addresses at which the .dynamic section
3434 lives in the child process, it scans the Elf64_Dyn entries for a
3435 DT_PLTGOT tag. If it finds one of these, the corresponding
3436 d_un.d_ptr value is the global pointer. */
3437
3438static CORE_ADDR
c4de7027
JB
3439ia64_find_global_pointer_from_dynamic_section (struct gdbarch *gdbarch,
3440 CORE_ADDR faddr)
64a5b29c 3441{
e17a4113 3442 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
76d689a6 3443 struct obj_section *faddr_sect;
64a5b29c 3444
76d689a6
KB
3445 faddr_sect = find_pc_section (faddr);
3446 if (faddr_sect != NULL)
64a5b29c
KB
3447 {
3448 struct obj_section *osect;
3449
76d689a6 3450 ALL_OBJFILE_OSECTIONS (faddr_sect->objfile, osect)
64a5b29c
KB
3451 {
3452 if (strcmp (osect->the_bfd_section->name, ".dynamic") == 0)
3453 break;
3454 }
3455
76d689a6 3456 if (osect < faddr_sect->objfile->sections_end)
64a5b29c 3457 {
aded6f54 3458 CORE_ADDR addr, endaddr;
64a5b29c 3459
aded6f54
PA
3460 addr = obj_section_addr (osect);
3461 endaddr = obj_section_endaddr (osect);
3462
3463 while (addr < endaddr)
64a5b29c
KB
3464 {
3465 int status;
3466 LONGEST tag;
e362b510 3467 gdb_byte buf[8];
64a5b29c
KB
3468
3469 status = target_read_memory (addr, buf, sizeof (buf));
3470 if (status != 0)
3471 break;
e17a4113 3472 tag = extract_signed_integer (buf, sizeof (buf), byte_order);
64a5b29c
KB
3473
3474 if (tag == DT_PLTGOT)
3475 {
3476 CORE_ADDR global_pointer;
3477
3478 status = target_read_memory (addr + 8, buf, sizeof (buf));
3479 if (status != 0)
3480 break;
e17a4113
UW
3481 global_pointer = extract_unsigned_integer (buf, sizeof (buf),
3482 byte_order);
64a5b29c 3483
1777feb0 3484 /* The payoff... */
64a5b29c
KB
3485 return global_pointer;
3486 }
3487
3488 if (tag == DT_NULL)
3489 break;
3490
3491 addr += 16;
3492 }
3493 }
3494 }
3495 return 0;
3496}
3497
c4de7027
JB
3498/* Attempt to find (and return) the global pointer for the given
3499 function. We first try the find_global_pointer_from_solib routine
3500 from the gdbarch tdep vector, if provided. And if that does not
3501 work, then we try ia64_find_global_pointer_from_dynamic_section. */
3502
3503static CORE_ADDR
3504ia64_find_global_pointer (struct gdbarch *gdbarch, CORE_ADDR faddr)
3505{
3506 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3507 CORE_ADDR addr = 0;
3508
3509 if (tdep->find_global_pointer_from_solib)
3510 addr = tdep->find_global_pointer_from_solib (gdbarch, faddr);
3511 if (addr == 0)
3512 addr = ia64_find_global_pointer_from_dynamic_section (gdbarch, faddr);
3513 return addr;
3514}
3515
64a5b29c
KB
3516/* Given a function's address, attempt to find (and return) the
3517 corresponding (canonical) function descriptor. Return 0 if
004d836a 3518 not found. */
64a5b29c 3519static CORE_ADDR
e17a4113 3520find_extant_func_descr (struct gdbarch *gdbarch, CORE_ADDR faddr)
64a5b29c 3521{
e17a4113 3522 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
76d689a6 3523 struct obj_section *faddr_sect;
64a5b29c 3524
004d836a 3525 /* Return early if faddr is already a function descriptor. */
76d689a6
KB
3526 faddr_sect = find_pc_section (faddr);
3527 if (faddr_sect && strcmp (faddr_sect->the_bfd_section->name, ".opd") == 0)
64a5b29c
KB
3528 return faddr;
3529
76d689a6 3530 if (faddr_sect != NULL)
64a5b29c 3531 {
76d689a6
KB
3532 struct obj_section *osect;
3533 ALL_OBJFILE_OSECTIONS (faddr_sect->objfile, osect)
64a5b29c
KB
3534 {
3535 if (strcmp (osect->the_bfd_section->name, ".opd") == 0)
3536 break;
3537 }
3538
76d689a6 3539 if (osect < faddr_sect->objfile->sections_end)
64a5b29c 3540 {
aded6f54
PA
3541 CORE_ADDR addr, endaddr;
3542
3543 addr = obj_section_addr (osect);
3544 endaddr = obj_section_endaddr (osect);
64a5b29c 3545
aded6f54 3546 while (addr < endaddr)
64a5b29c
KB
3547 {
3548 int status;
3549 LONGEST faddr2;
e362b510 3550 gdb_byte buf[8];
64a5b29c
KB
3551
3552 status = target_read_memory (addr, buf, sizeof (buf));
3553 if (status != 0)
3554 break;
e17a4113 3555 faddr2 = extract_signed_integer (buf, sizeof (buf), byte_order);
64a5b29c
KB
3556
3557 if (faddr == faddr2)
3558 return addr;
3559
3560 addr += 16;
3561 }
3562 }
3563 }
3564 return 0;
3565}
3566
3567/* Attempt to find a function descriptor corresponding to the
3568 given address. If none is found, construct one on the
004d836a 3569 stack using the address at fdaptr. */
64a5b29c
KB
3570
3571static CORE_ADDR
9c9acae0 3572find_func_descr (struct regcache *regcache, CORE_ADDR faddr, CORE_ADDR *fdaptr)
64a5b29c 3573{
e17a4113
UW
3574 struct gdbarch *gdbarch = get_regcache_arch (regcache);
3575 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
64a5b29c
KB
3576 CORE_ADDR fdesc;
3577
e17a4113 3578 fdesc = find_extant_func_descr (gdbarch, faddr);
64a5b29c
KB
3579
3580 if (fdesc == 0)
3581 {
9c9acae0 3582 ULONGEST global_pointer;
e362b510 3583 gdb_byte buf[16];
64a5b29c
KB
3584
3585 fdesc = *fdaptr;
3586 *fdaptr += 16;
3587
e17a4113 3588 global_pointer = ia64_find_global_pointer (gdbarch, faddr);
64a5b29c
KB
3589
3590 if (global_pointer == 0)
9c9acae0
UW
3591 regcache_cooked_read_unsigned (regcache,
3592 IA64_GR1_REGNUM, &global_pointer);
64a5b29c 3593
e17a4113
UW
3594 store_unsigned_integer (buf, 8, byte_order, faddr);
3595 store_unsigned_integer (buf + 8, 8, byte_order, global_pointer);
64a5b29c
KB
3596
3597 write_memory (fdesc, buf, 16);
3598 }
3599
3600 return fdesc;
3601}
16461d7d 3602
af8b88dd
JJ
3603/* Use the following routine when printing out function pointers
3604 so the user can see the function address rather than just the
3605 function descriptor. */
3606static CORE_ADDR
e2d0e7eb
AC
3607ia64_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr,
3608 struct target_ops *targ)
af8b88dd 3609{
e17a4113 3610 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
af8b88dd 3611 struct obj_section *s;
e453266f 3612 gdb_byte buf[8];
af8b88dd
JJ
3613
3614 s = find_pc_section (addr);
3615
3616 /* check if ADDR points to a function descriptor. */
3617 if (s && strcmp (s->the_bfd_section->name, ".opd") == 0)
e17a4113 3618 return read_memory_unsigned_integer (addr, 8, byte_order);
af8b88dd 3619
fcac911a
JB
3620 /* Normally, functions live inside a section that is executable.
3621 So, if ADDR points to a non-executable section, then treat it
3622 as a function descriptor and return the target address iff
e453266f
JK
3623 the target address itself points to a section that is executable.
3624 Check first the memory of the whole length of 8 bytes is readable. */
3625 if (s && (s->the_bfd_section->flags & SEC_CODE) == 0
3626 && target_read_memory (addr, buf, 8) == 0)
fcac911a 3627 {
e453266f 3628 CORE_ADDR pc = extract_unsigned_integer (buf, 8, byte_order);
fcac911a
JB
3629 struct obj_section *pc_section = find_pc_section (pc);
3630
3631 if (pc_section && (pc_section->the_bfd_section->flags & SEC_CODE))
3632 return pc;
3633 }
b1e6fd19 3634
0d5de010
DJ
3635 /* There are also descriptors embedded in vtables. */
3636 if (s)
3637 {
7cbd4a93 3638 struct bound_minimal_symbol minsym;
0d5de010
DJ
3639
3640 minsym = lookup_minimal_symbol_by_pc (addr);
3641
efd66ac6
TT
3642 if (minsym.minsym
3643 && is_vtable_name (MSYMBOL_LINKAGE_NAME (minsym.minsym)))
e17a4113 3644 return read_memory_unsigned_integer (addr, 8, byte_order);
0d5de010
DJ
3645 }
3646
af8b88dd
JJ
3647 return addr;
3648}
3649
a78f21af 3650static CORE_ADDR
004d836a
JJ
3651ia64_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
3652{
3653 return sp & ~0xfLL;
3654}
3655
c4de7027
JB
3656/* The default "allocate_new_rse_frame" ia64_infcall_ops routine for ia64. */
3657
3658static void
3659ia64_allocate_new_rse_frame (struct regcache *regcache, ULONGEST bsp, int sof)
3660{
3661 ULONGEST cfm, pfs, new_bsp;
3662
3663 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
3664
3665 new_bsp = rse_address_add (bsp, sof);
3666 regcache_cooked_write_unsigned (regcache, IA64_BSP_REGNUM, new_bsp);
3667
3668 regcache_cooked_read_unsigned (regcache, IA64_PFS_REGNUM, &pfs);
3669 pfs &= 0xc000000000000000LL;
3670 pfs |= (cfm & 0xffffffffffffLL);
3671 regcache_cooked_write_unsigned (regcache, IA64_PFS_REGNUM, pfs);
3672
3673 cfm &= 0xc000000000000000LL;
3674 cfm |= sof;
3675 regcache_cooked_write_unsigned (regcache, IA64_CFM_REGNUM, cfm);
3676}
3677
3678/* The default "store_argument_in_slot" ia64_infcall_ops routine for
3679 ia64. */
3680
3681static void
3682ia64_store_argument_in_slot (struct regcache *regcache, CORE_ADDR bsp,
3683 int slotnum, gdb_byte *buf)
3684{
3685 write_memory (rse_address_add (bsp, slotnum), buf, 8);
3686}
3687
3688/* The default "set_function_addr" ia64_infcall_ops routine for ia64. */
3689
3690static void
3691ia64_set_function_addr (struct regcache *regcache, CORE_ADDR func_addr)
3692{
3693 /* Nothing needed. */
3694}
3695
004d836a 3696static CORE_ADDR
7d9b040b 3697ia64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
8dd5115e
AS
3698 struct regcache *regcache, CORE_ADDR bp_addr,
3699 int nargs, struct value **args, CORE_ADDR sp,
3700 int struct_return, CORE_ADDR struct_addr)
16461d7d 3701{
c4de7027 3702 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
e17a4113 3703 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
16461d7d 3704 int argno;
ea7c478f 3705 struct value *arg;
16461d7d
KB
3706 struct type *type;
3707 int len, argoffset;
64a5b29c 3708 int nslots, rseslots, memslots, slotnum, nfuncargs;
16461d7d 3709 int floatreg;
c4de7027 3710 ULONGEST bsp;
870f88f7 3711 CORE_ADDR funcdescaddr, global_pointer;
7d9b040b 3712 CORE_ADDR func_addr = find_function_addr (function, NULL);
16461d7d
KB
3713
3714 nslots = 0;
64a5b29c 3715 nfuncargs = 0;
004d836a 3716 /* Count the number of slots needed for the arguments. */
16461d7d
KB
3717 for (argno = 0; argno < nargs; argno++)
3718 {
3719 arg = args[argno];
4991999e 3720 type = check_typedef (value_type (arg));
16461d7d
KB
3721 len = TYPE_LENGTH (type);
3722
98f96ba1 3723 if ((nslots & 1) && slot_alignment_is_next_even (type))
16461d7d
KB
3724 nslots++;
3725
64a5b29c
KB
3726 if (TYPE_CODE (type) == TYPE_CODE_FUNC)
3727 nfuncargs++;
3728
16461d7d
KB
3729 nslots += (len + 7) / 8;
3730 }
3731
004d836a 3732 /* Divvy up the slots between the RSE and the memory stack. */
16461d7d
KB
3733 rseslots = (nslots > 8) ? 8 : nslots;
3734 memslots = nslots - rseslots;
3735
004d836a 3736 /* Allocate a new RSE frame. */
9c9acae0 3737 regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
c4de7027 3738 tdep->infcall_ops.allocate_new_rse_frame (regcache, bsp, rseslots);
16461d7d 3739
64a5b29c
KB
3740 /* We will attempt to find function descriptors in the .opd segment,
3741 but if we can't we'll construct them ourselves. That being the
004d836a 3742 case, we'll need to reserve space on the stack for them. */
64a5b29c
KB
3743 funcdescaddr = sp - nfuncargs * 16;
3744 funcdescaddr &= ~0xfLL;
3745
3746 /* Adjust the stack pointer to it's new value. The calling conventions
3747 require us to have 16 bytes of scratch, plus whatever space is
004d836a 3748 necessary for the memory slots and our function descriptors. */
64a5b29c 3749 sp = sp - 16 - (memslots + nfuncargs) * 8;
004d836a 3750 sp &= ~0xfLL; /* Maintain 16 byte alignment. */
16461d7d 3751
64a5b29c
KB
3752 /* Place the arguments where they belong. The arguments will be
3753 either placed in the RSE backing store or on the memory stack.
3754 In addition, floating point arguments or HFAs are placed in
004d836a 3755 floating point registers. */
16461d7d
KB
3756 slotnum = 0;
3757 floatreg = IA64_FR8_REGNUM;
3758 for (argno = 0; argno < nargs; argno++)
3759 {
64a5b29c
KB
3760 struct type *float_elt_type;
3761
16461d7d 3762 arg = args[argno];
4991999e 3763 type = check_typedef (value_type (arg));
16461d7d 3764 len = TYPE_LENGTH (type);
64a5b29c 3765
004d836a 3766 /* Special handling for function parameters. */
64a5b29c
KB
3767 if (len == 8
3768 && TYPE_CODE (type) == TYPE_CODE_PTR
3769 && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC)
3770 {
948f8e3d 3771 gdb_byte val_buf[8];
e17a4113
UW
3772 ULONGEST faddr = extract_unsigned_integer (value_contents (arg),
3773 8, byte_order);
3774 store_unsigned_integer (val_buf, 8, byte_order,
9c9acae0 3775 find_func_descr (regcache, faddr,
fbd9dcd3 3776 &funcdescaddr));
64a5b29c 3777 if (slotnum < rseslots)
c4de7027
JB
3778 tdep->infcall_ops.store_argument_in_slot (regcache, bsp,
3779 slotnum, val_buf);
64a5b29c
KB
3780 else
3781 write_memory (sp + 16 + 8 * (slotnum - rseslots), val_buf, 8);
3782 slotnum++;
3783 continue;
3784 }
3785
004d836a 3786 /* Normal slots. */
98f96ba1
KB
3787
3788 /* Skip odd slot if necessary... */
3789 if ((slotnum & 1) && slot_alignment_is_next_even (type))
16461d7d 3790 slotnum++;
98f96ba1 3791
16461d7d
KB
3792 argoffset = 0;
3793 while (len > 0)
3794 {
948f8e3d 3795 gdb_byte val_buf[8];
16461d7d
KB
3796
3797 memset (val_buf, 0, 8);
825d6d8a
JB
3798 if (!ia64_struct_type_p (type) && len < 8)
3799 {
3800 /* Integral types are LSB-aligned, so we have to be careful
3801 to insert the argument on the correct side of the buffer.
3802 This is why we use store_unsigned_integer. */
3803 store_unsigned_integer
3804 (val_buf, 8, byte_order,
3805 extract_unsigned_integer (value_contents (arg), len,
3806 byte_order));
3807 }
3808 else
3809 {
3810 /* This is either an 8bit integral type, or an aggregate.
3811 For 8bit integral type, there is no problem, we just
3812 copy the value over.
3813
3814 For aggregates, the only potentially tricky portion
3815 is to write the last one if it is less than 8 bytes.
3816 In this case, the data is Byte0-aligned. Happy news,
3817 this means that we don't need to differentiate the
3818 handling of 8byte blocks and less-than-8bytes blocks. */
3819 memcpy (val_buf, value_contents (arg) + argoffset,
3820 (len > 8) ? 8 : len);
3821 }
16461d7d
KB
3822
3823 if (slotnum < rseslots)
c4de7027
JB
3824 tdep->infcall_ops.store_argument_in_slot (regcache, bsp,
3825 slotnum, val_buf);
16461d7d
KB
3826 else
3827 write_memory (sp + 16 + 8 * (slotnum - rseslots), val_buf, 8);
3828
3829 argoffset += 8;
3830 len -= 8;
3831 slotnum++;
3832 }
64a5b29c 3833
004d836a 3834 /* Handle floating point types (including HFAs). */
64a5b29c
KB
3835 float_elt_type = is_float_or_hfa_type (type);
3836 if (float_elt_type != NULL)
3837 {
3838 argoffset = 0;
3839 len = TYPE_LENGTH (type);
3840 while (len > 0 && floatreg < IA64_FR16_REGNUM)
3841 {
ae0d01d6 3842 gdb_byte to[IA64_FP_REGISTER_SIZE];
1777feb0
MS
3843 convert_typed_floating (value_contents (arg) + argoffset,
3844 float_elt_type, to,
3845 ia64_ext_type (gdbarch));
ce746418 3846 regcache_cooked_write (regcache, floatreg, to);
64a5b29c
KB
3847 floatreg++;
3848 argoffset += TYPE_LENGTH (float_elt_type);
3849 len -= TYPE_LENGTH (float_elt_type);
3850 }
16461d7d
KB
3851 }
3852 }
3853
004d836a 3854 /* Store the struct return value in r8 if necessary. */
16461d7d
KB
3855 if (struct_return)
3856 {
1777feb0
MS
3857 regcache_cooked_write_unsigned (regcache, IA64_GR8_REGNUM,
3858 (ULONGEST) struct_addr);
16461d7d
KB
3859 }
3860
e17a4113 3861 global_pointer = ia64_find_global_pointer (gdbarch, func_addr);
8dd5115e 3862
004d836a 3863 if (global_pointer != 0)
9c9acae0 3864 regcache_cooked_write_unsigned (regcache, IA64_GR1_REGNUM, global_pointer);
a59fe496 3865
c4de7027
JB
3866 /* The following is not necessary on HP-UX, because we're using
3867 a dummy code sequence pushed on the stack to make the call, and
3868 this sequence doesn't need b0 to be set in order for our dummy
3869 breakpoint to be hit. Nonetheless, this doesn't interfere, and
3870 it's needed for other OSes, so we do this unconditionaly. */
9c9acae0 3871 regcache_cooked_write_unsigned (regcache, IA64_BR0_REGNUM, bp_addr);
16461d7d 3872
9c9acae0 3873 regcache_cooked_write_unsigned (regcache, sp_regnum, sp);
16461d7d 3874
c4de7027
JB
3875 tdep->infcall_ops.set_function_addr (regcache, func_addr);
3876
16461d7d
KB
3877 return sp;
3878}
3879
c4de7027
JB
3880static const struct ia64_infcall_ops ia64_infcall_ops =
3881{
3882 ia64_allocate_new_rse_frame,
3883 ia64_store_argument_in_slot,
3884 ia64_set_function_addr
3885};
3886
004d836a 3887static struct frame_id
15c1e57f 3888ia64_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
16461d7d 3889{
e17a4113 3890 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
e362b510 3891 gdb_byte buf[8];
4afcc598 3892 CORE_ADDR sp, bsp;
004d836a 3893
15c1e57f 3894 get_frame_register (this_frame, sp_regnum, buf);
e17a4113 3895 sp = extract_unsigned_integer (buf, 8, byte_order);
004d836a 3896
15c1e57f 3897 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
e17a4113 3898 bsp = extract_unsigned_integer (buf, 8, byte_order);
4afcc598
JJ
3899
3900 if (gdbarch_debug >= 1)
3901 fprintf_unfiltered (gdb_stdlog,
5af949e3
UW
3902 "dummy frame id: code %s, stack %s, special %s\n",
3903 paddress (gdbarch, get_frame_pc (this_frame)),
3904 paddress (gdbarch, sp), paddress (gdbarch, bsp));
4afcc598 3905
15c1e57f 3906 return frame_id_build_special (sp, get_frame_pc (this_frame), bsp);
16461d7d
KB
3907}
3908
004d836a
JJ
3909static CORE_ADDR
3910ia64_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
16461d7d 3911{
e17a4113 3912 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
e362b510 3913 gdb_byte buf[8];
004d836a
JJ
3914 CORE_ADDR ip, psr, pc;
3915
3916 frame_unwind_register (next_frame, IA64_IP_REGNUM, buf);
e17a4113 3917 ip = extract_unsigned_integer (buf, 8, byte_order);
004d836a 3918 frame_unwind_register (next_frame, IA64_PSR_REGNUM, buf);
e17a4113 3919 psr = extract_unsigned_integer (buf, 8, byte_order);
004d836a
JJ
3920
3921 pc = (ip & ~0xf) | ((psr >> 41) & 3);
3922 return pc;
16461d7d
KB
3923}
3924
6926787d
AS
3925static int
3926ia64_print_insn (bfd_vma memaddr, struct disassemble_info *info)
3927{
3928 info->bytes_per_line = SLOT_MULTIPLIER;
6394c606 3929 return default_print_insn (memaddr, info);
6926787d
AS
3930}
3931
77ca787b
JB
3932/* The default "size_of_register_frame" gdbarch_tdep routine for ia64. */
3933
3934static int
3935ia64_size_of_register_frame (struct frame_info *this_frame, ULONGEST cfm)
3936{
3937 return (cfm & 0x7f);
3938}
3939
16461d7d
KB
3940static struct gdbarch *
3941ia64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
3942{
3943 struct gdbarch *gdbarch;
244bc108 3944 struct gdbarch_tdep *tdep;
244bc108 3945
85bf2b91
JJ
3946 /* If there is already a candidate, use it. */
3947 arches = gdbarch_list_lookup_by_info (arches, &info);
3948 if (arches != NULL)
3949 return arches->gdbarch;
16461d7d 3950
8d749320 3951 tdep = XCNEW (struct gdbarch_tdep);
244bc108 3952 gdbarch = gdbarch_alloc (&info, tdep);
244bc108 3953
77ca787b
JB
3954 tdep->size_of_register_frame = ia64_size_of_register_frame;
3955
5439edaa
AC
3956 /* According to the ia64 specs, instructions that store long double
3957 floats in memory use a long-double format different than that
3958 used in the floating registers. The memory format matches the
3959 x86 extended float format which is 80 bits. An OS may choose to
3960 use this format (e.g. GNU/Linux) or choose to use a different
3961 format for storing long doubles (e.g. HPUX). In the latter case,
3962 the setting of the format may be moved/overridden in an
3963 OS-specific tdep file. */
8da61cc4 3964 set_gdbarch_long_double_format (gdbarch, floatformats_i387_ext);
32edc941 3965
16461d7d
KB
3966 set_gdbarch_short_bit (gdbarch, 16);
3967 set_gdbarch_int_bit (gdbarch, 32);
3968 set_gdbarch_long_bit (gdbarch, 64);
3969 set_gdbarch_long_long_bit (gdbarch, 64);
3970 set_gdbarch_float_bit (gdbarch, 32);
3971 set_gdbarch_double_bit (gdbarch, 64);
33c08150 3972 set_gdbarch_long_double_bit (gdbarch, 128);
16461d7d
KB
3973 set_gdbarch_ptr_bit (gdbarch, 64);
3974
004d836a 3975 set_gdbarch_num_regs (gdbarch, NUM_IA64_RAW_REGS);
1777feb0
MS
3976 set_gdbarch_num_pseudo_regs (gdbarch,
3977 LAST_PSEUDO_REGNUM - FIRST_PSEUDO_REGNUM);
16461d7d 3978 set_gdbarch_sp_regnum (gdbarch, sp_regnum);
698cb3f0 3979 set_gdbarch_fp0_regnum (gdbarch, IA64_FR0_REGNUM);
16461d7d
KB
3980
3981 set_gdbarch_register_name (gdbarch, ia64_register_name);
004d836a 3982 set_gdbarch_register_type (gdbarch, ia64_register_type);
16461d7d 3983
004d836a
JJ
3984 set_gdbarch_pseudo_register_read (gdbarch, ia64_pseudo_register_read);
3985 set_gdbarch_pseudo_register_write (gdbarch, ia64_pseudo_register_write);
3986 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, ia64_dwarf_reg_to_regnum);
3987 set_gdbarch_register_reggroup_p (gdbarch, ia64_register_reggroup_p);
3988 set_gdbarch_convert_register_p (gdbarch, ia64_convert_register_p);
3989 set_gdbarch_register_to_value (gdbarch, ia64_register_to_value);
3990 set_gdbarch_value_to_register (gdbarch, ia64_value_to_register);
16461d7d 3991
004d836a 3992 set_gdbarch_skip_prologue (gdbarch, ia64_skip_prologue);
16461d7d 3993
4c8b6ae0 3994 set_gdbarch_return_value (gdbarch, ia64_return_value);
16461d7d 3995
1777feb0
MS
3996 set_gdbarch_memory_insert_breakpoint (gdbarch,
3997 ia64_memory_insert_breakpoint);
3998 set_gdbarch_memory_remove_breakpoint (gdbarch,
3999 ia64_memory_remove_breakpoint);
16461d7d 4000 set_gdbarch_breakpoint_from_pc (gdbarch, ia64_breakpoint_from_pc);
cd6c3b4f 4001 set_gdbarch_breakpoint_kind_from_pc (gdbarch, ia64_breakpoint_kind_from_pc);
16461d7d 4002 set_gdbarch_read_pc (gdbarch, ia64_read_pc);
b33e8514 4003 set_gdbarch_write_pc (gdbarch, ia64_write_pc);
16461d7d
KB
4004
4005 /* Settings for calling functions in the inferior. */
8dd5115e 4006 set_gdbarch_push_dummy_call (gdbarch, ia64_push_dummy_call);
c4de7027 4007 tdep->infcall_ops = ia64_infcall_ops;
004d836a 4008 set_gdbarch_frame_align (gdbarch, ia64_frame_align);
15c1e57f 4009 set_gdbarch_dummy_id (gdbarch, ia64_dummy_id);
16461d7d 4010
004d836a 4011 set_gdbarch_unwind_pc (gdbarch, ia64_unwind_pc);
968d1cb4 4012#ifdef HAVE_LIBUNWIND_IA64_H
15c1e57f
JB
4013 frame_unwind_append_unwinder (gdbarch,
4014 &ia64_libunwind_sigtramp_frame_unwind);
4015 frame_unwind_append_unwinder (gdbarch, &ia64_libunwind_frame_unwind);
4016 frame_unwind_append_unwinder (gdbarch, &ia64_sigtramp_frame_unwind);
968d1cb4 4017 libunwind_frame_set_descr (gdbarch, &ia64_libunwind_descr);
c5a27d9c 4018#else
15c1e57f 4019 frame_unwind_append_unwinder (gdbarch, &ia64_sigtramp_frame_unwind);
968d1cb4 4020#endif
15c1e57f 4021 frame_unwind_append_unwinder (gdbarch, &ia64_frame_unwind);
004d836a 4022 frame_base_set_default (gdbarch, &ia64_frame_base);
16461d7d
KB
4023
4024 /* Settings that should be unnecessary. */
4025 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
4026
6926787d 4027 set_gdbarch_print_insn (gdbarch, ia64_print_insn);
1777feb0
MS
4028 set_gdbarch_convert_from_func_ptr_addr (gdbarch,
4029 ia64_convert_from_func_ptr_addr);
6926787d 4030
0d5de010
DJ
4031 /* The virtual table contains 16-byte descriptors, not pointers to
4032 descriptors. */
4033 set_gdbarch_vtable_function_descriptors (gdbarch, 1);
4034
b33e8514
AS
4035 /* Hook in ABI-specific overrides, if they have been registered. */
4036 gdbarch_init_osabi (info, gdbarch);
4037
16461d7d
KB
4038 return gdbarch;
4039}
4040
a78f21af
AC
4041extern initialize_file_ftype _initialize_ia64_tdep; /* -Wmissing-prototypes */
4042
16461d7d
KB
4043void
4044_initialize_ia64_tdep (void)
4045{
b33e8514 4046 gdbarch_register (bfd_arch_ia64, ia64_gdbarch_init, NULL);
16461d7d 4047}