2013-04-30 Chao-ying Fu <Chao-ying.Fu@imgtec.com>
[deliverable/binutils-gdb.git] / gdb / ia64-tdep.c
CommitLineData
16461d7d 1/* Target-dependent code for the IA-64 for GDB, the GNU debugger.
ca557f44 2
28e7fd62 3 Copyright (C) 1999-2013 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"
bd1ce8ba 33#include "gdb_assert.h"
16461d7d
KB
34#include "objfiles.h"
35#include "elf/common.h" /* for DT_PLTGOT value */
244bc108 36#include "elf-bfd.h"
a89aa300 37#include "dis-asm.h"
7d9b040b 38#include "infcall.h"
b33e8514 39#include "osabi.h"
9fc9f5e2 40#include "ia64-tdep.h"
0d5de010 41#include "cp-abi.h"
16461d7d 42
968d1cb4 43#ifdef HAVE_LIBUNWIND_IA64_H
8973ff21 44#include "elf/ia64.h" /* for PT_IA_64_UNWIND value */
05e7c244 45#include "ia64-libunwind-tdep.h"
c5a27d9c
JJ
46
47/* Note: KERNEL_START is supposed to be an address which is not going
48 to ever contain any valid unwind info. For ia64 linux, the choice
49 of 0xc000000000000000 is fairly safe since that's uncached space.
50
51 We use KERNEL_START as follows: after obtaining the kernel's
52 unwind table via getunwind(), we project its unwind data into
53 address-range KERNEL_START-(KERNEL_START+ktab_size) and then
54 when ia64_access_mem() sees a memory access to this
55 address-range, we redirect it to ktab instead.
56
57 None of this hackery is needed with a modern kernel/libcs
58 which uses the kernel virtual DSO to provide access to the
59 kernel's unwind info. In that case, ktab_size remains 0 and
60 hence the value of KERNEL_START doesn't matter. */
61
62#define KERNEL_START 0xc000000000000000ULL
63
64static size_t ktab_size = 0;
65struct ia64_table_entry
66 {
67 uint64_t start_offset;
68 uint64_t end_offset;
69 uint64_t info_offset;
70 };
71
72static struct ia64_table_entry *ktab = NULL;
73
968d1cb4
JJ
74#endif
75
698cb3f0
KB
76/* An enumeration of the different IA-64 instruction types. */
77
16461d7d
KB
78typedef enum instruction_type
79{
80 A, /* Integer ALU ; I-unit or M-unit */
81 I, /* Non-ALU integer; I-unit */
82 M, /* Memory ; M-unit */
83 F, /* Floating-point ; F-unit */
84 B, /* Branch ; B-unit */
85 L, /* Extended (L+X) ; I-unit */
86 X, /* Extended (L+X) ; I-unit */
87 undefined /* undefined or reserved */
88} instruction_type;
89
90/* We represent IA-64 PC addresses as the value of the instruction
91 pointer or'd with some bit combination in the low nibble which
92 represents the slot number in the bundle addressed by the
93 instruction pointer. The problem is that the Linux kernel
94 multiplies its slot numbers (for exceptions) by one while the
95 disassembler multiplies its slot numbers by 6. In addition, I've
96 heard it said that the simulator uses 1 as the multiplier.
97
98 I've fixed the disassembler so that the bytes_per_line field will
99 be the slot multiplier. If bytes_per_line comes in as zero, it
100 is set to six (which is how it was set up initially). -- objdump
101 displays pretty disassembly dumps with this value. For our purposes,
102 we'll set bytes_per_line to SLOT_MULTIPLIER. This is okay since we
1777feb0 103 never want to also display the raw bytes the way objdump does. */
16461d7d
KB
104
105#define SLOT_MULTIPLIER 1
106
1777feb0 107/* Length in bytes of an instruction bundle. */
16461d7d
KB
108
109#define BUNDLE_LEN 16
110
939c61fa
JK
111/* See the saved memory layout comment for ia64_memory_insert_breakpoint. */
112
113#if BREAKPOINT_MAX < BUNDLE_LEN - 2
114# error "BREAKPOINT_MAX < BUNDLE_LEN - 2"
115#endif
116
16461d7d
KB
117static gdbarch_init_ftype ia64_gdbarch_init;
118
119static gdbarch_register_name_ftype ia64_register_name;
004d836a 120static gdbarch_register_type_ftype ia64_register_type;
16461d7d 121static gdbarch_breakpoint_from_pc_ftype ia64_breakpoint_from_pc;
16461d7d 122static gdbarch_skip_prologue_ftype ia64_skip_prologue;
64a5b29c 123static struct type *is_float_or_hfa_type (struct type *t);
e17a4113
UW
124static CORE_ADDR ia64_find_global_pointer (struct gdbarch *gdbarch,
125 CORE_ADDR faddr);
16461d7d 126
004d836a 127#define NUM_IA64_RAW_REGS 462
16461d7d 128
16461d7d
KB
129static int sp_regnum = IA64_GR12_REGNUM;
130static int fp_regnum = IA64_VFP_REGNUM;
131static int lr_regnum = IA64_VRAP_REGNUM;
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
146static char *ia64_register_names[] =
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
KB
515 int slotnum = (int) (addr & 0x0f) / SLOT_MULTIPLIER;
516 long long template;
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);
547 template = extract_bit_field (bundle, 0, 5);
548 *it = template_encoding_table[(int)template][slotnum];
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{
8181d85f 641 CORE_ADDR addr = bp_tgt->placed_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;
126fa72d 646 int template;
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
35ec2a3e 675 template = extract_bit_field (bundle, 0, 5);
73a9714c
JB
676 if (template_encoding_table[template][slotnum] == X)
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 }
685 if (template_encoding_table[template][slotnum] == L)
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
b554e4bd
JK
725 bp_tgt->placed_size = bp_tgt->shadow_len;
726
73a9714c 727 val = target_write_memory (addr + shadow_slotnum, bundle + shadow_slotnum,
fbfaaae5 728 bp_tgt->shadow_len);
16461d7d 729
939c61fa 730 do_cleanups (cleanup);
16461d7d
KB
731 return val;
732}
733
734static int
ae4b2284
MD
735ia64_memory_remove_breakpoint (struct gdbarch *gdbarch,
736 struct bp_target_info *bp_tgt)
16461d7d 737{
8181d85f 738 CORE_ADDR addr = bp_tgt->placed_address;
939c61fa 739 gdb_byte bundle_mem[BUNDLE_LEN], bundle_saved[BUNDLE_LEN];
73a9714c 740 int slotnum = (addr & 0x0f) / SLOT_MULTIPLIER, shadow_slotnum;
939c61fa 741 long long instr_breakpoint, instr_saved;
16461d7d 742 int val;
126fa72d 743 int template;
1de34ab7 744 struct cleanup *cleanup;
16461d7d
KB
745
746 addr &= ~0x0f;
747
1de34ab7
JB
748 /* Disable the automatic memory restoration from breakpoints while
749 we read our instruction bundle. Otherwise, the general restoration
939c61fa
JK
750 mechanism kicks in and we would possibly remove parts of the adjacent
751 placed breakpoints. It is due to our SHADOW_CONTENTS overlapping the real
752 breakpoint instruction bits region. */
1de34ab7 753 cleanup = make_show_memory_breakpoints_cleanup (1);
939c61fa 754 val = target_read_memory (addr, bundle_mem, BUNDLE_LEN);
fbfaaae5
JK
755 if (val != 0)
756 {
757 do_cleanups (cleanup);
758 return val;
759 }
126fa72d 760
73a9714c
JB
761 /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
762 for addressing the SHADOW_CONTENTS placement. */
763 shadow_slotnum = slotnum;
764
939c61fa 765 template = extract_bit_field (bundle_mem, 0, 5);
73a9714c
JB
766 if (template_encoding_table[template][slotnum] == X)
767 {
ca8b5032
JB
768 /* X unit types can only be used in slot 2, and are actually
769 part of a 2-slot L-X instruction. We refuse to insert
770 breakpoints at this address, so there should be no reason
771 for us attempting to remove one there, except if the program's
772 code somehow got modified in memory. */
73a9714c 773 gdb_assert (slotnum == 2);
ca8b5032
JB
774 warning (_("Cannot remove breakpoint at address %s from non-existing "
775 "X-type slot, memory has changed underneath"),
73a9714c
JB
776 paddress (gdbarch, bp_tgt->placed_address));
777 do_cleanups (cleanup);
778 return -1;
779 }
780 if (template_encoding_table[template][slotnum] == L)
781 {
ca8b5032
JB
782 /* L unit types can only be used in slot 1. But the breakpoint
783 was actually saved using slot 2, so update the slot number
784 accordingly. */
73a9714c
JB
785 gdb_assert (slotnum == 1);
786 slotnum = 2;
787 }
939c61fa 788
73a9714c 789 gdb_assert (bp_tgt->placed_size == BUNDLE_LEN - shadow_slotnum);
939c61fa
JK
790 gdb_assert (bp_tgt->placed_size == bp_tgt->shadow_len);
791
792 instr_breakpoint = slotN_contents (bundle_mem, slotnum);
793 if (instr_breakpoint != IA64_BREAKPOINT)
126fa72d 794 {
939c61fa
JK
795 warning (_("Cannot remove breakpoint at address %s, "
796 "no break instruction at such address."),
5af949e3 797 paddress (gdbarch, bp_tgt->placed_address));
a58162c2 798 do_cleanups (cleanup);
939c61fa 799 return -1;
126fa72d
PS
800 }
801
939c61fa
JK
802 /* Extract the original saved instruction from SLOTNUM normalizing its
803 bit-shift for INSTR_SAVED. */
804 memcpy (bundle_saved, bundle_mem, BUNDLE_LEN);
73a9714c
JB
805 memcpy (bundle_saved + shadow_slotnum, bp_tgt->shadow_contents,
806 bp_tgt->shadow_len);
939c61fa
JK
807 instr_saved = slotN_contents (bundle_saved, slotnum);
808
ca8b5032
JB
809 /* In BUNDLE_MEM, be careful to modify only the bits belonging to SLOTNUM
810 and not any of the other ones that are stored in SHADOW_CONTENTS. */
939c61fa 811 replace_slotN_contents (bundle_mem, instr_saved, slotnum);
dd110abf 812 val = target_write_raw_memory (addr, bundle_mem, BUNDLE_LEN);
16461d7d 813
1de34ab7 814 do_cleanups (cleanup);
16461d7d
KB
815 return val;
816}
817
939c61fa
JK
818/* As gdbarch_breakpoint_from_pc ranges have byte granularity and ia64
819 instruction slots ranges are bit-granular (41 bits) we have to provide an
820 extended range as described for ia64_memory_insert_breakpoint. We also take
821 care of preserving the `break' instruction 21-bit (or 62-bit) parameter to
822 make a match for permanent breakpoints. */
823
824static const gdb_byte *
1777feb0
MS
825ia64_breakpoint_from_pc (struct gdbarch *gdbarch,
826 CORE_ADDR *pcptr, int *lenptr)
16461d7d 827{
939c61fa
JK
828 CORE_ADDR addr = *pcptr;
829 static gdb_byte bundle[BUNDLE_LEN];
73a9714c 830 int slotnum = (int) (*pcptr & 0x0f) / SLOT_MULTIPLIER, shadow_slotnum;
939c61fa
JK
831 long long instr_fetched;
832 int val;
833 int template;
834 struct cleanup *cleanup;
835
836 if (slotnum > 2)
837 error (_("Can't insert breakpoint for slot numbers greater than 2."));
838
839 addr &= ~0x0f;
840
841 /* Enable the automatic memory restoration from breakpoints while
842 we read our instruction bundle to match bp_loc_is_permanent. */
843 cleanup = make_show_memory_breakpoints_cleanup (0);
844 val = target_read_memory (addr, bundle, BUNDLE_LEN);
845 do_cleanups (cleanup);
846
847 /* The memory might be unreachable. This can happen, for instance,
848 when the user inserts a breakpoint at an invalid address. */
849 if (val != 0)
850 return NULL;
851
73a9714c
JB
852 /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
853 for addressing the SHADOW_CONTENTS placement. */
854 shadow_slotnum = slotnum;
855
856 /* Cover always the last byte of the bundle for the L-X slot case. */
857 *lenptr = BUNDLE_LEN - shadow_slotnum;
858
939c61fa
JK
859 /* Check for L type instruction in slot 1, if present then bump up the slot
860 number to the slot 2. */
861 template = extract_bit_field (bundle, 0, 5);
73a9714c
JB
862 if (template_encoding_table[template][slotnum] == X)
863 {
864 gdb_assert (slotnum == 2);
865 error (_("Can't insert breakpoint for non-existing slot X"));
866 }
867 if (template_encoding_table[template][slotnum] == L)
868 {
869 gdb_assert (slotnum == 1);
870 slotnum = 2;
871 }
939c61fa
JK
872
873 /* A break instruction has its all its opcode bits cleared except for
874 the parameter value. For L+X slot pair we are at the X slot (slot 2) so
875 we should not touch the L slot - the upper 41 bits of the parameter. */
876 instr_fetched = slotN_contents (bundle, slotnum);
116e0965 877 instr_fetched &= 0x1003ffffc0LL;
939c61fa
JK
878 replace_slotN_contents (bundle, instr_fetched, slotnum);
879
73a9714c 880 return bundle + shadow_slotnum;
16461d7d
KB
881}
882
a78f21af 883static CORE_ADDR
61a1198a 884ia64_read_pc (struct regcache *regcache)
16461d7d 885{
61a1198a
UW
886 ULONGEST psr_value, pc_value;
887 int slot_num;
888
889 regcache_cooked_read_unsigned (regcache, IA64_PSR_REGNUM, &psr_value);
890 regcache_cooked_read_unsigned (regcache, IA64_IP_REGNUM, &pc_value);
891 slot_num = (psr_value >> 41) & 3;
16461d7d
KB
892
893 return pc_value | (slot_num * SLOT_MULTIPLIER);
894}
895
54a5c8d8 896void
61a1198a 897ia64_write_pc (struct regcache *regcache, CORE_ADDR new_pc)
16461d7d
KB
898{
899 int slot_num = (int) (new_pc & 0xf) / SLOT_MULTIPLIER;
61a1198a
UW
900 ULONGEST psr_value;
901
902 regcache_cooked_read_unsigned (regcache, IA64_PSR_REGNUM, &psr_value);
16461d7d 903 psr_value &= ~(3LL << 41);
61a1198a 904 psr_value |= (ULONGEST)(slot_num & 0x3) << 41;
16461d7d
KB
905
906 new_pc &= ~0xfLL;
907
61a1198a
UW
908 regcache_cooked_write_unsigned (regcache, IA64_PSR_REGNUM, psr_value);
909 regcache_cooked_write_unsigned (regcache, IA64_IP_REGNUM, new_pc);
16461d7d
KB
910}
911
912#define IS_NaT_COLLECTION_ADDR(addr) ((((addr) >> 3) & 0x3f) == 0x3f)
913
914/* Returns the address of the slot that's NSLOTS slots away from
1777feb0 915 the address ADDR. NSLOTS may be positive or negative. */
16461d7d
KB
916static CORE_ADDR
917rse_address_add(CORE_ADDR addr, int nslots)
918{
919 CORE_ADDR new_addr;
920 int mandatory_nat_slots = nslots / 63;
921 int direction = nslots < 0 ? -1 : 1;
922
923 new_addr = addr + 8 * (nslots + mandatory_nat_slots);
924
925 if ((new_addr >> 9) != ((addr + 8 * 64 * mandatory_nat_slots) >> 9))
926 new_addr += 8 * direction;
927
928 if (IS_NaT_COLLECTION_ADDR(new_addr))
929 new_addr += 8 * direction;
930
931 return new_addr;
932}
933
05d1431c 934static enum register_status
004d836a 935ia64_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
88d82102 936 int regnum, gdb_byte *buf)
16461d7d 937{
e17a4113 938 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
05d1431c 939 enum register_status status;
e17a4113 940
004d836a 941 if (regnum >= V32_REGNUM && regnum <= V127_REGNUM)
244bc108 942 {
88d82102 943#ifdef HAVE_LIBUNWIND_IA64_H
1777feb0
MS
944 /* First try and use the libunwind special reg accessor,
945 otherwise fallback to standard logic. */
c5a27d9c 946 if (!libunwind_is_initialized ()
45ecac4b 947 || libunwind_get_reg_special (gdbarch, regcache, regnum, buf) != 0)
88d82102 948#endif
004d836a 949 {
1777feb0
MS
950 /* The fallback position is to assume that r32-r127 are
951 found sequentially in memory starting at $bof. This
952 isn't always true, but without libunwind, this is the
953 best we can do. */
05d1431c 954 enum register_status status;
c5a27d9c
JJ
955 ULONGEST cfm;
956 ULONGEST bsp;
957 CORE_ADDR reg;
05d1431c
PA
958
959 status = regcache_cooked_read_unsigned (regcache,
960 IA64_BSP_REGNUM, &bsp);
961 if (status != REG_VALID)
962 return status;
963
964 status = regcache_cooked_read_unsigned (regcache,
965 IA64_CFM_REGNUM, &cfm);
966 if (status != REG_VALID)
967 return status;
968
c5a27d9c 969 /* The bsp points at the end of the register frame so we
1777feb0
MS
970 subtract the size of frame from it to get start of
971 register frame. */
c5a27d9c
JJ
972 bsp = rse_address_add (bsp, -(cfm & 0x7f));
973
974 if ((cfm & 0x7f) > regnum - V32_REGNUM)
975 {
976 ULONGEST reg_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
e17a4113
UW
977 reg = read_memory_integer ((CORE_ADDR)reg_addr, 8, byte_order);
978 store_unsigned_integer (buf, register_size (gdbarch, regnum),
979 byte_order, reg);
c5a27d9c
JJ
980 }
981 else
e17a4113
UW
982 store_unsigned_integer (buf, register_size (gdbarch, regnum),
983 byte_order, 0);
004d836a 984 }
004d836a
JJ
985 }
986 else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT31_REGNUM)
987 {
988 ULONGEST unatN_val;
989 ULONGEST unat;
05d1431c
PA
990 status = regcache_cooked_read_unsigned (regcache, IA64_UNAT_REGNUM, &unat);
991 if (status != REG_VALID)
992 return status;
004d836a 993 unatN_val = (unat & (1LL << (regnum - IA64_NAT0_REGNUM))) != 0;
e17a4113
UW
994 store_unsigned_integer (buf, register_size (gdbarch, regnum),
995 byte_order, unatN_val);
004d836a
JJ
996 }
997 else if (IA64_NAT32_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
998 {
999 ULONGEST natN_val = 0;
1000 ULONGEST bsp;
1001 ULONGEST cfm;
1002 CORE_ADDR gr_addr = 0;
05d1431c
PA
1003 status = regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
1004 if (status != REG_VALID)
1005 return status;
1006 status = regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1007 if (status != REG_VALID)
1008 return status;
004d836a
JJ
1009
1010 /* The bsp points at the end of the register frame so we
1011 subtract the size of frame from it to get start of register frame. */
1012 bsp = rse_address_add (bsp, -(cfm & 0x7f));
1013
1014 if ((cfm & 0x7f) > regnum - V32_REGNUM)
1015 gr_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
1016
1017 if (gr_addr != 0)
1018 {
1019 /* Compute address of nat collection bits. */
1020 CORE_ADDR nat_addr = gr_addr | 0x1f8;
1021 CORE_ADDR nat_collection;
1022 int nat_bit;
1023 /* If our nat collection address is bigger than bsp, we have to get
1024 the nat collection from rnat. Otherwise, we fetch the nat
1025 collection from the computed address. */
1026 if (nat_addr >= bsp)
1777feb0
MS
1027 regcache_cooked_read_unsigned (regcache, IA64_RNAT_REGNUM,
1028 &nat_collection);
004d836a 1029 else
e17a4113 1030 nat_collection = read_memory_integer (nat_addr, 8, byte_order);
004d836a
JJ
1031 nat_bit = (gr_addr >> 3) & 0x3f;
1032 natN_val = (nat_collection >> nat_bit) & 1;
1033 }
1034
e17a4113
UW
1035 store_unsigned_integer (buf, register_size (gdbarch, regnum),
1036 byte_order, natN_val);
244bc108 1037 }
004d836a
JJ
1038 else if (regnum == VBOF_REGNUM)
1039 {
1040 /* A virtual register frame start is provided for user convenience.
1777feb0 1041 It can be calculated as the bsp - sof (sizeof frame). */
004d836a
JJ
1042 ULONGEST bsp, vbsp;
1043 ULONGEST cfm;
05d1431c
PA
1044 status = regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
1045 if (status != REG_VALID)
1046 return status;
1047 status = regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1048 if (status != REG_VALID)
1049 return status;
004d836a
JJ
1050
1051 /* The bsp points at the end of the register frame so we
1052 subtract the size of frame from it to get beginning of frame. */
1053 vbsp = rse_address_add (bsp, -(cfm & 0x7f));
e17a4113
UW
1054 store_unsigned_integer (buf, register_size (gdbarch, regnum),
1055 byte_order, vbsp);
004d836a
JJ
1056 }
1057 else if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
1058 {
1059 ULONGEST pr;
1060 ULONGEST cfm;
1061 ULONGEST prN_val;
05d1431c
PA
1062 status = regcache_cooked_read_unsigned (regcache, IA64_PR_REGNUM, &pr);
1063 if (status != REG_VALID)
1064 return status;
1065 status = regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1066 if (status != REG_VALID)
1067 return status;
004d836a
JJ
1068
1069 if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
1070 {
1071 /* Fetch predicate register rename base from current frame
1777feb0 1072 marker for this frame. */
004d836a
JJ
1073 int rrb_pr = (cfm >> 32) & 0x3f;
1074
1777feb0 1075 /* Adjust the register number to account for register rotation. */
004d836a
JJ
1076 regnum = VP16_REGNUM
1077 + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
1078 }
1079 prN_val = (pr & (1LL << (regnum - VP0_REGNUM))) != 0;
e17a4113
UW
1080 store_unsigned_integer (buf, register_size (gdbarch, regnum),
1081 byte_order, prN_val);
004d836a
JJ
1082 }
1083 else
088568da 1084 memset (buf, 0, register_size (gdbarch, regnum));
05d1431c
PA
1085
1086 return REG_VALID;
16461d7d
KB
1087}
1088
004d836a
JJ
1089static void
1090ia64_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
88d82102 1091 int regnum, const gdb_byte *buf)
16461d7d 1092{
e17a4113
UW
1093 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1094
004d836a 1095 if (regnum >= V32_REGNUM && regnum <= V127_REGNUM)
244bc108 1096 {
004d836a
JJ
1097 ULONGEST bsp;
1098 ULONGEST cfm;
004d836a
JJ
1099 regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
1100 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1101
1102 bsp = rse_address_add (bsp, -(cfm & 0x7f));
1103
1104 if ((cfm & 0x7f) > regnum - V32_REGNUM)
1105 {
1106 ULONGEST reg_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
1777feb0 1107 write_memory (reg_addr, (void *) buf, 8);
004d836a
JJ
1108 }
1109 }
1110 else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT31_REGNUM)
1111 {
1112 ULONGEST unatN_val, unat, unatN_mask;
1113 regcache_cooked_read_unsigned (regcache, IA64_UNAT_REGNUM, &unat);
1777feb0
MS
1114 unatN_val = extract_unsigned_integer (buf, register_size (gdbarch,
1115 regnum),
e17a4113 1116 byte_order);
004d836a
JJ
1117 unatN_mask = (1LL << (regnum - IA64_NAT0_REGNUM));
1118 if (unatN_val == 0)
1119 unat &= ~unatN_mask;
1120 else if (unatN_val == 1)
1121 unat |= unatN_mask;
1122 regcache_cooked_write_unsigned (regcache, IA64_UNAT_REGNUM, unat);
1123 }
1124 else if (IA64_NAT32_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
1125 {
1126 ULONGEST natN_val;
1127 ULONGEST bsp;
1128 ULONGEST cfm;
1129 CORE_ADDR gr_addr = 0;
1130 regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
1131 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1132
1133 /* The bsp points at the end of the register frame so we
1134 subtract the size of frame from it to get start of register frame. */
1135 bsp = rse_address_add (bsp, -(cfm & 0x7f));
1136
1137 if ((cfm & 0x7f) > regnum - V32_REGNUM)
1138 gr_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
1139
1777feb0
MS
1140 natN_val = extract_unsigned_integer (buf, register_size (gdbarch,
1141 regnum),
e17a4113 1142 byte_order);
004d836a
JJ
1143
1144 if (gr_addr != 0 && (natN_val == 0 || natN_val == 1))
1145 {
1146 /* Compute address of nat collection bits. */
1147 CORE_ADDR nat_addr = gr_addr | 0x1f8;
1148 CORE_ADDR nat_collection;
1149 int natN_bit = (gr_addr >> 3) & 0x3f;
1150 ULONGEST natN_mask = (1LL << natN_bit);
1151 /* If our nat collection address is bigger than bsp, we have to get
1152 the nat collection from rnat. Otherwise, we fetch the nat
1153 collection from the computed address. */
1154 if (nat_addr >= bsp)
1155 {
05d1431c
PA
1156 regcache_cooked_read_unsigned (regcache,
1157 IA64_RNAT_REGNUM,
1777feb0 1158 &nat_collection);
004d836a
JJ
1159 if (natN_val)
1160 nat_collection |= natN_mask;
1161 else
1162 nat_collection &= ~natN_mask;
1777feb0
MS
1163 regcache_cooked_write_unsigned (regcache, IA64_RNAT_REGNUM,
1164 nat_collection);
004d836a
JJ
1165 }
1166 else
1167 {
948f8e3d 1168 gdb_byte nat_buf[8];
e17a4113 1169 nat_collection = read_memory_integer (nat_addr, 8, byte_order);
004d836a
JJ
1170 if (natN_val)
1171 nat_collection |= natN_mask;
1172 else
1173 nat_collection &= ~natN_mask;
e17a4113
UW
1174 store_unsigned_integer (nat_buf, register_size (gdbarch, regnum),
1175 byte_order, nat_collection);
004d836a
JJ
1176 write_memory (nat_addr, nat_buf, 8);
1177 }
1178 }
1179 }
1180 else if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
1181 {
1182 ULONGEST pr;
1183 ULONGEST cfm;
1184 ULONGEST prN_val;
1185 ULONGEST prN_mask;
1186
1187 regcache_cooked_read_unsigned (regcache, IA64_PR_REGNUM, &pr);
1188 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1189
1190 if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
1191 {
1192 /* Fetch predicate register rename base from current frame
1777feb0 1193 marker for this frame. */
004d836a
JJ
1194 int rrb_pr = (cfm >> 32) & 0x3f;
1195
1777feb0 1196 /* Adjust the register number to account for register rotation. */
004d836a
JJ
1197 regnum = VP16_REGNUM
1198 + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
1199 }
e17a4113
UW
1200 prN_val = extract_unsigned_integer (buf, register_size (gdbarch, regnum),
1201 byte_order);
004d836a
JJ
1202 prN_mask = (1LL << (regnum - VP0_REGNUM));
1203 if (prN_val == 0)
1204 pr &= ~prN_mask;
1205 else if (prN_val == 1)
1206 pr |= prN_mask;
1207 regcache_cooked_write_unsigned (regcache, IA64_PR_REGNUM, pr);
244bc108 1208 }
16461d7d
KB
1209}
1210
004d836a
JJ
1211/* The ia64 needs to convert between various ieee floating-point formats
1212 and the special ia64 floating point register format. */
1213
1214static int
0abe36f5 1215ia64_convert_register_p (struct gdbarch *gdbarch, int regno, struct type *type)
004d836a 1216{
83acabca 1217 return (regno >= IA64_FR0_REGNUM && regno <= IA64_FR127_REGNUM
27067745 1218 && type != ia64_ext_type (gdbarch));
004d836a
JJ
1219}
1220
8dccd430 1221static int
004d836a 1222ia64_register_to_value (struct frame_info *frame, int regnum,
8dccd430
PA
1223 struct type *valtype, gdb_byte *out,
1224 int *optimizedp, int *unavailablep)
004d836a 1225{
27067745 1226 struct gdbarch *gdbarch = get_frame_arch (frame);
948f8e3d 1227 gdb_byte in[MAX_REGISTER_SIZE];
8dccd430
PA
1228
1229 /* Convert to TYPE. */
1230 if (!get_frame_register_bytes (frame, regnum, 0,
1231 register_size (gdbarch, regnum),
1232 in, optimizedp, unavailablep))
1233 return 0;
1234
27067745 1235 convert_typed_floating (in, ia64_ext_type (gdbarch), out, valtype);
8dccd430
PA
1236 *optimizedp = *unavailablep = 0;
1237 return 1;
004d836a
JJ
1238}
1239
1240static void
1241ia64_value_to_register (struct frame_info *frame, int regnum,
88d82102 1242 struct type *valtype, const gdb_byte *in)
004d836a 1243{
27067745 1244 struct gdbarch *gdbarch = get_frame_arch (frame);
948f8e3d 1245 gdb_byte out[MAX_REGISTER_SIZE];
27067745 1246 convert_typed_floating (in, valtype, out, ia64_ext_type (gdbarch));
004d836a
JJ
1247 put_frame_register (frame, regnum, out);
1248}
1249
1250
58ab00f9
KB
1251/* Limit the number of skipped non-prologue instructions since examining
1252 of the prologue is expensive. */
5ea2bd7f 1253static int max_skip_non_prologue_insns = 40;
58ab00f9
KB
1254
1255/* Given PC representing the starting address of a function, and
1256 LIM_PC which is the (sloppy) limit to which to scan when looking
1257 for a prologue, attempt to further refine this limit by using
1258 the line data in the symbol table. If successful, a better guess
1259 on where the prologue ends is returned, otherwise the previous
1260 value of lim_pc is returned. TRUST_LIMIT is a pointer to a flag
1261 which will be set to indicate whether the returned limit may be
1262 used with no further scanning in the event that the function is
1263 frameless. */
1264
634aa483
AC
1265/* FIXME: cagney/2004-02-14: This function and logic have largely been
1266 superseded by skip_prologue_using_sal. */
1267
58ab00f9
KB
1268static CORE_ADDR
1269refine_prologue_limit (CORE_ADDR pc, CORE_ADDR lim_pc, int *trust_limit)
1270{
1271 struct symtab_and_line prologue_sal;
1272 CORE_ADDR start_pc = pc;
39312971
JB
1273 CORE_ADDR end_pc;
1274
1275 /* The prologue can not possibly go past the function end itself,
1276 so we can already adjust LIM_PC accordingly. */
1277 if (find_pc_partial_function (pc, NULL, NULL, &end_pc) && end_pc < lim_pc)
1278 lim_pc = end_pc;
58ab00f9
KB
1279
1280 /* Start off not trusting the limit. */
1281 *trust_limit = 0;
1282
1283 prologue_sal = find_pc_line (pc, 0);
1284 if (prologue_sal.line != 0)
1285 {
1286 int i;
1287 CORE_ADDR addr = prologue_sal.end;
1288
1289 /* Handle the case in which compiler's optimizer/scheduler
1290 has moved instructions into the prologue. We scan ahead
1291 in the function looking for address ranges whose corresponding
1292 line number is less than or equal to the first one that we
1293 found for the function. (It can be less than when the
1294 scheduler puts a body instruction before the first prologue
1295 instruction.) */
1296 for (i = 2 * max_skip_non_prologue_insns;
1297 i > 0 && (lim_pc == 0 || addr < lim_pc);
1298 i--)
1299 {
1300 struct symtab_and_line sal;
1301
1302 sal = find_pc_line (addr, 0);
1303 if (sal.line == 0)
1304 break;
1305 if (sal.line <= prologue_sal.line
1306 && sal.symtab == prologue_sal.symtab)
1307 {
1308 prologue_sal = sal;
1309 }
1310 addr = sal.end;
1311 }
1312
1313 if (lim_pc == 0 || prologue_sal.end < lim_pc)
1314 {
1315 lim_pc = prologue_sal.end;
1316 if (start_pc == get_pc_function_start (lim_pc))
1317 *trust_limit = 1;
1318 }
1319 }
1320 return lim_pc;
1321}
1322
16461d7d
KB
1323#define isScratch(_regnum_) ((_regnum_) == 2 || (_regnum_) == 3 \
1324 || (8 <= (_regnum_) && (_regnum_) <= 11) \
1325 || (14 <= (_regnum_) && (_regnum_) <= 31))
1326#define imm9(_instr_) \
1327 ( ((((_instr_) & 0x01000000000LL) ? -1 : 0) << 8) \
1328 | (((_instr_) & 0x00008000000LL) >> 20) \
1329 | (((_instr_) & 0x00000001fc0LL) >> 6))
1330
004d836a
JJ
1331/* Allocate and initialize a frame cache. */
1332
1333static struct ia64_frame_cache *
1334ia64_alloc_frame_cache (void)
1335{
1336 struct ia64_frame_cache *cache;
1337 int i;
1338
1339 cache = FRAME_OBSTACK_ZALLOC (struct ia64_frame_cache);
1340
1341 /* Base address. */
1342 cache->base = 0;
1343 cache->pc = 0;
1344 cache->cfm = 0;
4afcc598 1345 cache->prev_cfm = 0;
004d836a
JJ
1346 cache->sof = 0;
1347 cache->sol = 0;
1348 cache->sor = 0;
1349 cache->bsp = 0;
1350 cache->fp_reg = 0;
1351 cache->frameless = 1;
1352
1353 for (i = 0; i < NUM_IA64_RAW_REGS; i++)
1354 cache->saved_regs[i] = 0;
1355
1356 return cache;
1357}
1358
16461d7d 1359static CORE_ADDR
15c1e57f
JB
1360examine_prologue (CORE_ADDR pc, CORE_ADDR lim_pc,
1361 struct frame_info *this_frame,
1362 struct ia64_frame_cache *cache)
16461d7d
KB
1363{
1364 CORE_ADDR next_pc;
1365 CORE_ADDR last_prologue_pc = pc;
16461d7d
KB
1366 instruction_type it;
1367 long long instr;
16461d7d
KB
1368 int cfm_reg = 0;
1369 int ret_reg = 0;
1370 int fp_reg = 0;
1371 int unat_save_reg = 0;
1372 int pr_save_reg = 0;
1373 int mem_stack_frame_size = 0;
1374 int spill_reg = 0;
1375 CORE_ADDR spill_addr = 0;
0927a22b
KB
1376 char instores[8];
1377 char infpstores[8];
5ea2bd7f 1378 char reg_contents[256];
58ab00f9 1379 int trust_limit;
004d836a
JJ
1380 int frameless = 1;
1381 int i;
1382 CORE_ADDR addr;
e362b510 1383 gdb_byte buf[8];
004d836a 1384 CORE_ADDR bof, sor, sol, sof, cfm, rrb_gr;
0927a22b
KB
1385
1386 memset (instores, 0, sizeof instores);
1387 memset (infpstores, 0, sizeof infpstores);
5ea2bd7f 1388 memset (reg_contents, 0, sizeof reg_contents);
16461d7d 1389
004d836a
JJ
1390 if (cache->after_prologue != 0
1391 && cache->after_prologue <= lim_pc)
1392 return cache->after_prologue;
16461d7d 1393
58ab00f9 1394 lim_pc = refine_prologue_limit (pc, lim_pc, &trust_limit);
16461d7d 1395 next_pc = fetch_instruction (pc, &it, &instr);
5ea2bd7f
JJ
1396
1397 /* We want to check if we have a recognizable function start before we
1398 look ahead for a prologue. */
16461d7d
KB
1399 if (pc < lim_pc && next_pc
1400 && it == M && ((instr & 0x1ee0000003fLL) == 0x02c00000000LL))
1401 {
5ea2bd7f 1402 /* alloc - start of a regular function. */
16461d7d
KB
1403 int sor = (int) ((instr & 0x00078000000LL) >> 27);
1404 int sol = (int) ((instr & 0x00007f00000LL) >> 20);
1405 int sof = (int) ((instr & 0x000000fe000LL) >> 13);
16461d7d 1406 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
004d836a
JJ
1407
1408 /* Verify that the current cfm matches what we think is the
1409 function start. If we have somehow jumped within a function,
1410 we do not want to interpret the prologue and calculate the
1777feb0
MS
1411 addresses of various registers such as the return address.
1412 We will instead treat the frame as frameless. */
15c1e57f 1413 if (!this_frame ||
004d836a
JJ
1414 (sof == (cache->cfm & 0x7f) &&
1415 sol == ((cache->cfm >> 7) & 0x7f)))
1416 frameless = 0;
1417
16461d7d
KB
1418 cfm_reg = rN;
1419 last_prologue_pc = next_pc;
1420 pc = next_pc;
1421 }
1422 else
58ab00f9 1423 {
5ea2bd7f
JJ
1424 /* Look for a leaf routine. */
1425 if (pc < lim_pc && next_pc
1426 && (it == I || it == M)
1427 && ((instr & 0x1ee00000000LL) == 0x10800000000LL))
1428 {
1429 /* adds rN = imm14, rM (or mov rN, rM when imm14 is 0) */
1430 int imm = (int) ((((instr & 0x01000000000LL) ? -1 : 0) << 13)
1431 | ((instr & 0x001f8000000LL) >> 20)
1432 | ((instr & 0x000000fe000LL) >> 13));
1433 int rM = (int) ((instr & 0x00007f00000LL) >> 20);
1434 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1435 int qp = (int) (instr & 0x0000000003fLL);
1436 if (qp == 0 && rN == 2 && imm == 0 && rM == 12 && fp_reg == 0)
1437 {
1777feb0 1438 /* mov r2, r12 - beginning of leaf routine. */
5ea2bd7f 1439 fp_reg = rN;
5ea2bd7f
JJ
1440 last_prologue_pc = next_pc;
1441 }
1442 }
1443
1444 /* If we don't recognize a regular function or leaf routine, we are
1445 done. */
1446 if (!fp_reg)
1447 {
1448 pc = lim_pc;
1449 if (trust_limit)
1450 last_prologue_pc = lim_pc;
1451 }
58ab00f9 1452 }
16461d7d
KB
1453
1454 /* Loop, looking for prologue instructions, keeping track of
1777feb0 1455 where preserved registers were spilled. */
16461d7d
KB
1456 while (pc < lim_pc)
1457 {
1458 next_pc = fetch_instruction (pc, &it, &instr);
1459 if (next_pc == 0)
1460 break;
1461
594706e6 1462 if (it == B && ((instr & 0x1e1f800003fLL) != 0x04000000000LL))
0927a22b 1463 {
1777feb0 1464 /* Exit loop upon hitting a non-nop branch instruction. */
102d615a
JJ
1465 if (trust_limit)
1466 lim_pc = pc;
1467 break;
1468 }
1469 else if (((instr & 0x3fLL) != 0LL) &&
1470 (frameless || ret_reg != 0))
1471 {
1472 /* Exit loop upon hitting a predicated instruction if
1473 we already have the return register or if we are frameless. */
5ea2bd7f
JJ
1474 if (trust_limit)
1475 lim_pc = pc;
0927a22b
KB
1476 break;
1477 }
1478 else if (it == I && ((instr & 0x1eff8000000LL) == 0x00188000000LL))
16461d7d
KB
1479 {
1480 /* Move from BR */
1481 int b2 = (int) ((instr & 0x0000000e000LL) >> 13);
1482 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1483 int qp = (int) (instr & 0x0000000003f);
1484
1485 if (qp == 0 && b2 == 0 && rN >= 32 && ret_reg == 0)
1486 {
1487 ret_reg = rN;
1488 last_prologue_pc = next_pc;
1489 }
1490 }
1491 else if ((it == I || it == M)
1492 && ((instr & 0x1ee00000000LL) == 0x10800000000LL))
1493 {
1494 /* adds rN = imm14, rM (or mov rN, rM when imm14 is 0) */
1495 int imm = (int) ((((instr & 0x01000000000LL) ? -1 : 0) << 13)
1496 | ((instr & 0x001f8000000LL) >> 20)
1497 | ((instr & 0x000000fe000LL) >> 13));
1498 int rM = (int) ((instr & 0x00007f00000LL) >> 20);
1499 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1500 int qp = (int) (instr & 0x0000000003fLL);
1501
1502 if (qp == 0 && rN >= 32 && imm == 0 && rM == 12 && fp_reg == 0)
1503 {
1504 /* mov rN, r12 */
1505 fp_reg = rN;
1506 last_prologue_pc = next_pc;
1507 }
1508 else if (qp == 0 && rN == 12 && rM == 12)
1509 {
1510 /* adds r12, -mem_stack_frame_size, r12 */
1511 mem_stack_frame_size -= imm;
1512 last_prologue_pc = next_pc;
1513 }
1514 else if (qp == 0 && rN == 2
1515 && ((rM == fp_reg && fp_reg != 0) || rM == 12))
1516 {
e362b510 1517 gdb_byte buf[MAX_REGISTER_SIZE];
004d836a 1518 CORE_ADDR saved_sp = 0;
16461d7d
KB
1519 /* adds r2, spilloffset, rFramePointer
1520 or
1521 adds r2, spilloffset, r12
1522
1523 Get ready for stf.spill or st8.spill instructions.
1777feb0 1524 The address to start spilling at is loaded into r2.
16461d7d
KB
1525 FIXME: Why r2? That's what gcc currently uses; it
1526 could well be different for other compilers. */
1527
1777feb0 1528 /* Hmm... whether or not this will work will depend on
16461d7d
KB
1529 where the pc is. If it's still early in the prologue
1530 this'll be wrong. FIXME */
15c1e57f 1531 if (this_frame)
004d836a 1532 {
e17a4113
UW
1533 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1534 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
15c1e57f 1535 get_frame_register (this_frame, sp_regnum, buf);
e17a4113 1536 saved_sp = extract_unsigned_integer (buf, 8, byte_order);
004d836a
JJ
1537 }
1538 spill_addr = saved_sp
16461d7d
KB
1539 + (rM == 12 ? 0 : mem_stack_frame_size)
1540 + imm;
1541 spill_reg = rN;
1542 last_prologue_pc = next_pc;
1543 }
b7d038ae 1544 else if (qp == 0 && rM >= 32 && rM < 40 && !instores[rM-32] &&
5ea2bd7f
JJ
1545 rN < 256 && imm == 0)
1546 {
1777feb0 1547 /* mov rN, rM where rM is an input register. */
5ea2bd7f
JJ
1548 reg_contents[rN] = rM;
1549 last_prologue_pc = next_pc;
1550 }
1551 else if (frameless && qp == 0 && rN == fp_reg && imm == 0 &&
1552 rM == 2)
1553 {
1554 /* mov r12, r2 */
1555 last_prologue_pc = next_pc;
1556 break;
1557 }
16461d7d
KB
1558 }
1559 else if (it == M
1560 && ( ((instr & 0x1efc0000000LL) == 0x0eec0000000LL)
1561 || ((instr & 0x1ffc8000000LL) == 0x0cec0000000LL) ))
1562 {
1563 /* stf.spill [rN] = fM, imm9
1564 or
1565 stf.spill [rN] = fM */
1566
1567 int imm = imm9(instr);
1568 int rN = (int) ((instr & 0x00007f00000LL) >> 20);
1569 int fM = (int) ((instr & 0x000000fe000LL) >> 13);
1570 int qp = (int) (instr & 0x0000000003fLL);
1571 if (qp == 0 && rN == spill_reg && spill_addr != 0
1572 && ((2 <= fM && fM <= 5) || (16 <= fM && fM <= 31)))
1573 {
004d836a 1574 cache->saved_regs[IA64_FR0_REGNUM + fM] = spill_addr;
16461d7d 1575
594706e6 1576 if ((instr & 0x1efc0000000LL) == 0x0eec0000000LL)
16461d7d
KB
1577 spill_addr += imm;
1578 else
1777feb0 1579 spill_addr = 0; /* last one; must be done. */
16461d7d
KB
1580 last_prologue_pc = next_pc;
1581 }
1582 }
1583 else if ((it == M && ((instr & 0x1eff8000000LL) == 0x02110000000LL))
1584 || (it == I && ((instr & 0x1eff8000000LL) == 0x00050000000LL)) )
1585 {
1586 /* mov.m rN = arM
1587 or
1588 mov.i rN = arM */
1589
1590 int arM = (int) ((instr & 0x00007f00000LL) >> 20);
1591 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1592 int qp = (int) (instr & 0x0000000003fLL);
1593 if (qp == 0 && isScratch (rN) && arM == 36 /* ar.unat */)
1594 {
1595 /* We have something like "mov.m r3 = ar.unat". Remember the
1777feb0 1596 r3 (or whatever) and watch for a store of this register... */
16461d7d
KB
1597 unat_save_reg = rN;
1598 last_prologue_pc = next_pc;
1599 }
1600 }
1601 else if (it == I && ((instr & 0x1eff8000000LL) == 0x00198000000LL))
1602 {
1603 /* mov rN = pr */
1604 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1605 int qp = (int) (instr & 0x0000000003fLL);
1606 if (qp == 0 && isScratch (rN))
1607 {
1608 pr_save_reg = rN;
1609 last_prologue_pc = next_pc;
1610 }
1611 }
1612 else if (it == M
1613 && ( ((instr & 0x1ffc8000000LL) == 0x08cc0000000LL)
1614 || ((instr & 0x1efc0000000LL) == 0x0acc0000000LL)))
1615 {
1616 /* st8 [rN] = rM
1617 or
1618 st8 [rN] = rM, imm9 */
1619 int rN = (int) ((instr & 0x00007f00000LL) >> 20);
1620 int rM = (int) ((instr & 0x000000fe000LL) >> 13);
1621 int qp = (int) (instr & 0x0000000003fLL);
5ea2bd7f 1622 int indirect = rM < 256 ? reg_contents[rM] : 0;
16461d7d
KB
1623 if (qp == 0 && rN == spill_reg && spill_addr != 0
1624 && (rM == unat_save_reg || rM == pr_save_reg))
1625 {
1626 /* We've found a spill of either the UNAT register or the PR
1627 register. (Well, not exactly; what we've actually found is
1628 a spill of the register that UNAT or PR was moved to).
1777feb0 1629 Record that fact and move on... */
16461d7d
KB
1630 if (rM == unat_save_reg)
1631 {
1777feb0 1632 /* Track UNAT register. */
004d836a 1633 cache->saved_regs[IA64_UNAT_REGNUM] = spill_addr;
16461d7d
KB
1634 unat_save_reg = 0;
1635 }
1636 else
1637 {
1777feb0 1638 /* Track PR register. */
004d836a 1639 cache->saved_regs[IA64_PR_REGNUM] = spill_addr;
16461d7d
KB
1640 pr_save_reg = 0;
1641 }
1642 if ((instr & 0x1efc0000000LL) == 0x0acc0000000LL)
1643 /* st8 [rN] = rM, imm9 */
1644 spill_addr += imm9(instr);
1645 else
1777feb0 1646 spill_addr = 0; /* Must be done spilling. */
16461d7d
KB
1647 last_prologue_pc = next_pc;
1648 }
0927a22b
KB
1649 else if (qp == 0 && 32 <= rM && rM < 40 && !instores[rM-32])
1650 {
1777feb0 1651 /* Allow up to one store of each input register. */
0927a22b
KB
1652 instores[rM-32] = 1;
1653 last_prologue_pc = next_pc;
1654 }
5ea2bd7f
JJ
1655 else if (qp == 0 && 32 <= indirect && indirect < 40 &&
1656 !instores[indirect-32])
1657 {
1658 /* Allow an indirect store of an input register. */
1659 instores[indirect-32] = 1;
1660 last_prologue_pc = next_pc;
1661 }
0927a22b
KB
1662 }
1663 else if (it == M && ((instr & 0x1ff08000000LL) == 0x08c00000000LL))
1664 {
1665 /* One of
1666 st1 [rN] = rM
1667 st2 [rN] = rM
1668 st4 [rN] = rM
1669 st8 [rN] = rM
1670 Note that the st8 case is handled in the clause above.
1671
1777feb0
MS
1672 Advance over stores of input registers. One store per input
1673 register is permitted. */
0927a22b
KB
1674 int rM = (int) ((instr & 0x000000fe000LL) >> 13);
1675 int qp = (int) (instr & 0x0000000003fLL);
5ea2bd7f 1676 int indirect = rM < 256 ? reg_contents[rM] : 0;
0927a22b
KB
1677 if (qp == 0 && 32 <= rM && rM < 40 && !instores[rM-32])
1678 {
1679 instores[rM-32] = 1;
1680 last_prologue_pc = next_pc;
1681 }
5ea2bd7f
JJ
1682 else if (qp == 0 && 32 <= indirect && indirect < 40 &&
1683 !instores[indirect-32])
1684 {
1685 /* Allow an indirect store of an input register. */
1686 instores[indirect-32] = 1;
1687 last_prologue_pc = next_pc;
1688 }
0927a22b
KB
1689 }
1690 else if (it == M && ((instr & 0x1ff88000000LL) == 0x0cc80000000LL))
1691 {
1692 /* Either
1693 stfs [rN] = fM
1694 or
1695 stfd [rN] = fM
1696
1697 Advance over stores of floating point input registers. Again
1777feb0 1698 one store per register is permitted. */
0927a22b
KB
1699 int fM = (int) ((instr & 0x000000fe000LL) >> 13);
1700 int qp = (int) (instr & 0x0000000003fLL);
1701 if (qp == 0 && 8 <= fM && fM < 16 && !infpstores[fM - 8])
1702 {
1703 infpstores[fM-8] = 1;
1704 last_prologue_pc = next_pc;
1705 }
16461d7d
KB
1706 }
1707 else if (it == M
1708 && ( ((instr & 0x1ffc8000000LL) == 0x08ec0000000LL)
1709 || ((instr & 0x1efc0000000LL) == 0x0aec0000000LL)))
1710 {
1711 /* st8.spill [rN] = rM
1712 or
1713 st8.spill [rN] = rM, imm9 */
1714 int rN = (int) ((instr & 0x00007f00000LL) >> 20);
1715 int rM = (int) ((instr & 0x000000fe000LL) >> 13);
1716 int qp = (int) (instr & 0x0000000003fLL);
1717 if (qp == 0 && rN == spill_reg && 4 <= rM && rM <= 7)
1718 {
1719 /* We've found a spill of one of the preserved general purpose
1720 regs. Record the spill address and advance the spill
1777feb0 1721 register if appropriate. */
004d836a 1722 cache->saved_regs[IA64_GR0_REGNUM + rM] = spill_addr;
16461d7d
KB
1723 if ((instr & 0x1efc0000000LL) == 0x0aec0000000LL)
1724 /* st8.spill [rN] = rM, imm9 */
1725 spill_addr += imm9(instr);
1726 else
1777feb0 1727 spill_addr = 0; /* Done spilling. */
16461d7d
KB
1728 last_prologue_pc = next_pc;
1729 }
1730 }
16461d7d
KB
1731
1732 pc = next_pc;
1733 }
1734
15c1e57f
JB
1735 /* If not frameless and we aren't called by skip_prologue, then we need
1736 to calculate registers for the previous frame which will be needed
1737 later. */
16461d7d 1738
15c1e57f 1739 if (!frameless && this_frame)
da50a4b7 1740 {
e17a4113
UW
1741 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1742 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1743
004d836a
JJ
1744 /* Extract the size of the rotating portion of the stack
1745 frame and the register rename base from the current
1777feb0 1746 frame marker. */
004d836a
JJ
1747 cfm = cache->cfm;
1748 sor = cache->sor;
1749 sof = cache->sof;
1750 sol = cache->sol;
1751 rrb_gr = (cfm >> 18) & 0x7f;
1752
1753 /* Find the bof (beginning of frame). */
1754 bof = rse_address_add (cache->bsp, -sof);
1755
1756 for (i = 0, addr = bof;
1757 i < sof;
1758 i++, addr += 8)
1759 {
1760 if (IS_NaT_COLLECTION_ADDR (addr))
1761 {
1762 addr += 8;
1763 }
1764 if (i+32 == cfm_reg)
1765 cache->saved_regs[IA64_CFM_REGNUM] = addr;
1766 if (i+32 == ret_reg)
1767 cache->saved_regs[IA64_VRAP_REGNUM] = addr;
1768 if (i+32 == fp_reg)
1769 cache->saved_regs[IA64_VFP_REGNUM] = addr;
1770 }
16461d7d 1771
1777feb0 1772 /* For the previous argument registers we require the previous bof.
004d836a 1773 If we can't find the previous cfm, then we can do nothing. */
4afcc598 1774 cfm = 0;
004d836a
JJ
1775 if (cache->saved_regs[IA64_CFM_REGNUM] != 0)
1776 {
e17a4113
UW
1777 cfm = read_memory_integer (cache->saved_regs[IA64_CFM_REGNUM],
1778 8, byte_order);
4afcc598
JJ
1779 }
1780 else if (cfm_reg != 0)
1781 {
15c1e57f 1782 get_frame_register (this_frame, cfm_reg, buf);
e17a4113 1783 cfm = extract_unsigned_integer (buf, 8, byte_order);
4afcc598
JJ
1784 }
1785 cache->prev_cfm = cfm;
1786
1787 if (cfm != 0)
1788 {
004d836a
JJ
1789 sor = ((cfm >> 14) & 0xf) * 8;
1790 sof = (cfm & 0x7f);
1791 sol = (cfm >> 7) & 0x7f;
1792 rrb_gr = (cfm >> 18) & 0x7f;
1793
15c1e57f
JB
1794 /* The previous bof only requires subtraction of the sol (size of
1795 locals) due to the overlap between output and input of
1796 subsequent frames. */
004d836a
JJ
1797 bof = rse_address_add (bof, -sol);
1798
1799 for (i = 0, addr = bof;
1800 i < sof;
1801 i++, addr += 8)
1802 {
1803 if (IS_NaT_COLLECTION_ADDR (addr))
1804 {
1805 addr += 8;
1806 }
1807 if (i < sor)
1777feb0
MS
1808 cache->saved_regs[IA64_GR32_REGNUM
1809 + ((i + (sor - rrb_gr)) % sor)]
004d836a
JJ
1810 = addr;
1811 else
1812 cache->saved_regs[IA64_GR32_REGNUM + i] = addr;
1813 }
1814
1815 }
1816 }
1817
5ea2bd7f
JJ
1818 /* Try and trust the lim_pc value whenever possible. */
1819 if (trust_limit && lim_pc >= last_prologue_pc)
004d836a
JJ
1820 last_prologue_pc = lim_pc;
1821
1822 cache->frameless = frameless;
1823 cache->after_prologue = last_prologue_pc;
1824 cache->mem_stack_frame_size = mem_stack_frame_size;
1825 cache->fp_reg = fp_reg;
5ea2bd7f 1826
16461d7d
KB
1827 return last_prologue_pc;
1828}
1829
1830CORE_ADDR
6093d2eb 1831ia64_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
16461d7d 1832{
004d836a
JJ
1833 struct ia64_frame_cache cache;
1834 cache.base = 0;
1835 cache.after_prologue = 0;
1836 cache.cfm = 0;
1837 cache.bsp = 0;
1838
1777feb0
MS
1839 /* Call examine_prologue with - as third argument since we don't
1840 have a next frame pointer to send. */
004d836a 1841 return examine_prologue (pc, pc+1024, 0, &cache);
16461d7d
KB
1842}
1843
004d836a
JJ
1844
1845/* Normal frames. */
1846
1847static struct ia64_frame_cache *
15c1e57f 1848ia64_frame_cache (struct frame_info *this_frame, void **this_cache)
16461d7d 1849{
e17a4113
UW
1850 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1851 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
004d836a 1852 struct ia64_frame_cache *cache;
e362b510 1853 gdb_byte buf[8];
22e048c9 1854 CORE_ADDR cfm, psr;
16461d7d 1855
004d836a
JJ
1856 if (*this_cache)
1857 return *this_cache;
16461d7d 1858
004d836a
JJ
1859 cache = ia64_alloc_frame_cache ();
1860 *this_cache = cache;
16461d7d 1861
15c1e57f 1862 get_frame_register (this_frame, sp_regnum, buf);
e17a4113 1863 cache->saved_sp = extract_unsigned_integer (buf, 8, byte_order);
16461d7d 1864
004d836a
JJ
1865 /* We always want the bsp to point to the end of frame.
1866 This way, we can always get the beginning of frame (bof)
1867 by subtracting frame size. */
15c1e57f 1868 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
e17a4113 1869 cache->bsp = extract_unsigned_integer (buf, 8, byte_order);
004d836a 1870
15c1e57f 1871 get_frame_register (this_frame, IA64_PSR_REGNUM, buf);
e17a4113 1872 psr = extract_unsigned_integer (buf, 8, byte_order);
004d836a 1873
15c1e57f 1874 get_frame_register (this_frame, IA64_CFM_REGNUM, buf);
e17a4113 1875 cfm = extract_unsigned_integer (buf, 8, byte_order);
004d836a
JJ
1876
1877 cache->sof = (cfm & 0x7f);
1878 cache->sol = (cfm >> 7) & 0x7f;
1879 cache->sor = ((cfm >> 14) & 0xf) * 8;
1880
1881 cache->cfm = cfm;
1882
15c1e57f 1883 cache->pc = get_frame_func (this_frame);
004d836a
JJ
1884
1885 if (cache->pc != 0)
15c1e57f 1886 examine_prologue (cache->pc, get_frame_pc (this_frame), this_frame, cache);
004d836a
JJ
1887
1888 cache->base = cache->saved_sp + cache->mem_stack_frame_size;
1889
1890 return cache;
16461d7d
KB
1891}
1892
a78f21af 1893static void
15c1e57f 1894ia64_frame_this_id (struct frame_info *this_frame, void **this_cache,
004d836a 1895 struct frame_id *this_id)
16461d7d 1896{
5af949e3 1897 struct gdbarch *gdbarch = get_frame_arch (this_frame);
004d836a 1898 struct ia64_frame_cache *cache =
15c1e57f 1899 ia64_frame_cache (this_frame, this_cache);
16461d7d 1900
c5a27d9c 1901 /* If outermost frame, mark with null frame id. */
005ca36a 1902 if (cache->base != 0)
c5a27d9c 1903 (*this_id) = frame_id_build_special (cache->base, cache->pc, cache->bsp);
4afcc598
JJ
1904 if (gdbarch_debug >= 1)
1905 fprintf_unfiltered (gdb_stdlog,
1777feb0
MS
1906 "regular frame id: code %s, stack %s, "
1907 "special %s, this_frame %s\n",
5af949e3
UW
1908 paddress (gdbarch, this_id->code_addr),
1909 paddress (gdbarch, this_id->stack_addr),
1910 paddress (gdbarch, cache->bsp),
dfc3cd0e 1911 host_address_to_string (this_frame));
004d836a 1912}
244bc108 1913
15c1e57f
JB
1914static struct value *
1915ia64_frame_prev_register (struct frame_info *this_frame, void **this_cache,
1916 int regnum)
004d836a 1917{
15c1e57f 1918 struct gdbarch *gdbarch = get_frame_arch (this_frame);
e17a4113 1919 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
15c1e57f 1920 struct ia64_frame_cache *cache = ia64_frame_cache (this_frame, this_cache);
e362b510 1921 gdb_byte buf[8];
004d836a
JJ
1922
1923 gdb_assert (regnum >= 0);
244bc108 1924
004d836a 1925 if (!target_has_registers)
8a3fe4f8 1926 error (_("No registers."));
244bc108 1927
088568da 1928 if (regnum == gdbarch_sp_regnum (gdbarch))
15c1e57f
JB
1929 return frame_unwind_got_constant (this_frame, regnum, cache->base);
1930
16461d7d
KB
1931 else if (regnum == IA64_BSP_REGNUM)
1932 {
15c1e57f
JB
1933 struct value *val;
1934 CORE_ADDR prev_cfm, bsp, prev_bsp;
1935
1936 /* We want to calculate the previous bsp as the end of the previous
1937 register stack frame. This corresponds to what the hardware bsp
1938 register will be if we pop the frame back which is why we might
1939 have been called. We know the beginning of the current frame is
1940 cache->bsp - cache->sof. This value in the previous frame points
1941 to the start of the output registers. We can calculate the end of
1942 that frame by adding the size of output:
1943 (sof (size of frame) - sol (size of locals)). */
1944 val = ia64_frame_prev_register (this_frame, this_cache, IA64_CFM_REGNUM);
e17a4113
UW
1945 prev_cfm = extract_unsigned_integer (value_contents_all (val),
1946 8, byte_order);
004d836a 1947 bsp = rse_address_add (cache->bsp, -(cache->sof));
15c1e57f
JB
1948 prev_bsp =
1949 rse_address_add (bsp, (prev_cfm & 0x7f) - ((prev_cfm >> 7) & 0x7f));
004d836a 1950
15c1e57f 1951 return frame_unwind_got_constant (this_frame, regnum, prev_bsp);
004d836a 1952 }
15c1e57f 1953
004d836a
JJ
1954 else if (regnum == IA64_CFM_REGNUM)
1955 {
4afcc598
JJ
1956 CORE_ADDR addr = cache->saved_regs[IA64_CFM_REGNUM];
1957
1958 if (addr != 0)
15c1e57f
JB
1959 return frame_unwind_got_memory (this_frame, regnum, addr);
1960
1961 if (cache->prev_cfm)
1962 return frame_unwind_got_constant (this_frame, regnum, cache->prev_cfm);
1963
1964 if (cache->frameless)
1965 return frame_unwind_got_register (this_frame, IA64_PFS_REGNUM,
1966 IA64_PFS_REGNUM);
1967 return frame_unwind_got_register (this_frame, regnum, 0);
16461d7d 1968 }
15c1e57f 1969
16461d7d
KB
1970 else if (regnum == IA64_VFP_REGNUM)
1971 {
1972 /* If the function in question uses an automatic register (r32-r127)
1973 for the frame pointer, it'll be found by ia64_find_saved_register()
1974 above. If the function lacks one of these frame pointers, we can
004d836a 1975 still provide a value since we know the size of the frame. */
15c1e57f 1976 return frame_unwind_got_constant (this_frame, regnum, cache->base);
16461d7d 1977 }
15c1e57f 1978
004d836a 1979 else if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
16461d7d 1980 {
15c1e57f
JB
1981 struct value *pr_val;
1982 ULONGEST prN;
1983
1984 pr_val = ia64_frame_prev_register (this_frame, this_cache,
1985 IA64_PR_REGNUM);
004d836a 1986 if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
3a854e23
KB
1987 {
1988 /* Fetch predicate register rename base from current frame
004d836a
JJ
1989 marker for this frame. */
1990 int rrb_pr = (cache->cfm >> 32) & 0x3f;
3a854e23 1991
004d836a 1992 /* Adjust the register number to account for register rotation. */
15c1e57f 1993 regnum = VP16_REGNUM + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
3a854e23 1994 }
15c1e57f
JB
1995 prN = extract_bit_field (value_contents_all (pr_val),
1996 regnum - VP0_REGNUM, 1);
1997 return frame_unwind_got_constant (this_frame, regnum, prN);
16461d7d 1998 }
15c1e57f 1999
16461d7d
KB
2000 else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT31_REGNUM)
2001 {
15c1e57f
JB
2002 struct value *unat_val;
2003 ULONGEST unatN;
2004 unat_val = ia64_frame_prev_register (this_frame, this_cache,
2005 IA64_UNAT_REGNUM);
2006 unatN = extract_bit_field (value_contents_all (unat_val),
2007 regnum - IA64_NAT0_REGNUM, 1);
2008 return frame_unwind_got_constant (this_frame, regnum, unatN);
16461d7d 2009 }
15c1e57f 2010
16461d7d
KB
2011 else if (IA64_NAT32_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
2012 {
2013 int natval = 0;
2014 /* Find address of general register corresponding to nat bit we're
004d836a
JJ
2015 interested in. */
2016 CORE_ADDR gr_addr;
244bc108 2017
15c1e57f
JB
2018 gr_addr = cache->saved_regs[regnum - IA64_NAT0_REGNUM + IA64_GR0_REGNUM];
2019
004d836a 2020 if (gr_addr != 0)
244bc108 2021 {
004d836a 2022 /* Compute address of nat collection bits. */
16461d7d 2023 CORE_ADDR nat_addr = gr_addr | 0x1f8;
004d836a 2024 CORE_ADDR bsp;
16461d7d
KB
2025 CORE_ADDR nat_collection;
2026 int nat_bit;
15c1e57f 2027
16461d7d
KB
2028 /* If our nat collection address is bigger than bsp, we have to get
2029 the nat collection from rnat. Otherwise, we fetch the nat
004d836a 2030 collection from the computed address. */
15c1e57f 2031 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
e17a4113 2032 bsp = extract_unsigned_integer (buf, 8, byte_order);
16461d7d 2033 if (nat_addr >= bsp)
004d836a 2034 {
15c1e57f 2035 get_frame_register (this_frame, IA64_RNAT_REGNUM, buf);
e17a4113 2036 nat_collection = extract_unsigned_integer (buf, 8, byte_order);
004d836a 2037 }
16461d7d 2038 else
e17a4113 2039 nat_collection = read_memory_integer (nat_addr, 8, byte_order);
16461d7d
KB
2040 nat_bit = (gr_addr >> 3) & 0x3f;
2041 natval = (nat_collection >> nat_bit) & 1;
2042 }
004d836a 2043
15c1e57f 2044 return frame_unwind_got_constant (this_frame, regnum, natval);
244bc108 2045 }
15c1e57f 2046
244bc108
KB
2047 else if (regnum == IA64_IP_REGNUM)
2048 {
004d836a 2049 CORE_ADDR pc = 0;
4afcc598 2050 CORE_ADDR addr = cache->saved_regs[IA64_VRAP_REGNUM];
004d836a 2051
4afcc598 2052 if (addr != 0)
15c1e57f
JB
2053 {
2054 read_memory (addr, buf, register_size (gdbarch, IA64_IP_REGNUM));
e17a4113 2055 pc = extract_unsigned_integer (buf, 8, byte_order);
15c1e57f 2056 }
4afcc598 2057 else if (cache->frameless)
004d836a 2058 {
15c1e57f 2059 get_frame_register (this_frame, IA64_BR0_REGNUM, buf);
e17a4113 2060 pc = extract_unsigned_integer (buf, 8, byte_order);
244bc108 2061 }
004d836a 2062 pc &= ~0xf;
15c1e57f 2063 return frame_unwind_got_constant (this_frame, regnum, pc);
244bc108 2064 }
15c1e57f 2065
004d836a 2066 else if (regnum == IA64_PSR_REGNUM)
244bc108 2067 {
15c1e57f
JB
2068 /* We don't know how to get the complete previous PSR, but we need it
2069 for the slot information when we unwind the pc (pc is formed of IP
2070 register plus slot information from PSR). To get the previous
2071 slot information, we mask it off the return address. */
004d836a 2072 ULONGEST slot_num = 0;
15c1e57f 2073 CORE_ADDR pc = 0;
004d836a 2074 CORE_ADDR psr = 0;
4afcc598 2075 CORE_ADDR addr = cache->saved_regs[IA64_VRAP_REGNUM];
004d836a 2076
15c1e57f 2077 get_frame_register (this_frame, IA64_PSR_REGNUM, buf);
e17a4113 2078 psr = extract_unsigned_integer (buf, 8, byte_order);
004d836a 2079
4afcc598 2080 if (addr != 0)
244bc108 2081 {
088568da 2082 read_memory (addr, buf, register_size (gdbarch, IA64_IP_REGNUM));
e17a4113 2083 pc = extract_unsigned_integer (buf, 8, byte_order);
244bc108 2084 }
4afcc598 2085 else if (cache->frameless)
004d836a 2086 {
15c1e57f 2087 get_frame_register (this_frame, IA64_BR0_REGNUM, buf);
e17a4113 2088 pc = extract_unsigned_integer (buf, 8, byte_order);
004d836a
JJ
2089 }
2090 psr &= ~(3LL << 41);
2091 slot_num = pc & 0x3LL;
2092 psr |= (CORE_ADDR)slot_num << 41;
15c1e57f 2093 return frame_unwind_got_constant (this_frame, regnum, psr);
004d836a 2094 }
15c1e57f 2095
4afcc598
JJ
2096 else if (regnum == IA64_BR0_REGNUM)
2097 {
4afcc598 2098 CORE_ADDR addr = cache->saved_regs[IA64_BR0_REGNUM];
15c1e57f 2099
4afcc598 2100 if (addr != 0)
15c1e57f
JB
2101 return frame_unwind_got_memory (this_frame, regnum, addr);
2102
2103 return frame_unwind_got_constant (this_frame, regnum, 0);
4afcc598 2104 }
15c1e57f
JB
2105
2106 else if ((regnum >= IA64_GR32_REGNUM && regnum <= IA64_GR127_REGNUM)
2107 || (regnum >= V32_REGNUM && regnum <= V127_REGNUM))
004d836a
JJ
2108 {
2109 CORE_ADDR addr = 0;
15c1e57f 2110
004d836a
JJ
2111 if (regnum >= V32_REGNUM)
2112 regnum = IA64_GR32_REGNUM + (regnum - V32_REGNUM);
2113 addr = cache->saved_regs[regnum];
244bc108 2114 if (addr != 0)
15c1e57f
JB
2115 return frame_unwind_got_memory (this_frame, regnum, addr);
2116
2117 if (cache->frameless)
244bc108 2118 {
15c1e57f
JB
2119 struct value *reg_val;
2120 CORE_ADDR prev_cfm, prev_bsp, prev_bof;
2121
2122 /* FIXME: brobecker/2008-05-01: Doesn't this seem redundant
2123 with the same code above? */
004d836a
JJ
2124 if (regnum >= V32_REGNUM)
2125 regnum = IA64_GR32_REGNUM + (regnum - V32_REGNUM);
15c1e57f
JB
2126 reg_val = ia64_frame_prev_register (this_frame, this_cache,
2127 IA64_CFM_REGNUM);
2128 prev_cfm = extract_unsigned_integer (value_contents_all (reg_val),
e17a4113 2129 8, byte_order);
15c1e57f
JB
2130 reg_val = ia64_frame_prev_register (this_frame, this_cache,
2131 IA64_BSP_REGNUM);
2132 prev_bsp = extract_unsigned_integer (value_contents_all (reg_val),
e17a4113 2133 8, byte_order);
004d836a
JJ
2134 prev_bof = rse_address_add (prev_bsp, -(prev_cfm & 0x7f));
2135
2136 addr = rse_address_add (prev_bof, (regnum - IA64_GR32_REGNUM));
15c1e57f 2137 return frame_unwind_got_memory (this_frame, regnum, addr);
244bc108 2138 }
15c1e57f
JB
2139
2140 return frame_unwind_got_constant (this_frame, regnum, 0);
16461d7d 2141 }
15c1e57f
JB
2142
2143 else /* All other registers. */
16461d7d 2144 {
004d836a 2145 CORE_ADDR addr = 0;
15c1e57f 2146
3a854e23
KB
2147 if (IA64_FR32_REGNUM <= regnum && regnum <= IA64_FR127_REGNUM)
2148 {
2149 /* Fetch floating point register rename base from current
004d836a
JJ
2150 frame marker for this frame. */
2151 int rrb_fr = (cache->cfm >> 25) & 0x7f;
3a854e23
KB
2152
2153 /* Adjust the floating point register number to account for
004d836a 2154 register rotation. */
3a854e23
KB
2155 regnum = IA64_FR32_REGNUM
2156 + ((regnum - IA64_FR32_REGNUM) + rrb_fr) % 96;
2157 }
2158
004d836a
JJ
2159 /* If we have stored a memory address, access the register. */
2160 addr = cache->saved_regs[regnum];
2161 if (addr != 0)
15c1e57f 2162 return frame_unwind_got_memory (this_frame, regnum, addr);
004d836a
JJ
2163 /* Otherwise, punt and get the current value of the register. */
2164 else
15c1e57f 2165 return frame_unwind_got_register (this_frame, regnum, regnum);
16461d7d 2166 }
16461d7d 2167}
004d836a
JJ
2168
2169static const struct frame_unwind ia64_frame_unwind =
2170{
2171 NORMAL_FRAME,
8fbca658 2172 default_frame_unwind_stop_reason,
004d836a 2173 &ia64_frame_this_id,
15c1e57f
JB
2174 &ia64_frame_prev_register,
2175 NULL,
2176 default_frame_sniffer
004d836a
JJ
2177};
2178
004d836a
JJ
2179/* Signal trampolines. */
2180
2181static void
15c1e57f 2182ia64_sigtramp_frame_init_saved_regs (struct frame_info *this_frame,
2685572f 2183 struct ia64_frame_cache *cache)
004d836a 2184{
e17a4113
UW
2185 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2186 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2685572f
UW
2187
2188 if (tdep->sigcontext_register_address)
004d836a
JJ
2189 {
2190 int regno;
2191
1777feb0
MS
2192 cache->saved_regs[IA64_VRAP_REGNUM]
2193 = tdep->sigcontext_register_address (gdbarch, cache->base,
2194 IA64_IP_REGNUM);
2195 cache->saved_regs[IA64_CFM_REGNUM]
2196 = tdep->sigcontext_register_address (gdbarch, cache->base,
2197 IA64_CFM_REGNUM);
2198 cache->saved_regs[IA64_PSR_REGNUM]
2199 = tdep->sigcontext_register_address (gdbarch, cache->base,
2200 IA64_PSR_REGNUM);
2201 cache->saved_regs[IA64_BSP_REGNUM]
2202 = tdep->sigcontext_register_address (gdbarch, cache->base,
2203 IA64_BSP_REGNUM);
2204 cache->saved_regs[IA64_RNAT_REGNUM]
2205 = tdep->sigcontext_register_address (gdbarch, cache->base,
2206 IA64_RNAT_REGNUM);
2207 cache->saved_regs[IA64_CCV_REGNUM]
2208 = tdep->sigcontext_register_address (gdbarch, cache->base,
2209 IA64_CCV_REGNUM);
2210 cache->saved_regs[IA64_UNAT_REGNUM]
2211 = tdep->sigcontext_register_address (gdbarch, cache->base,
2212 IA64_UNAT_REGNUM);
2213 cache->saved_regs[IA64_FPSR_REGNUM]
2214 = tdep->sigcontext_register_address (gdbarch, cache->base,
2215 IA64_FPSR_REGNUM);
2216 cache->saved_regs[IA64_PFS_REGNUM]
2217 = tdep->sigcontext_register_address (gdbarch, cache->base,
2218 IA64_PFS_REGNUM);
2219 cache->saved_regs[IA64_LC_REGNUM]
2220 = tdep->sigcontext_register_address (gdbarch, cache->base,
2221 IA64_LC_REGNUM);
2222
004d836a 2223 for (regno = IA64_GR1_REGNUM; regno <= IA64_GR31_REGNUM; regno++)
4afcc598 2224 cache->saved_regs[regno] =
e17a4113 2225 tdep->sigcontext_register_address (gdbarch, cache->base, regno);
004d836a
JJ
2226 for (regno = IA64_BR0_REGNUM; regno <= IA64_BR7_REGNUM; regno++)
2227 cache->saved_regs[regno] =
e17a4113 2228 tdep->sigcontext_register_address (gdbarch, cache->base, regno);
932644f0 2229 for (regno = IA64_FR2_REGNUM; regno <= IA64_FR31_REGNUM; regno++)
004d836a 2230 cache->saved_regs[regno] =
e17a4113 2231 tdep->sigcontext_register_address (gdbarch, cache->base, regno);
004d836a
JJ
2232 }
2233}
2234
2235static struct ia64_frame_cache *
15c1e57f 2236ia64_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
004d836a 2237{
e17a4113
UW
2238 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2239 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
004d836a 2240 struct ia64_frame_cache *cache;
e362b510 2241 gdb_byte buf[8];
004d836a
JJ
2242
2243 if (*this_cache)
2244 return *this_cache;
2245
2246 cache = ia64_alloc_frame_cache ();
2247
15c1e57f 2248 get_frame_register (this_frame, sp_regnum, buf);
4afcc598
JJ
2249 /* Note that frame size is hard-coded below. We cannot calculate it
2250 via prologue examination. */
e17a4113 2251 cache->base = extract_unsigned_integer (buf, 8, byte_order) + 16;
4afcc598 2252
15c1e57f 2253 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
e17a4113 2254 cache->bsp = extract_unsigned_integer (buf, 8, byte_order);
4afcc598 2255
15c1e57f 2256 get_frame_register (this_frame, IA64_CFM_REGNUM, buf);
e17a4113 2257 cache->cfm = extract_unsigned_integer (buf, 8, byte_order);
4afcc598 2258 cache->sof = cache->cfm & 0x7f;
004d836a 2259
15c1e57f 2260 ia64_sigtramp_frame_init_saved_regs (this_frame, cache);
004d836a
JJ
2261
2262 *this_cache = cache;
2263 return cache;
2264}
2265
2266static void
15c1e57f
JB
2267ia64_sigtramp_frame_this_id (struct frame_info *this_frame,
2268 void **this_cache, struct frame_id *this_id)
004d836a 2269{
5af949e3 2270 struct gdbarch *gdbarch = get_frame_arch (this_frame);
004d836a 2271 struct ia64_frame_cache *cache =
15c1e57f 2272 ia64_sigtramp_frame_cache (this_frame, this_cache);
004d836a 2273
15c1e57f
JB
2274 (*this_id) = frame_id_build_special (cache->base,
2275 get_frame_pc (this_frame),
2276 cache->bsp);
4afcc598
JJ
2277 if (gdbarch_debug >= 1)
2278 fprintf_unfiltered (gdb_stdlog,
1777feb0
MS
2279 "sigtramp frame id: code %s, stack %s, "
2280 "special %s, this_frame %s\n",
5af949e3
UW
2281 paddress (gdbarch, this_id->code_addr),
2282 paddress (gdbarch, this_id->stack_addr),
2283 paddress (gdbarch, cache->bsp),
dfc3cd0e 2284 host_address_to_string (this_frame));
004d836a
JJ
2285}
2286
15c1e57f
JB
2287static struct value *
2288ia64_sigtramp_frame_prev_register (struct frame_info *this_frame,
2289 void **this_cache, int regnum)
004d836a 2290{
e362b510 2291 gdb_byte buf[MAX_REGISTER_SIZE];
4afcc598 2292
15c1e57f 2293 struct gdbarch *gdbarch = get_frame_arch (this_frame);
e17a4113 2294 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
4afcc598 2295 struct ia64_frame_cache *cache =
15c1e57f 2296 ia64_sigtramp_frame_cache (this_frame, this_cache);
4afcc598
JJ
2297
2298 gdb_assert (regnum >= 0);
2299
2300 if (!target_has_registers)
8a3fe4f8 2301 error (_("No registers."));
4afcc598 2302
4afcc598
JJ
2303 if (regnum == IA64_IP_REGNUM)
2304 {
2305 CORE_ADDR pc = 0;
2306 CORE_ADDR addr = cache->saved_regs[IA64_VRAP_REGNUM];
2307
2308 if (addr != 0)
2309 {
088568da 2310 read_memory (addr, buf, register_size (gdbarch, IA64_IP_REGNUM));
e17a4113 2311 pc = extract_unsigned_integer (buf, 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);
2492 unw_word_t bsp, sof, sol, cfm, psr, ip;
15c1e57f 2493 struct frame_info *this_frame = 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;
e362b510 2497 gdb_byte buf[MAX_REGISTER_SIZE];
968d1cb4 2498
45ecac4b
UW
2499 /* We never call any libunwind routines that need to write registers. */
2500 gdb_assert (!write);
968d1cb4 2501
45ecac4b 2502 switch (uw_regnum)
968d1cb4 2503 {
45ecac4b
UW
2504 case UNW_REG_IP:
2505 /* Libunwind expects to see the pc value which means the slot number
2506 from the psr must be merged with the ip word address. */
15c1e57f 2507 get_frame_register (this_frame, IA64_IP_REGNUM, buf);
e17a4113 2508 ip = extract_unsigned_integer (buf, 8, byte_order);
15c1e57f 2509 get_frame_register (this_frame, IA64_PSR_REGNUM, buf);
e17a4113 2510 psr = extract_unsigned_integer (buf, 8, byte_order);
45ecac4b
UW
2511 *val = ip | ((psr >> 41) & 0x3);
2512 break;
2513
2514 case UNW_IA64_AR_BSP:
1777feb0
MS
2515 /* Libunwind expects to see the beginning of the current
2516 register frame so we must account for the fact that
2517 ptrace() will return a value for bsp that points *after*
2518 the current register frame. */
15c1e57f 2519 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
e17a4113 2520 bsp = extract_unsigned_integer (buf, 8, byte_order);
15c1e57f 2521 get_frame_register (this_frame, IA64_CFM_REGNUM, buf);
e17a4113 2522 cfm = extract_unsigned_integer (buf, 8, byte_order);
77ca787b 2523 sof = gdbarch_tdep (gdbarch)->size_of_register_frame (this_frame, cfm);
45ecac4b
UW
2524 *val = ia64_rse_skip_regs (bsp, -sof);
2525 break;
968d1cb4 2526
45ecac4b
UW
2527 case UNW_IA64_AR_BSPSTORE:
2528 /* Libunwind wants bspstore to be after the current register frame.
2529 This is what ptrace() and gdb treats as the regular bsp value. */
15c1e57f 2530 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
e17a4113 2531 *val = extract_unsigned_integer (buf, 8, byte_order);
45ecac4b
UW
2532 break;
2533
2534 default:
2535 /* For all other registers, just unwind the value directly. */
15c1e57f 2536 get_frame_register (this_frame, regnum, buf);
e17a4113 2537 *val = extract_unsigned_integer (buf, 8, byte_order);
45ecac4b 2538 break;
968d1cb4 2539 }
45ecac4b
UW
2540
2541 if (gdbarch_debug >= 1)
2542 fprintf_unfiltered (gdb_stdlog,
5af949e3 2543 " access_reg: from cache: %4s=%s\n",
45ecac4b
UW
2544 (((unsigned) regnum <= IA64_NAT127_REGNUM)
2545 ? ia64_register_names[regnum] : "r??"),
2edfe795 2546 paddress (gdbarch, *val));
968d1cb4
JJ
2547 return 0;
2548}
2549
2550/* Libunwind callback accessor function for floating-point registers. */
2551static int
1777feb0
MS
2552ia64_access_fpreg (unw_addr_space_t as, unw_regnum_t uw_regnum,
2553 unw_fpreg_t *val, int write, void *arg)
968d1cb4
JJ
2554{
2555 int regnum = ia64_uw2gdb_regnum (uw_regnum);
15c1e57f 2556 struct frame_info *this_frame = arg;
968d1cb4 2557
45ecac4b
UW
2558 /* We never call any libunwind routines that need to write registers. */
2559 gdb_assert (!write);
2560
15c1e57f 2561 get_frame_register (this_frame, regnum, (char *) val);
45ecac4b 2562
968d1cb4
JJ
2563 return 0;
2564}
2565
c5a27d9c
JJ
2566/* Libunwind callback accessor function for top-level rse registers. */
2567static int
1777feb0
MS
2568ia64_access_rse_reg (unw_addr_space_t as, unw_regnum_t uw_regnum,
2569 unw_word_t *val, int write, void *arg)
c5a27d9c
JJ
2570{
2571 int regnum = ia64_uw2gdb_regnum (uw_regnum);
2572 unw_word_t bsp, sof, sol, cfm, psr, ip;
45ecac4b 2573 struct regcache *regcache = arg;
5af949e3 2574 struct gdbarch *gdbarch = get_regcache_arch (regcache);
e17a4113 2575 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
c5a27d9c 2576 long new_sof, old_sof;
e362b510 2577 gdb_byte buf[MAX_REGISTER_SIZE];
c5a27d9c 2578
45ecac4b
UW
2579 /* We never call any libunwind routines that need to write registers. */
2580 gdb_assert (!write);
c5a27d9c 2581
45ecac4b 2582 switch (uw_regnum)
c5a27d9c 2583 {
45ecac4b
UW
2584 case UNW_REG_IP:
2585 /* Libunwind expects to see the pc value which means the slot number
2586 from the psr must be merged with the ip word address. */
2587 regcache_cooked_read (regcache, IA64_IP_REGNUM, buf);
e17a4113 2588 ip = extract_unsigned_integer (buf, 8, byte_order);
45ecac4b 2589 regcache_cooked_read (regcache, IA64_PSR_REGNUM, buf);
e17a4113 2590 psr = extract_unsigned_integer (buf, 8, byte_order);
45ecac4b
UW
2591 *val = ip | ((psr >> 41) & 0x3);
2592 break;
c5a27d9c 2593
45ecac4b 2594 case UNW_IA64_AR_BSP:
1777feb0
MS
2595 /* Libunwind expects to see the beginning of the current
2596 register frame so we must account for the fact that
2597 ptrace() will return a value for bsp that points *after*
2598 the current register frame. */
45ecac4b 2599 regcache_cooked_read (regcache, IA64_BSP_REGNUM, buf);
e17a4113 2600 bsp = extract_unsigned_integer (buf, 8, byte_order);
45ecac4b 2601 regcache_cooked_read (regcache, IA64_CFM_REGNUM, buf);
e17a4113 2602 cfm = extract_unsigned_integer (buf, 8, byte_order);
45ecac4b
UW
2603 sof = (cfm & 0x7f);
2604 *val = ia64_rse_skip_regs (bsp, -sof);
2605 break;
c5a27d9c 2606
45ecac4b
UW
2607 case UNW_IA64_AR_BSPSTORE:
2608 /* Libunwind wants bspstore to be after the current register frame.
2609 This is what ptrace() and gdb treats as the regular bsp value. */
2610 regcache_cooked_read (regcache, IA64_BSP_REGNUM, buf);
e17a4113 2611 *val = extract_unsigned_integer (buf, 8, byte_order);
45ecac4b 2612 break;
c5a27d9c 2613
45ecac4b
UW
2614 default:
2615 /* For all other registers, just unwind the value directly. */
2616 regcache_cooked_read (regcache, regnum, buf);
e17a4113 2617 *val = extract_unsigned_integer (buf, 8, byte_order);
45ecac4b 2618 break;
c5a27d9c
JJ
2619 }
2620
2621 if (gdbarch_debug >= 1)
2622 fprintf_unfiltered (gdb_stdlog,
5af949e3 2623 " access_rse_reg: from cache: %4s=%s\n",
c5a27d9c
JJ
2624 (((unsigned) regnum <= IA64_NAT127_REGNUM)
2625 ? ia64_register_names[regnum] : "r??"),
5af949e3 2626 paddress (gdbarch, *val));
c5a27d9c
JJ
2627
2628 return 0;
2629}
2630
45ecac4b
UW
2631/* Libunwind callback accessor function for top-level fp registers. */
2632static int
2633ia64_access_rse_fpreg (unw_addr_space_t as, unw_regnum_t uw_regnum,
2634 unw_fpreg_t *val, int write, void *arg)
2635{
2636 int regnum = ia64_uw2gdb_regnum (uw_regnum);
2637 struct regcache *regcache = arg;
2638
2639 /* We never call any libunwind routines that need to write registers. */
2640 gdb_assert (!write);
2641
2642 regcache_cooked_read (regcache, regnum, (char *) val);
2643
2644 return 0;
2645}
2646
968d1cb4
JJ
2647/* Libunwind callback accessor function for accessing memory. */
2648static int
2649ia64_access_mem (unw_addr_space_t as,
2650 unw_word_t addr, unw_word_t *val,
2651 int write, void *arg)
2652{
c5a27d9c
JJ
2653 if (addr - KERNEL_START < ktab_size)
2654 {
2655 unw_word_t *laddr = (unw_word_t*) ((char *) ktab
2656 + (addr - KERNEL_START));
2657
2658 if (write)
2659 *laddr = *val;
2660 else
2661 *val = *laddr;
2662 return 0;
2663 }
2664
968d1cb4
JJ
2665 /* XXX do we need to normalize byte-order here? */
2666 if (write)
2667 return target_write_memory (addr, (char *) val, sizeof (unw_word_t));
2668 else
2669 return target_read_memory (addr, (char *) val, sizeof (unw_word_t));
2670}
2671
2672/* Call low-level function to access the kernel unwind table. */
13547ab6
DJ
2673static LONGEST
2674getunwind_table (gdb_byte **buf_p)
968d1cb4
JJ
2675{
2676 LONGEST x;
c5a27d9c 2677
10d6c8cd
DJ
2678 /* FIXME drow/2005-09-10: This code used to call
2679 ia64_linux_xfer_unwind_table directly to fetch the unwind table
2680 for the currently running ia64-linux kernel. That data should
2681 come from the core file and be accessed via the auxv vector; if
2682 we want to preserve fall back to the running kernel's table, then
2683 we should find a way to override the corefile layer's
2684 xfer_partial method. */
968d1cb4 2685
13547ab6
DJ
2686 x = target_read_alloc (&current_target, TARGET_OBJECT_UNWIND_TABLE,
2687 NULL, buf_p);
2688
2689 return x;
968d1cb4 2690}
10d6c8cd 2691
968d1cb4
JJ
2692/* Get the kernel unwind table. */
2693static int
2694get_kernel_table (unw_word_t ip, unw_dyn_info_t *di)
2695{
c5a27d9c 2696 static struct ia64_table_entry *etab;
968d1cb4 2697
c5a27d9c 2698 if (!ktab)
968d1cb4 2699 {
13547ab6 2700 gdb_byte *ktab_buf;
eeec829c 2701 LONGEST size;
13547ab6 2702
eeec829c
DJ
2703 size = getunwind_table (&ktab_buf);
2704 if (size <= 0)
13547ab6 2705 return -UNW_ENOINFO;
eeec829c
DJ
2706
2707 ktab = (struct ia64_table_entry *) ktab_buf;
2708 ktab_size = size;
13547ab6 2709
968d1cb4 2710 for (etab = ktab; etab->start_offset; ++etab)
c5a27d9c 2711 etab->info_offset += KERNEL_START;
968d1cb4
JJ
2712 }
2713
2714 if (ip < ktab[0].start_offset || ip >= etab[-1].end_offset)
2715 return -UNW_ENOINFO;
2716
2717 di->format = UNW_INFO_FORMAT_TABLE;
2718 di->gp = 0;
2719 di->start_ip = ktab[0].start_offset;
2720 di->end_ip = etab[-1].end_offset;
2721 di->u.ti.name_ptr = (unw_word_t) "<kernel>";
2722 di->u.ti.segbase = 0;
2723 di->u.ti.table_len = ((char *) etab - (char *) ktab) / sizeof (unw_word_t);
2724 di->u.ti.table_data = (unw_word_t *) ktab;
2725
2726 if (gdbarch_debug >= 1)
2727 fprintf_unfiltered (gdb_stdlog, "get_kernel_table: found table `%s': "
5af949e3 2728 "segbase=%s, length=%s, gp=%s\n",
78ced177 2729 (char *) di->u.ti.name_ptr,
5af949e3 2730 hex_string (di->u.ti.segbase),
623d3eb1 2731 pulongest (di->u.ti.table_len),
5af949e3 2732 hex_string (di->gp));
968d1cb4
JJ
2733 return 0;
2734}
2735
2736/* Find the unwind table entry for a specified address. */
2737static int
2738ia64_find_unwind_table (struct objfile *objfile, unw_word_t ip,
2739 unw_dyn_info_t *dip, void **buf)
2740{
2741 Elf_Internal_Phdr *phdr, *p_text = NULL, *p_unwind = NULL;
2742 Elf_Internal_Ehdr *ehdr;
2743 unw_word_t segbase = 0;
2744 CORE_ADDR load_base;
2745 bfd *bfd;
2746 int i;
2747
2748 bfd = objfile->obfd;
2749
2750 ehdr = elf_tdata (bfd)->elf_header;
2751 phdr = elf_tdata (bfd)->phdr;
2752
2753 load_base = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2754
2755 for (i = 0; i < ehdr->e_phnum; ++i)
2756 {
2757 switch (phdr[i].p_type)
2758 {
2759 case PT_LOAD:
2760 if ((unw_word_t) (ip - load_base - phdr[i].p_vaddr)
2761 < phdr[i].p_memsz)
2762 p_text = phdr + i;
2763 break;
2764
2765 case PT_IA_64_UNWIND:
2766 p_unwind = phdr + i;
2767 break;
2768
2769 default:
2770 break;
2771 }
2772 }
2773
c5a27d9c 2774 if (!p_text || !p_unwind)
968d1cb4
JJ
2775 return -UNW_ENOINFO;
2776
c5a27d9c
JJ
2777 /* Verify that the segment that contains the IP also contains
2778 the static unwind table. If not, we may be in the Linux kernel's
1777feb0 2779 DSO gate page in which case the unwind table is another segment.
c5a27d9c
JJ
2780 Otherwise, we are dealing with runtime-generated code, for which we
2781 have no info here. */
968d1cb4
JJ
2782 segbase = p_text->p_vaddr + load_base;
2783
c5a27d9c
JJ
2784 if ((p_unwind->p_vaddr - p_text->p_vaddr) >= p_text->p_memsz)
2785 {
2786 int ok = 0;
2787 for (i = 0; i < ehdr->e_phnum; ++i)
2788 {
2789 if (phdr[i].p_type == PT_LOAD
2790 && (p_unwind->p_vaddr - phdr[i].p_vaddr) < phdr[i].p_memsz)
2791 {
2792 ok = 1;
2793 /* Get the segbase from the section containing the
2794 libunwind table. */
2795 segbase = phdr[i].p_vaddr + load_base;
2796 }
2797 }
2798 if (!ok)
2799 return -UNW_ENOINFO;
2800 }
2801
2802 dip->start_ip = p_text->p_vaddr + load_base;
968d1cb4 2803 dip->end_ip = dip->start_ip + p_text->p_memsz;
e17a4113 2804 dip->gp = ia64_find_global_pointer (get_objfile_arch (objfile), ip);
503ff15d
KB
2805 dip->format = UNW_INFO_FORMAT_REMOTE_TABLE;
2806 dip->u.rti.name_ptr = (unw_word_t) bfd_get_filename (bfd);
2807 dip->u.rti.segbase = segbase;
2808 dip->u.rti.table_len = p_unwind->p_memsz / sizeof (unw_word_t);
2809 dip->u.rti.table_data = p_unwind->p_vaddr + load_base;
968d1cb4
JJ
2810
2811 return 0;
2812}
2813
2814/* Libunwind callback accessor function to acquire procedure unwind-info. */
2815static int
2816ia64_find_proc_info_x (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi,
2817 int need_unwind_info, void *arg)
2818{
2819 struct obj_section *sec = find_pc_section (ip);
2820 unw_dyn_info_t di;
2821 int ret;
2822 void *buf = NULL;
2823
2824 if (!sec)
2825 {
2826 /* XXX This only works if the host and the target architecture are
2827 both ia64 and if the have (more or less) the same kernel
2828 version. */
2829 if (get_kernel_table (ip, &di) < 0)
2830 return -UNW_ENOINFO;
503ff15d
KB
2831
2832 if (gdbarch_debug >= 1)
5af949e3
UW
2833 fprintf_unfiltered (gdb_stdlog, "ia64_find_proc_info_x: %s -> "
2834 "(name=`%s',segbase=%s,start=%s,end=%s,gp=%s,"
2835 "length=%s,data=%s)\n",
2836 hex_string (ip), (char *)di.u.ti.name_ptr,
2837 hex_string (di.u.ti.segbase),
2838 hex_string (di.start_ip), hex_string (di.end_ip),
2839 hex_string (di.gp),
623d3eb1 2840 pulongest (di.u.ti.table_len),
5af949e3 2841 hex_string ((CORE_ADDR)di.u.ti.table_data));
968d1cb4
JJ
2842 }
2843 else
2844 {
2845 ret = ia64_find_unwind_table (sec->objfile, ip, &di, &buf);
2846 if (ret < 0)
2847 return ret;
968d1cb4 2848
503ff15d 2849 if (gdbarch_debug >= 1)
5af949e3
UW
2850 fprintf_unfiltered (gdb_stdlog, "ia64_find_proc_info_x: %s -> "
2851 "(name=`%s',segbase=%s,start=%s,end=%s,gp=%s,"
2852 "length=%s,data=%s)\n",
2853 hex_string (ip), (char *)di.u.rti.name_ptr,
2854 hex_string (di.u.rti.segbase),
2855 hex_string (di.start_ip), hex_string (di.end_ip),
2856 hex_string (di.gp),
623d3eb1 2857 pulongest (di.u.rti.table_len),
5af949e3 2858 hex_string (di.u.rti.table_data));
503ff15d 2859 }
968d1cb4 2860
503ff15d
KB
2861 ret = libunwind_search_unwind_table (&as, ip, &di, pi, need_unwind_info,
2862 arg);
968d1cb4
JJ
2863
2864 /* We no longer need the dyn info storage so free it. */
2865 xfree (buf);
2866
2867 return ret;
2868}
2869
2870/* Libunwind callback accessor function for cleanup. */
2871static void
2872ia64_put_unwind_info (unw_addr_space_t as,
2873 unw_proc_info_t *pip, void *arg)
2874{
2875 /* Nothing required for now. */
2876}
2877
2878/* Libunwind callback accessor function to get head of the dynamic
2879 unwind-info registration list. */
2880static int
2881ia64_get_dyn_info_list (unw_addr_space_t as,
2882 unw_word_t *dilap, void *arg)
2883{
2884 struct obj_section *text_sec;
2885 struct objfile *objfile;
2886 unw_word_t ip, addr;
2887 unw_dyn_info_t di;
2888 int ret;
2889
2890 if (!libunwind_is_initialized ())
2891 return -UNW_ENOINFO;
2892
2893 for (objfile = object_files; objfile; objfile = objfile->next)
2894 {
2895 void *buf = NULL;
2896
2897 text_sec = objfile->sections + SECT_OFF_TEXT (objfile);
8b7a6d61 2898 ip = obj_section_addr (text_sec);
968d1cb4
JJ
2899 ret = ia64_find_unwind_table (objfile, ip, &di, &buf);
2900 if (ret >= 0)
2901 {
503ff15d 2902 addr = libunwind_find_dyn_list (as, &di, arg);
968d1cb4
JJ
2903 /* We no longer need the dyn info storage so free it. */
2904 xfree (buf);
2905
2906 if (addr)
2907 {
2908 if (gdbarch_debug >= 1)
2909 fprintf_unfiltered (gdb_stdlog,
2910 "dynamic unwind table in objfile %s "
5af949e3 2911 "at %s (gp=%s)\n",
968d1cb4 2912 bfd_get_filename (objfile->obfd),
5af949e3 2913 hex_string (addr), hex_string (di.gp));
968d1cb4
JJ
2914 *dilap = addr;
2915 return 0;
2916 }
2917 }
2918 }
2919 return -UNW_ENOINFO;
2920}
2921
2922
2923/* Frame interface functions for libunwind. */
2924
2925static void
15c1e57f 2926ia64_libunwind_frame_this_id (struct frame_info *this_frame, void **this_cache,
7166c4a9 2927 struct frame_id *this_id)
968d1cb4 2928{
5af949e3 2929 struct gdbarch *gdbarch = get_frame_arch (this_frame);
e17a4113 2930 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
005ca36a 2931 struct frame_id id = outer_frame_id;
e362b510 2932 gdb_byte buf[8];
968d1cb4 2933 CORE_ADDR bsp;
c5a27d9c 2934
15c1e57f 2935 libunwind_frame_this_id (this_frame, this_cache, &id);
005ca36a 2936 if (frame_id_eq (id, outer_frame_id))
c5a27d9c 2937 {
005ca36a 2938 (*this_id) = outer_frame_id;
c5a27d9c
JJ
2939 return;
2940 }
968d1cb4 2941
c5a27d9c
JJ
2942 /* We must add the bsp as the special address for frame comparison
2943 purposes. */
15c1e57f 2944 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
e17a4113 2945 bsp = extract_unsigned_integer (buf, 8, byte_order);
968d1cb4 2946
15c1e57f 2947 (*this_id) = frame_id_build_special (id.stack_addr, id.code_addr, bsp);
968d1cb4
JJ
2948
2949 if (gdbarch_debug >= 1)
2950 fprintf_unfiltered (gdb_stdlog,
1777feb0
MS
2951 "libunwind frame id: code %s, stack %s, "
2952 "special %s, this_frame %s\n",
5af949e3
UW
2953 paddress (gdbarch, id.code_addr),
2954 paddress (gdbarch, id.stack_addr),
2955 paddress (gdbarch, bsp),
dfc3cd0e 2956 host_address_to_string (this_frame));
968d1cb4
JJ
2957}
2958
15c1e57f
JB
2959static struct value *
2960ia64_libunwind_frame_prev_register (struct frame_info *this_frame,
2961 void **this_cache, int regnum)
968d1cb4
JJ
2962{
2963 int reg = regnum;
15c1e57f 2964 struct gdbarch *gdbarch = get_frame_arch (this_frame);
e17a4113 2965 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
15c1e57f 2966 struct value *val;
968d1cb4
JJ
2967
2968 if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
2969 reg = IA64_PR_REGNUM;
2970 else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
2971 reg = IA64_UNAT_REGNUM;
2972
2973 /* Let libunwind do most of the work. */
15c1e57f 2974 val = libunwind_frame_prev_register (this_frame, this_cache, reg);
6672f2ae 2975
968d1cb4
JJ
2976 if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
2977 {
2978 ULONGEST prN_val;
2979
2980 if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
2981 {
2982 int rrb_pr = 0;
2983 ULONGEST cfm;
e362b510 2984 gdb_byte buf[MAX_REGISTER_SIZE];
968d1cb4
JJ
2985
2986 /* Fetch predicate register rename base from current frame
2987 marker for this frame. */
15c1e57f 2988 get_frame_register (this_frame, IA64_CFM_REGNUM, buf);
e17a4113 2989 cfm = extract_unsigned_integer (buf, 8, byte_order);
968d1cb4
JJ
2990 rrb_pr = (cfm >> 32) & 0x3f;
2991
2992 /* Adjust the register number to account for register rotation. */
15c1e57f 2993 regnum = VP16_REGNUM + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
968d1cb4 2994 }
15c1e57f 2995 prN_val = extract_bit_field (value_contents_all (val),
968d1cb4 2996 regnum - VP0_REGNUM, 1);
15c1e57f 2997 return frame_unwind_got_constant (this_frame, regnum, prN_val);
968d1cb4 2998 }
15c1e57f 2999
968d1cb4
JJ
3000 else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
3001 {
3002 ULONGEST unatN_val;
3003
15c1e57f
JB
3004 unatN_val = extract_bit_field (value_contents_all (val),
3005 regnum - IA64_NAT0_REGNUM, 1);
3006 return frame_unwind_got_constant (this_frame, regnum, unatN_val);
968d1cb4 3007 }
15c1e57f 3008
968d1cb4
JJ
3009 else if (regnum == IA64_BSP_REGNUM)
3010 {
15c1e57f
JB
3011 struct value *cfm_val;
3012 CORE_ADDR prev_bsp, prev_cfm;
3013
3014 /* We want to calculate the previous bsp as the end of the previous
3015 register stack frame. This corresponds to what the hardware bsp
3016 register will be if we pop the frame back which is why we might
3017 have been called. We know that libunwind will pass us back the
1777feb0 3018 beginning of the current frame so we should just add sof to it. */
e17a4113
UW
3019 prev_bsp = extract_unsigned_integer (value_contents_all (val),
3020 8, byte_order);
15c1e57f
JB
3021 cfm_val = libunwind_frame_prev_register (this_frame, this_cache,
3022 IA64_CFM_REGNUM);
e17a4113
UW
3023 prev_cfm = extract_unsigned_integer (value_contents_all (cfm_val),
3024 8, byte_order);
968d1cb4
JJ
3025 prev_bsp = rse_address_add (prev_bsp, (prev_cfm & 0x7f));
3026
15c1e57f 3027 return frame_unwind_got_constant (this_frame, regnum, prev_bsp);
968d1cb4 3028 }
15c1e57f
JB
3029 else
3030 return val;
3031}
968d1cb4 3032
15c1e57f
JB
3033static int
3034ia64_libunwind_frame_sniffer (const struct frame_unwind *self,
3035 struct frame_info *this_frame,
3036 void **this_cache)
3037{
3038 if (libunwind_is_initialized ()
3039 && libunwind_frame_sniffer (self, this_frame, this_cache))
3040 return 1;
3041
3042 return 0;
968d1cb4
JJ
3043}
3044
3045static const struct frame_unwind ia64_libunwind_frame_unwind =
3046{
3047 NORMAL_FRAME,
8fbca658 3048 default_frame_unwind_stop_reason,
968d1cb4 3049 ia64_libunwind_frame_this_id,
272dfcfd
AS
3050 ia64_libunwind_frame_prev_register,
3051 NULL,
15c1e57f 3052 ia64_libunwind_frame_sniffer,
272dfcfd 3053 libunwind_frame_dealloc_cache
968d1cb4
JJ
3054};
3055
c5a27d9c 3056static void
15c1e57f
JB
3057ia64_libunwind_sigtramp_frame_this_id (struct frame_info *this_frame,
3058 void **this_cache,
c5a27d9c
JJ
3059 struct frame_id *this_id)
3060{
5af949e3 3061 struct gdbarch *gdbarch = get_frame_arch (this_frame);
e17a4113 3062 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
e362b510 3063 gdb_byte buf[8];
c5a27d9c 3064 CORE_ADDR bsp;
005ca36a 3065 struct frame_id id = outer_frame_id;
c5a27d9c
JJ
3066 CORE_ADDR prev_ip;
3067
15c1e57f 3068 libunwind_frame_this_id (this_frame, this_cache, &id);
005ca36a 3069 if (frame_id_eq (id, outer_frame_id))
c5a27d9c 3070 {
005ca36a 3071 (*this_id) = outer_frame_id;
c5a27d9c
JJ
3072 return;
3073 }
3074
3075 /* We must add the bsp as the special address for frame comparison
3076 purposes. */
15c1e57f 3077 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
e17a4113 3078 bsp = extract_unsigned_integer (buf, 8, byte_order);
c5a27d9c
JJ
3079
3080 /* For a sigtramp frame, we don't make the check for previous ip being 0. */
3081 (*this_id) = frame_id_build_special (id.stack_addr, id.code_addr, bsp);
3082
3083 if (gdbarch_debug >= 1)
3084 fprintf_unfiltered (gdb_stdlog,
1777feb0
MS
3085 "libunwind sigtramp frame id: code %s, "
3086 "stack %s, special %s, this_frame %s\n",
5af949e3
UW
3087 paddress (gdbarch, id.code_addr),
3088 paddress (gdbarch, id.stack_addr),
3089 paddress (gdbarch, bsp),
dfc3cd0e 3090 host_address_to_string (this_frame));
c5a27d9c
JJ
3091}
3092
15c1e57f
JB
3093static struct value *
3094ia64_libunwind_sigtramp_frame_prev_register (struct frame_info *this_frame,
3095 void **this_cache, int regnum)
c5a27d9c 3096{
e17a4113
UW
3097 struct gdbarch *gdbarch = get_frame_arch (this_frame);
3098 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
15c1e57f
JB
3099 struct value *prev_ip_val;
3100 CORE_ADDR prev_ip;
c5a27d9c
JJ
3101
3102 /* If the previous frame pc value is 0, then we want to use the SIGCONTEXT
3103 method of getting previous registers. */
15c1e57f
JB
3104 prev_ip_val = libunwind_frame_prev_register (this_frame, this_cache,
3105 IA64_IP_REGNUM);
e17a4113
UW
3106 prev_ip = extract_unsigned_integer (value_contents_all (prev_ip_val),
3107 8, byte_order);
c5a27d9c
JJ
3108
3109 if (prev_ip == 0)
3110 {
3111 void *tmp_cache = NULL;
15c1e57f
JB
3112 return ia64_sigtramp_frame_prev_register (this_frame, &tmp_cache,
3113 regnum);
c5a27d9c
JJ
3114 }
3115 else
15c1e57f 3116 return ia64_libunwind_frame_prev_register (this_frame, this_cache, regnum);
c5a27d9c
JJ
3117}
3118
15c1e57f
JB
3119static int
3120ia64_libunwind_sigtramp_frame_sniffer (const struct frame_unwind *self,
3121 struct frame_info *this_frame,
3122 void **this_cache)
c5a27d9c
JJ
3123{
3124 if (libunwind_is_initialized ())
3125 {
15c1e57f
JB
3126 if (libunwind_sigtramp_frame_sniffer (self, this_frame, this_cache))
3127 return 1;
3128 return 0;
c5a27d9c
JJ
3129 }
3130 else
15c1e57f 3131 return ia64_sigtramp_frame_sniffer (self, this_frame, this_cache);
c5a27d9c
JJ
3132}
3133
15c1e57f
JB
3134static const struct frame_unwind ia64_libunwind_sigtramp_frame_unwind =
3135{
3136 SIGTRAMP_FRAME,
8fbca658 3137 default_frame_unwind_stop_reason,
15c1e57f
JB
3138 ia64_libunwind_sigtramp_frame_this_id,
3139 ia64_libunwind_sigtramp_frame_prev_register,
3140 NULL,
3141 ia64_libunwind_sigtramp_frame_sniffer
3142};
3143
968d1cb4 3144/* Set of libunwind callback acccessor functions. */
696759ad 3145unw_accessors_t ia64_unw_accessors =
968d1cb4
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_reg,
3152 ia64_access_fpreg,
3153 /* resume */
3154 /* get_proc_name */
3155};
3156
c5a27d9c
JJ
3157/* Set of special libunwind callback acccessor functions specific for accessing
3158 the rse registers. At the top of the stack, we want libunwind to figure out
1777feb0
MS
3159 how to read r32 - r127. Though usually they are found sequentially in
3160 memory starting from $bof, this is not always true. */
696759ad 3161unw_accessors_t ia64_unw_rse_accessors =
c5a27d9c
JJ
3162{
3163 ia64_find_proc_info_x,
3164 ia64_put_unwind_info,
3165 ia64_get_dyn_info_list,
3166 ia64_access_mem,
3167 ia64_access_rse_reg,
45ecac4b 3168 ia64_access_rse_fpreg,
c5a27d9c
JJ
3169 /* resume */
3170 /* get_proc_name */
3171};
3172
05e7c244
JK
3173/* Set of ia64-libunwind-tdep gdb callbacks and data for generic
3174 ia64-libunwind-tdep code to use. */
696759ad 3175struct libunwind_descr ia64_libunwind_descr =
968d1cb4
JJ
3176{
3177 ia64_gdb2uw_regnum,
3178 ia64_uw2gdb_regnum,
3179 ia64_is_fpreg,
3180 &ia64_unw_accessors,
c5a27d9c 3181 &ia64_unw_rse_accessors,
968d1cb4
JJ
3182};
3183
3184#endif /* HAVE_LIBUNWIND_IA64_H */
3185
4c8b6ae0
UW
3186static int
3187ia64_use_struct_convention (struct type *type)
16461d7d 3188{
64a5b29c
KB
3189 struct type *float_elt_type;
3190
4c8b6ae0
UW
3191 /* Don't use the struct convention for anything but structure,
3192 union, or array types. */
3193 if (!(TYPE_CODE (type) == TYPE_CODE_STRUCT
3194 || TYPE_CODE (type) == TYPE_CODE_UNION
3195 || TYPE_CODE (type) == TYPE_CODE_ARRAY))
3196 return 0;
3197
64a5b29c
KB
3198 /* HFAs are structures (or arrays) consisting entirely of floating
3199 point values of the same length. Up to 8 of these are returned
3200 in registers. Don't use the struct convention when this is the
004d836a 3201 case. */
64a5b29c
KB
3202 float_elt_type = is_float_or_hfa_type (type);
3203 if (float_elt_type != NULL
3204 && TYPE_LENGTH (type) / TYPE_LENGTH (float_elt_type) <= 8)
3205 return 0;
3206
3207 /* Other structs of length 32 or less are returned in r8-r11.
004d836a 3208 Don't use the struct convention for those either. */
16461d7d
KB
3209 return TYPE_LENGTH (type) > 32;
3210}
3211
825d6d8a
JB
3212/* Return non-zero if TYPE is a structure or union type. */
3213
3214static int
3215ia64_struct_type_p (const struct type *type)
3216{
3217 return (TYPE_CODE (type) == TYPE_CODE_STRUCT
3218 || TYPE_CODE (type) == TYPE_CODE_UNION);
3219}
3220
4c8b6ae0 3221static void
2d522557
AC
3222ia64_extract_return_value (struct type *type, struct regcache *regcache,
3223 gdb_byte *valbuf)
16461d7d 3224{
27067745 3225 struct gdbarch *gdbarch = get_regcache_arch (regcache);
64a5b29c
KB
3226 struct type *float_elt_type;
3227
3228 float_elt_type = is_float_or_hfa_type (type);
3229 if (float_elt_type != NULL)
3230 {
948f8e3d 3231 gdb_byte from[MAX_REGISTER_SIZE];
64a5b29c
KB
3232 int offset = 0;
3233 int regnum = IA64_FR8_REGNUM;
3234 int n = TYPE_LENGTH (type) / TYPE_LENGTH (float_elt_type);
3235
3236 while (n-- > 0)
3237 {
004d836a 3238 regcache_cooked_read (regcache, regnum, from);
27067745 3239 convert_typed_floating (from, ia64_ext_type (gdbarch),
1777feb0 3240 (char *)valbuf + offset, float_elt_type);
64a5b29c
KB
3241 offset += TYPE_LENGTH (float_elt_type);
3242 regnum++;
3243 }
3244 }
825d6d8a
JB
3245 else if (!ia64_struct_type_p (type) && TYPE_LENGTH (type) < 8)
3246 {
3247 /* This is an integral value, and its size is less than 8 bytes.
3248 These values are LSB-aligned, so extract the relevant bytes,
3249 and copy them into VALBUF. */
3250 /* brobecker/2005-12-30: Actually, all integral values are LSB aligned,
3251 so I suppose we should also add handling here for integral values
3252 whose size is greater than 8. But I wasn't able to create such
3253 a type, neither in C nor in Ada, so not worrying about these yet. */
3254 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3255 ULONGEST val;
3256
3257 regcache_cooked_read_unsigned (regcache, IA64_GR8_REGNUM, &val);
3258 store_unsigned_integer (valbuf, TYPE_LENGTH (type), byte_order, val);
3259 }
16461d7d 3260 else
004d836a
JJ
3261 {
3262 ULONGEST val;
3263 int offset = 0;
3264 int regnum = IA64_GR8_REGNUM;
27067745 3265 int reglen = TYPE_LENGTH (register_type (gdbarch, IA64_GR8_REGNUM));
004d836a
JJ
3266 int n = TYPE_LENGTH (type) / reglen;
3267 int m = TYPE_LENGTH (type) % reglen;
16461d7d 3268
004d836a
JJ
3269 while (n-- > 0)
3270 {
3271 ULONGEST val;
3272 regcache_cooked_read_unsigned (regcache, regnum, &val);
3273 memcpy ((char *)valbuf + offset, &val, reglen);
3274 offset += reglen;
3275 regnum++;
3276 }
16461d7d 3277
004d836a
JJ
3278 if (m)
3279 {
3280 regcache_cooked_read_unsigned (regcache, regnum, &val);
3281 memcpy ((char *)valbuf + offset, &val, m);
3282 }
3283 }
16461d7d
KB
3284}
3285
4c8b6ae0
UW
3286static void
3287ia64_store_return_value (struct type *type, struct regcache *regcache,
3288 const gdb_byte *valbuf)
3289{
27067745 3290 struct gdbarch *gdbarch = get_regcache_arch (regcache);
4c8b6ae0
UW
3291 struct type *float_elt_type;
3292
3293 float_elt_type = is_float_or_hfa_type (type);
3294 if (float_elt_type != NULL)
3295 {
948f8e3d 3296 gdb_byte to[MAX_REGISTER_SIZE];
4c8b6ae0
UW
3297 int offset = 0;
3298 int regnum = IA64_FR8_REGNUM;
3299 int n = TYPE_LENGTH (type) / TYPE_LENGTH (float_elt_type);
3300
3301 while (n-- > 0)
3302 {
3303 convert_typed_floating ((char *)valbuf + offset, float_elt_type,
27067745 3304 to, ia64_ext_type (gdbarch));
4c8b6ae0
UW
3305 regcache_cooked_write (regcache, regnum, to);
3306 offset += TYPE_LENGTH (float_elt_type);
3307 regnum++;
3308 }
3309 }
3310 else
3311 {
3312 ULONGEST val;
3313 int offset = 0;
3314 int regnum = IA64_GR8_REGNUM;
27067745 3315 int reglen = TYPE_LENGTH (register_type (gdbarch, IA64_GR8_REGNUM));
4c8b6ae0
UW
3316 int n = TYPE_LENGTH (type) / reglen;
3317 int m = TYPE_LENGTH (type) % reglen;
3318
3319 while (n-- > 0)
3320 {
3321 ULONGEST val;
3322 memcpy (&val, (char *)valbuf + offset, reglen);
3323 regcache_cooked_write_unsigned (regcache, regnum, val);
3324 offset += reglen;
3325 regnum++;
3326 }
3327
3328 if (m)
3329 {
3330 memcpy (&val, (char *)valbuf + offset, m);
3331 regcache_cooked_write_unsigned (regcache, regnum, val);
3332 }
3333 }
3334}
3335
3336static enum return_value_convention
6a3a010b 3337ia64_return_value (struct gdbarch *gdbarch, struct value *function,
c055b101
CV
3338 struct type *valtype, struct regcache *regcache,
3339 gdb_byte *readbuf, const gdb_byte *writebuf)
4c8b6ae0
UW
3340{
3341 int struct_return = ia64_use_struct_convention (valtype);
3342
3343 if (writebuf != NULL)
3344 {
3345 gdb_assert (!struct_return);
3346 ia64_store_return_value (valtype, regcache, writebuf);
3347 }
3348
3349 if (readbuf != NULL)
3350 {
3351 gdb_assert (!struct_return);
3352 ia64_extract_return_value (valtype, regcache, readbuf);
3353 }
3354
3355 if (struct_return)
3356 return RETURN_VALUE_STRUCT_CONVENTION;
3357 else
3358 return RETURN_VALUE_REGISTER_CONVENTION;
3359}
16461d7d 3360
64a5b29c
KB
3361static int
3362is_float_or_hfa_type_recurse (struct type *t, struct type **etp)
3363{
3364 switch (TYPE_CODE (t))
3365 {
3366 case TYPE_CODE_FLT:
3367 if (*etp)
3368 return TYPE_LENGTH (*etp) == TYPE_LENGTH (t);
3369 else
3370 {
3371 *etp = t;
3372 return 1;
3373 }
3374 break;
3375 case TYPE_CODE_ARRAY:
98f96ba1
KB
3376 return
3377 is_float_or_hfa_type_recurse (check_typedef (TYPE_TARGET_TYPE (t)),
3378 etp);
64a5b29c
KB
3379 break;
3380 case TYPE_CODE_STRUCT:
3381 {
3382 int i;
3383
3384 for (i = 0; i < TYPE_NFIELDS (t); i++)
98f96ba1
KB
3385 if (!is_float_or_hfa_type_recurse
3386 (check_typedef (TYPE_FIELD_TYPE (t, i)), etp))
64a5b29c
KB
3387 return 0;
3388 return 1;
3389 }
3390 break;
3391 default:
3392 return 0;
3393 break;
3394 }
3395}
3396
3397/* Determine if the given type is one of the floating point types or
3398 and HFA (which is a struct, array, or combination thereof whose
004d836a 3399 bottom-most elements are all of the same floating point type). */
64a5b29c
KB
3400
3401static struct type *
3402is_float_or_hfa_type (struct type *t)
3403{
3404 struct type *et = 0;
3405
3406 return is_float_or_hfa_type_recurse (t, &et) ? et : 0;
3407}
3408
3409
98f96ba1
KB
3410/* Return 1 if the alignment of T is such that the next even slot
3411 should be used. Return 0, if the next available slot should
3412 be used. (See section 8.5.1 of the IA-64 Software Conventions
004d836a 3413 and Runtime manual). */
98f96ba1
KB
3414
3415static int
3416slot_alignment_is_next_even (struct type *t)
3417{
3418 switch (TYPE_CODE (t))
3419 {
3420 case TYPE_CODE_INT:
3421 case TYPE_CODE_FLT:
3422 if (TYPE_LENGTH (t) > 8)
3423 return 1;
3424 else
3425 return 0;
3426 case TYPE_CODE_ARRAY:
3427 return
3428 slot_alignment_is_next_even (check_typedef (TYPE_TARGET_TYPE (t)));
3429 case TYPE_CODE_STRUCT:
3430 {
3431 int i;
3432
3433 for (i = 0; i < TYPE_NFIELDS (t); i++)
3434 if (slot_alignment_is_next_even
3435 (check_typedef (TYPE_FIELD_TYPE (t, i))))
3436 return 1;
3437 return 0;
3438 }
3439 default:
3440 return 0;
3441 }
3442}
3443
64a5b29c
KB
3444/* Attempt to find (and return) the global pointer for the given
3445 function.
3446
3447 This is a rather nasty bit of code searchs for the .dynamic section
3448 in the objfile corresponding to the pc of the function we're trying
3449 to call. Once it finds the addresses at which the .dynamic section
3450 lives in the child process, it scans the Elf64_Dyn entries for a
3451 DT_PLTGOT tag. If it finds one of these, the corresponding
3452 d_un.d_ptr value is the global pointer. */
3453
3454static CORE_ADDR
c4de7027
JB
3455ia64_find_global_pointer_from_dynamic_section (struct gdbarch *gdbarch,
3456 CORE_ADDR faddr)
64a5b29c 3457{
e17a4113 3458 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
76d689a6 3459 struct obj_section *faddr_sect;
64a5b29c 3460
76d689a6
KB
3461 faddr_sect = find_pc_section (faddr);
3462 if (faddr_sect != NULL)
64a5b29c
KB
3463 {
3464 struct obj_section *osect;
3465
76d689a6 3466 ALL_OBJFILE_OSECTIONS (faddr_sect->objfile, osect)
64a5b29c
KB
3467 {
3468 if (strcmp (osect->the_bfd_section->name, ".dynamic") == 0)
3469 break;
3470 }
3471
76d689a6 3472 if (osect < faddr_sect->objfile->sections_end)
64a5b29c 3473 {
aded6f54 3474 CORE_ADDR addr, endaddr;
64a5b29c 3475
aded6f54
PA
3476 addr = obj_section_addr (osect);
3477 endaddr = obj_section_endaddr (osect);
3478
3479 while (addr < endaddr)
64a5b29c
KB
3480 {
3481 int status;
3482 LONGEST tag;
e362b510 3483 gdb_byte buf[8];
64a5b29c
KB
3484
3485 status = target_read_memory (addr, buf, sizeof (buf));
3486 if (status != 0)
3487 break;
e17a4113 3488 tag = extract_signed_integer (buf, sizeof (buf), byte_order);
64a5b29c
KB
3489
3490 if (tag == DT_PLTGOT)
3491 {
3492 CORE_ADDR global_pointer;
3493
3494 status = target_read_memory (addr + 8, buf, sizeof (buf));
3495 if (status != 0)
3496 break;
e17a4113
UW
3497 global_pointer = extract_unsigned_integer (buf, sizeof (buf),
3498 byte_order);
64a5b29c 3499
1777feb0 3500 /* The payoff... */
64a5b29c
KB
3501 return global_pointer;
3502 }
3503
3504 if (tag == DT_NULL)
3505 break;
3506
3507 addr += 16;
3508 }
3509 }
3510 }
3511 return 0;
3512}
3513
c4de7027
JB
3514/* Attempt to find (and return) the global pointer for the given
3515 function. We first try the find_global_pointer_from_solib routine
3516 from the gdbarch tdep vector, if provided. And if that does not
3517 work, then we try ia64_find_global_pointer_from_dynamic_section. */
3518
3519static CORE_ADDR
3520ia64_find_global_pointer (struct gdbarch *gdbarch, CORE_ADDR faddr)
3521{
3522 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3523 CORE_ADDR addr = 0;
3524
3525 if (tdep->find_global_pointer_from_solib)
3526 addr = tdep->find_global_pointer_from_solib (gdbarch, faddr);
3527 if (addr == 0)
3528 addr = ia64_find_global_pointer_from_dynamic_section (gdbarch, faddr);
3529 return addr;
3530}
3531
64a5b29c
KB
3532/* Given a function's address, attempt to find (and return) the
3533 corresponding (canonical) function descriptor. Return 0 if
004d836a 3534 not found. */
64a5b29c 3535static CORE_ADDR
e17a4113 3536find_extant_func_descr (struct gdbarch *gdbarch, CORE_ADDR faddr)
64a5b29c 3537{
e17a4113 3538 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
76d689a6 3539 struct obj_section *faddr_sect;
64a5b29c 3540
004d836a 3541 /* Return early if faddr is already a function descriptor. */
76d689a6
KB
3542 faddr_sect = find_pc_section (faddr);
3543 if (faddr_sect && strcmp (faddr_sect->the_bfd_section->name, ".opd") == 0)
64a5b29c
KB
3544 return faddr;
3545
76d689a6 3546 if (faddr_sect != NULL)
64a5b29c 3547 {
76d689a6
KB
3548 struct obj_section *osect;
3549 ALL_OBJFILE_OSECTIONS (faddr_sect->objfile, osect)
64a5b29c
KB
3550 {
3551 if (strcmp (osect->the_bfd_section->name, ".opd") == 0)
3552 break;
3553 }
3554
76d689a6 3555 if (osect < faddr_sect->objfile->sections_end)
64a5b29c 3556 {
aded6f54
PA
3557 CORE_ADDR addr, endaddr;
3558
3559 addr = obj_section_addr (osect);
3560 endaddr = obj_section_endaddr (osect);
64a5b29c 3561
aded6f54 3562 while (addr < endaddr)
64a5b29c
KB
3563 {
3564 int status;
3565 LONGEST faddr2;
e362b510 3566 gdb_byte buf[8];
64a5b29c
KB
3567
3568 status = target_read_memory (addr, buf, sizeof (buf));
3569 if (status != 0)
3570 break;
e17a4113 3571 faddr2 = extract_signed_integer (buf, sizeof (buf), byte_order);
64a5b29c
KB
3572
3573 if (faddr == faddr2)
3574 return addr;
3575
3576 addr += 16;
3577 }
3578 }
3579 }
3580 return 0;
3581}
3582
3583/* Attempt to find a function descriptor corresponding to the
3584 given address. If none is found, construct one on the
004d836a 3585 stack using the address at fdaptr. */
64a5b29c
KB
3586
3587static CORE_ADDR
9c9acae0 3588find_func_descr (struct regcache *regcache, CORE_ADDR faddr, CORE_ADDR *fdaptr)
64a5b29c 3589{
e17a4113
UW
3590 struct gdbarch *gdbarch = get_regcache_arch (regcache);
3591 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
64a5b29c
KB
3592 CORE_ADDR fdesc;
3593
e17a4113 3594 fdesc = find_extant_func_descr (gdbarch, faddr);
64a5b29c
KB
3595
3596 if (fdesc == 0)
3597 {
9c9acae0 3598 ULONGEST global_pointer;
e362b510 3599 gdb_byte buf[16];
64a5b29c
KB
3600
3601 fdesc = *fdaptr;
3602 *fdaptr += 16;
3603
e17a4113 3604 global_pointer = ia64_find_global_pointer (gdbarch, faddr);
64a5b29c
KB
3605
3606 if (global_pointer == 0)
9c9acae0
UW
3607 regcache_cooked_read_unsigned (regcache,
3608 IA64_GR1_REGNUM, &global_pointer);
64a5b29c 3609
e17a4113
UW
3610 store_unsigned_integer (buf, 8, byte_order, faddr);
3611 store_unsigned_integer (buf + 8, 8, byte_order, global_pointer);
64a5b29c
KB
3612
3613 write_memory (fdesc, buf, 16);
3614 }
3615
3616 return fdesc;
3617}
16461d7d 3618
af8b88dd
JJ
3619/* Use the following routine when printing out function pointers
3620 so the user can see the function address rather than just the
3621 function descriptor. */
3622static CORE_ADDR
e2d0e7eb
AC
3623ia64_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr,
3624 struct target_ops *targ)
af8b88dd 3625{
e17a4113 3626 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
af8b88dd 3627 struct obj_section *s;
e453266f 3628 gdb_byte buf[8];
af8b88dd
JJ
3629
3630 s = find_pc_section (addr);
3631
3632 /* check if ADDR points to a function descriptor. */
3633 if (s && strcmp (s->the_bfd_section->name, ".opd") == 0)
e17a4113 3634 return read_memory_unsigned_integer (addr, 8, byte_order);
af8b88dd 3635
fcac911a
JB
3636 /* Normally, functions live inside a section that is executable.
3637 So, if ADDR points to a non-executable section, then treat it
3638 as a function descriptor and return the target address iff
e453266f
JK
3639 the target address itself points to a section that is executable.
3640 Check first the memory of the whole length of 8 bytes is readable. */
3641 if (s && (s->the_bfd_section->flags & SEC_CODE) == 0
3642 && target_read_memory (addr, buf, 8) == 0)
fcac911a 3643 {
e453266f 3644 CORE_ADDR pc = extract_unsigned_integer (buf, 8, byte_order);
fcac911a
JB
3645 struct obj_section *pc_section = find_pc_section (pc);
3646
3647 if (pc_section && (pc_section->the_bfd_section->flags & SEC_CODE))
3648 return pc;
3649 }
b1e6fd19 3650
0d5de010
DJ
3651 /* There are also descriptors embedded in vtables. */
3652 if (s)
3653 {
7cbd4a93 3654 struct bound_minimal_symbol minsym;
0d5de010
DJ
3655
3656 minsym = lookup_minimal_symbol_by_pc (addr);
3657
7cbd4a93 3658 if (minsym.minsym && is_vtable_name (SYMBOL_LINKAGE_NAME (minsym.minsym)))
e17a4113 3659 return read_memory_unsigned_integer (addr, 8, byte_order);
0d5de010
DJ
3660 }
3661
af8b88dd
JJ
3662 return addr;
3663}
3664
a78f21af 3665static CORE_ADDR
004d836a
JJ
3666ia64_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
3667{
3668 return sp & ~0xfLL;
3669}
3670
c4de7027
JB
3671/* The default "allocate_new_rse_frame" ia64_infcall_ops routine for ia64. */
3672
3673static void
3674ia64_allocate_new_rse_frame (struct regcache *regcache, ULONGEST bsp, int sof)
3675{
3676 ULONGEST cfm, pfs, new_bsp;
3677
3678 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
3679
3680 new_bsp = rse_address_add (bsp, sof);
3681 regcache_cooked_write_unsigned (regcache, IA64_BSP_REGNUM, new_bsp);
3682
3683 regcache_cooked_read_unsigned (regcache, IA64_PFS_REGNUM, &pfs);
3684 pfs &= 0xc000000000000000LL;
3685 pfs |= (cfm & 0xffffffffffffLL);
3686 regcache_cooked_write_unsigned (regcache, IA64_PFS_REGNUM, pfs);
3687
3688 cfm &= 0xc000000000000000LL;
3689 cfm |= sof;
3690 regcache_cooked_write_unsigned (regcache, IA64_CFM_REGNUM, cfm);
3691}
3692
3693/* The default "store_argument_in_slot" ia64_infcall_ops routine for
3694 ia64. */
3695
3696static void
3697ia64_store_argument_in_slot (struct regcache *regcache, CORE_ADDR bsp,
3698 int slotnum, gdb_byte *buf)
3699{
3700 write_memory (rse_address_add (bsp, slotnum), buf, 8);
3701}
3702
3703/* The default "set_function_addr" ia64_infcall_ops routine for ia64. */
3704
3705static void
3706ia64_set_function_addr (struct regcache *regcache, CORE_ADDR func_addr)
3707{
3708 /* Nothing needed. */
3709}
3710
004d836a 3711static CORE_ADDR
7d9b040b 3712ia64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
8dd5115e
AS
3713 struct regcache *regcache, CORE_ADDR bp_addr,
3714 int nargs, struct value **args, CORE_ADDR sp,
3715 int struct_return, CORE_ADDR struct_addr)
16461d7d 3716{
c4de7027 3717 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
e17a4113 3718 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
16461d7d 3719 int argno;
ea7c478f 3720 struct value *arg;
16461d7d
KB
3721 struct type *type;
3722 int len, argoffset;
64a5b29c 3723 int nslots, rseslots, memslots, slotnum, nfuncargs;
16461d7d 3724 int floatreg;
c4de7027 3725 ULONGEST bsp;
9c9acae0 3726 CORE_ADDR funcdescaddr, pc, global_pointer;
7d9b040b 3727 CORE_ADDR func_addr = find_function_addr (function, NULL);
16461d7d
KB
3728
3729 nslots = 0;
64a5b29c 3730 nfuncargs = 0;
004d836a 3731 /* Count the number of slots needed for the arguments. */
16461d7d
KB
3732 for (argno = 0; argno < nargs; argno++)
3733 {
3734 arg = args[argno];
4991999e 3735 type = check_typedef (value_type (arg));
16461d7d
KB
3736 len = TYPE_LENGTH (type);
3737
98f96ba1 3738 if ((nslots & 1) && slot_alignment_is_next_even (type))
16461d7d
KB
3739 nslots++;
3740
64a5b29c
KB
3741 if (TYPE_CODE (type) == TYPE_CODE_FUNC)
3742 nfuncargs++;
3743
16461d7d
KB
3744 nslots += (len + 7) / 8;
3745 }
3746
004d836a 3747 /* Divvy up the slots between the RSE and the memory stack. */
16461d7d
KB
3748 rseslots = (nslots > 8) ? 8 : nslots;
3749 memslots = nslots - rseslots;
3750
004d836a 3751 /* Allocate a new RSE frame. */
9c9acae0 3752 regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
c4de7027 3753 tdep->infcall_ops.allocate_new_rse_frame (regcache, bsp, rseslots);
16461d7d 3754
64a5b29c
KB
3755 /* We will attempt to find function descriptors in the .opd segment,
3756 but if we can't we'll construct them ourselves. That being the
004d836a 3757 case, we'll need to reserve space on the stack for them. */
64a5b29c
KB
3758 funcdescaddr = sp - nfuncargs * 16;
3759 funcdescaddr &= ~0xfLL;
3760
3761 /* Adjust the stack pointer to it's new value. The calling conventions
3762 require us to have 16 bytes of scratch, plus whatever space is
004d836a 3763 necessary for the memory slots and our function descriptors. */
64a5b29c 3764 sp = sp - 16 - (memslots + nfuncargs) * 8;
004d836a 3765 sp &= ~0xfLL; /* Maintain 16 byte alignment. */
16461d7d 3766
64a5b29c
KB
3767 /* Place the arguments where they belong. The arguments will be
3768 either placed in the RSE backing store or on the memory stack.
3769 In addition, floating point arguments or HFAs are placed in
004d836a 3770 floating point registers. */
16461d7d
KB
3771 slotnum = 0;
3772 floatreg = IA64_FR8_REGNUM;
3773 for (argno = 0; argno < nargs; argno++)
3774 {
64a5b29c
KB
3775 struct type *float_elt_type;
3776
16461d7d 3777 arg = args[argno];
4991999e 3778 type = check_typedef (value_type (arg));
16461d7d 3779 len = TYPE_LENGTH (type);
64a5b29c 3780
004d836a 3781 /* Special handling for function parameters. */
64a5b29c
KB
3782 if (len == 8
3783 && TYPE_CODE (type) == TYPE_CODE_PTR
3784 && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC)
3785 {
948f8e3d 3786 gdb_byte val_buf[8];
e17a4113
UW
3787 ULONGEST faddr = extract_unsigned_integer (value_contents (arg),
3788 8, byte_order);
3789 store_unsigned_integer (val_buf, 8, byte_order,
9c9acae0 3790 find_func_descr (regcache, faddr,
fbd9dcd3 3791 &funcdescaddr));
64a5b29c 3792 if (slotnum < rseslots)
c4de7027
JB
3793 tdep->infcall_ops.store_argument_in_slot (regcache, bsp,
3794 slotnum, val_buf);
64a5b29c
KB
3795 else
3796 write_memory (sp + 16 + 8 * (slotnum - rseslots), val_buf, 8);
3797 slotnum++;
3798 continue;
3799 }
3800
004d836a 3801 /* Normal slots. */
98f96ba1
KB
3802
3803 /* Skip odd slot if necessary... */
3804 if ((slotnum & 1) && slot_alignment_is_next_even (type))
16461d7d 3805 slotnum++;
98f96ba1 3806
16461d7d
KB
3807 argoffset = 0;
3808 while (len > 0)
3809 {
948f8e3d 3810 gdb_byte val_buf[8];
16461d7d
KB
3811
3812 memset (val_buf, 0, 8);
825d6d8a
JB
3813 if (!ia64_struct_type_p (type) && len < 8)
3814 {
3815 /* Integral types are LSB-aligned, so we have to be careful
3816 to insert the argument on the correct side of the buffer.
3817 This is why we use store_unsigned_integer. */
3818 store_unsigned_integer
3819 (val_buf, 8, byte_order,
3820 extract_unsigned_integer (value_contents (arg), len,
3821 byte_order));
3822 }
3823 else
3824 {
3825 /* This is either an 8bit integral type, or an aggregate.
3826 For 8bit integral type, there is no problem, we just
3827 copy the value over.
3828
3829 For aggregates, the only potentially tricky portion
3830 is to write the last one if it is less than 8 bytes.
3831 In this case, the data is Byte0-aligned. Happy news,
3832 this means that we don't need to differentiate the
3833 handling of 8byte blocks and less-than-8bytes blocks. */
3834 memcpy (val_buf, value_contents (arg) + argoffset,
3835 (len > 8) ? 8 : len);
3836 }
16461d7d
KB
3837
3838 if (slotnum < rseslots)
c4de7027
JB
3839 tdep->infcall_ops.store_argument_in_slot (regcache, bsp,
3840 slotnum, val_buf);
16461d7d
KB
3841 else
3842 write_memory (sp + 16 + 8 * (slotnum - rseslots), val_buf, 8);
3843
3844 argoffset += 8;
3845 len -= 8;
3846 slotnum++;
3847 }
64a5b29c 3848
004d836a 3849 /* Handle floating point types (including HFAs). */
64a5b29c
KB
3850 float_elt_type = is_float_or_hfa_type (type);
3851 if (float_elt_type != NULL)
3852 {
3853 argoffset = 0;
3854 len = TYPE_LENGTH (type);
3855 while (len > 0 && floatreg < IA64_FR16_REGNUM)
3856 {
004d836a 3857 char to[MAX_REGISTER_SIZE];
1777feb0
MS
3858 convert_typed_floating (value_contents (arg) + argoffset,
3859 float_elt_type, to,
3860 ia64_ext_type (gdbarch));
004d836a 3861 regcache_cooked_write (regcache, floatreg, (void *)to);
64a5b29c
KB
3862 floatreg++;
3863 argoffset += TYPE_LENGTH (float_elt_type);
3864 len -= TYPE_LENGTH (float_elt_type);
3865 }
16461d7d
KB
3866 }
3867 }
3868
004d836a 3869 /* Store the struct return value in r8 if necessary. */
16461d7d
KB
3870 if (struct_return)
3871 {
1777feb0
MS
3872 regcache_cooked_write_unsigned (regcache, IA64_GR8_REGNUM,
3873 (ULONGEST) struct_addr);
16461d7d
KB
3874 }
3875
e17a4113 3876 global_pointer = ia64_find_global_pointer (gdbarch, func_addr);
8dd5115e 3877
004d836a 3878 if (global_pointer != 0)
9c9acae0 3879 regcache_cooked_write_unsigned (regcache, IA64_GR1_REGNUM, global_pointer);
a59fe496 3880
c4de7027
JB
3881 /* The following is not necessary on HP-UX, because we're using
3882 a dummy code sequence pushed on the stack to make the call, and
3883 this sequence doesn't need b0 to be set in order for our dummy
3884 breakpoint to be hit. Nonetheless, this doesn't interfere, and
3885 it's needed for other OSes, so we do this unconditionaly. */
9c9acae0 3886 regcache_cooked_write_unsigned (regcache, IA64_BR0_REGNUM, bp_addr);
16461d7d 3887
9c9acae0 3888 regcache_cooked_write_unsigned (regcache, sp_regnum, sp);
16461d7d 3889
c4de7027
JB
3890 tdep->infcall_ops.set_function_addr (regcache, func_addr);
3891
16461d7d
KB
3892 return sp;
3893}
3894
c4de7027
JB
3895static const struct ia64_infcall_ops ia64_infcall_ops =
3896{
3897 ia64_allocate_new_rse_frame,
3898 ia64_store_argument_in_slot,
3899 ia64_set_function_addr
3900};
3901
004d836a 3902static struct frame_id
15c1e57f 3903ia64_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
16461d7d 3904{
e17a4113 3905 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
e362b510 3906 gdb_byte buf[8];
4afcc598 3907 CORE_ADDR sp, bsp;
004d836a 3908
15c1e57f 3909 get_frame_register (this_frame, sp_regnum, buf);
e17a4113 3910 sp = extract_unsigned_integer (buf, 8, byte_order);
004d836a 3911
15c1e57f 3912 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
e17a4113 3913 bsp = extract_unsigned_integer (buf, 8, byte_order);
4afcc598
JJ
3914
3915 if (gdbarch_debug >= 1)
3916 fprintf_unfiltered (gdb_stdlog,
5af949e3
UW
3917 "dummy frame id: code %s, stack %s, special %s\n",
3918 paddress (gdbarch, get_frame_pc (this_frame)),
3919 paddress (gdbarch, sp), paddress (gdbarch, bsp));
4afcc598 3920
15c1e57f 3921 return frame_id_build_special (sp, get_frame_pc (this_frame), bsp);
16461d7d
KB
3922}
3923
004d836a
JJ
3924static CORE_ADDR
3925ia64_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
16461d7d 3926{
e17a4113 3927 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
e362b510 3928 gdb_byte buf[8];
004d836a
JJ
3929 CORE_ADDR ip, psr, pc;
3930
3931 frame_unwind_register (next_frame, IA64_IP_REGNUM, buf);
e17a4113 3932 ip = extract_unsigned_integer (buf, 8, byte_order);
004d836a 3933 frame_unwind_register (next_frame, IA64_PSR_REGNUM, buf);
e17a4113 3934 psr = extract_unsigned_integer (buf, 8, byte_order);
004d836a
JJ
3935
3936 pc = (ip & ~0xf) | ((psr >> 41) & 3);
3937 return pc;
16461d7d
KB
3938}
3939
6926787d
AS
3940static int
3941ia64_print_insn (bfd_vma memaddr, struct disassemble_info *info)
3942{
3943 info->bytes_per_line = SLOT_MULTIPLIER;
3944 return print_insn_ia64 (memaddr, info);
3945}
3946
77ca787b
JB
3947/* The default "size_of_register_frame" gdbarch_tdep routine for ia64. */
3948
3949static int
3950ia64_size_of_register_frame (struct frame_info *this_frame, ULONGEST cfm)
3951{
3952 return (cfm & 0x7f);
3953}
3954
16461d7d
KB
3955static struct gdbarch *
3956ia64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
3957{
3958 struct gdbarch *gdbarch;
244bc108 3959 struct gdbarch_tdep *tdep;
244bc108 3960
85bf2b91
JJ
3961 /* If there is already a candidate, use it. */
3962 arches = gdbarch_list_lookup_by_info (arches, &info);
3963 if (arches != NULL)
3964 return arches->gdbarch;
16461d7d 3965
924d6a4f 3966 tdep = xzalloc (sizeof (struct gdbarch_tdep));
244bc108 3967 gdbarch = gdbarch_alloc (&info, tdep);
244bc108 3968
77ca787b
JB
3969 tdep->size_of_register_frame = ia64_size_of_register_frame;
3970
5439edaa
AC
3971 /* According to the ia64 specs, instructions that store long double
3972 floats in memory use a long-double format different than that
3973 used in the floating registers. The memory format matches the
3974 x86 extended float format which is 80 bits. An OS may choose to
3975 use this format (e.g. GNU/Linux) or choose to use a different
3976 format for storing long doubles (e.g. HPUX). In the latter case,
3977 the setting of the format may be moved/overridden in an
3978 OS-specific tdep file. */
8da61cc4 3979 set_gdbarch_long_double_format (gdbarch, floatformats_i387_ext);
32edc941 3980
16461d7d
KB
3981 set_gdbarch_short_bit (gdbarch, 16);
3982 set_gdbarch_int_bit (gdbarch, 32);
3983 set_gdbarch_long_bit (gdbarch, 64);
3984 set_gdbarch_long_long_bit (gdbarch, 64);
3985 set_gdbarch_float_bit (gdbarch, 32);
3986 set_gdbarch_double_bit (gdbarch, 64);
33c08150 3987 set_gdbarch_long_double_bit (gdbarch, 128);
16461d7d
KB
3988 set_gdbarch_ptr_bit (gdbarch, 64);
3989
004d836a 3990 set_gdbarch_num_regs (gdbarch, NUM_IA64_RAW_REGS);
1777feb0
MS
3991 set_gdbarch_num_pseudo_regs (gdbarch,
3992 LAST_PSEUDO_REGNUM - FIRST_PSEUDO_REGNUM);
16461d7d 3993 set_gdbarch_sp_regnum (gdbarch, sp_regnum);
698cb3f0 3994 set_gdbarch_fp0_regnum (gdbarch, IA64_FR0_REGNUM);
16461d7d
KB
3995
3996 set_gdbarch_register_name (gdbarch, ia64_register_name);
004d836a 3997 set_gdbarch_register_type (gdbarch, ia64_register_type);
16461d7d 3998
004d836a
JJ
3999 set_gdbarch_pseudo_register_read (gdbarch, ia64_pseudo_register_read);
4000 set_gdbarch_pseudo_register_write (gdbarch, ia64_pseudo_register_write);
4001 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, ia64_dwarf_reg_to_regnum);
4002 set_gdbarch_register_reggroup_p (gdbarch, ia64_register_reggroup_p);
4003 set_gdbarch_convert_register_p (gdbarch, ia64_convert_register_p);
4004 set_gdbarch_register_to_value (gdbarch, ia64_register_to_value);
4005 set_gdbarch_value_to_register (gdbarch, ia64_value_to_register);
16461d7d 4006
004d836a 4007 set_gdbarch_skip_prologue (gdbarch, ia64_skip_prologue);
16461d7d 4008
4c8b6ae0 4009 set_gdbarch_return_value (gdbarch, ia64_return_value);
16461d7d 4010
1777feb0
MS
4011 set_gdbarch_memory_insert_breakpoint (gdbarch,
4012 ia64_memory_insert_breakpoint);
4013 set_gdbarch_memory_remove_breakpoint (gdbarch,
4014 ia64_memory_remove_breakpoint);
16461d7d
KB
4015 set_gdbarch_breakpoint_from_pc (gdbarch, ia64_breakpoint_from_pc);
4016 set_gdbarch_read_pc (gdbarch, ia64_read_pc);
b33e8514 4017 set_gdbarch_write_pc (gdbarch, ia64_write_pc);
16461d7d
KB
4018
4019 /* Settings for calling functions in the inferior. */
8dd5115e 4020 set_gdbarch_push_dummy_call (gdbarch, ia64_push_dummy_call);
c4de7027 4021 tdep->infcall_ops = ia64_infcall_ops;
004d836a 4022 set_gdbarch_frame_align (gdbarch, ia64_frame_align);
15c1e57f 4023 set_gdbarch_dummy_id (gdbarch, ia64_dummy_id);
16461d7d 4024
004d836a 4025 set_gdbarch_unwind_pc (gdbarch, ia64_unwind_pc);
968d1cb4 4026#ifdef HAVE_LIBUNWIND_IA64_H
15c1e57f
JB
4027 frame_unwind_append_unwinder (gdbarch,
4028 &ia64_libunwind_sigtramp_frame_unwind);
4029 frame_unwind_append_unwinder (gdbarch, &ia64_libunwind_frame_unwind);
4030 frame_unwind_append_unwinder (gdbarch, &ia64_sigtramp_frame_unwind);
968d1cb4 4031 libunwind_frame_set_descr (gdbarch, &ia64_libunwind_descr);
c5a27d9c 4032#else
15c1e57f 4033 frame_unwind_append_unwinder (gdbarch, &ia64_sigtramp_frame_unwind);
968d1cb4 4034#endif
15c1e57f 4035 frame_unwind_append_unwinder (gdbarch, &ia64_frame_unwind);
004d836a 4036 frame_base_set_default (gdbarch, &ia64_frame_base);
16461d7d
KB
4037
4038 /* Settings that should be unnecessary. */
4039 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
4040
6926787d 4041 set_gdbarch_print_insn (gdbarch, ia64_print_insn);
1777feb0
MS
4042 set_gdbarch_convert_from_func_ptr_addr (gdbarch,
4043 ia64_convert_from_func_ptr_addr);
6926787d 4044
0d5de010
DJ
4045 /* The virtual table contains 16-byte descriptors, not pointers to
4046 descriptors. */
4047 set_gdbarch_vtable_function_descriptors (gdbarch, 1);
4048
b33e8514
AS
4049 /* Hook in ABI-specific overrides, if they have been registered. */
4050 gdbarch_init_osabi (info, gdbarch);
4051
16461d7d
KB
4052 return gdbarch;
4053}
4054
a78f21af
AC
4055extern initialize_file_ftype _initialize_ia64_tdep; /* -Wmissing-prototypes */
4056
16461d7d
KB
4057void
4058_initialize_ia64_tdep (void)
4059{
b33e8514 4060 gdbarch_register (bfd_arch_ia64, ia64_gdbarch_init, NULL);
16461d7d 4061}
This page took 1.43698 seconds and 4 git commands to generate.