1 /* Target-dependent code for the IA-64 for GDB, the GNU debugger.
3 Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
4 2009 Free Software Foundation, Inc.
6 This file is part of GDB.
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.
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.
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/>. */
24 #include "arch-utils.h"
25 #include "floatformat.h"
28 #include "reggroups.h"
30 #include "frame-base.h"
31 #include "frame-unwind.h"
34 #include "gdb_assert.h"
36 #include "elf/common.h" /* for DT_PLTGOT value */
41 #include "ia64-tdep.h"
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"
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.
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.
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. */
64 #define KERNEL_START 0xc000000000000000ULL
66 static size_t ktab_size = 0;
67 struct ia64_table_entry
69 uint64_t start_offset;
74 static struct ia64_table_entry *ktab = NULL;
78 /* An enumeration of the different IA-64 instruction types. */
80 typedef enum instruction_type
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 */
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.
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. */
107 #define SLOT_MULTIPLIER 1
109 /* Length in bytes of an instruction bundle */
111 #define BUNDLE_LEN 16
113 /* See the saved memory layout comment for ia64_memory_insert_breakpoint. */
115 #if BREAKPOINT_MAX < BUNDLE_LEN - 2
116 # error "BREAKPOINT_MAX < BUNDLE_LEN - 2"
119 static gdbarch_init_ftype ia64_gdbarch_init;
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 (CORE_ADDR faddr);
128 static struct type *builtin_type_ia64_ext;
130 #define NUM_IA64_RAW_REGS 462
132 static int sp_regnum = IA64_GR12_REGNUM;
133 static int fp_regnum = IA64_VFP_REGNUM;
134 static int lr_regnum = IA64_VRAP_REGNUM;
136 /* NOTE: we treat the register stack registers r32-r127 as pseudo-registers because
137 they may not be accessible via the ptrace register get/set interfaces. */
138 enum pseudo_regs { FIRST_PSEUDO_REGNUM = NUM_IA64_RAW_REGS, VBOF_REGNUM = IA64_NAT127_REGNUM + 1, V32_REGNUM,
139 V127_REGNUM = V32_REGNUM + 95,
140 VP0_REGNUM, VP16_REGNUM = VP0_REGNUM + 16, VP63_REGNUM = VP0_REGNUM + 63, LAST_PSEUDO_REGNUM };
142 /* Array of register names; There should be ia64_num_regs strings in
145 static char *ia64_register_names[] =
146 { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
147 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
148 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
149 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
150 "", "", "", "", "", "", "", "",
151 "", "", "", "", "", "", "", "",
152 "", "", "", "", "", "", "", "",
153 "", "", "", "", "", "", "", "",
154 "", "", "", "", "", "", "", "",
155 "", "", "", "", "", "", "", "",
156 "", "", "", "", "", "", "", "",
157 "", "", "", "", "", "", "", "",
158 "", "", "", "", "", "", "", "",
159 "", "", "", "", "", "", "", "",
160 "", "", "", "", "", "", "", "",
161 "", "", "", "", "", "", "", "",
163 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
164 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
165 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
166 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
167 "f32", "f33", "f34", "f35", "f36", "f37", "f38", "f39",
168 "f40", "f41", "f42", "f43", "f44", "f45", "f46", "f47",
169 "f48", "f49", "f50", "f51", "f52", "f53", "f54", "f55",
170 "f56", "f57", "f58", "f59", "f60", "f61", "f62", "f63",
171 "f64", "f65", "f66", "f67", "f68", "f69", "f70", "f71",
172 "f72", "f73", "f74", "f75", "f76", "f77", "f78", "f79",
173 "f80", "f81", "f82", "f83", "f84", "f85", "f86", "f87",
174 "f88", "f89", "f90", "f91", "f92", "f93", "f94", "f95",
175 "f96", "f97", "f98", "f99", "f100", "f101", "f102", "f103",
176 "f104", "f105", "f106", "f107", "f108", "f109", "f110", "f111",
177 "f112", "f113", "f114", "f115", "f116", "f117", "f118", "f119",
178 "f120", "f121", "f122", "f123", "f124", "f125", "f126", "f127",
180 "", "", "", "", "", "", "", "",
181 "", "", "", "", "", "", "", "",
182 "", "", "", "", "", "", "", "",
183 "", "", "", "", "", "", "", "",
184 "", "", "", "", "", "", "", "",
185 "", "", "", "", "", "", "", "",
186 "", "", "", "", "", "", "", "",
187 "", "", "", "", "", "", "", "",
189 "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7",
193 "pr", "ip", "psr", "cfm",
195 "kr0", "kr1", "kr2", "kr3", "kr4", "kr5", "kr6", "kr7",
196 "", "", "", "", "", "", "", "",
197 "rsc", "bsp", "bspstore", "rnat",
199 "eflag", "csd", "ssd", "cflg", "fsr", "fir", "fdr", "",
200 "ccv", "", "", "", "unat", "", "", "",
201 "fpsr", "", "", "", "itc",
202 "", "", "", "", "", "", "", "", "", "",
203 "", "", "", "", "", "", "", "", "",
205 "", "", "", "", "", "", "", "", "", "",
206 "", "", "", "", "", "", "", "", "", "",
207 "", "", "", "", "", "", "", "", "", "",
208 "", "", "", "", "", "", "", "", "", "",
209 "", "", "", "", "", "", "", "", "", "",
210 "", "", "", "", "", "", "", "", "", "",
212 "nat0", "nat1", "nat2", "nat3", "nat4", "nat5", "nat6", "nat7",
213 "nat8", "nat9", "nat10", "nat11", "nat12", "nat13", "nat14", "nat15",
214 "nat16", "nat17", "nat18", "nat19", "nat20", "nat21", "nat22", "nat23",
215 "nat24", "nat25", "nat26", "nat27", "nat28", "nat29", "nat30", "nat31",
216 "nat32", "nat33", "nat34", "nat35", "nat36", "nat37", "nat38", "nat39",
217 "nat40", "nat41", "nat42", "nat43", "nat44", "nat45", "nat46", "nat47",
218 "nat48", "nat49", "nat50", "nat51", "nat52", "nat53", "nat54", "nat55",
219 "nat56", "nat57", "nat58", "nat59", "nat60", "nat61", "nat62", "nat63",
220 "nat64", "nat65", "nat66", "nat67", "nat68", "nat69", "nat70", "nat71",
221 "nat72", "nat73", "nat74", "nat75", "nat76", "nat77", "nat78", "nat79",
222 "nat80", "nat81", "nat82", "nat83", "nat84", "nat85", "nat86", "nat87",
223 "nat88", "nat89", "nat90", "nat91", "nat92", "nat93", "nat94", "nat95",
224 "nat96", "nat97", "nat98", "nat99", "nat100","nat101","nat102","nat103",
225 "nat104","nat105","nat106","nat107","nat108","nat109","nat110","nat111",
226 "nat112","nat113","nat114","nat115","nat116","nat117","nat118","nat119",
227 "nat120","nat121","nat122","nat123","nat124","nat125","nat126","nat127",
231 "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39",
232 "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47",
233 "r48", "r49", "r50", "r51", "r52", "r53", "r54", "r55",
234 "r56", "r57", "r58", "r59", "r60", "r61", "r62", "r63",
235 "r64", "r65", "r66", "r67", "r68", "r69", "r70", "r71",
236 "r72", "r73", "r74", "r75", "r76", "r77", "r78", "r79",
237 "r80", "r81", "r82", "r83", "r84", "r85", "r86", "r87",
238 "r88", "r89", "r90", "r91", "r92", "r93", "r94", "r95",
239 "r96", "r97", "r98", "r99", "r100", "r101", "r102", "r103",
240 "r104", "r105", "r106", "r107", "r108", "r109", "r110", "r111",
241 "r112", "r113", "r114", "r115", "r116", "r117", "r118", "r119",
242 "r120", "r121", "r122", "r123", "r124", "r125", "r126", "r127",
244 "p0", "p1", "p2", "p3", "p4", "p5", "p6", "p7",
245 "p8", "p9", "p10", "p11", "p12", "p13", "p14", "p15",
246 "p16", "p17", "p18", "p19", "p20", "p21", "p22", "p23",
247 "p24", "p25", "p26", "p27", "p28", "p29", "p30", "p31",
248 "p32", "p33", "p34", "p35", "p36", "p37", "p38", "p39",
249 "p40", "p41", "p42", "p43", "p44", "p45", "p46", "p47",
250 "p48", "p49", "p50", "p51", "p52", "p53", "p54", "p55",
251 "p56", "p57", "p58", "p59", "p60", "p61", "p62", "p63",
254 struct ia64_frame_cache
256 CORE_ADDR base; /* frame pointer base for frame */
257 CORE_ADDR pc; /* function start pc for frame */
258 CORE_ADDR saved_sp; /* stack pointer for frame */
259 CORE_ADDR bsp; /* points at r32 for the current frame */
260 CORE_ADDR cfm; /* cfm value for current frame */
261 CORE_ADDR prev_cfm; /* cfm value for previous frame */
263 int sof; /* Size of frame (decoded from cfm value) */
264 int sol; /* Size of locals (decoded from cfm value) */
265 int sor; /* Number of rotating registers. (decoded from cfm value) */
266 CORE_ADDR after_prologue;
267 /* Address of first instruction after the last
268 prologue instruction; Note that there may
269 be instructions from the function's body
270 intermingled with the prologue. */
271 int mem_stack_frame_size;
272 /* Size of the memory stack frame (may be zero),
273 or -1 if it has not been determined yet. */
274 int fp_reg; /* Register number (if any) used a frame pointer
275 for this frame. 0 if no register is being used
276 as the frame pointer. */
278 /* Saved registers. */
279 CORE_ADDR saved_regs[NUM_IA64_RAW_REGS];
284 ia64_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
285 struct reggroup *group)
290 if (group == all_reggroup)
292 vector_p = TYPE_VECTOR (register_type (gdbarch, regnum));
293 float_p = TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT;
294 raw_p = regnum < NUM_IA64_RAW_REGS;
295 if (group == float_reggroup)
297 if (group == vector_reggroup)
299 if (group == general_reggroup)
300 return (!vector_p && !float_p);
301 if (group == save_reggroup || group == restore_reggroup)
307 ia64_register_name (struct gdbarch *gdbarch, int reg)
309 return ia64_register_names[reg];
313 ia64_register_type (struct gdbarch *arch, int reg)
315 if (reg >= IA64_FR0_REGNUM && reg <= IA64_FR127_REGNUM)
316 return builtin_type_ia64_ext;
318 return builtin_type (arch)->builtin_long;
322 ia64_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
324 if (reg >= IA64_GR32_REGNUM && reg <= IA64_GR127_REGNUM)
325 return V32_REGNUM + (reg - IA64_GR32_REGNUM);
330 floatformat_valid (const struct floatformat *fmt, const void *from)
335 const struct floatformat floatformat_ia64_ext =
337 floatformat_little, 82, 0, 1, 17, 65535, 0x1ffff, 18, 64,
338 floatformat_intbit_yes, "floatformat_ia64_ext", floatformat_valid, NULL
341 const struct floatformat *floatformats_ia64_ext[2] =
343 &floatformat_ia64_ext,
344 &floatformat_ia64_ext
348 /* Extract ``len'' bits from an instruction bundle starting at
352 extract_bit_field (const char *bundle, int from, int len)
354 long long result = 0LL;
356 int from_byte = from / 8;
357 int to_byte = to / 8;
358 unsigned char *b = (unsigned char *) bundle;
364 if (from_byte == to_byte)
365 c = ((unsigned char) (c << (8 - to % 8))) >> (8 - to % 8);
366 result = c >> (from % 8);
367 lshift = 8 - (from % 8);
369 for (i = from_byte+1; i < to_byte; i++)
371 result |= ((long long) b[i]) << lshift;
375 if (from_byte < to_byte && (to % 8 != 0))
378 c = ((unsigned char) (c << (8 - to % 8))) >> (8 - to % 8);
379 result |= ((long long) c) << lshift;
385 /* Replace the specified bits in an instruction bundle */
388 replace_bit_field (char *bundle, long long val, int from, int len)
391 int from_byte = from / 8;
392 int to_byte = to / 8;
393 unsigned char *b = (unsigned char *) bundle;
396 if (from_byte == to_byte)
398 unsigned char left, right;
400 left = (c >> (to % 8)) << (to % 8);
401 right = ((unsigned char) (c << (8 - from % 8))) >> (8 - from % 8);
402 c = (unsigned char) (val & 0xff);
403 c = (unsigned char) (c << (from % 8 + 8 - to % 8)) >> (8 - to % 8);
411 c = ((unsigned char) (c << (8 - from % 8))) >> (8 - from % 8);
412 c = c | (val << (from % 8));
414 val >>= 8 - from % 8;
416 for (i = from_byte+1; i < to_byte; i++)
425 unsigned char cv = (unsigned char) val;
427 c = c >> (to % 8) << (to % 8);
428 c |= ((unsigned char) (cv << (8 - to % 8))) >> (8 - to % 8);
434 /* Return the contents of slot N (for N = 0, 1, or 2) in
435 and instruction bundle */
438 slotN_contents (char *bundle, int slotnum)
440 return extract_bit_field (bundle, 5+41*slotnum, 41);
443 /* Store an instruction in an instruction bundle */
446 replace_slotN_contents (char *bundle, long long instr, int slotnum)
448 replace_bit_field (bundle, instr, 5+41*slotnum, 41);
451 static const enum instruction_type template_encoding_table[32][3] =
453 { M, I, I }, /* 00 */
454 { M, I, I }, /* 01 */
455 { M, I, I }, /* 02 */
456 { M, I, I }, /* 03 */
457 { M, L, X }, /* 04 */
458 { M, L, X }, /* 05 */
459 { undefined, undefined, undefined }, /* 06 */
460 { undefined, undefined, undefined }, /* 07 */
461 { M, M, I }, /* 08 */
462 { M, M, I }, /* 09 */
463 { M, M, I }, /* 0A */
464 { M, M, I }, /* 0B */
465 { M, F, I }, /* 0C */
466 { M, F, I }, /* 0D */
467 { M, M, F }, /* 0E */
468 { M, M, F }, /* 0F */
469 { M, I, B }, /* 10 */
470 { M, I, B }, /* 11 */
471 { M, B, B }, /* 12 */
472 { M, B, B }, /* 13 */
473 { undefined, undefined, undefined }, /* 14 */
474 { undefined, undefined, undefined }, /* 15 */
475 { B, B, B }, /* 16 */
476 { B, B, B }, /* 17 */
477 { M, M, B }, /* 18 */
478 { M, M, B }, /* 19 */
479 { undefined, undefined, undefined }, /* 1A */
480 { undefined, undefined, undefined }, /* 1B */
481 { M, F, B }, /* 1C */
482 { M, F, B }, /* 1D */
483 { undefined, undefined, undefined }, /* 1E */
484 { undefined, undefined, undefined }, /* 1F */
487 /* Fetch and (partially) decode an instruction at ADDR and return the
488 address of the next instruction to fetch. */
491 fetch_instruction (CORE_ADDR addr, instruction_type *it, long long *instr)
493 char bundle[BUNDLE_LEN];
494 int slotnum = (int) (addr & 0x0f) / SLOT_MULTIPLIER;
498 /* Warn about slot numbers greater than 2. We used to generate
499 an error here on the assumption that the user entered an invalid
500 address. But, sometimes GDB itself requests an invalid address.
501 This can (easily) happen when execution stops in a function for
502 which there are no symbols. The prologue scanner will attempt to
503 find the beginning of the function - if the nearest symbol
504 happens to not be aligned on a bundle boundary (16 bytes), the
505 resulting starting address will cause GDB to think that the slot
508 So we warn about it and set the slot number to zero. It is
509 not necessarily a fatal condition, particularly if debugging
510 at the assembly language level. */
513 warning (_("Can't fetch instructions for slot numbers greater than 2.\n"
514 "Using slot 0 instead"));
520 val = target_read_memory (addr, bundle, BUNDLE_LEN);
525 *instr = slotN_contents (bundle, slotnum);
526 template = extract_bit_field (bundle, 0, 5);
527 *it = template_encoding_table[(int)template][slotnum];
529 if (slotnum == 2 || (slotnum == 1 && *it == L))
532 addr += (slotnum + 1) * SLOT_MULTIPLIER;
537 /* There are 5 different break instructions (break.i, break.b,
538 break.m, break.f, and break.x), but they all have the same
539 encoding. (The five bit template in the low five bits of the
540 instruction bundle distinguishes one from another.)
542 The runtime architecture manual specifies that break instructions
543 used for debugging purposes must have the upper two bits of the 21
544 bit immediate set to a 0 and a 1 respectively. A breakpoint
545 instruction encodes the most significant bit of its 21 bit
546 immediate at bit 36 of the 41 bit instruction. The penultimate msb
547 is at bit 25 which leads to the pattern below.
549 Originally, I had this set up to do, e.g, a "break.i 0x80000" But
550 it turns out that 0x80000 was used as the syscall break in the early
551 simulators. So I changed the pattern slightly to do "break.i 0x080001"
552 instead. But that didn't work either (I later found out that this
553 pattern was used by the simulator that I was using.) So I ended up
554 using the pattern seen below.
556 SHADOW_CONTENTS has byte-based addressing (PLACED_ADDRESS and SHADOW_LEN)
557 while we need bit-based addressing as the instructions length is 41 bits and
558 we must not modify/corrupt the adjacent slots in the same bundle.
559 Fortunately we may store larger memory incl. the adjacent bits with the
560 original memory content (not the possibly already stored breakpoints there).
561 We need to be careful in ia64_memory_remove_breakpoint to always restore
562 only the specific bits of this instruction ignoring any adjacent stored
565 We use the original addressing with the low nibble in the range <0..2> which
566 gets incorrectly interpreted by generic non-ia64 breakpoint_restore_shadows
567 as the direct byte offset of SHADOW_CONTENTS. We store whole BUNDLE_LEN
568 bytes just without these two possibly skipped bytes to not to exceed to the
571 If we would like to store the whole bundle to SHADOW_CONTENTS we would have
572 to store already the base address (`address & ~0x0f') into PLACED_ADDRESS.
573 In such case there is no other place where to store
574 SLOTNUM (`adress & 0x0f', value in the range <0..2>). We need to know
575 SLOTNUM in ia64_memory_remove_breakpoint.
577 ia64 16-byte bundle layout:
578 | 5 bits | slot 0 with 41 bits | slot 1 with 41 bits | slot 2 with 41 bits |
580 The current addressing used by the code below:
581 original PC placed_address placed_size required covered
582 == bp_tgt->shadow_len reqd \subset covered
583 0xABCDE0 0xABCDE0 0xE <0x0...0x5> <0x0..0xD>
584 0xABCDE1 0xABCDE1 0xE <0x5...0xA> <0x1..0xE>
585 0xABCDE2 0xABCDE2 0xE <0xA...0xF> <0x2..0xF>
587 `objdump -d' and some other tools show a bit unjustified offsets:
588 original PC byte where starts the instruction objdump offset
589 0xABCDE0 0xABCDE0 0xABCDE0
590 0xABCDE1 0xABCDE5 0xABCDE6
591 0xABCDE2 0xABCDEA 0xABCDEC
594 #define IA64_BREAKPOINT 0x00003333300LL
597 ia64_memory_insert_breakpoint (struct gdbarch *gdbarch,
598 struct bp_target_info *bp_tgt)
600 CORE_ADDR addr = bp_tgt->placed_address;
601 gdb_byte bundle[BUNDLE_LEN];
602 int slotnum = (int) (addr & 0x0f) / SLOT_MULTIPLIER;
603 long long instr_breakpoint;
606 struct cleanup *cleanup;
609 error (_("Can't insert breakpoint for slot numbers greater than 2."));
613 /* Disable the automatic memory restoration from breakpoints while
614 we read our instruction bundle. Otherwise, the general restoration
615 mechanism kicks in and we would possibly remove parts of the adjacent
616 placed breakpoints. It is due to our SHADOW_CONTENTS overlapping the real
617 breakpoint instruction bits region. */
618 cleanup = make_show_memory_breakpoints_cleanup (1);
619 val = target_read_memory (addr, bundle, BUNDLE_LEN);
621 /* Check for L type instruction in slot 1, if present then bump up the slot
622 number to the slot 2. */
623 template = extract_bit_field (bundle, 0, 5);
624 if (slotnum == 1 && template_encoding_table[template][slotnum] == L)
627 /* Slot number 2 may skip at most 2 bytes at the beginning. */
628 bp_tgt->placed_size = bp_tgt->shadow_len = BUNDLE_LEN - 2;
630 /* Store the whole bundle, except for the initial skipped bytes by the slot
631 number interpreted as bytes offset in PLACED_ADDRESS. */
632 memcpy (bp_tgt->shadow_contents, bundle + slotnum, bp_tgt->shadow_len);
634 /* Breakpoints already present in the code will get deteacted and not get
635 reinserted by bp_loc_is_permanent. Multiple breakpoints at the same
636 location cannot induce the internal error as they are optimized into
637 a single instance by update_global_location_list. */
638 instr_breakpoint = slotN_contents (bundle, slotnum);
639 if (instr_breakpoint == IA64_BREAKPOINT)
640 internal_error (__FILE__, __LINE__,
641 _("Address %s already contains a breakpoint."),
642 paddr_nz (bp_tgt->placed_address));
643 replace_slotN_contents (bundle, IA64_BREAKPOINT, slotnum);
646 val = target_write_memory (addr + slotnum, bundle + slotnum,
649 do_cleanups (cleanup);
654 ia64_memory_remove_breakpoint (struct gdbarch *gdbarch,
655 struct bp_target_info *bp_tgt)
657 CORE_ADDR addr = bp_tgt->placed_address;
658 gdb_byte bundle_mem[BUNDLE_LEN], bundle_saved[BUNDLE_LEN];
659 int slotnum = (addr & 0x0f) / SLOT_MULTIPLIER;
660 long long instr_breakpoint, instr_saved;
663 struct cleanup *cleanup;
667 /* Disable the automatic memory restoration from breakpoints while
668 we read our instruction bundle. Otherwise, the general restoration
669 mechanism kicks in and we would possibly remove parts of the adjacent
670 placed breakpoints. It is due to our SHADOW_CONTENTS overlapping the real
671 breakpoint instruction bits region. */
672 cleanup = make_show_memory_breakpoints_cleanup (1);
673 val = target_read_memory (addr, bundle_mem, BUNDLE_LEN);
675 /* Check for L type instruction in slot 1, if present then bump up the slot
676 number to the slot 2. */
677 template = extract_bit_field (bundle_mem, 0, 5);
678 if (slotnum == 1 && template_encoding_table[template][slotnum] == L)
681 gdb_assert (bp_tgt->placed_size == BUNDLE_LEN - 2);
682 gdb_assert (bp_tgt->placed_size == bp_tgt->shadow_len);
684 instr_breakpoint = slotN_contents (bundle_mem, slotnum);
685 if (instr_breakpoint != IA64_BREAKPOINT)
687 warning (_("Cannot remove breakpoint at address %s, "
688 "no break instruction at such address."),
689 paddr_nz (bp_tgt->placed_address));
693 /* Extract the original saved instruction from SLOTNUM normalizing its
694 bit-shift for INSTR_SAVED. */
695 memcpy (bundle_saved, bundle_mem, BUNDLE_LEN);
696 memcpy (bundle_saved + slotnum, bp_tgt->shadow_contents, bp_tgt->shadow_len);
697 instr_saved = slotN_contents (bundle_saved, slotnum);
699 /* In BUNDLE_MEM be careful to modify only the bits belonging to SLOTNUM and
700 never any other possibly also stored in SHADOW_CONTENTS. */
701 replace_slotN_contents (bundle_mem, instr_saved, slotnum);
703 val = target_write_memory (addr, bundle_mem, BUNDLE_LEN);
705 do_cleanups (cleanup);
709 /* As gdbarch_breakpoint_from_pc ranges have byte granularity and ia64
710 instruction slots ranges are bit-granular (41 bits) we have to provide an
711 extended range as described for ia64_memory_insert_breakpoint. We also take
712 care of preserving the `break' instruction 21-bit (or 62-bit) parameter to
713 make a match for permanent breakpoints. */
715 static const gdb_byte *
716 ia64_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
718 CORE_ADDR addr = *pcptr;
719 static gdb_byte bundle[BUNDLE_LEN];
720 int slotnum = (int) (*pcptr & 0x0f) / SLOT_MULTIPLIER;
721 long long instr_fetched;
724 struct cleanup *cleanup;
727 error (_("Can't insert breakpoint for slot numbers greater than 2."));
731 /* Enable the automatic memory restoration from breakpoints while
732 we read our instruction bundle to match bp_loc_is_permanent. */
733 cleanup = make_show_memory_breakpoints_cleanup (0);
734 val = target_read_memory (addr, bundle, BUNDLE_LEN);
735 do_cleanups (cleanup);
737 /* The memory might be unreachable. This can happen, for instance,
738 when the user inserts a breakpoint at an invalid address. */
742 /* Check for L type instruction in slot 1, if present then bump up the slot
743 number to the slot 2. */
744 template = extract_bit_field (bundle, 0, 5);
745 if (slotnum == 1 && template_encoding_table[template][slotnum] == L)
748 /* A break instruction has its all its opcode bits cleared except for
749 the parameter value. For L+X slot pair we are at the X slot (slot 2) so
750 we should not touch the L slot - the upper 41 bits of the parameter. */
751 instr_fetched = slotN_contents (bundle, slotnum);
752 instr_fetched &= 0x1003ffffc0LL;
753 replace_slotN_contents (bundle, instr_fetched, slotnum);
755 *lenptr = BUNDLE_LEN - 2;
757 /* SLOTNUM is possibly already locally modified - use caller's *PCPTR. */
758 return bundle + (*pcptr & 0x0f);
762 ia64_read_pc (struct regcache *regcache)
764 ULONGEST psr_value, pc_value;
767 regcache_cooked_read_unsigned (regcache, IA64_PSR_REGNUM, &psr_value);
768 regcache_cooked_read_unsigned (regcache, IA64_IP_REGNUM, &pc_value);
769 slot_num = (psr_value >> 41) & 3;
771 return pc_value | (slot_num * SLOT_MULTIPLIER);
775 ia64_write_pc (struct regcache *regcache, CORE_ADDR new_pc)
777 int slot_num = (int) (new_pc & 0xf) / SLOT_MULTIPLIER;
780 regcache_cooked_read_unsigned (regcache, IA64_PSR_REGNUM, &psr_value);
781 psr_value &= ~(3LL << 41);
782 psr_value |= (ULONGEST)(slot_num & 0x3) << 41;
786 regcache_cooked_write_unsigned (regcache, IA64_PSR_REGNUM, psr_value);
787 regcache_cooked_write_unsigned (regcache, IA64_IP_REGNUM, new_pc);
790 #define IS_NaT_COLLECTION_ADDR(addr) ((((addr) >> 3) & 0x3f) == 0x3f)
792 /* Returns the address of the slot that's NSLOTS slots away from
793 the address ADDR. NSLOTS may be positive or negative. */
795 rse_address_add(CORE_ADDR addr, int nslots)
798 int mandatory_nat_slots = nslots / 63;
799 int direction = nslots < 0 ? -1 : 1;
801 new_addr = addr + 8 * (nslots + mandatory_nat_slots);
803 if ((new_addr >> 9) != ((addr + 8 * 64 * mandatory_nat_slots) >> 9))
804 new_addr += 8 * direction;
806 if (IS_NaT_COLLECTION_ADDR(new_addr))
807 new_addr += 8 * direction;
813 ia64_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
814 int regnum, gdb_byte *buf)
816 if (regnum >= V32_REGNUM && regnum <= V127_REGNUM)
818 #ifdef HAVE_LIBUNWIND_IA64_H
819 /* First try and use the libunwind special reg accessor, otherwise fallback to
821 if (!libunwind_is_initialized ()
822 || libunwind_get_reg_special (gdbarch, regcache, regnum, buf) != 0)
825 /* The fallback position is to assume that r32-r127 are found sequentially
826 in memory starting at $bof. This isn't always true, but without libunwind,
827 this is the best we can do. */
831 regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
832 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
834 /* The bsp points at the end of the register frame so we
835 subtract the size of frame from it to get start of register frame. */
836 bsp = rse_address_add (bsp, -(cfm & 0x7f));
838 if ((cfm & 0x7f) > regnum - V32_REGNUM)
840 ULONGEST reg_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
841 reg = read_memory_integer ((CORE_ADDR)reg_addr, 8);
842 store_unsigned_integer (buf, register_size (gdbarch, regnum), reg);
845 store_unsigned_integer (buf, register_size (gdbarch, regnum), 0);
848 else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT31_REGNUM)
852 regcache_cooked_read_unsigned (regcache, IA64_UNAT_REGNUM, &unat);
853 unatN_val = (unat & (1LL << (regnum - IA64_NAT0_REGNUM))) != 0;
854 store_unsigned_integer (buf, register_size (gdbarch, regnum), unatN_val);
856 else if (IA64_NAT32_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
858 ULONGEST natN_val = 0;
861 CORE_ADDR gr_addr = 0;
862 regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
863 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
865 /* The bsp points at the end of the register frame so we
866 subtract the size of frame from it to get start of register frame. */
867 bsp = rse_address_add (bsp, -(cfm & 0x7f));
869 if ((cfm & 0x7f) > regnum - V32_REGNUM)
870 gr_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
874 /* Compute address of nat collection bits. */
875 CORE_ADDR nat_addr = gr_addr | 0x1f8;
876 CORE_ADDR nat_collection;
878 /* If our nat collection address is bigger than bsp, we have to get
879 the nat collection from rnat. Otherwise, we fetch the nat
880 collection from the computed address. */
882 regcache_cooked_read_unsigned (regcache, IA64_RNAT_REGNUM, &nat_collection);
884 nat_collection = read_memory_integer (nat_addr, 8);
885 nat_bit = (gr_addr >> 3) & 0x3f;
886 natN_val = (nat_collection >> nat_bit) & 1;
889 store_unsigned_integer (buf, register_size (gdbarch, regnum), natN_val);
891 else if (regnum == VBOF_REGNUM)
893 /* A virtual register frame start is provided for user convenience.
894 It can be calculated as the bsp - sof (sizeof frame). */
898 regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
899 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
901 /* The bsp points at the end of the register frame so we
902 subtract the size of frame from it to get beginning of frame. */
903 vbsp = rse_address_add (bsp, -(cfm & 0x7f));
904 store_unsigned_integer (buf, register_size (gdbarch, regnum), vbsp);
906 else if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
912 regcache_cooked_read_unsigned (regcache, IA64_PR_REGNUM, &pr);
913 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
915 if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
917 /* Fetch predicate register rename base from current frame
918 marker for this frame. */
919 int rrb_pr = (cfm >> 32) & 0x3f;
921 /* Adjust the register number to account for register rotation. */
923 + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
925 prN_val = (pr & (1LL << (regnum - VP0_REGNUM))) != 0;
926 store_unsigned_integer (buf, register_size (gdbarch, regnum), prN_val);
929 memset (buf, 0, register_size (gdbarch, regnum));
933 ia64_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
934 int regnum, const gdb_byte *buf)
936 if (regnum >= V32_REGNUM && regnum <= V127_REGNUM)
941 regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
942 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
944 bsp = rse_address_add (bsp, -(cfm & 0x7f));
946 if ((cfm & 0x7f) > regnum - V32_REGNUM)
948 ULONGEST reg_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
949 write_memory (reg_addr, (void *)buf, 8);
952 else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT31_REGNUM)
954 ULONGEST unatN_val, unat, unatN_mask;
955 regcache_cooked_read_unsigned (regcache, IA64_UNAT_REGNUM, &unat);
956 unatN_val = extract_unsigned_integer (buf, register_size (gdbarch, regnum));
957 unatN_mask = (1LL << (regnum - IA64_NAT0_REGNUM));
960 else if (unatN_val == 1)
962 regcache_cooked_write_unsigned (regcache, IA64_UNAT_REGNUM, unat);
964 else if (IA64_NAT32_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
969 CORE_ADDR gr_addr = 0;
970 regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
971 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
973 /* The bsp points at the end of the register frame so we
974 subtract the size of frame from it to get start of register frame. */
975 bsp = rse_address_add (bsp, -(cfm & 0x7f));
977 if ((cfm & 0x7f) > regnum - V32_REGNUM)
978 gr_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
980 natN_val = extract_unsigned_integer (buf, register_size (gdbarch, regnum));
982 if (gr_addr != 0 && (natN_val == 0 || natN_val == 1))
984 /* Compute address of nat collection bits. */
985 CORE_ADDR nat_addr = gr_addr | 0x1f8;
986 CORE_ADDR nat_collection;
987 int natN_bit = (gr_addr >> 3) & 0x3f;
988 ULONGEST natN_mask = (1LL << natN_bit);
989 /* If our nat collection address is bigger than bsp, we have to get
990 the nat collection from rnat. Otherwise, we fetch the nat
991 collection from the computed address. */
994 regcache_cooked_read_unsigned (regcache, IA64_RNAT_REGNUM, &nat_collection);
996 nat_collection |= natN_mask;
998 nat_collection &= ~natN_mask;
999 regcache_cooked_write_unsigned (regcache, IA64_RNAT_REGNUM, nat_collection);
1004 nat_collection = read_memory_integer (nat_addr, 8);
1006 nat_collection |= natN_mask;
1008 nat_collection &= ~natN_mask;
1009 store_unsigned_integer (nat_buf, register_size (gdbarch, regnum), nat_collection);
1010 write_memory (nat_addr, nat_buf, 8);
1014 else if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
1021 regcache_cooked_read_unsigned (regcache, IA64_PR_REGNUM, &pr);
1022 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1024 if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
1026 /* Fetch predicate register rename base from current frame
1027 marker for this frame. */
1028 int rrb_pr = (cfm >> 32) & 0x3f;
1030 /* Adjust the register number to account for register rotation. */
1031 regnum = VP16_REGNUM
1032 + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
1034 prN_val = extract_unsigned_integer (buf, register_size (gdbarch, regnum));
1035 prN_mask = (1LL << (regnum - VP0_REGNUM));
1038 else if (prN_val == 1)
1040 regcache_cooked_write_unsigned (regcache, IA64_PR_REGNUM, pr);
1044 /* The ia64 needs to convert between various ieee floating-point formats
1045 and the special ia64 floating point register format. */
1048 ia64_convert_register_p (struct gdbarch *gdbarch, int regno, struct type *type)
1050 return (regno >= IA64_FR0_REGNUM && regno <= IA64_FR127_REGNUM
1051 && type != builtin_type_ia64_ext);
1055 ia64_register_to_value (struct frame_info *frame, int regnum,
1056 struct type *valtype, gdb_byte *out)
1058 char in[MAX_REGISTER_SIZE];
1059 frame_register_read (frame, regnum, in);
1060 convert_typed_floating (in, builtin_type_ia64_ext, out, valtype);
1064 ia64_value_to_register (struct frame_info *frame, int regnum,
1065 struct type *valtype, const gdb_byte *in)
1067 char out[MAX_REGISTER_SIZE];
1068 convert_typed_floating (in, valtype, out, builtin_type_ia64_ext);
1069 put_frame_register (frame, regnum, out);
1073 /* Limit the number of skipped non-prologue instructions since examining
1074 of the prologue is expensive. */
1075 static int max_skip_non_prologue_insns = 40;
1077 /* Given PC representing the starting address of a function, and
1078 LIM_PC which is the (sloppy) limit to which to scan when looking
1079 for a prologue, attempt to further refine this limit by using
1080 the line data in the symbol table. If successful, a better guess
1081 on where the prologue ends is returned, otherwise the previous
1082 value of lim_pc is returned. TRUST_LIMIT is a pointer to a flag
1083 which will be set to indicate whether the returned limit may be
1084 used with no further scanning in the event that the function is
1087 /* FIXME: cagney/2004-02-14: This function and logic have largely been
1088 superseded by skip_prologue_using_sal. */
1091 refine_prologue_limit (CORE_ADDR pc, CORE_ADDR lim_pc, int *trust_limit)
1093 struct symtab_and_line prologue_sal;
1094 CORE_ADDR start_pc = pc;
1097 /* The prologue can not possibly go past the function end itself,
1098 so we can already adjust LIM_PC accordingly. */
1099 if (find_pc_partial_function (pc, NULL, NULL, &end_pc) && end_pc < lim_pc)
1102 /* Start off not trusting the limit. */
1105 prologue_sal = find_pc_line (pc, 0);
1106 if (prologue_sal.line != 0)
1109 CORE_ADDR addr = prologue_sal.end;
1111 /* Handle the case in which compiler's optimizer/scheduler
1112 has moved instructions into the prologue. We scan ahead
1113 in the function looking for address ranges whose corresponding
1114 line number is less than or equal to the first one that we
1115 found for the function. (It can be less than when the
1116 scheduler puts a body instruction before the first prologue
1118 for (i = 2 * max_skip_non_prologue_insns;
1119 i > 0 && (lim_pc == 0 || addr < lim_pc);
1122 struct symtab_and_line sal;
1124 sal = find_pc_line (addr, 0);
1127 if (sal.line <= prologue_sal.line
1128 && sal.symtab == prologue_sal.symtab)
1135 if (lim_pc == 0 || prologue_sal.end < lim_pc)
1137 lim_pc = prologue_sal.end;
1138 if (start_pc == get_pc_function_start (lim_pc))
1145 #define isScratch(_regnum_) ((_regnum_) == 2 || (_regnum_) == 3 \
1146 || (8 <= (_regnum_) && (_regnum_) <= 11) \
1147 || (14 <= (_regnum_) && (_regnum_) <= 31))
1148 #define imm9(_instr_) \
1149 ( ((((_instr_) & 0x01000000000LL) ? -1 : 0) << 8) \
1150 | (((_instr_) & 0x00008000000LL) >> 20) \
1151 | (((_instr_) & 0x00000001fc0LL) >> 6))
1153 /* Allocate and initialize a frame cache. */
1155 static struct ia64_frame_cache *
1156 ia64_alloc_frame_cache (void)
1158 struct ia64_frame_cache *cache;
1161 cache = FRAME_OBSTACK_ZALLOC (struct ia64_frame_cache);
1167 cache->prev_cfm = 0;
1173 cache->frameless = 1;
1175 for (i = 0; i < NUM_IA64_RAW_REGS; i++)
1176 cache->saved_regs[i] = 0;
1182 examine_prologue (CORE_ADDR pc, CORE_ADDR lim_pc,
1183 struct frame_info *this_frame,
1184 struct ia64_frame_cache *cache)
1187 CORE_ADDR last_prologue_pc = pc;
1188 instruction_type it;
1193 int unat_save_reg = 0;
1194 int pr_save_reg = 0;
1195 int mem_stack_frame_size = 0;
1197 CORE_ADDR spill_addr = 0;
1200 char reg_contents[256];
1206 CORE_ADDR bof, sor, sol, sof, cfm, rrb_gr;
1208 memset (instores, 0, sizeof instores);
1209 memset (infpstores, 0, sizeof infpstores);
1210 memset (reg_contents, 0, sizeof reg_contents);
1212 if (cache->after_prologue != 0
1213 && cache->after_prologue <= lim_pc)
1214 return cache->after_prologue;
1216 lim_pc = refine_prologue_limit (pc, lim_pc, &trust_limit);
1217 next_pc = fetch_instruction (pc, &it, &instr);
1219 /* We want to check if we have a recognizable function start before we
1220 look ahead for a prologue. */
1221 if (pc < lim_pc && next_pc
1222 && it == M && ((instr & 0x1ee0000003fLL) == 0x02c00000000LL))
1224 /* alloc - start of a regular function. */
1225 int sor = (int) ((instr & 0x00078000000LL) >> 27);
1226 int sol = (int) ((instr & 0x00007f00000LL) >> 20);
1227 int sof = (int) ((instr & 0x000000fe000LL) >> 13);
1228 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1230 /* Verify that the current cfm matches what we think is the
1231 function start. If we have somehow jumped within a function,
1232 we do not want to interpret the prologue and calculate the
1233 addresses of various registers such as the return address.
1234 We will instead treat the frame as frameless. */
1236 (sof == (cache->cfm & 0x7f) &&
1237 sol == ((cache->cfm >> 7) & 0x7f)))
1241 last_prologue_pc = next_pc;
1246 /* Look for a leaf routine. */
1247 if (pc < lim_pc && next_pc
1248 && (it == I || it == M)
1249 && ((instr & 0x1ee00000000LL) == 0x10800000000LL))
1251 /* adds rN = imm14, rM (or mov rN, rM when imm14 is 0) */
1252 int imm = (int) ((((instr & 0x01000000000LL) ? -1 : 0) << 13)
1253 | ((instr & 0x001f8000000LL) >> 20)
1254 | ((instr & 0x000000fe000LL) >> 13));
1255 int rM = (int) ((instr & 0x00007f00000LL) >> 20);
1256 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1257 int qp = (int) (instr & 0x0000000003fLL);
1258 if (qp == 0 && rN == 2 && imm == 0 && rM == 12 && fp_reg == 0)
1260 /* mov r2, r12 - beginning of leaf routine */
1262 last_prologue_pc = next_pc;
1266 /* If we don't recognize a regular function or leaf routine, we are
1272 last_prologue_pc = lim_pc;
1276 /* Loop, looking for prologue instructions, keeping track of
1277 where preserved registers were spilled. */
1280 next_pc = fetch_instruction (pc, &it, &instr);
1284 if (it == B && ((instr & 0x1e1f800003fLL) != 0x04000000000LL))
1286 /* Exit loop upon hitting a non-nop branch instruction. */
1291 else if (((instr & 0x3fLL) != 0LL) &&
1292 (frameless || ret_reg != 0))
1294 /* Exit loop upon hitting a predicated instruction if
1295 we already have the return register or if we are frameless. */
1300 else if (it == I && ((instr & 0x1eff8000000LL) == 0x00188000000LL))
1303 int b2 = (int) ((instr & 0x0000000e000LL) >> 13);
1304 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1305 int qp = (int) (instr & 0x0000000003f);
1307 if (qp == 0 && b2 == 0 && rN >= 32 && ret_reg == 0)
1310 last_prologue_pc = next_pc;
1313 else if ((it == I || it == M)
1314 && ((instr & 0x1ee00000000LL) == 0x10800000000LL))
1316 /* adds rN = imm14, rM (or mov rN, rM when imm14 is 0) */
1317 int imm = (int) ((((instr & 0x01000000000LL) ? -1 : 0) << 13)
1318 | ((instr & 0x001f8000000LL) >> 20)
1319 | ((instr & 0x000000fe000LL) >> 13));
1320 int rM = (int) ((instr & 0x00007f00000LL) >> 20);
1321 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1322 int qp = (int) (instr & 0x0000000003fLL);
1324 if (qp == 0 && rN >= 32 && imm == 0 && rM == 12 && fp_reg == 0)
1328 last_prologue_pc = next_pc;
1330 else if (qp == 0 && rN == 12 && rM == 12)
1332 /* adds r12, -mem_stack_frame_size, r12 */
1333 mem_stack_frame_size -= imm;
1334 last_prologue_pc = next_pc;
1336 else if (qp == 0 && rN == 2
1337 && ((rM == fp_reg && fp_reg != 0) || rM == 12))
1339 char buf[MAX_REGISTER_SIZE];
1340 CORE_ADDR saved_sp = 0;
1341 /* adds r2, spilloffset, rFramePointer
1343 adds r2, spilloffset, r12
1345 Get ready for stf.spill or st8.spill instructions.
1346 The address to start spilling at is loaded into r2.
1347 FIXME: Why r2? That's what gcc currently uses; it
1348 could well be different for other compilers. */
1350 /* Hmm... whether or not this will work will depend on
1351 where the pc is. If it's still early in the prologue
1352 this'll be wrong. FIXME */
1355 get_frame_register (this_frame, sp_regnum, buf);
1356 saved_sp = extract_unsigned_integer (buf, 8);
1358 spill_addr = saved_sp
1359 + (rM == 12 ? 0 : mem_stack_frame_size)
1362 last_prologue_pc = next_pc;
1364 else if (qp == 0 && rM >= 32 && rM < 40 && !instores[rM-32] &&
1365 rN < 256 && imm == 0)
1367 /* mov rN, rM where rM is an input register */
1368 reg_contents[rN] = rM;
1369 last_prologue_pc = next_pc;
1371 else if (frameless && qp == 0 && rN == fp_reg && imm == 0 &&
1375 last_prologue_pc = next_pc;
1380 && ( ((instr & 0x1efc0000000LL) == 0x0eec0000000LL)
1381 || ((instr & 0x1ffc8000000LL) == 0x0cec0000000LL) ))
1383 /* stf.spill [rN] = fM, imm9
1385 stf.spill [rN] = fM */
1387 int imm = imm9(instr);
1388 int rN = (int) ((instr & 0x00007f00000LL) >> 20);
1389 int fM = (int) ((instr & 0x000000fe000LL) >> 13);
1390 int qp = (int) (instr & 0x0000000003fLL);
1391 if (qp == 0 && rN == spill_reg && spill_addr != 0
1392 && ((2 <= fM && fM <= 5) || (16 <= fM && fM <= 31)))
1394 cache->saved_regs[IA64_FR0_REGNUM + fM] = spill_addr;
1396 if ((instr & 0x1efc0000000LL) == 0x0eec0000000LL)
1399 spill_addr = 0; /* last one; must be done */
1400 last_prologue_pc = next_pc;
1403 else if ((it == M && ((instr & 0x1eff8000000LL) == 0x02110000000LL))
1404 || (it == I && ((instr & 0x1eff8000000LL) == 0x00050000000LL)) )
1410 int arM = (int) ((instr & 0x00007f00000LL) >> 20);
1411 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1412 int qp = (int) (instr & 0x0000000003fLL);
1413 if (qp == 0 && isScratch (rN) && arM == 36 /* ar.unat */)
1415 /* We have something like "mov.m r3 = ar.unat". Remember the
1416 r3 (or whatever) and watch for a store of this register... */
1418 last_prologue_pc = next_pc;
1421 else if (it == I && ((instr & 0x1eff8000000LL) == 0x00198000000LL))
1424 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1425 int qp = (int) (instr & 0x0000000003fLL);
1426 if (qp == 0 && isScratch (rN))
1429 last_prologue_pc = next_pc;
1433 && ( ((instr & 0x1ffc8000000LL) == 0x08cc0000000LL)
1434 || ((instr & 0x1efc0000000LL) == 0x0acc0000000LL)))
1438 st8 [rN] = rM, imm9 */
1439 int rN = (int) ((instr & 0x00007f00000LL) >> 20);
1440 int rM = (int) ((instr & 0x000000fe000LL) >> 13);
1441 int qp = (int) (instr & 0x0000000003fLL);
1442 int indirect = rM < 256 ? reg_contents[rM] : 0;
1443 if (qp == 0 && rN == spill_reg && spill_addr != 0
1444 && (rM == unat_save_reg || rM == pr_save_reg))
1446 /* We've found a spill of either the UNAT register or the PR
1447 register. (Well, not exactly; what we've actually found is
1448 a spill of the register that UNAT or PR was moved to).
1449 Record that fact and move on... */
1450 if (rM == unat_save_reg)
1452 /* Track UNAT register */
1453 cache->saved_regs[IA64_UNAT_REGNUM] = spill_addr;
1458 /* Track PR register */
1459 cache->saved_regs[IA64_PR_REGNUM] = spill_addr;
1462 if ((instr & 0x1efc0000000LL) == 0x0acc0000000LL)
1463 /* st8 [rN] = rM, imm9 */
1464 spill_addr += imm9(instr);
1466 spill_addr = 0; /* must be done spilling */
1467 last_prologue_pc = next_pc;
1469 else if (qp == 0 && 32 <= rM && rM < 40 && !instores[rM-32])
1471 /* Allow up to one store of each input register. */
1472 instores[rM-32] = 1;
1473 last_prologue_pc = next_pc;
1475 else if (qp == 0 && 32 <= indirect && indirect < 40 &&
1476 !instores[indirect-32])
1478 /* Allow an indirect store of an input register. */
1479 instores[indirect-32] = 1;
1480 last_prologue_pc = next_pc;
1483 else if (it == M && ((instr & 0x1ff08000000LL) == 0x08c00000000LL))
1490 Note that the st8 case is handled in the clause above.
1492 Advance over stores of input registers. One store per input
1493 register is permitted. */
1494 int rM = (int) ((instr & 0x000000fe000LL) >> 13);
1495 int qp = (int) (instr & 0x0000000003fLL);
1496 int indirect = rM < 256 ? reg_contents[rM] : 0;
1497 if (qp == 0 && 32 <= rM && rM < 40 && !instores[rM-32])
1499 instores[rM-32] = 1;
1500 last_prologue_pc = next_pc;
1502 else if (qp == 0 && 32 <= indirect && indirect < 40 &&
1503 !instores[indirect-32])
1505 /* Allow an indirect store of an input register. */
1506 instores[indirect-32] = 1;
1507 last_prologue_pc = next_pc;
1510 else if (it == M && ((instr & 0x1ff88000000LL) == 0x0cc80000000LL))
1517 Advance over stores of floating point input registers. Again
1518 one store per register is permitted */
1519 int fM = (int) ((instr & 0x000000fe000LL) >> 13);
1520 int qp = (int) (instr & 0x0000000003fLL);
1521 if (qp == 0 && 8 <= fM && fM < 16 && !infpstores[fM - 8])
1523 infpstores[fM-8] = 1;
1524 last_prologue_pc = next_pc;
1528 && ( ((instr & 0x1ffc8000000LL) == 0x08ec0000000LL)
1529 || ((instr & 0x1efc0000000LL) == 0x0aec0000000LL)))
1531 /* st8.spill [rN] = rM
1533 st8.spill [rN] = rM, imm9 */
1534 int rN = (int) ((instr & 0x00007f00000LL) >> 20);
1535 int rM = (int) ((instr & 0x000000fe000LL) >> 13);
1536 int qp = (int) (instr & 0x0000000003fLL);
1537 if (qp == 0 && rN == spill_reg && 4 <= rM && rM <= 7)
1539 /* We've found a spill of one of the preserved general purpose
1540 regs. Record the spill address and advance the spill
1541 register if appropriate. */
1542 cache->saved_regs[IA64_GR0_REGNUM + rM] = spill_addr;
1543 if ((instr & 0x1efc0000000LL) == 0x0aec0000000LL)
1544 /* st8.spill [rN] = rM, imm9 */
1545 spill_addr += imm9(instr);
1547 spill_addr = 0; /* Done spilling */
1548 last_prologue_pc = next_pc;
1555 /* If not frameless and we aren't called by skip_prologue, then we need
1556 to calculate registers for the previous frame which will be needed
1559 if (!frameless && this_frame)
1561 /* Extract the size of the rotating portion of the stack
1562 frame and the register rename base from the current
1568 rrb_gr = (cfm >> 18) & 0x7f;
1570 /* Find the bof (beginning of frame). */
1571 bof = rse_address_add (cache->bsp, -sof);
1573 for (i = 0, addr = bof;
1577 if (IS_NaT_COLLECTION_ADDR (addr))
1581 if (i+32 == cfm_reg)
1582 cache->saved_regs[IA64_CFM_REGNUM] = addr;
1583 if (i+32 == ret_reg)
1584 cache->saved_regs[IA64_VRAP_REGNUM] = addr;
1586 cache->saved_regs[IA64_VFP_REGNUM] = addr;
1589 /* For the previous argument registers we require the previous bof.
1590 If we can't find the previous cfm, then we can do nothing. */
1592 if (cache->saved_regs[IA64_CFM_REGNUM] != 0)
1594 cfm = read_memory_integer (cache->saved_regs[IA64_CFM_REGNUM], 8);
1596 else if (cfm_reg != 0)
1598 get_frame_register (this_frame, cfm_reg, buf);
1599 cfm = extract_unsigned_integer (buf, 8);
1601 cache->prev_cfm = cfm;
1605 sor = ((cfm >> 14) & 0xf) * 8;
1607 sol = (cfm >> 7) & 0x7f;
1608 rrb_gr = (cfm >> 18) & 0x7f;
1610 /* The previous bof only requires subtraction of the sol (size of
1611 locals) due to the overlap between output and input of
1612 subsequent frames. */
1613 bof = rse_address_add (bof, -sol);
1615 for (i = 0, addr = bof;
1619 if (IS_NaT_COLLECTION_ADDR (addr))
1624 cache->saved_regs[IA64_GR32_REGNUM + ((i + (sor - rrb_gr)) % sor)]
1627 cache->saved_regs[IA64_GR32_REGNUM + i] = addr;
1633 /* Try and trust the lim_pc value whenever possible. */
1634 if (trust_limit && lim_pc >= last_prologue_pc)
1635 last_prologue_pc = lim_pc;
1637 cache->frameless = frameless;
1638 cache->after_prologue = last_prologue_pc;
1639 cache->mem_stack_frame_size = mem_stack_frame_size;
1640 cache->fp_reg = fp_reg;
1642 return last_prologue_pc;
1646 ia64_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1648 struct ia64_frame_cache cache;
1650 cache.after_prologue = 0;
1654 /* Call examine_prologue with - as third argument since we don't have a next frame pointer to send. */
1655 return examine_prologue (pc, pc+1024, 0, &cache);
1659 /* Normal frames. */
1661 static struct ia64_frame_cache *
1662 ia64_frame_cache (struct frame_info *this_frame, void **this_cache)
1664 struct ia64_frame_cache *cache;
1666 CORE_ADDR cfm, sof, sol, bsp, psr;
1672 cache = ia64_alloc_frame_cache ();
1673 *this_cache = cache;
1675 get_frame_register (this_frame, sp_regnum, buf);
1676 cache->saved_sp = extract_unsigned_integer (buf, 8);
1678 /* We always want the bsp to point to the end of frame.
1679 This way, we can always get the beginning of frame (bof)
1680 by subtracting frame size. */
1681 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
1682 cache->bsp = extract_unsigned_integer (buf, 8);
1684 get_frame_register (this_frame, IA64_PSR_REGNUM, buf);
1685 psr = extract_unsigned_integer (buf, 8);
1687 get_frame_register (this_frame, IA64_CFM_REGNUM, buf);
1688 cfm = extract_unsigned_integer (buf, 8);
1690 cache->sof = (cfm & 0x7f);
1691 cache->sol = (cfm >> 7) & 0x7f;
1692 cache->sor = ((cfm >> 14) & 0xf) * 8;
1696 cache->pc = get_frame_func (this_frame);
1699 examine_prologue (cache->pc, get_frame_pc (this_frame), this_frame, cache);
1701 cache->base = cache->saved_sp + cache->mem_stack_frame_size;
1707 ia64_frame_this_id (struct frame_info *this_frame, void **this_cache,
1708 struct frame_id *this_id)
1710 struct ia64_frame_cache *cache =
1711 ia64_frame_cache (this_frame, this_cache);
1713 /* If outermost frame, mark with null frame id. */
1714 if (cache->base == 0)
1715 (*this_id) = null_frame_id;
1717 (*this_id) = frame_id_build_special (cache->base, cache->pc, cache->bsp);
1718 if (gdbarch_debug >= 1)
1719 fprintf_unfiltered (gdb_stdlog,
1720 "regular frame id: code 0x%s, stack 0x%s, special 0x%s, this_frame %s\n",
1721 paddr_nz (this_id->code_addr),
1722 paddr_nz (this_id->stack_addr),
1723 paddr_nz (cache->bsp),
1724 host_address_to_string (this_frame));
1727 static struct value *
1728 ia64_frame_prev_register (struct frame_info *this_frame, void **this_cache,
1731 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1732 struct ia64_frame_cache *cache = ia64_frame_cache (this_frame, this_cache);
1735 gdb_assert (regnum >= 0);
1737 if (!target_has_registers)
1738 error (_("No registers."));
1740 if (regnum == gdbarch_sp_regnum (gdbarch))
1741 return frame_unwind_got_constant (this_frame, regnum, cache->base);
1743 else if (regnum == IA64_BSP_REGNUM)
1746 CORE_ADDR prev_cfm, bsp, prev_bsp;
1748 /* We want to calculate the previous bsp as the end of the previous
1749 register stack frame. This corresponds to what the hardware bsp
1750 register will be if we pop the frame back which is why we might
1751 have been called. We know the beginning of the current frame is
1752 cache->bsp - cache->sof. This value in the previous frame points
1753 to the start of the output registers. We can calculate the end of
1754 that frame by adding the size of output:
1755 (sof (size of frame) - sol (size of locals)). */
1756 val = ia64_frame_prev_register (this_frame, this_cache, IA64_CFM_REGNUM);
1757 prev_cfm = extract_unsigned_integer (value_contents_all (val), 8);
1758 bsp = rse_address_add (cache->bsp, -(cache->sof));
1760 rse_address_add (bsp, (prev_cfm & 0x7f) - ((prev_cfm >> 7) & 0x7f));
1762 return frame_unwind_got_constant (this_frame, regnum, prev_bsp);
1765 else if (regnum == IA64_CFM_REGNUM)
1767 CORE_ADDR addr = cache->saved_regs[IA64_CFM_REGNUM];
1770 return frame_unwind_got_memory (this_frame, regnum, addr);
1772 if (cache->prev_cfm)
1773 return frame_unwind_got_constant (this_frame, regnum, cache->prev_cfm);
1775 if (cache->frameless)
1776 return frame_unwind_got_register (this_frame, IA64_PFS_REGNUM,
1778 return frame_unwind_got_register (this_frame, regnum, 0);
1781 else if (regnum == IA64_VFP_REGNUM)
1783 /* If the function in question uses an automatic register (r32-r127)
1784 for the frame pointer, it'll be found by ia64_find_saved_register()
1785 above. If the function lacks one of these frame pointers, we can
1786 still provide a value since we know the size of the frame. */
1787 return frame_unwind_got_constant (this_frame, regnum, cache->base);
1790 else if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
1792 struct value *pr_val;
1795 pr_val = ia64_frame_prev_register (this_frame, this_cache,
1797 if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
1799 /* Fetch predicate register rename base from current frame
1800 marker for this frame. */
1801 int rrb_pr = (cache->cfm >> 32) & 0x3f;
1803 /* Adjust the register number to account for register rotation. */
1804 regnum = VP16_REGNUM + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
1806 prN = extract_bit_field (value_contents_all (pr_val),
1807 regnum - VP0_REGNUM, 1);
1808 return frame_unwind_got_constant (this_frame, regnum, prN);
1811 else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT31_REGNUM)
1813 struct value *unat_val;
1815 unat_val = ia64_frame_prev_register (this_frame, this_cache,
1817 unatN = extract_bit_field (value_contents_all (unat_val),
1818 regnum - IA64_NAT0_REGNUM, 1);
1819 return frame_unwind_got_constant (this_frame, regnum, unatN);
1822 else if (IA64_NAT32_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
1825 /* Find address of general register corresponding to nat bit we're
1829 gr_addr = cache->saved_regs[regnum - IA64_NAT0_REGNUM + IA64_GR0_REGNUM];
1833 /* Compute address of nat collection bits. */
1834 CORE_ADDR nat_addr = gr_addr | 0x1f8;
1836 CORE_ADDR nat_collection;
1839 /* If our nat collection address is bigger than bsp, we have to get
1840 the nat collection from rnat. Otherwise, we fetch the nat
1841 collection from the computed address. */
1842 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
1843 bsp = extract_unsigned_integer (buf, 8);
1844 if (nat_addr >= bsp)
1846 get_frame_register (this_frame, IA64_RNAT_REGNUM, buf);
1847 nat_collection = extract_unsigned_integer (buf, 8);
1850 nat_collection = read_memory_integer (nat_addr, 8);
1851 nat_bit = (gr_addr >> 3) & 0x3f;
1852 natval = (nat_collection >> nat_bit) & 1;
1855 return frame_unwind_got_constant (this_frame, regnum, natval);
1858 else if (regnum == IA64_IP_REGNUM)
1861 CORE_ADDR addr = cache->saved_regs[IA64_VRAP_REGNUM];
1865 read_memory (addr, buf, register_size (gdbarch, IA64_IP_REGNUM));
1866 pc = extract_unsigned_integer (buf, 8);
1868 else if (cache->frameless)
1870 get_frame_register (this_frame, IA64_BR0_REGNUM, buf);
1871 pc = extract_unsigned_integer (buf, 8);
1874 return frame_unwind_got_constant (this_frame, regnum, pc);
1877 else if (regnum == IA64_PSR_REGNUM)
1879 /* We don't know how to get the complete previous PSR, but we need it
1880 for the slot information when we unwind the pc (pc is formed of IP
1881 register plus slot information from PSR). To get the previous
1882 slot information, we mask it off the return address. */
1883 ULONGEST slot_num = 0;
1886 CORE_ADDR addr = cache->saved_regs[IA64_VRAP_REGNUM];
1888 get_frame_register (this_frame, IA64_PSR_REGNUM, buf);
1889 psr = extract_unsigned_integer (buf, 8);
1893 read_memory (addr, buf, register_size (gdbarch, IA64_IP_REGNUM));
1894 pc = extract_unsigned_integer (buf, 8);
1896 else if (cache->frameless)
1898 get_frame_register (this_frame, IA64_BR0_REGNUM, buf);
1899 pc = extract_unsigned_integer (buf, 8);
1901 psr &= ~(3LL << 41);
1902 slot_num = pc & 0x3LL;
1903 psr |= (CORE_ADDR)slot_num << 41;
1904 return frame_unwind_got_constant (this_frame, regnum, psr);
1907 else if (regnum == IA64_BR0_REGNUM)
1909 CORE_ADDR addr = cache->saved_regs[IA64_BR0_REGNUM];
1912 return frame_unwind_got_memory (this_frame, regnum, addr);
1914 return frame_unwind_got_constant (this_frame, regnum, 0);
1917 else if ((regnum >= IA64_GR32_REGNUM && regnum <= IA64_GR127_REGNUM)
1918 || (regnum >= V32_REGNUM && regnum <= V127_REGNUM))
1922 if (regnum >= V32_REGNUM)
1923 regnum = IA64_GR32_REGNUM + (regnum - V32_REGNUM);
1924 addr = cache->saved_regs[regnum];
1926 return frame_unwind_got_memory (this_frame, regnum, addr);
1928 if (cache->frameless)
1930 struct value *reg_val;
1931 CORE_ADDR prev_cfm, prev_bsp, prev_bof;
1933 /* FIXME: brobecker/2008-05-01: Doesn't this seem redundant
1934 with the same code above? */
1935 if (regnum >= V32_REGNUM)
1936 regnum = IA64_GR32_REGNUM + (regnum - V32_REGNUM);
1937 reg_val = ia64_frame_prev_register (this_frame, this_cache,
1939 prev_cfm = extract_unsigned_integer (value_contents_all (reg_val),
1941 reg_val = ia64_frame_prev_register (this_frame, this_cache,
1943 prev_bsp = extract_unsigned_integer (value_contents_all (reg_val),
1945 prev_bof = rse_address_add (prev_bsp, -(prev_cfm & 0x7f));
1947 addr = rse_address_add (prev_bof, (regnum - IA64_GR32_REGNUM));
1948 return frame_unwind_got_memory (this_frame, regnum, addr);
1951 return frame_unwind_got_constant (this_frame, regnum, 0);
1954 else /* All other registers. */
1958 if (IA64_FR32_REGNUM <= regnum && regnum <= IA64_FR127_REGNUM)
1960 /* Fetch floating point register rename base from current
1961 frame marker for this frame. */
1962 int rrb_fr = (cache->cfm >> 25) & 0x7f;
1964 /* Adjust the floating point register number to account for
1965 register rotation. */
1966 regnum = IA64_FR32_REGNUM
1967 + ((regnum - IA64_FR32_REGNUM) + rrb_fr) % 96;
1970 /* If we have stored a memory address, access the register. */
1971 addr = cache->saved_regs[regnum];
1973 return frame_unwind_got_memory (this_frame, regnum, addr);
1974 /* Otherwise, punt and get the current value of the register. */
1976 return frame_unwind_got_register (this_frame, regnum, regnum);
1980 static const struct frame_unwind ia64_frame_unwind =
1983 &ia64_frame_this_id,
1984 &ia64_frame_prev_register,
1986 default_frame_sniffer
1989 /* Signal trampolines. */
1992 ia64_sigtramp_frame_init_saved_regs (struct frame_info *this_frame,
1993 struct ia64_frame_cache *cache)
1995 struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
1997 if (tdep->sigcontext_register_address)
2001 cache->saved_regs[IA64_VRAP_REGNUM] =
2002 tdep->sigcontext_register_address (cache->base, IA64_IP_REGNUM);
2003 cache->saved_regs[IA64_CFM_REGNUM] =
2004 tdep->sigcontext_register_address (cache->base, IA64_CFM_REGNUM);
2005 cache->saved_regs[IA64_PSR_REGNUM] =
2006 tdep->sigcontext_register_address (cache->base, IA64_PSR_REGNUM);
2007 cache->saved_regs[IA64_BSP_REGNUM] =
2008 tdep->sigcontext_register_address (cache->base, IA64_BSP_REGNUM);
2009 cache->saved_regs[IA64_RNAT_REGNUM] =
2010 tdep->sigcontext_register_address (cache->base, IA64_RNAT_REGNUM);
2011 cache->saved_regs[IA64_CCV_REGNUM] =
2012 tdep->sigcontext_register_address (cache->base, IA64_CCV_REGNUM);
2013 cache->saved_regs[IA64_UNAT_REGNUM] =
2014 tdep->sigcontext_register_address (cache->base, IA64_UNAT_REGNUM);
2015 cache->saved_regs[IA64_FPSR_REGNUM] =
2016 tdep->sigcontext_register_address (cache->base, IA64_FPSR_REGNUM);
2017 cache->saved_regs[IA64_PFS_REGNUM] =
2018 tdep->sigcontext_register_address (cache->base, IA64_PFS_REGNUM);
2019 cache->saved_regs[IA64_LC_REGNUM] =
2020 tdep->sigcontext_register_address (cache->base, IA64_LC_REGNUM);
2021 for (regno = IA64_GR1_REGNUM; regno <= IA64_GR31_REGNUM; regno++)
2022 cache->saved_regs[regno] =
2023 tdep->sigcontext_register_address (cache->base, regno);
2024 for (regno = IA64_BR0_REGNUM; regno <= IA64_BR7_REGNUM; regno++)
2025 cache->saved_regs[regno] =
2026 tdep->sigcontext_register_address (cache->base, regno);
2027 for (regno = IA64_FR2_REGNUM; regno <= IA64_FR31_REGNUM; regno++)
2028 cache->saved_regs[regno] =
2029 tdep->sigcontext_register_address (cache->base, regno);
2033 static struct ia64_frame_cache *
2034 ia64_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
2036 struct ia64_frame_cache *cache;
2044 cache = ia64_alloc_frame_cache ();
2046 get_frame_register (this_frame, sp_regnum, buf);
2047 /* Note that frame size is hard-coded below. We cannot calculate it
2048 via prologue examination. */
2049 cache->base = extract_unsigned_integer (buf, 8) + 16;
2051 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
2052 cache->bsp = extract_unsigned_integer (buf, 8);
2054 get_frame_register (this_frame, IA64_CFM_REGNUM, buf);
2055 cache->cfm = extract_unsigned_integer (buf, 8);
2056 cache->sof = cache->cfm & 0x7f;
2058 ia64_sigtramp_frame_init_saved_regs (this_frame, cache);
2060 *this_cache = cache;
2065 ia64_sigtramp_frame_this_id (struct frame_info *this_frame,
2066 void **this_cache, struct frame_id *this_id)
2068 struct ia64_frame_cache *cache =
2069 ia64_sigtramp_frame_cache (this_frame, this_cache);
2071 (*this_id) = frame_id_build_special (cache->base,
2072 get_frame_pc (this_frame),
2074 if (gdbarch_debug >= 1)
2075 fprintf_unfiltered (gdb_stdlog,
2076 "sigtramp frame id: code 0x%s, stack 0x%s, special 0x%s, this_frame %s\n",
2077 paddr_nz (this_id->code_addr),
2078 paddr_nz (this_id->stack_addr),
2079 paddr_nz (cache->bsp),
2080 host_address_to_string (this_frame));
2083 static struct value *
2084 ia64_sigtramp_frame_prev_register (struct frame_info *this_frame,
2085 void **this_cache, int regnum)
2087 char buf[MAX_REGISTER_SIZE];
2089 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2090 struct ia64_frame_cache *cache =
2091 ia64_sigtramp_frame_cache (this_frame, this_cache);
2093 gdb_assert (regnum >= 0);
2095 if (!target_has_registers)
2096 error (_("No registers."));
2098 if (regnum == IA64_IP_REGNUM)
2101 CORE_ADDR addr = cache->saved_regs[IA64_VRAP_REGNUM];
2105 read_memory (addr, buf, register_size (gdbarch, IA64_IP_REGNUM));
2106 pc = extract_unsigned_integer (buf, 8);
2109 return frame_unwind_got_constant (this_frame, regnum, pc);
2112 else if ((regnum >= IA64_GR32_REGNUM && regnum <= IA64_GR127_REGNUM)
2113 || (regnum >= V32_REGNUM && regnum <= V127_REGNUM))
2117 if (regnum >= V32_REGNUM)
2118 regnum = IA64_GR32_REGNUM + (regnum - V32_REGNUM);
2119 addr = cache->saved_regs[regnum];
2121 return frame_unwind_got_memory (this_frame, regnum, addr);
2123 return frame_unwind_got_constant (this_frame, regnum, 0);
2126 else /* All other registers not listed above. */
2128 CORE_ADDR addr = cache->saved_regs[regnum];
2131 return frame_unwind_got_memory (this_frame, regnum, addr);
2133 return frame_unwind_got_constant (this_frame, regnum, 0);
2138 ia64_sigtramp_frame_sniffer (const struct frame_unwind *self,
2139 struct frame_info *this_frame,
2142 struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
2143 if (tdep->pc_in_sigtramp)
2145 CORE_ADDR pc = get_frame_pc (this_frame);
2147 if (tdep->pc_in_sigtramp (pc))
2154 static const struct frame_unwind ia64_sigtramp_frame_unwind =
2157 ia64_sigtramp_frame_this_id,
2158 ia64_sigtramp_frame_prev_register,
2160 ia64_sigtramp_frame_sniffer
2166 ia64_frame_base_address (struct frame_info *this_frame, void **this_cache)
2168 struct ia64_frame_cache *cache = ia64_frame_cache (this_frame, this_cache);
2173 static const struct frame_base ia64_frame_base =
2176 ia64_frame_base_address,
2177 ia64_frame_base_address,
2178 ia64_frame_base_address
2181 #ifdef HAVE_LIBUNWIND_IA64_H
2183 struct ia64_unwind_table_entry
2185 unw_word_t start_offset;
2186 unw_word_t end_offset;
2187 unw_word_t info_offset;
2190 static __inline__ uint64_t
2191 ia64_rse_slot_num (uint64_t addr)
2193 return (addr >> 3) & 0x3f;
2196 /* Skip over a designated number of registers in the backing
2197 store, remembering every 64th position is for NAT. */
2198 static __inline__ uint64_t
2199 ia64_rse_skip_regs (uint64_t addr, long num_regs)
2201 long delta = ia64_rse_slot_num(addr) + num_regs;
2205 return addr + ((num_regs + delta/0x3f) << 3);
2208 /* Gdb libunwind-frame callback function to convert from an ia64 gdb register
2209 number to a libunwind register number. */
2211 ia64_gdb2uw_regnum (int regnum)
2213 if (regnum == sp_regnum)
2215 else if (regnum == IA64_BSP_REGNUM)
2216 return UNW_IA64_BSP;
2217 else if ((unsigned) (regnum - IA64_GR0_REGNUM) < 128)
2218 return UNW_IA64_GR + (regnum - IA64_GR0_REGNUM);
2219 else if ((unsigned) (regnum - V32_REGNUM) < 95)
2220 return UNW_IA64_GR + 32 + (regnum - V32_REGNUM);
2221 else if ((unsigned) (regnum - IA64_FR0_REGNUM) < 128)
2222 return UNW_IA64_FR + (regnum - IA64_FR0_REGNUM);
2223 else if ((unsigned) (regnum - IA64_PR0_REGNUM) < 64)
2225 else if ((unsigned) (regnum - IA64_BR0_REGNUM) < 8)
2226 return UNW_IA64_BR + (regnum - IA64_BR0_REGNUM);
2227 else if (regnum == IA64_PR_REGNUM)
2229 else if (regnum == IA64_IP_REGNUM)
2231 else if (regnum == IA64_CFM_REGNUM)
2232 return UNW_IA64_CFM;
2233 else if ((unsigned) (regnum - IA64_AR0_REGNUM) < 128)
2234 return UNW_IA64_AR + (regnum - IA64_AR0_REGNUM);
2235 else if ((unsigned) (regnum - IA64_NAT0_REGNUM) < 128)
2236 return UNW_IA64_NAT + (regnum - IA64_NAT0_REGNUM);
2241 /* Gdb libunwind-frame callback function to convert from a libunwind register
2242 number to a ia64 gdb register number. */
2244 ia64_uw2gdb_regnum (int uw_regnum)
2246 if (uw_regnum == UNW_IA64_SP)
2248 else if (uw_regnum == UNW_IA64_BSP)
2249 return IA64_BSP_REGNUM;
2250 else if ((unsigned) (uw_regnum - UNW_IA64_GR) < 32)
2251 return IA64_GR0_REGNUM + (uw_regnum - UNW_IA64_GR);
2252 else if ((unsigned) (uw_regnum - UNW_IA64_GR) < 128)
2253 return V32_REGNUM + (uw_regnum - (IA64_GR0_REGNUM + 32));
2254 else if ((unsigned) (uw_regnum - UNW_IA64_FR) < 128)
2255 return IA64_FR0_REGNUM + (uw_regnum - UNW_IA64_FR);
2256 else if ((unsigned) (uw_regnum - UNW_IA64_BR) < 8)
2257 return IA64_BR0_REGNUM + (uw_regnum - UNW_IA64_BR);
2258 else if (uw_regnum == UNW_IA64_PR)
2259 return IA64_PR_REGNUM;
2260 else if (uw_regnum == UNW_REG_IP)
2261 return IA64_IP_REGNUM;
2262 else if (uw_regnum == UNW_IA64_CFM)
2263 return IA64_CFM_REGNUM;
2264 else if ((unsigned) (uw_regnum - UNW_IA64_AR) < 128)
2265 return IA64_AR0_REGNUM + (uw_regnum - UNW_IA64_AR);
2266 else if ((unsigned) (uw_regnum - UNW_IA64_NAT) < 128)
2267 return IA64_NAT0_REGNUM + (uw_regnum - UNW_IA64_NAT);
2272 /* Gdb libunwind-frame callback function to reveal if register is a float
2275 ia64_is_fpreg (int uw_regnum)
2277 return unw_is_fpreg (uw_regnum);
2280 /* Libunwind callback accessor function for general registers. */
2282 ia64_access_reg (unw_addr_space_t as, unw_regnum_t uw_regnum, unw_word_t *val,
2283 int write, void *arg)
2285 int regnum = ia64_uw2gdb_regnum (uw_regnum);
2286 unw_word_t bsp, sof, sol, cfm, psr, ip;
2287 struct frame_info *this_frame = arg;
2288 long new_sof, old_sof;
2289 char buf[MAX_REGISTER_SIZE];
2291 /* We never call any libunwind routines that need to write registers. */
2292 gdb_assert (!write);
2297 /* Libunwind expects to see the pc value which means the slot number
2298 from the psr must be merged with the ip word address. */
2299 get_frame_register (this_frame, IA64_IP_REGNUM, buf);
2300 ip = extract_unsigned_integer (buf, 8);
2301 get_frame_register (this_frame, IA64_PSR_REGNUM, buf);
2302 psr = extract_unsigned_integer (buf, 8);
2303 *val = ip | ((psr >> 41) & 0x3);
2306 case UNW_IA64_AR_BSP:
2307 /* Libunwind expects to see the beginning of the current register
2308 frame so we must account for the fact that ptrace() will return a value
2309 for bsp that points *after* the current register frame. */
2310 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
2311 bsp = extract_unsigned_integer (buf, 8);
2312 get_frame_register (this_frame, IA64_CFM_REGNUM, buf);
2313 cfm = extract_unsigned_integer (buf, 8);
2315 *val = ia64_rse_skip_regs (bsp, -sof);
2318 case UNW_IA64_AR_BSPSTORE:
2319 /* Libunwind wants bspstore to be after the current register frame.
2320 This is what ptrace() and gdb treats as the regular bsp value. */
2321 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
2322 *val = extract_unsigned_integer (buf, 8);
2326 /* For all other registers, just unwind the value directly. */
2327 get_frame_register (this_frame, regnum, buf);
2328 *val = extract_unsigned_integer (buf, 8);
2332 if (gdbarch_debug >= 1)
2333 fprintf_unfiltered (gdb_stdlog,
2334 " access_reg: from cache: %4s=0x%s\n",
2335 (((unsigned) regnum <= IA64_NAT127_REGNUM)
2336 ? ia64_register_names[regnum] : "r??"),
2341 /* Libunwind callback accessor function for floating-point registers. */
2343 ia64_access_fpreg (unw_addr_space_t as, unw_regnum_t uw_regnum, unw_fpreg_t *val,
2344 int write, void *arg)
2346 int regnum = ia64_uw2gdb_regnum (uw_regnum);
2347 struct frame_info *this_frame = arg;
2349 /* We never call any libunwind routines that need to write registers. */
2350 gdb_assert (!write);
2352 get_frame_register (this_frame, regnum, (char *) val);
2357 /* Libunwind callback accessor function for top-level rse registers. */
2359 ia64_access_rse_reg (unw_addr_space_t as, unw_regnum_t uw_regnum, unw_word_t *val,
2360 int write, void *arg)
2362 int regnum = ia64_uw2gdb_regnum (uw_regnum);
2363 unw_word_t bsp, sof, sol, cfm, psr, ip;
2364 struct regcache *regcache = arg;
2365 long new_sof, old_sof;
2366 char buf[MAX_REGISTER_SIZE];
2368 /* We never call any libunwind routines that need to write registers. */
2369 gdb_assert (!write);
2374 /* Libunwind expects to see the pc value which means the slot number
2375 from the psr must be merged with the ip word address. */
2376 regcache_cooked_read (regcache, IA64_IP_REGNUM, buf);
2377 ip = extract_unsigned_integer (buf, 8);
2378 regcache_cooked_read (regcache, IA64_PSR_REGNUM, buf);
2379 psr = extract_unsigned_integer (buf, 8);
2380 *val = ip | ((psr >> 41) & 0x3);
2383 case UNW_IA64_AR_BSP:
2384 /* Libunwind expects to see the beginning of the current register
2385 frame so we must account for the fact that ptrace() will return a value
2386 for bsp that points *after* the current register frame. */
2387 regcache_cooked_read (regcache, IA64_BSP_REGNUM, buf);
2388 bsp = extract_unsigned_integer (buf, 8);
2389 regcache_cooked_read (regcache, IA64_CFM_REGNUM, buf);
2390 cfm = extract_unsigned_integer (buf, 8);
2392 *val = ia64_rse_skip_regs (bsp, -sof);
2395 case UNW_IA64_AR_BSPSTORE:
2396 /* Libunwind wants bspstore to be after the current register frame.
2397 This is what ptrace() and gdb treats as the regular bsp value. */
2398 regcache_cooked_read (regcache, IA64_BSP_REGNUM, buf);
2399 *val = extract_unsigned_integer (buf, 8);
2403 /* For all other registers, just unwind the value directly. */
2404 regcache_cooked_read (regcache, regnum, buf);
2405 *val = extract_unsigned_integer (buf, 8);
2409 if (gdbarch_debug >= 1)
2410 fprintf_unfiltered (gdb_stdlog,
2411 " access_rse_reg: from cache: %4s=0x%s\n",
2412 (((unsigned) regnum <= IA64_NAT127_REGNUM)
2413 ? ia64_register_names[regnum] : "r??"),
2419 /* Libunwind callback accessor function for top-level fp registers. */
2421 ia64_access_rse_fpreg (unw_addr_space_t as, unw_regnum_t uw_regnum,
2422 unw_fpreg_t *val, int write, void *arg)
2424 int regnum = ia64_uw2gdb_regnum (uw_regnum);
2425 struct regcache *regcache = arg;
2427 /* We never call any libunwind routines that need to write registers. */
2428 gdb_assert (!write);
2430 regcache_cooked_read (regcache, regnum, (char *) val);
2435 /* Libunwind callback accessor function for accessing memory. */
2437 ia64_access_mem (unw_addr_space_t as,
2438 unw_word_t addr, unw_word_t *val,
2439 int write, void *arg)
2441 if (addr - KERNEL_START < ktab_size)
2443 unw_word_t *laddr = (unw_word_t*) ((char *) ktab
2444 + (addr - KERNEL_START));
2453 /* XXX do we need to normalize byte-order here? */
2455 return target_write_memory (addr, (char *) val, sizeof (unw_word_t));
2457 return target_read_memory (addr, (char *) val, sizeof (unw_word_t));
2460 /* Call low-level function to access the kernel unwind table. */
2462 getunwind_table (gdb_byte **buf_p)
2466 /* FIXME drow/2005-09-10: This code used to call
2467 ia64_linux_xfer_unwind_table directly to fetch the unwind table
2468 for the currently running ia64-linux kernel. That data should
2469 come from the core file and be accessed via the auxv vector; if
2470 we want to preserve fall back to the running kernel's table, then
2471 we should find a way to override the corefile layer's
2472 xfer_partial method. */
2474 x = target_read_alloc (¤t_target, TARGET_OBJECT_UNWIND_TABLE,
2480 /* Get the kernel unwind table. */
2482 get_kernel_table (unw_word_t ip, unw_dyn_info_t *di)
2484 static struct ia64_table_entry *etab;
2491 size = getunwind_table (&ktab_buf);
2493 return -UNW_ENOINFO;
2495 ktab = (struct ia64_table_entry *) ktab_buf;
2498 for (etab = ktab; etab->start_offset; ++etab)
2499 etab->info_offset += KERNEL_START;
2502 if (ip < ktab[0].start_offset || ip >= etab[-1].end_offset)
2503 return -UNW_ENOINFO;
2505 di->format = UNW_INFO_FORMAT_TABLE;
2507 di->start_ip = ktab[0].start_offset;
2508 di->end_ip = etab[-1].end_offset;
2509 di->u.ti.name_ptr = (unw_word_t) "<kernel>";
2510 di->u.ti.segbase = 0;
2511 di->u.ti.table_len = ((char *) etab - (char *) ktab) / sizeof (unw_word_t);
2512 di->u.ti.table_data = (unw_word_t *) ktab;
2514 if (gdbarch_debug >= 1)
2515 fprintf_unfiltered (gdb_stdlog, "get_kernel_table: found table `%s': "
2516 "segbase=0x%s, length=%s, gp=0x%s\n",
2517 (char *) di->u.ti.name_ptr,
2518 paddr_nz (di->u.ti.segbase),
2519 pulongest (di->u.ti.table_len),
2524 /* Find the unwind table entry for a specified address. */
2526 ia64_find_unwind_table (struct objfile *objfile, unw_word_t ip,
2527 unw_dyn_info_t *dip, void **buf)
2529 Elf_Internal_Phdr *phdr, *p_text = NULL, *p_unwind = NULL;
2530 Elf_Internal_Ehdr *ehdr;
2531 unw_word_t segbase = 0;
2532 CORE_ADDR load_base;
2536 bfd = objfile->obfd;
2538 ehdr = elf_tdata (bfd)->elf_header;
2539 phdr = elf_tdata (bfd)->phdr;
2541 load_base = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2543 for (i = 0; i < ehdr->e_phnum; ++i)
2545 switch (phdr[i].p_type)
2548 if ((unw_word_t) (ip - load_base - phdr[i].p_vaddr)
2553 case PT_IA_64_UNWIND:
2554 p_unwind = phdr + i;
2562 if (!p_text || !p_unwind)
2563 return -UNW_ENOINFO;
2565 /* Verify that the segment that contains the IP also contains
2566 the static unwind table. If not, we may be in the Linux kernel's
2567 DSO gate page in which case the unwind table is another segment.
2568 Otherwise, we are dealing with runtime-generated code, for which we
2569 have no info here. */
2570 segbase = p_text->p_vaddr + load_base;
2572 if ((p_unwind->p_vaddr - p_text->p_vaddr) >= p_text->p_memsz)
2575 for (i = 0; i < ehdr->e_phnum; ++i)
2577 if (phdr[i].p_type == PT_LOAD
2578 && (p_unwind->p_vaddr - phdr[i].p_vaddr) < phdr[i].p_memsz)
2581 /* Get the segbase from the section containing the
2583 segbase = phdr[i].p_vaddr + load_base;
2587 return -UNW_ENOINFO;
2590 dip->start_ip = p_text->p_vaddr + load_base;
2591 dip->end_ip = dip->start_ip + p_text->p_memsz;
2592 dip->gp = ia64_find_global_pointer (ip);
2593 dip->format = UNW_INFO_FORMAT_REMOTE_TABLE;
2594 dip->u.rti.name_ptr = (unw_word_t) bfd_get_filename (bfd);
2595 dip->u.rti.segbase = segbase;
2596 dip->u.rti.table_len = p_unwind->p_memsz / sizeof (unw_word_t);
2597 dip->u.rti.table_data = p_unwind->p_vaddr + load_base;
2602 /* Libunwind callback accessor function to acquire procedure unwind-info. */
2604 ia64_find_proc_info_x (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi,
2605 int need_unwind_info, void *arg)
2607 struct obj_section *sec = find_pc_section (ip);
2614 /* XXX This only works if the host and the target architecture are
2615 both ia64 and if the have (more or less) the same kernel
2617 if (get_kernel_table (ip, &di) < 0)
2618 return -UNW_ENOINFO;
2620 if (gdbarch_debug >= 1)
2621 fprintf_unfiltered (gdb_stdlog, "ia64_find_proc_info_x: 0x%s -> "
2622 "(name=`%s',segbase=0x%s,start=0x%s,end=0x%s,gp=0x%s,"
2623 "length=%s,data=0x%s)\n",
2624 paddr_nz (ip), (char *)di.u.ti.name_ptr,
2625 paddr_nz (di.u.ti.segbase),
2626 paddr_nz (di.start_ip), paddr_nz (di.end_ip),
2628 pulongest (di.u.ti.table_len),
2629 paddr_nz ((CORE_ADDR)di.u.ti.table_data));
2633 ret = ia64_find_unwind_table (sec->objfile, ip, &di, &buf);
2637 if (gdbarch_debug >= 1)
2638 fprintf_unfiltered (gdb_stdlog, "ia64_find_proc_info_x: 0x%s -> "
2639 "(name=`%s',segbase=0x%s,start=0x%s,end=0x%s,gp=0x%s,"
2640 "length=%s,data=0x%s)\n",
2641 paddr_nz (ip), (char *)di.u.rti.name_ptr,
2642 paddr_nz (di.u.rti.segbase),
2643 paddr_nz (di.start_ip), paddr_nz (di.end_ip),
2645 pulongest (di.u.rti.table_len),
2646 paddr_nz (di.u.rti.table_data));
2649 ret = libunwind_search_unwind_table (&as, ip, &di, pi, need_unwind_info,
2652 /* We no longer need the dyn info storage so free it. */
2658 /* Libunwind callback accessor function for cleanup. */
2660 ia64_put_unwind_info (unw_addr_space_t as,
2661 unw_proc_info_t *pip, void *arg)
2663 /* Nothing required for now. */
2666 /* Libunwind callback accessor function to get head of the dynamic
2667 unwind-info registration list. */
2669 ia64_get_dyn_info_list (unw_addr_space_t as,
2670 unw_word_t *dilap, void *arg)
2672 struct obj_section *text_sec;
2673 struct objfile *objfile;
2674 unw_word_t ip, addr;
2678 if (!libunwind_is_initialized ())
2679 return -UNW_ENOINFO;
2681 for (objfile = object_files; objfile; objfile = objfile->next)
2685 text_sec = objfile->sections + SECT_OFF_TEXT (objfile);
2686 ip = obj_section_addr (text_sec);
2687 ret = ia64_find_unwind_table (objfile, ip, &di, &buf);
2690 addr = libunwind_find_dyn_list (as, &di, arg);
2691 /* We no longer need the dyn info storage so free it. */
2696 if (gdbarch_debug >= 1)
2697 fprintf_unfiltered (gdb_stdlog,
2698 "dynamic unwind table in objfile %s "
2699 "at 0x%s (gp=0x%s)\n",
2700 bfd_get_filename (objfile->obfd),
2701 paddr_nz (addr), paddr_nz (di.gp));
2707 return -UNW_ENOINFO;
2711 /* Frame interface functions for libunwind. */
2714 ia64_libunwind_frame_this_id (struct frame_info *this_frame, void **this_cache,
2715 struct frame_id *this_id)
2722 libunwind_frame_this_id (this_frame, this_cache, &id);
2723 if (frame_id_eq (id, null_frame_id))
2725 (*this_id) = null_frame_id;
2729 /* We must add the bsp as the special address for frame comparison
2731 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
2732 bsp = extract_unsigned_integer (buf, 8);
2734 (*this_id) = frame_id_build_special (id.stack_addr, id.code_addr, bsp);
2736 if (gdbarch_debug >= 1)
2737 fprintf_unfiltered (gdb_stdlog,
2738 "libunwind frame id: code 0x%s, stack 0x%s, special 0x%s, this_frame %s\n",
2739 paddr_nz (id.code_addr), paddr_nz (id.stack_addr),
2741 host_address_to_string (this_frame));
2744 static struct value *
2745 ia64_libunwind_frame_prev_register (struct frame_info *this_frame,
2746 void **this_cache, int regnum)
2749 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2752 if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
2753 reg = IA64_PR_REGNUM;
2754 else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
2755 reg = IA64_UNAT_REGNUM;
2757 /* Let libunwind do most of the work. */
2758 val = libunwind_frame_prev_register (this_frame, this_cache, reg);
2760 if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
2764 if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
2768 unsigned char buf[MAX_REGISTER_SIZE];
2770 /* Fetch predicate register rename base from current frame
2771 marker for this frame. */
2772 get_frame_register (this_frame, IA64_CFM_REGNUM, buf);
2773 cfm = extract_unsigned_integer (buf, 8);
2774 rrb_pr = (cfm >> 32) & 0x3f;
2776 /* Adjust the register number to account for register rotation. */
2777 regnum = VP16_REGNUM + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
2779 prN_val = extract_bit_field (value_contents_all (val),
2780 regnum - VP0_REGNUM, 1);
2781 return frame_unwind_got_constant (this_frame, regnum, prN_val);
2784 else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
2788 unatN_val = extract_bit_field (value_contents_all (val),
2789 regnum - IA64_NAT0_REGNUM, 1);
2790 return frame_unwind_got_constant (this_frame, regnum, unatN_val);
2793 else if (regnum == IA64_BSP_REGNUM)
2795 struct value *cfm_val;
2796 CORE_ADDR prev_bsp, prev_cfm;
2798 /* We want to calculate the previous bsp as the end of the previous
2799 register stack frame. This corresponds to what the hardware bsp
2800 register will be if we pop the frame back which is why we might
2801 have been called. We know that libunwind will pass us back the
2802 beginning of the current frame so we should just add sof to it. */
2803 prev_bsp = extract_unsigned_integer (value_contents_all (val), 8);
2804 cfm_val = libunwind_frame_prev_register (this_frame, this_cache,
2806 prev_cfm = extract_unsigned_integer (value_contents_all (cfm_val), 8);
2807 prev_bsp = rse_address_add (prev_bsp, (prev_cfm & 0x7f));
2809 return frame_unwind_got_constant (this_frame, regnum, prev_bsp);
2816 ia64_libunwind_frame_sniffer (const struct frame_unwind *self,
2817 struct frame_info *this_frame,
2820 if (libunwind_is_initialized ()
2821 && libunwind_frame_sniffer (self, this_frame, this_cache))
2827 static const struct frame_unwind ia64_libunwind_frame_unwind =
2830 ia64_libunwind_frame_this_id,
2831 ia64_libunwind_frame_prev_register,
2833 ia64_libunwind_frame_sniffer,
2834 libunwind_frame_dealloc_cache
2838 ia64_libunwind_sigtramp_frame_this_id (struct frame_info *this_frame,
2840 struct frame_id *this_id)
2847 libunwind_frame_this_id (this_frame, this_cache, &id);
2848 if (frame_id_eq (id, null_frame_id))
2850 (*this_id) = null_frame_id;
2854 /* We must add the bsp as the special address for frame comparison
2856 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
2857 bsp = extract_unsigned_integer (buf, 8);
2859 /* For a sigtramp frame, we don't make the check for previous ip being 0. */
2860 (*this_id) = frame_id_build_special (id.stack_addr, id.code_addr, bsp);
2862 if (gdbarch_debug >= 1)
2863 fprintf_unfiltered (gdb_stdlog,
2864 "libunwind sigtramp frame id: code 0x%s, stack 0x%s, special 0x%s, this_frame %s\n",
2865 paddr_nz (id.code_addr), paddr_nz (id.stack_addr),
2867 host_address_to_string (this_frame));
2870 static struct value *
2871 ia64_libunwind_sigtramp_frame_prev_register (struct frame_info *this_frame,
2872 void **this_cache, int regnum)
2874 struct value *prev_ip_val;
2877 /* If the previous frame pc value is 0, then we want to use the SIGCONTEXT
2878 method of getting previous registers. */
2879 prev_ip_val = libunwind_frame_prev_register (this_frame, this_cache,
2881 prev_ip = extract_unsigned_integer (value_contents_all (prev_ip_val), 8);
2885 void *tmp_cache = NULL;
2886 return ia64_sigtramp_frame_prev_register (this_frame, &tmp_cache,
2890 return ia64_libunwind_frame_prev_register (this_frame, this_cache, regnum);
2894 ia64_libunwind_sigtramp_frame_sniffer (const struct frame_unwind *self,
2895 struct frame_info *this_frame,
2898 if (libunwind_is_initialized ())
2900 if (libunwind_sigtramp_frame_sniffer (self, this_frame, this_cache))
2905 return ia64_sigtramp_frame_sniffer (self, this_frame, this_cache);
2908 static const struct frame_unwind ia64_libunwind_sigtramp_frame_unwind =
2911 ia64_libunwind_sigtramp_frame_this_id,
2912 ia64_libunwind_sigtramp_frame_prev_register,
2914 ia64_libunwind_sigtramp_frame_sniffer
2917 /* Set of libunwind callback acccessor functions. */
2918 static unw_accessors_t ia64_unw_accessors =
2920 ia64_find_proc_info_x,
2921 ia64_put_unwind_info,
2922 ia64_get_dyn_info_list,
2930 /* Set of special libunwind callback acccessor functions specific for accessing
2931 the rse registers. At the top of the stack, we want libunwind to figure out
2932 how to read r32 - r127. Though usually they are found sequentially in memory
2933 starting from $bof, this is not always true. */
2934 static unw_accessors_t ia64_unw_rse_accessors =
2936 ia64_find_proc_info_x,
2937 ia64_put_unwind_info,
2938 ia64_get_dyn_info_list,
2940 ia64_access_rse_reg,
2941 ia64_access_rse_fpreg,
2946 /* Set of ia64 gdb libunwind-frame callbacks and data for generic libunwind-frame code to use. */
2947 static struct libunwind_descr ia64_libunwind_descr =
2952 &ia64_unw_accessors,
2953 &ia64_unw_rse_accessors,
2956 #endif /* HAVE_LIBUNWIND_IA64_H */
2959 ia64_use_struct_convention (struct type *type)
2961 struct type *float_elt_type;
2963 /* Don't use the struct convention for anything but structure,
2964 union, or array types. */
2965 if (!(TYPE_CODE (type) == TYPE_CODE_STRUCT
2966 || TYPE_CODE (type) == TYPE_CODE_UNION
2967 || TYPE_CODE (type) == TYPE_CODE_ARRAY))
2970 /* HFAs are structures (or arrays) consisting entirely of floating
2971 point values of the same length. Up to 8 of these are returned
2972 in registers. Don't use the struct convention when this is the
2974 float_elt_type = is_float_or_hfa_type (type);
2975 if (float_elt_type != NULL
2976 && TYPE_LENGTH (type) / TYPE_LENGTH (float_elt_type) <= 8)
2979 /* Other structs of length 32 or less are returned in r8-r11.
2980 Don't use the struct convention for those either. */
2981 return TYPE_LENGTH (type) > 32;
2985 ia64_extract_return_value (struct type *type, struct regcache *regcache,
2988 struct type *float_elt_type;
2990 float_elt_type = is_float_or_hfa_type (type);
2991 if (float_elt_type != NULL)
2993 char from[MAX_REGISTER_SIZE];
2995 int regnum = IA64_FR8_REGNUM;
2996 int n = TYPE_LENGTH (type) / TYPE_LENGTH (float_elt_type);
3000 regcache_cooked_read (regcache, regnum, from);
3001 convert_typed_floating (from, builtin_type_ia64_ext,
3002 (char *)valbuf + offset, float_elt_type);
3003 offset += TYPE_LENGTH (float_elt_type);
3011 int regnum = IA64_GR8_REGNUM;
3012 int reglen = TYPE_LENGTH (register_type (get_regcache_arch (regcache),
3014 int n = TYPE_LENGTH (type) / reglen;
3015 int m = TYPE_LENGTH (type) % reglen;
3020 regcache_cooked_read_unsigned (regcache, regnum, &val);
3021 memcpy ((char *)valbuf + offset, &val, reglen);
3028 regcache_cooked_read_unsigned (regcache, regnum, &val);
3029 memcpy ((char *)valbuf + offset, &val, m);
3035 ia64_store_return_value (struct type *type, struct regcache *regcache,
3036 const gdb_byte *valbuf)
3038 struct type *float_elt_type;
3040 float_elt_type = is_float_or_hfa_type (type);
3041 if (float_elt_type != NULL)
3043 char to[MAX_REGISTER_SIZE];
3045 int regnum = IA64_FR8_REGNUM;
3046 int n = TYPE_LENGTH (type) / TYPE_LENGTH (float_elt_type);
3050 convert_typed_floating ((char *)valbuf + offset, float_elt_type,
3051 to, builtin_type_ia64_ext);
3052 regcache_cooked_write (regcache, regnum, to);
3053 offset += TYPE_LENGTH (float_elt_type);
3061 int regnum = IA64_GR8_REGNUM;
3062 int reglen = TYPE_LENGTH (register_type (get_regcache_arch (regcache),
3064 int n = TYPE_LENGTH (type) / reglen;
3065 int m = TYPE_LENGTH (type) % reglen;
3070 memcpy (&val, (char *)valbuf + offset, reglen);
3071 regcache_cooked_write_unsigned (regcache, regnum, val);
3078 memcpy (&val, (char *)valbuf + offset, m);
3079 regcache_cooked_write_unsigned (regcache, regnum, val);
3084 static enum return_value_convention
3085 ia64_return_value (struct gdbarch *gdbarch, struct type *func_type,
3086 struct type *valtype, struct regcache *regcache,
3087 gdb_byte *readbuf, const gdb_byte *writebuf)
3089 int struct_return = ia64_use_struct_convention (valtype);
3091 if (writebuf != NULL)
3093 gdb_assert (!struct_return);
3094 ia64_store_return_value (valtype, regcache, writebuf);
3097 if (readbuf != NULL)
3099 gdb_assert (!struct_return);
3100 ia64_extract_return_value (valtype, regcache, readbuf);
3104 return RETURN_VALUE_STRUCT_CONVENTION;
3106 return RETURN_VALUE_REGISTER_CONVENTION;
3110 is_float_or_hfa_type_recurse (struct type *t, struct type **etp)
3112 switch (TYPE_CODE (t))
3116 return TYPE_LENGTH (*etp) == TYPE_LENGTH (t);
3123 case TYPE_CODE_ARRAY:
3125 is_float_or_hfa_type_recurse (check_typedef (TYPE_TARGET_TYPE (t)),
3128 case TYPE_CODE_STRUCT:
3132 for (i = 0; i < TYPE_NFIELDS (t); i++)
3133 if (!is_float_or_hfa_type_recurse
3134 (check_typedef (TYPE_FIELD_TYPE (t, i)), etp))
3145 /* Determine if the given type is one of the floating point types or
3146 and HFA (which is a struct, array, or combination thereof whose
3147 bottom-most elements are all of the same floating point type). */
3149 static struct type *
3150 is_float_or_hfa_type (struct type *t)
3152 struct type *et = 0;
3154 return is_float_or_hfa_type_recurse (t, &et) ? et : 0;
3158 /* Return 1 if the alignment of T is such that the next even slot
3159 should be used. Return 0, if the next available slot should
3160 be used. (See section 8.5.1 of the IA-64 Software Conventions
3161 and Runtime manual). */
3164 slot_alignment_is_next_even (struct type *t)
3166 switch (TYPE_CODE (t))
3170 if (TYPE_LENGTH (t) > 8)
3174 case TYPE_CODE_ARRAY:
3176 slot_alignment_is_next_even (check_typedef (TYPE_TARGET_TYPE (t)));
3177 case TYPE_CODE_STRUCT:
3181 for (i = 0; i < TYPE_NFIELDS (t); i++)
3182 if (slot_alignment_is_next_even
3183 (check_typedef (TYPE_FIELD_TYPE (t, i))))
3192 /* Attempt to find (and return) the global pointer for the given
3195 This is a rather nasty bit of code searchs for the .dynamic section
3196 in the objfile corresponding to the pc of the function we're trying
3197 to call. Once it finds the addresses at which the .dynamic section
3198 lives in the child process, it scans the Elf64_Dyn entries for a
3199 DT_PLTGOT tag. If it finds one of these, the corresponding
3200 d_un.d_ptr value is the global pointer. */
3203 ia64_find_global_pointer (CORE_ADDR faddr)
3205 struct obj_section *faddr_sect;
3207 faddr_sect = find_pc_section (faddr);
3208 if (faddr_sect != NULL)
3210 struct obj_section *osect;
3212 ALL_OBJFILE_OSECTIONS (faddr_sect->objfile, osect)
3214 if (strcmp (osect->the_bfd_section->name, ".dynamic") == 0)
3218 if (osect < faddr_sect->objfile->sections_end)
3220 CORE_ADDR addr, endaddr;
3222 addr = obj_section_addr (osect);
3223 endaddr = obj_section_endaddr (osect);
3225 while (addr < endaddr)
3231 status = target_read_memory (addr, buf, sizeof (buf));
3234 tag = extract_signed_integer (buf, sizeof (buf));
3236 if (tag == DT_PLTGOT)
3238 CORE_ADDR global_pointer;
3240 status = target_read_memory (addr + 8, buf, sizeof (buf));
3243 global_pointer = extract_unsigned_integer (buf, sizeof (buf));
3246 return global_pointer;
3259 /* Given a function's address, attempt to find (and return) the
3260 corresponding (canonical) function descriptor. Return 0 if
3263 find_extant_func_descr (CORE_ADDR faddr)
3265 struct obj_section *faddr_sect;
3267 /* Return early if faddr is already a function descriptor. */
3268 faddr_sect = find_pc_section (faddr);
3269 if (faddr_sect && strcmp (faddr_sect->the_bfd_section->name, ".opd") == 0)
3272 if (faddr_sect != NULL)
3274 struct obj_section *osect;
3275 ALL_OBJFILE_OSECTIONS (faddr_sect->objfile, osect)
3277 if (strcmp (osect->the_bfd_section->name, ".opd") == 0)
3281 if (osect < faddr_sect->objfile->sections_end)
3283 CORE_ADDR addr, endaddr;
3285 addr = obj_section_addr (osect);
3286 endaddr = obj_section_endaddr (osect);
3288 while (addr < endaddr)
3294 status = target_read_memory (addr, buf, sizeof (buf));
3297 faddr2 = extract_signed_integer (buf, sizeof (buf));
3299 if (faddr == faddr2)
3309 /* Attempt to find a function descriptor corresponding to the
3310 given address. If none is found, construct one on the
3311 stack using the address at fdaptr. */
3314 find_func_descr (struct regcache *regcache, CORE_ADDR faddr, CORE_ADDR *fdaptr)
3318 fdesc = find_extant_func_descr (faddr);
3322 ULONGEST global_pointer;
3328 global_pointer = ia64_find_global_pointer (faddr);
3330 if (global_pointer == 0)
3331 regcache_cooked_read_unsigned (regcache,
3332 IA64_GR1_REGNUM, &global_pointer);
3334 store_unsigned_integer (buf, 8, faddr);
3335 store_unsigned_integer (buf + 8, 8, global_pointer);
3337 write_memory (fdesc, buf, 16);
3343 /* Use the following routine when printing out function pointers
3344 so the user can see the function address rather than just the
3345 function descriptor. */
3347 ia64_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr,
3348 struct target_ops *targ)
3350 struct obj_section *s;
3352 s = find_pc_section (addr);
3354 /* check if ADDR points to a function descriptor. */
3355 if (s && strcmp (s->the_bfd_section->name, ".opd") == 0)
3356 return read_memory_unsigned_integer (addr, 8);
3358 /* Normally, functions live inside a section that is executable.
3359 So, if ADDR points to a non-executable section, then treat it
3360 as a function descriptor and return the target address iff
3361 the target address itself points to a section that is executable. */
3362 if (s && (s->the_bfd_section->flags & SEC_CODE) == 0)
3364 CORE_ADDR pc = read_memory_unsigned_integer (addr, 8);
3365 struct obj_section *pc_section = find_pc_section (pc);
3367 if (pc_section && (pc_section->the_bfd_section->flags & SEC_CODE))
3371 /* There are also descriptors embedded in vtables. */
3374 struct minimal_symbol *minsym;
3376 minsym = lookup_minimal_symbol_by_pc (addr);
3378 if (minsym && is_vtable_name (SYMBOL_LINKAGE_NAME (minsym)))
3379 return read_memory_unsigned_integer (addr, 8);
3386 ia64_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
3392 ia64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
3393 struct regcache *regcache, CORE_ADDR bp_addr,
3394 int nargs, struct value **args, CORE_ADDR sp,
3395 int struct_return, CORE_ADDR struct_addr)
3401 int nslots, rseslots, memslots, slotnum, nfuncargs;
3403 ULONGEST bsp, cfm, pfs, new_bsp;
3404 CORE_ADDR funcdescaddr, pc, global_pointer;
3405 CORE_ADDR func_addr = find_function_addr (function, NULL);
3409 /* Count the number of slots needed for the arguments. */
3410 for (argno = 0; argno < nargs; argno++)
3413 type = check_typedef (value_type (arg));
3414 len = TYPE_LENGTH (type);
3416 if ((nslots & 1) && slot_alignment_is_next_even (type))
3419 if (TYPE_CODE (type) == TYPE_CODE_FUNC)
3422 nslots += (len + 7) / 8;
3425 /* Divvy up the slots between the RSE and the memory stack. */
3426 rseslots = (nslots > 8) ? 8 : nslots;
3427 memslots = nslots - rseslots;
3429 /* Allocate a new RSE frame. */
3430 regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
3432 regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
3433 new_bsp = rse_address_add (bsp, rseslots);
3434 regcache_cooked_write_unsigned (regcache, IA64_BSP_REGNUM, new_bsp);
3436 regcache_cooked_read_unsigned (regcache, IA64_PFS_REGNUM, &pfs);
3437 pfs &= 0xc000000000000000LL;
3438 pfs |= (cfm & 0xffffffffffffLL);
3439 regcache_cooked_write_unsigned (regcache, IA64_PFS_REGNUM, pfs);
3441 cfm &= 0xc000000000000000LL;
3443 regcache_cooked_write_unsigned (regcache, IA64_CFM_REGNUM, cfm);
3445 /* We will attempt to find function descriptors in the .opd segment,
3446 but if we can't we'll construct them ourselves. That being the
3447 case, we'll need to reserve space on the stack for them. */
3448 funcdescaddr = sp - nfuncargs * 16;
3449 funcdescaddr &= ~0xfLL;
3451 /* Adjust the stack pointer to it's new value. The calling conventions
3452 require us to have 16 bytes of scratch, plus whatever space is
3453 necessary for the memory slots and our function descriptors. */
3454 sp = sp - 16 - (memslots + nfuncargs) * 8;
3455 sp &= ~0xfLL; /* Maintain 16 byte alignment. */
3457 /* Place the arguments where they belong. The arguments will be
3458 either placed in the RSE backing store or on the memory stack.
3459 In addition, floating point arguments or HFAs are placed in
3460 floating point registers. */
3462 floatreg = IA64_FR8_REGNUM;
3463 for (argno = 0; argno < nargs; argno++)
3465 struct type *float_elt_type;
3468 type = check_typedef (value_type (arg));
3469 len = TYPE_LENGTH (type);
3471 /* Special handling for function parameters. */
3473 && TYPE_CODE (type) == TYPE_CODE_PTR
3474 && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC)
3477 ULONGEST faddr = extract_unsigned_integer (value_contents (arg), 8);
3478 store_unsigned_integer (val_buf, 8,
3479 find_func_descr (regcache, faddr,
3481 if (slotnum < rseslots)
3482 write_memory (rse_address_add (bsp, slotnum), val_buf, 8);
3484 write_memory (sp + 16 + 8 * (slotnum - rseslots), val_buf, 8);
3491 /* Skip odd slot if necessary... */
3492 if ((slotnum & 1) && slot_alignment_is_next_even (type))
3500 memset (val_buf, 0, 8);
3501 memcpy (val_buf, value_contents (arg) + argoffset, (len > 8) ? 8 : len);
3503 if (slotnum < rseslots)
3504 write_memory (rse_address_add (bsp, slotnum), val_buf, 8);
3506 write_memory (sp + 16 + 8 * (slotnum - rseslots), val_buf, 8);
3513 /* Handle floating point types (including HFAs). */
3514 float_elt_type = is_float_or_hfa_type (type);
3515 if (float_elt_type != NULL)
3518 len = TYPE_LENGTH (type);
3519 while (len > 0 && floatreg < IA64_FR16_REGNUM)
3521 char to[MAX_REGISTER_SIZE];
3522 convert_typed_floating (value_contents (arg) + argoffset, float_elt_type,
3523 to, builtin_type_ia64_ext);
3524 regcache_cooked_write (regcache, floatreg, (void *)to);
3526 argoffset += TYPE_LENGTH (float_elt_type);
3527 len -= TYPE_LENGTH (float_elt_type);
3532 /* Store the struct return value in r8 if necessary. */
3535 regcache_cooked_write_unsigned (regcache, IA64_GR8_REGNUM, (ULONGEST)struct_addr);
3538 global_pointer = ia64_find_global_pointer (func_addr);
3540 if (global_pointer != 0)
3541 regcache_cooked_write_unsigned (regcache, IA64_GR1_REGNUM, global_pointer);
3543 regcache_cooked_write_unsigned (regcache, IA64_BR0_REGNUM, bp_addr);
3545 regcache_cooked_write_unsigned (regcache, sp_regnum, sp);
3550 static struct frame_id
3551 ia64_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
3556 get_frame_register (this_frame, sp_regnum, buf);
3557 sp = extract_unsigned_integer (buf, 8);
3559 get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
3560 bsp = extract_unsigned_integer (buf, 8);
3562 if (gdbarch_debug >= 1)
3563 fprintf_unfiltered (gdb_stdlog,
3564 "dummy frame id: code 0x%s, stack 0x%s, special 0x%s\n",
3565 paddr_nz (get_frame_pc (this_frame)),
3566 paddr_nz (sp), paddr_nz (bsp));
3568 return frame_id_build_special (sp, get_frame_pc (this_frame), bsp);
3572 ia64_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
3575 CORE_ADDR ip, psr, pc;
3577 frame_unwind_register (next_frame, IA64_IP_REGNUM, buf);
3578 ip = extract_unsigned_integer (buf, 8);
3579 frame_unwind_register (next_frame, IA64_PSR_REGNUM, buf);
3580 psr = extract_unsigned_integer (buf, 8);
3582 pc = (ip & ~0xf) | ((psr >> 41) & 3);
3587 ia64_print_insn (bfd_vma memaddr, struct disassemble_info *info)
3589 info->bytes_per_line = SLOT_MULTIPLIER;
3590 return print_insn_ia64 (memaddr, info);
3593 static struct gdbarch *
3594 ia64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
3596 struct gdbarch *gdbarch;
3597 struct gdbarch_tdep *tdep;
3599 /* If there is already a candidate, use it. */
3600 arches = gdbarch_list_lookup_by_info (arches, &info);
3602 return arches->gdbarch;
3604 tdep = xmalloc (sizeof (struct gdbarch_tdep));
3605 gdbarch = gdbarch_alloc (&info, tdep);
3607 tdep->sigcontext_register_address = 0;
3608 tdep->pc_in_sigtramp = 0;
3610 /* According to the ia64 specs, instructions that store long double
3611 floats in memory use a long-double format different than that
3612 used in the floating registers. The memory format matches the
3613 x86 extended float format which is 80 bits. An OS may choose to
3614 use this format (e.g. GNU/Linux) or choose to use a different
3615 format for storing long doubles (e.g. HPUX). In the latter case,
3616 the setting of the format may be moved/overridden in an
3617 OS-specific tdep file. */
3618 set_gdbarch_long_double_format (gdbarch, floatformats_i387_ext);
3620 set_gdbarch_short_bit (gdbarch, 16);
3621 set_gdbarch_int_bit (gdbarch, 32);
3622 set_gdbarch_long_bit (gdbarch, 64);
3623 set_gdbarch_long_long_bit (gdbarch, 64);
3624 set_gdbarch_float_bit (gdbarch, 32);
3625 set_gdbarch_double_bit (gdbarch, 64);
3626 set_gdbarch_long_double_bit (gdbarch, 128);
3627 set_gdbarch_ptr_bit (gdbarch, 64);
3629 set_gdbarch_num_regs (gdbarch, NUM_IA64_RAW_REGS);
3630 set_gdbarch_num_pseudo_regs (gdbarch, LAST_PSEUDO_REGNUM - FIRST_PSEUDO_REGNUM);
3631 set_gdbarch_sp_regnum (gdbarch, sp_regnum);
3632 set_gdbarch_fp0_regnum (gdbarch, IA64_FR0_REGNUM);
3634 set_gdbarch_register_name (gdbarch, ia64_register_name);
3635 set_gdbarch_register_type (gdbarch, ia64_register_type);
3637 set_gdbarch_pseudo_register_read (gdbarch, ia64_pseudo_register_read);
3638 set_gdbarch_pseudo_register_write (gdbarch, ia64_pseudo_register_write);
3639 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, ia64_dwarf_reg_to_regnum);
3640 set_gdbarch_register_reggroup_p (gdbarch, ia64_register_reggroup_p);
3641 set_gdbarch_convert_register_p (gdbarch, ia64_convert_register_p);
3642 set_gdbarch_register_to_value (gdbarch, ia64_register_to_value);
3643 set_gdbarch_value_to_register (gdbarch, ia64_value_to_register);
3645 set_gdbarch_skip_prologue (gdbarch, ia64_skip_prologue);
3647 set_gdbarch_return_value (gdbarch, ia64_return_value);
3649 set_gdbarch_memory_insert_breakpoint (gdbarch, ia64_memory_insert_breakpoint);
3650 set_gdbarch_memory_remove_breakpoint (gdbarch, ia64_memory_remove_breakpoint);
3651 set_gdbarch_breakpoint_from_pc (gdbarch, ia64_breakpoint_from_pc);
3652 set_gdbarch_read_pc (gdbarch, ia64_read_pc);
3653 set_gdbarch_write_pc (gdbarch, ia64_write_pc);
3655 /* Settings for calling functions in the inferior. */
3656 set_gdbarch_push_dummy_call (gdbarch, ia64_push_dummy_call);
3657 set_gdbarch_frame_align (gdbarch, ia64_frame_align);
3658 set_gdbarch_dummy_id (gdbarch, ia64_dummy_id);
3660 set_gdbarch_unwind_pc (gdbarch, ia64_unwind_pc);
3661 #ifdef HAVE_LIBUNWIND_IA64_H
3662 frame_unwind_append_unwinder (gdbarch,
3663 &ia64_libunwind_sigtramp_frame_unwind);
3664 frame_unwind_append_unwinder (gdbarch, &ia64_libunwind_frame_unwind);
3665 frame_unwind_append_unwinder (gdbarch, &ia64_sigtramp_frame_unwind);
3666 libunwind_frame_set_descr (gdbarch, &ia64_libunwind_descr);
3668 frame_unwind_append_unwinder (gdbarch, &ia64_sigtramp_frame_unwind);
3670 frame_unwind_append_unwinder (gdbarch, &ia64_frame_unwind);
3671 frame_base_set_default (gdbarch, &ia64_frame_base);
3673 /* Settings that should be unnecessary. */
3674 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
3676 set_gdbarch_print_insn (gdbarch, ia64_print_insn);
3677 set_gdbarch_convert_from_func_ptr_addr (gdbarch, ia64_convert_from_func_ptr_addr);
3679 /* The virtual table contains 16-byte descriptors, not pointers to
3681 set_gdbarch_vtable_function_descriptors (gdbarch, 1);
3683 /* Hook in ABI-specific overrides, if they have been registered. */
3684 gdbarch_init_osabi (info, gdbarch);
3689 extern initialize_file_ftype _initialize_ia64_tdep; /* -Wmissing-prototypes */
3692 _initialize_ia64_tdep (void)
3694 /* Define the ia64 floating-point format to gdb. */
3695 builtin_type_ia64_ext =
3696 init_type (TYPE_CODE_FLT, 128 / 8,
3697 0, "builtin_type_ia64_ext", NULL);
3698 TYPE_FLOATFORMAT (builtin_type_ia64_ext) = floatformats_ia64_ext;
3700 gdbarch_register (bfd_arch_ia64, ia64_gdbarch_init, NULL);