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