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, 2010, 2011 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 (struct gdbarch
*gdbarch
,
129 #define NUM_IA64_RAW_REGS 462
131 static int sp_regnum
= IA64_GR12_REGNUM
;
132 static int fp_regnum
= IA64_VFP_REGNUM
;
133 static int lr_regnum
= IA64_VRAP_REGNUM
;
135 /* NOTE: we treat the register stack registers r32-r127 as
136 pseudo-registers because they may not be accessible via the ptrace
137 register get/set interfaces. */
139 enum pseudo_regs
{ FIRST_PSEUDO_REGNUM
= NUM_IA64_RAW_REGS
,
140 VBOF_REGNUM
= IA64_NAT127_REGNUM
+ 1, V32_REGNUM
,
141 V127_REGNUM
= V32_REGNUM
+ 95,
142 VP0_REGNUM
, VP16_REGNUM
= VP0_REGNUM
+ 16,
143 VP63_REGNUM
= VP0_REGNUM
+ 63, LAST_PSEUDO_REGNUM
};
145 /* Array of register names; There should be ia64_num_regs strings in
148 static char *ia64_register_names
[] =
149 { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
150 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
151 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
152 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
153 "", "", "", "", "", "", "", "",
154 "", "", "", "", "", "", "", "",
155 "", "", "", "", "", "", "", "",
156 "", "", "", "", "", "", "", "",
157 "", "", "", "", "", "", "", "",
158 "", "", "", "", "", "", "", "",
159 "", "", "", "", "", "", "", "",
160 "", "", "", "", "", "", "", "",
161 "", "", "", "", "", "", "", "",
162 "", "", "", "", "", "", "", "",
163 "", "", "", "", "", "", "", "",
164 "", "", "", "", "", "", "", "",
166 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
167 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
168 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
169 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
170 "f32", "f33", "f34", "f35", "f36", "f37", "f38", "f39",
171 "f40", "f41", "f42", "f43", "f44", "f45", "f46", "f47",
172 "f48", "f49", "f50", "f51", "f52", "f53", "f54", "f55",
173 "f56", "f57", "f58", "f59", "f60", "f61", "f62", "f63",
174 "f64", "f65", "f66", "f67", "f68", "f69", "f70", "f71",
175 "f72", "f73", "f74", "f75", "f76", "f77", "f78", "f79",
176 "f80", "f81", "f82", "f83", "f84", "f85", "f86", "f87",
177 "f88", "f89", "f90", "f91", "f92", "f93", "f94", "f95",
178 "f96", "f97", "f98", "f99", "f100", "f101", "f102", "f103",
179 "f104", "f105", "f106", "f107", "f108", "f109", "f110", "f111",
180 "f112", "f113", "f114", "f115", "f116", "f117", "f118", "f119",
181 "f120", "f121", "f122", "f123", "f124", "f125", "f126", "f127",
183 "", "", "", "", "", "", "", "",
184 "", "", "", "", "", "", "", "",
185 "", "", "", "", "", "", "", "",
186 "", "", "", "", "", "", "", "",
187 "", "", "", "", "", "", "", "",
188 "", "", "", "", "", "", "", "",
189 "", "", "", "", "", "", "", "",
190 "", "", "", "", "", "", "", "",
192 "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7",
196 "pr", "ip", "psr", "cfm",
198 "kr0", "kr1", "kr2", "kr3", "kr4", "kr5", "kr6", "kr7",
199 "", "", "", "", "", "", "", "",
200 "rsc", "bsp", "bspstore", "rnat",
202 "eflag", "csd", "ssd", "cflg", "fsr", "fir", "fdr", "",
203 "ccv", "", "", "", "unat", "", "", "",
204 "fpsr", "", "", "", "itc",
205 "", "", "", "", "", "", "", "", "", "",
206 "", "", "", "", "", "", "", "", "",
208 "", "", "", "", "", "", "", "", "", "",
209 "", "", "", "", "", "", "", "", "", "",
210 "", "", "", "", "", "", "", "", "", "",
211 "", "", "", "", "", "", "", "", "", "",
212 "", "", "", "", "", "", "", "", "", "",
213 "", "", "", "", "", "", "", "", "", "",
215 "nat0", "nat1", "nat2", "nat3", "nat4", "nat5", "nat6", "nat7",
216 "nat8", "nat9", "nat10", "nat11", "nat12", "nat13", "nat14", "nat15",
217 "nat16", "nat17", "nat18", "nat19", "nat20", "nat21", "nat22", "nat23",
218 "nat24", "nat25", "nat26", "nat27", "nat28", "nat29", "nat30", "nat31",
219 "nat32", "nat33", "nat34", "nat35", "nat36", "nat37", "nat38", "nat39",
220 "nat40", "nat41", "nat42", "nat43", "nat44", "nat45", "nat46", "nat47",
221 "nat48", "nat49", "nat50", "nat51", "nat52", "nat53", "nat54", "nat55",
222 "nat56", "nat57", "nat58", "nat59", "nat60", "nat61", "nat62", "nat63",
223 "nat64", "nat65", "nat66", "nat67", "nat68", "nat69", "nat70", "nat71",
224 "nat72", "nat73", "nat74", "nat75", "nat76", "nat77", "nat78", "nat79",
225 "nat80", "nat81", "nat82", "nat83", "nat84", "nat85", "nat86", "nat87",
226 "nat88", "nat89", "nat90", "nat91", "nat92", "nat93", "nat94", "nat95",
227 "nat96", "nat97", "nat98", "nat99", "nat100","nat101","nat102","nat103",
228 "nat104","nat105","nat106","nat107","nat108","nat109","nat110","nat111",
229 "nat112","nat113","nat114","nat115","nat116","nat117","nat118","nat119",
230 "nat120","nat121","nat122","nat123","nat124","nat125","nat126","nat127",
234 "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39",
235 "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47",
236 "r48", "r49", "r50", "r51", "r52", "r53", "r54", "r55",
237 "r56", "r57", "r58", "r59", "r60", "r61", "r62", "r63",
238 "r64", "r65", "r66", "r67", "r68", "r69", "r70", "r71",
239 "r72", "r73", "r74", "r75", "r76", "r77", "r78", "r79",
240 "r80", "r81", "r82", "r83", "r84", "r85", "r86", "r87",
241 "r88", "r89", "r90", "r91", "r92", "r93", "r94", "r95",
242 "r96", "r97", "r98", "r99", "r100", "r101", "r102", "r103",
243 "r104", "r105", "r106", "r107", "r108", "r109", "r110", "r111",
244 "r112", "r113", "r114", "r115", "r116", "r117", "r118", "r119",
245 "r120", "r121", "r122", "r123", "r124", "r125", "r126", "r127",
247 "p0", "p1", "p2", "p3", "p4", "p5", "p6", "p7",
248 "p8", "p9", "p10", "p11", "p12", "p13", "p14", "p15",
249 "p16", "p17", "p18", "p19", "p20", "p21", "p22", "p23",
250 "p24", "p25", "p26", "p27", "p28", "p29", "p30", "p31",
251 "p32", "p33", "p34", "p35", "p36", "p37", "p38", "p39",
252 "p40", "p41", "p42", "p43", "p44", "p45", "p46", "p47",
253 "p48", "p49", "p50", "p51", "p52", "p53", "p54", "p55",
254 "p56", "p57", "p58", "p59", "p60", "p61", "p62", "p63",
257 struct ia64_frame_cache
259 CORE_ADDR base
; /* frame pointer base for frame */
260 CORE_ADDR pc
; /* function start pc for frame */
261 CORE_ADDR saved_sp
; /* stack pointer for frame */
262 CORE_ADDR bsp
; /* points at r32 for the current frame */
263 CORE_ADDR cfm
; /* cfm value for current frame */
264 CORE_ADDR prev_cfm
; /* cfm value for previous frame */
266 int sof
; /* Size of frame (decoded from cfm value). */
267 int sol
; /* Size of locals (decoded from cfm value). */
268 int sor
; /* Number of rotating registers (decoded from
270 CORE_ADDR after_prologue
;
271 /* Address of first instruction after the last
272 prologue instruction; Note that there may
273 be instructions from the function's body
274 intermingled with the prologue. */
275 int mem_stack_frame_size
;
276 /* Size of the memory stack frame (may be zero),
277 or -1 if it has not been determined yet. */
278 int fp_reg
; /* Register number (if any) used a frame pointer
279 for this frame. 0 if no register is being used
280 as the frame pointer. */
282 /* Saved registers. */
283 CORE_ADDR saved_regs
[NUM_IA64_RAW_REGS
];
288 floatformat_valid (const struct floatformat
*fmt
, const void *from
)
293 static const struct floatformat floatformat_ia64_ext_little
=
295 floatformat_little
, 82, 0, 1, 17, 65535, 0x1ffff, 18, 64,
296 floatformat_intbit_yes
, "floatformat_ia64_ext_little", floatformat_valid
, NULL
299 static const struct floatformat floatformat_ia64_ext_big
=
301 floatformat_big
, 82, 46, 47, 17, 65535, 0x1ffff, 64, 64,
302 floatformat_intbit_yes
, "floatformat_ia64_ext_big", floatformat_valid
305 static const struct floatformat
*floatformats_ia64_ext
[2] =
307 &floatformat_ia64_ext_big
,
308 &floatformat_ia64_ext_little
312 ia64_ext_type (struct gdbarch
*gdbarch
)
314 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
316 if (!tdep
->ia64_ext_type
)
318 = arch_float_type (gdbarch
, 128, "builtin_type_ia64_ext",
319 floatformats_ia64_ext
);
321 return tdep
->ia64_ext_type
;
325 ia64_register_reggroup_p (struct gdbarch
*gdbarch
, int regnum
,
326 struct reggroup
*group
)
331 if (group
== all_reggroup
)
333 vector_p
= TYPE_VECTOR (register_type (gdbarch
, regnum
));
334 float_p
= TYPE_CODE (register_type (gdbarch
, regnum
)) == TYPE_CODE_FLT
;
335 raw_p
= regnum
< NUM_IA64_RAW_REGS
;
336 if (group
== float_reggroup
)
338 if (group
== vector_reggroup
)
340 if (group
== general_reggroup
)
341 return (!vector_p
&& !float_p
);
342 if (group
== save_reggroup
|| group
== restore_reggroup
)
348 ia64_register_name (struct gdbarch
*gdbarch
, int reg
)
350 return ia64_register_names
[reg
];
354 ia64_register_type (struct gdbarch
*arch
, int reg
)
356 if (reg
>= IA64_FR0_REGNUM
&& reg
<= IA64_FR127_REGNUM
)
357 return ia64_ext_type (arch
);
359 return builtin_type (arch
)->builtin_long
;
363 ia64_dwarf_reg_to_regnum (struct gdbarch
*gdbarch
, int reg
)
365 if (reg
>= IA64_GR32_REGNUM
&& reg
<= IA64_GR127_REGNUM
)
366 return V32_REGNUM
+ (reg
- IA64_GR32_REGNUM
);
371 /* Extract ``len'' bits from an instruction bundle starting at
375 extract_bit_field (const char *bundle
, int from
, int len
)
377 long long result
= 0LL;
379 int from_byte
= from
/ 8;
380 int to_byte
= to
/ 8;
381 unsigned char *b
= (unsigned char *) bundle
;
387 if (from_byte
== to_byte
)
388 c
= ((unsigned char) (c
<< (8 - to
% 8))) >> (8 - to
% 8);
389 result
= c
>> (from
% 8);
390 lshift
= 8 - (from
% 8);
392 for (i
= from_byte
+1; i
< to_byte
; i
++)
394 result
|= ((long long) b
[i
]) << lshift
;
398 if (from_byte
< to_byte
&& (to
% 8 != 0))
401 c
= ((unsigned char) (c
<< (8 - to
% 8))) >> (8 - to
% 8);
402 result
|= ((long long) c
) << lshift
;
408 /* Replace the specified bits in an instruction bundle. */
411 replace_bit_field (char *bundle
, long long val
, int from
, int len
)
414 int from_byte
= from
/ 8;
415 int to_byte
= to
/ 8;
416 unsigned char *b
= (unsigned char *) bundle
;
419 if (from_byte
== to_byte
)
421 unsigned char left
, right
;
423 left
= (c
>> (to
% 8)) << (to
% 8);
424 right
= ((unsigned char) (c
<< (8 - from
% 8))) >> (8 - from
% 8);
425 c
= (unsigned char) (val
& 0xff);
426 c
= (unsigned char) (c
<< (from
% 8 + 8 - to
% 8)) >> (8 - to
% 8);
434 c
= ((unsigned char) (c
<< (8 - from
% 8))) >> (8 - from
% 8);
435 c
= c
| (val
<< (from
% 8));
437 val
>>= 8 - from
% 8;
439 for (i
= from_byte
+1; i
< to_byte
; i
++)
448 unsigned char cv
= (unsigned char) val
;
450 c
= c
>> (to
% 8) << (to
% 8);
451 c
|= ((unsigned char) (cv
<< (8 - to
% 8))) >> (8 - to
% 8);
457 /* Return the contents of slot N (for N = 0, 1, or 2) in
458 and instruction bundle. */
461 slotN_contents (char *bundle
, int slotnum
)
463 return extract_bit_field (bundle
, 5+41*slotnum
, 41);
466 /* Store an instruction in an instruction bundle. */
469 replace_slotN_contents (char *bundle
, long long instr
, int slotnum
)
471 replace_bit_field (bundle
, instr
, 5+41*slotnum
, 41);
474 static const enum instruction_type template_encoding_table
[32][3] =
476 { M
, I
, I
}, /* 00 */
477 { M
, I
, I
}, /* 01 */
478 { M
, I
, I
}, /* 02 */
479 { M
, I
, I
}, /* 03 */
480 { M
, L
, X
}, /* 04 */
481 { M
, L
, X
}, /* 05 */
482 { undefined
, undefined
, undefined
}, /* 06 */
483 { undefined
, undefined
, undefined
}, /* 07 */
484 { M
, M
, I
}, /* 08 */
485 { M
, M
, I
}, /* 09 */
486 { M
, M
, I
}, /* 0A */
487 { M
, M
, I
}, /* 0B */
488 { M
, F
, I
}, /* 0C */
489 { M
, F
, I
}, /* 0D */
490 { M
, M
, F
}, /* 0E */
491 { M
, M
, F
}, /* 0F */
492 { M
, I
, B
}, /* 10 */
493 { M
, I
, B
}, /* 11 */
494 { M
, B
, B
}, /* 12 */
495 { M
, B
, B
}, /* 13 */
496 { undefined
, undefined
, undefined
}, /* 14 */
497 { undefined
, undefined
, undefined
}, /* 15 */
498 { B
, B
, B
}, /* 16 */
499 { B
, B
, B
}, /* 17 */
500 { M
, M
, B
}, /* 18 */
501 { M
, M
, B
}, /* 19 */
502 { undefined
, undefined
, undefined
}, /* 1A */
503 { undefined
, undefined
, undefined
}, /* 1B */
504 { M
, F
, B
}, /* 1C */
505 { M
, F
, B
}, /* 1D */
506 { undefined
, undefined
, undefined
}, /* 1E */
507 { undefined
, undefined
, undefined
}, /* 1F */
510 /* Fetch and (partially) decode an instruction at ADDR and return the
511 address of the next instruction to fetch. */
514 fetch_instruction (CORE_ADDR addr
, instruction_type
*it
, long long *instr
)
516 char bundle
[BUNDLE_LEN
];
517 int slotnum
= (int) (addr
& 0x0f) / SLOT_MULTIPLIER
;
521 /* Warn about slot numbers greater than 2. We used to generate
522 an error here on the assumption that the user entered an invalid
523 address. But, sometimes GDB itself requests an invalid address.
524 This can (easily) happen when execution stops in a function for
525 which there are no symbols. The prologue scanner will attempt to
526 find the beginning of the function - if the nearest symbol
527 happens to not be aligned on a bundle boundary (16 bytes), the
528 resulting starting address will cause GDB to think that the slot
531 So we warn about it and set the slot number to zero. It is
532 not necessarily a fatal condition, particularly if debugging
533 at the assembly language level. */
536 warning (_("Can't fetch instructions for slot numbers greater than 2.\n"
537 "Using slot 0 instead"));
543 val
= target_read_memory (addr
, bundle
, BUNDLE_LEN
);
548 *instr
= slotN_contents (bundle
, slotnum
);
549 template = extract_bit_field (bundle
, 0, 5);
550 *it
= template_encoding_table
[(int)template][slotnum
];
552 if (slotnum
== 2 || (slotnum
== 1 && *it
== L
))
555 addr
+= (slotnum
+ 1) * SLOT_MULTIPLIER
;
560 /* There are 5 different break instructions (break.i, break.b,
561 break.m, break.f, and break.x), but they all have the same
562 encoding. (The five bit template in the low five bits of the
563 instruction bundle distinguishes one from another.)
565 The runtime architecture manual specifies that break instructions
566 used for debugging purposes must have the upper two bits of the 21
567 bit immediate set to a 0 and a 1 respectively. A breakpoint
568 instruction encodes the most significant bit of its 21 bit
569 immediate at bit 36 of the 41 bit instruction. The penultimate msb
570 is at bit 25 which leads to the pattern below.
572 Originally, I had this set up to do, e.g, a "break.i 0x80000" But
573 it turns out that 0x80000 was used as the syscall break in the early
574 simulators. So I changed the pattern slightly to do "break.i 0x080001"
575 instead. But that didn't work either (I later found out that this
576 pattern was used by the simulator that I was using.) So I ended up
577 using the pattern seen below.
579 SHADOW_CONTENTS has byte-based addressing (PLACED_ADDRESS and SHADOW_LEN)
580 while we need bit-based addressing as the instructions length is 41 bits and
581 we must not modify/corrupt the adjacent slots in the same bundle.
582 Fortunately we may store larger memory incl. the adjacent bits with the
583 original memory content (not the possibly already stored breakpoints there).
584 We need to be careful in ia64_memory_remove_breakpoint to always restore
585 only the specific bits of this instruction ignoring any adjacent stored
588 We use the original addressing with the low nibble in the range <0..2> which
589 gets incorrectly interpreted by generic non-ia64 breakpoint_restore_shadows
590 as the direct byte offset of SHADOW_CONTENTS. We store whole BUNDLE_LEN
591 bytes just without these two possibly skipped bytes to not to exceed to the
594 If we would like to store the whole bundle to SHADOW_CONTENTS we would have
595 to store already the base address (`address & ~0x0f') into PLACED_ADDRESS.
596 In such case there is no other place where to store
597 SLOTNUM (`adress & 0x0f', value in the range <0..2>). We need to know
598 SLOTNUM in ia64_memory_remove_breakpoint.
600 There is one special case where we need to be extra careful:
601 L-X instructions, which are instructions that occupy 2 slots
602 (The L part is always in slot 1, and the X part is always in
603 slot 2). We must refuse to insert breakpoints for an address
604 that points at slot 2 of a bundle where an L-X instruction is
605 present, since there is logically no instruction at that address.
606 However, to make things more interesting, the opcode of L-X
607 instructions is located in slot 2. This means that, to insert
608 a breakpoint at an address that points to slot 1, we actually
609 need to write the breakpoint in slot 2! Slot 1 is actually
610 the extended operand, so writing the breakpoint there would not
611 have the desired effect. Another side-effect of this issue
612 is that we need to make sure that the shadow contents buffer
613 does save byte 15 of our instruction bundle (this is the tail
614 end of slot 2, which wouldn't be saved if we were to insert
615 the breakpoint in slot 1).
617 ia64 16-byte bundle layout:
618 | 5 bits | slot 0 with 41 bits | slot 1 with 41 bits | slot 2 with 41 bits |
620 The current addressing used by the code below:
621 original PC placed_address placed_size required covered
622 == bp_tgt->shadow_len reqd \subset covered
623 0xABCDE0 0xABCDE0 0x10 <0x0...0x5> <0x0..0xF>
624 0xABCDE1 0xABCDE1 0xF <0x5...0xA> <0x1..0xF>
625 0xABCDE2 0xABCDE2 0xE <0xA...0xF> <0x2..0xF>
627 L-X instructions are treated a little specially, as explained above:
628 0xABCDE1 0xABCDE1 0xF <0xA...0xF> <0x1..0xF>
630 `objdump -d' and some other tools show a bit unjustified offsets:
631 original PC byte where starts the instruction objdump offset
632 0xABCDE0 0xABCDE0 0xABCDE0
633 0xABCDE1 0xABCDE5 0xABCDE6
634 0xABCDE2 0xABCDEA 0xABCDEC
637 #define IA64_BREAKPOINT 0x00003333300LL
640 ia64_memory_insert_breakpoint (struct gdbarch
*gdbarch
,
641 struct bp_target_info
*bp_tgt
)
643 CORE_ADDR addr
= bp_tgt
->placed_address
;
644 gdb_byte bundle
[BUNDLE_LEN
];
645 int slotnum
= (int) (addr
& 0x0f) / SLOT_MULTIPLIER
, shadow_slotnum
;
646 long long instr_breakpoint
;
649 struct cleanup
*cleanup
;
652 error (_("Can't insert breakpoint for slot numbers greater than 2."));
656 /* Enable the automatic memory restoration from breakpoints while
657 we read our instruction bundle for the purpose of SHADOW_CONTENTS.
658 Otherwise, we could possibly store into the shadow parts of the adjacent
659 placed breakpoints. It is due to our SHADOW_CONTENTS overlapping the real
660 breakpoint instruction bits region. */
661 cleanup
= make_show_memory_breakpoints_cleanup (0);
662 val
= target_read_memory (addr
, bundle
, BUNDLE_LEN
);
665 do_cleanups (cleanup
);
669 /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
670 for addressing the SHADOW_CONTENTS placement. */
671 shadow_slotnum
= slotnum
;
673 /* Always cover the last byte of the bundle in case we are inserting
674 a breakpoint on an L-X instruction. */
675 bp_tgt
->shadow_len
= BUNDLE_LEN
- shadow_slotnum
;
677 template = extract_bit_field (bundle
, 0, 5);
678 if (template_encoding_table
[template][slotnum
] == X
)
680 /* X unit types can only be used in slot 2, and are actually
681 part of a 2-slot L-X instruction. We cannot break at this
682 address, as this is the second half of an instruction that
683 lives in slot 1 of that bundle. */
684 gdb_assert (slotnum
== 2);
685 error (_("Can't insert breakpoint for non-existing slot X"));
687 if (template_encoding_table
[template][slotnum
] == L
)
689 /* L unit types can only be used in slot 1. But the associated
690 opcode for that instruction is in slot 2, so bump the slot number
692 gdb_assert (slotnum
== 1);
696 /* Store the whole bundle, except for the initial skipped bytes by the slot
697 number interpreted as bytes offset in PLACED_ADDRESS. */
698 memcpy (bp_tgt
->shadow_contents
, bundle
+ shadow_slotnum
,
701 /* Re-read the same bundle as above except that, this time, read it in order
702 to compute the new bundle inside which we will be inserting the
703 breakpoint. Therefore, disable the automatic memory restoration from
704 breakpoints while we read our instruction bundle. Otherwise, the general
705 restoration mechanism kicks in and we would possibly remove parts of the
706 adjacent placed breakpoints. It is due to our SHADOW_CONTENTS overlapping
707 the real breakpoint instruction bits region. */
708 make_show_memory_breakpoints_cleanup (1);
709 val
= target_read_memory (addr
, bundle
, BUNDLE_LEN
);
712 do_cleanups (cleanup
);
716 /* Breakpoints already present in the code will get deteacted and not get
717 reinserted by bp_loc_is_permanent. Multiple breakpoints at the same
718 location cannot induce the internal error as they are optimized into
719 a single instance by update_global_location_list. */
720 instr_breakpoint
= slotN_contents (bundle
, slotnum
);
721 if (instr_breakpoint
== IA64_BREAKPOINT
)
722 internal_error (__FILE__
, __LINE__
,
723 _("Address %s already contains a breakpoint."),
724 paddress (gdbarch
, bp_tgt
->placed_address
));
725 replace_slotN_contents (bundle
, IA64_BREAKPOINT
, slotnum
);
727 bp_tgt
->placed_size
= bp_tgt
->shadow_len
;
729 val
= target_write_memory (addr
+ shadow_slotnum
, bundle
+ shadow_slotnum
,
732 do_cleanups (cleanup
);
737 ia64_memory_remove_breakpoint (struct gdbarch
*gdbarch
,
738 struct bp_target_info
*bp_tgt
)
740 CORE_ADDR addr
= bp_tgt
->placed_address
;
741 gdb_byte bundle_mem
[BUNDLE_LEN
], bundle_saved
[BUNDLE_LEN
];
742 int slotnum
= (addr
& 0x0f) / SLOT_MULTIPLIER
, shadow_slotnum
;
743 long long instr_breakpoint
, instr_saved
;
746 struct cleanup
*cleanup
;
750 /* Disable the automatic memory restoration from breakpoints while
751 we read our instruction bundle. Otherwise, the general restoration
752 mechanism kicks in and we would possibly remove parts of the adjacent
753 placed breakpoints. It is due to our SHADOW_CONTENTS overlapping the real
754 breakpoint instruction bits region. */
755 cleanup
= make_show_memory_breakpoints_cleanup (1);
756 val
= target_read_memory (addr
, bundle_mem
, BUNDLE_LEN
);
759 do_cleanups (cleanup
);
763 /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
764 for addressing the SHADOW_CONTENTS placement. */
765 shadow_slotnum
= slotnum
;
767 template = extract_bit_field (bundle_mem
, 0, 5);
768 if (template_encoding_table
[template][slotnum
] == X
)
770 /* X unit types can only be used in slot 2, and are actually
771 part of a 2-slot L-X instruction. We refuse to insert
772 breakpoints at this address, so there should be no reason
773 for us attempting to remove one there, except if the program's
774 code somehow got modified in memory. */
775 gdb_assert (slotnum
== 2);
776 warning (_("Cannot remove breakpoint at address %s from non-existing "
777 "X-type slot, memory has changed underneath"),
778 paddress (gdbarch
, bp_tgt
->placed_address
));
779 do_cleanups (cleanup
);
782 if (template_encoding_table
[template][slotnum
] == L
)
784 /* L unit types can only be used in slot 1. But the breakpoint
785 was actually saved using slot 2, so update the slot number
787 gdb_assert (slotnum
== 1);
791 gdb_assert (bp_tgt
->placed_size
== BUNDLE_LEN
- shadow_slotnum
);
792 gdb_assert (bp_tgt
->placed_size
== bp_tgt
->shadow_len
);
794 instr_breakpoint
= slotN_contents (bundle_mem
, slotnum
);
795 if (instr_breakpoint
!= IA64_BREAKPOINT
)
797 warning (_("Cannot remove breakpoint at address %s, "
798 "no break instruction at such address."),
799 paddress (gdbarch
, bp_tgt
->placed_address
));
800 do_cleanups (cleanup
);
804 /* Extract the original saved instruction from SLOTNUM normalizing its
805 bit-shift for INSTR_SAVED. */
806 memcpy (bundle_saved
, bundle_mem
, BUNDLE_LEN
);
807 memcpy (bundle_saved
+ shadow_slotnum
, bp_tgt
->shadow_contents
,
809 instr_saved
= slotN_contents (bundle_saved
, slotnum
);
811 /* In BUNDLE_MEM, be careful to modify only the bits belonging to SLOTNUM
812 and not any of the other ones that are stored in SHADOW_CONTENTS. */
813 replace_slotN_contents (bundle_mem
, instr_saved
, slotnum
);
814 val
= target_write_memory (addr
, bundle_mem
, BUNDLE_LEN
);
816 do_cleanups (cleanup
);
820 /* As gdbarch_breakpoint_from_pc ranges have byte granularity and ia64
821 instruction slots ranges are bit-granular (41 bits) we have to provide an
822 extended range as described for ia64_memory_insert_breakpoint. We also take
823 care of preserving the `break' instruction 21-bit (or 62-bit) parameter to
824 make a match for permanent breakpoints. */
826 static const gdb_byte
*
827 ia64_breakpoint_from_pc (struct gdbarch
*gdbarch
,
828 CORE_ADDR
*pcptr
, int *lenptr
)
830 CORE_ADDR addr
= *pcptr
;
831 static gdb_byte bundle
[BUNDLE_LEN
];
832 int slotnum
= (int) (*pcptr
& 0x0f) / SLOT_MULTIPLIER
, shadow_slotnum
;
833 long long instr_fetched
;
836 struct cleanup
*cleanup
;
839 error (_("Can't insert breakpoint for slot numbers greater than 2."));
843 /* Enable the automatic memory restoration from breakpoints while
844 we read our instruction bundle to match bp_loc_is_permanent. */
845 cleanup
= make_show_memory_breakpoints_cleanup (0);
846 val
= target_read_memory (addr
, bundle
, BUNDLE_LEN
);
847 do_cleanups (cleanup
);
849 /* The memory might be unreachable. This can happen, for instance,
850 when the user inserts a breakpoint at an invalid address. */
854 /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
855 for addressing the SHADOW_CONTENTS placement. */
856 shadow_slotnum
= slotnum
;
858 /* Cover always the last byte of the bundle for the L-X slot case. */
859 *lenptr
= BUNDLE_LEN
- shadow_slotnum
;
861 /* Check for L type instruction in slot 1, if present then bump up the slot
862 number to the slot 2. */
863 template = extract_bit_field (bundle
, 0, 5);
864 if (template_encoding_table
[template][slotnum
] == X
)
866 gdb_assert (slotnum
== 2);
867 error (_("Can't insert breakpoint for non-existing slot X"));
869 if (template_encoding_table
[template][slotnum
] == L
)
871 gdb_assert (slotnum
== 1);
875 /* A break instruction has its all its opcode bits cleared except for
876 the parameter value. For L+X slot pair we are at the X slot (slot 2) so
877 we should not touch the L slot - the upper 41 bits of the parameter. */
878 instr_fetched
= slotN_contents (bundle
, slotnum
);
879 instr_fetched
&= 0x1003ffffc0LL
;
880 replace_slotN_contents (bundle
, instr_fetched
, slotnum
);
882 return bundle
+ shadow_slotnum
;
886 ia64_read_pc (struct regcache
*regcache
)
888 ULONGEST psr_value
, pc_value
;
891 regcache_cooked_read_unsigned (regcache
, IA64_PSR_REGNUM
, &psr_value
);
892 regcache_cooked_read_unsigned (regcache
, IA64_IP_REGNUM
, &pc_value
);
893 slot_num
= (psr_value
>> 41) & 3;
895 return pc_value
| (slot_num
* SLOT_MULTIPLIER
);
899 ia64_write_pc (struct regcache
*regcache
, CORE_ADDR new_pc
)
901 int slot_num
= (int) (new_pc
& 0xf) / SLOT_MULTIPLIER
;
904 regcache_cooked_read_unsigned (regcache
, IA64_PSR_REGNUM
, &psr_value
);
905 psr_value
&= ~(3LL << 41);
906 psr_value
|= (ULONGEST
)(slot_num
& 0x3) << 41;
910 regcache_cooked_write_unsigned (regcache
, IA64_PSR_REGNUM
, psr_value
);
911 regcache_cooked_write_unsigned (regcache
, IA64_IP_REGNUM
, new_pc
);
914 #define IS_NaT_COLLECTION_ADDR(addr) ((((addr) >> 3) & 0x3f) == 0x3f)
916 /* Returns the address of the slot that's NSLOTS slots away from
917 the address ADDR. NSLOTS may be positive or negative. */
919 rse_address_add(CORE_ADDR addr
, int nslots
)
922 int mandatory_nat_slots
= nslots
/ 63;
923 int direction
= nslots
< 0 ? -1 : 1;
925 new_addr
= addr
+ 8 * (nslots
+ mandatory_nat_slots
);
927 if ((new_addr
>> 9) != ((addr
+ 8 * 64 * mandatory_nat_slots
) >> 9))
928 new_addr
+= 8 * direction
;
930 if (IS_NaT_COLLECTION_ADDR(new_addr
))
931 new_addr
+= 8 * direction
;
937 ia64_pseudo_register_read (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
938 int regnum
, gdb_byte
*buf
)
940 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
942 if (regnum
>= V32_REGNUM
&& regnum
<= V127_REGNUM
)
944 #ifdef HAVE_LIBUNWIND_IA64_H
945 /* First try and use the libunwind special reg accessor,
946 otherwise fallback to standard logic. */
947 if (!libunwind_is_initialized ()
948 || libunwind_get_reg_special (gdbarch
, regcache
, regnum
, buf
) != 0)
951 /* The fallback position is to assume that r32-r127 are
952 found sequentially in memory starting at $bof. This
953 isn't always true, but without libunwind, this is the
958 regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, &bsp
);
959 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
961 /* The bsp points at the end of the register frame so we
962 subtract the size of frame from it to get start of
964 bsp
= rse_address_add (bsp
, -(cfm
& 0x7f));
966 if ((cfm
& 0x7f) > regnum
- V32_REGNUM
)
968 ULONGEST reg_addr
= rse_address_add (bsp
, (regnum
- V32_REGNUM
));
969 reg
= read_memory_integer ((CORE_ADDR
)reg_addr
, 8, byte_order
);
970 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
974 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
978 else if (IA64_NAT0_REGNUM
<= regnum
&& regnum
<= IA64_NAT31_REGNUM
)
982 regcache_cooked_read_unsigned (regcache
, IA64_UNAT_REGNUM
, &unat
);
983 unatN_val
= (unat
& (1LL << (regnum
- IA64_NAT0_REGNUM
))) != 0;
984 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
985 byte_order
, unatN_val
);
987 else if (IA64_NAT32_REGNUM
<= regnum
&& regnum
<= IA64_NAT127_REGNUM
)
989 ULONGEST natN_val
= 0;
992 CORE_ADDR gr_addr
= 0;
993 regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, &bsp
);
994 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
996 /* The bsp points at the end of the register frame so we
997 subtract the size of frame from it to get start of register frame. */
998 bsp
= rse_address_add (bsp
, -(cfm
& 0x7f));
1000 if ((cfm
& 0x7f) > regnum
- V32_REGNUM
)
1001 gr_addr
= rse_address_add (bsp
, (regnum
- V32_REGNUM
));
1005 /* Compute address of nat collection bits. */
1006 CORE_ADDR nat_addr
= gr_addr
| 0x1f8;
1007 CORE_ADDR nat_collection
;
1009 /* If our nat collection address is bigger than bsp, we have to get
1010 the nat collection from rnat. Otherwise, we fetch the nat
1011 collection from the computed address. */
1012 if (nat_addr
>= bsp
)
1013 regcache_cooked_read_unsigned (regcache
, IA64_RNAT_REGNUM
,
1016 nat_collection
= read_memory_integer (nat_addr
, 8, byte_order
);
1017 nat_bit
= (gr_addr
>> 3) & 0x3f;
1018 natN_val
= (nat_collection
>> nat_bit
) & 1;
1021 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
1022 byte_order
, natN_val
);
1024 else if (regnum
== VBOF_REGNUM
)
1026 /* A virtual register frame start is provided for user convenience.
1027 It can be calculated as the bsp - sof (sizeof frame). */
1031 regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, &bsp
);
1032 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
1034 /* The bsp points at the end of the register frame so we
1035 subtract the size of frame from it to get beginning of frame. */
1036 vbsp
= rse_address_add (bsp
, -(cfm
& 0x7f));
1037 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
1040 else if (VP0_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1046 regcache_cooked_read_unsigned (regcache
, IA64_PR_REGNUM
, &pr
);
1047 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
1049 if (VP16_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1051 /* Fetch predicate register rename base from current frame
1052 marker for this frame. */
1053 int rrb_pr
= (cfm
>> 32) & 0x3f;
1055 /* Adjust the register number to account for register rotation. */
1056 regnum
= VP16_REGNUM
1057 + ((regnum
- VP16_REGNUM
) + rrb_pr
) % 48;
1059 prN_val
= (pr
& (1LL << (regnum
- VP0_REGNUM
))) != 0;
1060 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
1061 byte_order
, prN_val
);
1064 memset (buf
, 0, register_size (gdbarch
, regnum
));
1068 ia64_pseudo_register_write (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
1069 int regnum
, const gdb_byte
*buf
)
1071 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1073 if (regnum
>= V32_REGNUM
&& regnum
<= V127_REGNUM
)
1078 regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, &bsp
);
1079 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
1081 bsp
= rse_address_add (bsp
, -(cfm
& 0x7f));
1083 if ((cfm
& 0x7f) > regnum
- V32_REGNUM
)
1085 ULONGEST reg_addr
= rse_address_add (bsp
, (regnum
- V32_REGNUM
));
1086 write_memory (reg_addr
, (void *) buf
, 8);
1089 else if (IA64_NAT0_REGNUM
<= regnum
&& regnum
<= IA64_NAT31_REGNUM
)
1091 ULONGEST unatN_val
, unat
, unatN_mask
;
1092 regcache_cooked_read_unsigned (regcache
, IA64_UNAT_REGNUM
, &unat
);
1093 unatN_val
= extract_unsigned_integer (buf
, register_size (gdbarch
,
1096 unatN_mask
= (1LL << (regnum
- IA64_NAT0_REGNUM
));
1098 unat
&= ~unatN_mask
;
1099 else if (unatN_val
== 1)
1101 regcache_cooked_write_unsigned (regcache
, IA64_UNAT_REGNUM
, unat
);
1103 else if (IA64_NAT32_REGNUM
<= regnum
&& regnum
<= IA64_NAT127_REGNUM
)
1108 CORE_ADDR gr_addr
= 0;
1109 regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, &bsp
);
1110 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
1112 /* The bsp points at the end of the register frame so we
1113 subtract the size of frame from it to get start of register frame. */
1114 bsp
= rse_address_add (bsp
, -(cfm
& 0x7f));
1116 if ((cfm
& 0x7f) > regnum
- V32_REGNUM
)
1117 gr_addr
= rse_address_add (bsp
, (regnum
- V32_REGNUM
));
1119 natN_val
= extract_unsigned_integer (buf
, register_size (gdbarch
,
1123 if (gr_addr
!= 0 && (natN_val
== 0 || natN_val
== 1))
1125 /* Compute address of nat collection bits. */
1126 CORE_ADDR nat_addr
= gr_addr
| 0x1f8;
1127 CORE_ADDR nat_collection
;
1128 int natN_bit
= (gr_addr
>> 3) & 0x3f;
1129 ULONGEST natN_mask
= (1LL << natN_bit
);
1130 /* If our nat collection address is bigger than bsp, we have to get
1131 the nat collection from rnat. Otherwise, we fetch the nat
1132 collection from the computed address. */
1133 if (nat_addr
>= bsp
)
1135 regcache_cooked_read_unsigned (regcache
, IA64_RNAT_REGNUM
,
1138 nat_collection
|= natN_mask
;
1140 nat_collection
&= ~natN_mask
;
1141 regcache_cooked_write_unsigned (regcache
, IA64_RNAT_REGNUM
,
1147 nat_collection
= read_memory_integer (nat_addr
, 8, byte_order
);
1149 nat_collection
|= natN_mask
;
1151 nat_collection
&= ~natN_mask
;
1152 store_unsigned_integer (nat_buf
, register_size (gdbarch
, regnum
),
1153 byte_order
, nat_collection
);
1154 write_memory (nat_addr
, nat_buf
, 8);
1158 else if (VP0_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1165 regcache_cooked_read_unsigned (regcache
, IA64_PR_REGNUM
, &pr
);
1166 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
1168 if (VP16_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1170 /* Fetch predicate register rename base from current frame
1171 marker for this frame. */
1172 int rrb_pr
= (cfm
>> 32) & 0x3f;
1174 /* Adjust the register number to account for register rotation. */
1175 regnum
= VP16_REGNUM
1176 + ((regnum
- VP16_REGNUM
) + rrb_pr
) % 48;
1178 prN_val
= extract_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
1180 prN_mask
= (1LL << (regnum
- VP0_REGNUM
));
1183 else if (prN_val
== 1)
1185 regcache_cooked_write_unsigned (regcache
, IA64_PR_REGNUM
, pr
);
1189 /* The ia64 needs to convert between various ieee floating-point formats
1190 and the special ia64 floating point register format. */
1193 ia64_convert_register_p (struct gdbarch
*gdbarch
, int regno
, struct type
*type
)
1195 return (regno
>= IA64_FR0_REGNUM
&& regno
<= IA64_FR127_REGNUM
1196 && type
!= ia64_ext_type (gdbarch
));
1200 ia64_register_to_value (struct frame_info
*frame
, int regnum
,
1201 struct type
*valtype
, gdb_byte
*out
)
1203 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
1204 char in
[MAX_REGISTER_SIZE
];
1205 frame_register_read (frame
, regnum
, in
);
1206 convert_typed_floating (in
, ia64_ext_type (gdbarch
), out
, valtype
);
1210 ia64_value_to_register (struct frame_info
*frame
, int regnum
,
1211 struct type
*valtype
, const gdb_byte
*in
)
1213 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
1214 char out
[MAX_REGISTER_SIZE
];
1215 convert_typed_floating (in
, valtype
, out
, ia64_ext_type (gdbarch
));
1216 put_frame_register (frame
, regnum
, out
);
1220 /* Limit the number of skipped non-prologue instructions since examining
1221 of the prologue is expensive. */
1222 static int max_skip_non_prologue_insns
= 40;
1224 /* Given PC representing the starting address of a function, and
1225 LIM_PC which is the (sloppy) limit to which to scan when looking
1226 for a prologue, attempt to further refine this limit by using
1227 the line data in the symbol table. If successful, a better guess
1228 on where the prologue ends is returned, otherwise the previous
1229 value of lim_pc is returned. TRUST_LIMIT is a pointer to a flag
1230 which will be set to indicate whether the returned limit may be
1231 used with no further scanning in the event that the function is
1234 /* FIXME: cagney/2004-02-14: This function and logic have largely been
1235 superseded by skip_prologue_using_sal. */
1238 refine_prologue_limit (CORE_ADDR pc
, CORE_ADDR lim_pc
, int *trust_limit
)
1240 struct symtab_and_line prologue_sal
;
1241 CORE_ADDR start_pc
= pc
;
1244 /* The prologue can not possibly go past the function end itself,
1245 so we can already adjust LIM_PC accordingly. */
1246 if (find_pc_partial_function (pc
, NULL
, NULL
, &end_pc
) && end_pc
< lim_pc
)
1249 /* Start off not trusting the limit. */
1252 prologue_sal
= find_pc_line (pc
, 0);
1253 if (prologue_sal
.line
!= 0)
1256 CORE_ADDR addr
= prologue_sal
.end
;
1258 /* Handle the case in which compiler's optimizer/scheduler
1259 has moved instructions into the prologue. We scan ahead
1260 in the function looking for address ranges whose corresponding
1261 line number is less than or equal to the first one that we
1262 found for the function. (It can be less than when the
1263 scheduler puts a body instruction before the first prologue
1265 for (i
= 2 * max_skip_non_prologue_insns
;
1266 i
> 0 && (lim_pc
== 0 || addr
< lim_pc
);
1269 struct symtab_and_line sal
;
1271 sal
= find_pc_line (addr
, 0);
1274 if (sal
.line
<= prologue_sal
.line
1275 && sal
.symtab
== prologue_sal
.symtab
)
1282 if (lim_pc
== 0 || prologue_sal
.end
< lim_pc
)
1284 lim_pc
= prologue_sal
.end
;
1285 if (start_pc
== get_pc_function_start (lim_pc
))
1292 #define isScratch(_regnum_) ((_regnum_) == 2 || (_regnum_) == 3 \
1293 || (8 <= (_regnum_) && (_regnum_) <= 11) \
1294 || (14 <= (_regnum_) && (_regnum_) <= 31))
1295 #define imm9(_instr_) \
1296 ( ((((_instr_) & 0x01000000000LL) ? -1 : 0) << 8) \
1297 | (((_instr_) & 0x00008000000LL) >> 20) \
1298 | (((_instr_) & 0x00000001fc0LL) >> 6))
1300 /* Allocate and initialize a frame cache. */
1302 static struct ia64_frame_cache
*
1303 ia64_alloc_frame_cache (void)
1305 struct ia64_frame_cache
*cache
;
1308 cache
= FRAME_OBSTACK_ZALLOC (struct ia64_frame_cache
);
1314 cache
->prev_cfm
= 0;
1320 cache
->frameless
= 1;
1322 for (i
= 0; i
< NUM_IA64_RAW_REGS
; i
++)
1323 cache
->saved_regs
[i
] = 0;
1329 examine_prologue (CORE_ADDR pc
, CORE_ADDR lim_pc
,
1330 struct frame_info
*this_frame
,
1331 struct ia64_frame_cache
*cache
)
1334 CORE_ADDR last_prologue_pc
= pc
;
1335 instruction_type it
;
1340 int unat_save_reg
= 0;
1341 int pr_save_reg
= 0;
1342 int mem_stack_frame_size
= 0;
1344 CORE_ADDR spill_addr
= 0;
1347 char reg_contents
[256];
1353 CORE_ADDR bof
, sor
, sol
, sof
, cfm
, rrb_gr
;
1355 memset (instores
, 0, sizeof instores
);
1356 memset (infpstores
, 0, sizeof infpstores
);
1357 memset (reg_contents
, 0, sizeof reg_contents
);
1359 if (cache
->after_prologue
!= 0
1360 && cache
->after_prologue
<= lim_pc
)
1361 return cache
->after_prologue
;
1363 lim_pc
= refine_prologue_limit (pc
, lim_pc
, &trust_limit
);
1364 next_pc
= fetch_instruction (pc
, &it
, &instr
);
1366 /* We want to check if we have a recognizable function start before we
1367 look ahead for a prologue. */
1368 if (pc
< lim_pc
&& next_pc
1369 && it
== M
&& ((instr
& 0x1ee0000003fLL
) == 0x02c00000000LL
))
1371 /* alloc - start of a regular function. */
1372 int sor
= (int) ((instr
& 0x00078000000LL
) >> 27);
1373 int sol
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1374 int sof
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1375 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1377 /* Verify that the current cfm matches what we think is the
1378 function start. If we have somehow jumped within a function,
1379 we do not want to interpret the prologue and calculate the
1380 addresses of various registers such as the return address.
1381 We will instead treat the frame as frameless. */
1383 (sof
== (cache
->cfm
& 0x7f) &&
1384 sol
== ((cache
->cfm
>> 7) & 0x7f)))
1388 last_prologue_pc
= next_pc
;
1393 /* Look for a leaf routine. */
1394 if (pc
< lim_pc
&& next_pc
1395 && (it
== I
|| it
== M
)
1396 && ((instr
& 0x1ee00000000LL
) == 0x10800000000LL
))
1398 /* adds rN = imm14, rM (or mov rN, rM when imm14 is 0) */
1399 int imm
= (int) ((((instr
& 0x01000000000LL
) ? -1 : 0) << 13)
1400 | ((instr
& 0x001f8000000LL
) >> 20)
1401 | ((instr
& 0x000000fe000LL
) >> 13));
1402 int rM
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1403 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1404 int qp
= (int) (instr
& 0x0000000003fLL
);
1405 if (qp
== 0 && rN
== 2 && imm
== 0 && rM
== 12 && fp_reg
== 0)
1407 /* mov r2, r12 - beginning of leaf routine. */
1409 last_prologue_pc
= next_pc
;
1413 /* If we don't recognize a regular function or leaf routine, we are
1419 last_prologue_pc
= lim_pc
;
1423 /* Loop, looking for prologue instructions, keeping track of
1424 where preserved registers were spilled. */
1427 next_pc
= fetch_instruction (pc
, &it
, &instr
);
1431 if (it
== B
&& ((instr
& 0x1e1f800003fLL
) != 0x04000000000LL
))
1433 /* Exit loop upon hitting a non-nop branch instruction. */
1438 else if (((instr
& 0x3fLL
) != 0LL) &&
1439 (frameless
|| ret_reg
!= 0))
1441 /* Exit loop upon hitting a predicated instruction if
1442 we already have the return register or if we are frameless. */
1447 else if (it
== I
&& ((instr
& 0x1eff8000000LL
) == 0x00188000000LL
))
1450 int b2
= (int) ((instr
& 0x0000000e000LL
) >> 13);
1451 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1452 int qp
= (int) (instr
& 0x0000000003f);
1454 if (qp
== 0 && b2
== 0 && rN
>= 32 && ret_reg
== 0)
1457 last_prologue_pc
= next_pc
;
1460 else if ((it
== I
|| it
== M
)
1461 && ((instr
& 0x1ee00000000LL
) == 0x10800000000LL
))
1463 /* adds rN = imm14, rM (or mov rN, rM when imm14 is 0) */
1464 int imm
= (int) ((((instr
& 0x01000000000LL
) ? -1 : 0) << 13)
1465 | ((instr
& 0x001f8000000LL
) >> 20)
1466 | ((instr
& 0x000000fe000LL
) >> 13));
1467 int rM
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1468 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1469 int qp
= (int) (instr
& 0x0000000003fLL
);
1471 if (qp
== 0 && rN
>= 32 && imm
== 0 && rM
== 12 && fp_reg
== 0)
1475 last_prologue_pc
= next_pc
;
1477 else if (qp
== 0 && rN
== 12 && rM
== 12)
1479 /* adds r12, -mem_stack_frame_size, r12 */
1480 mem_stack_frame_size
-= imm
;
1481 last_prologue_pc
= next_pc
;
1483 else if (qp
== 0 && rN
== 2
1484 && ((rM
== fp_reg
&& fp_reg
!= 0) || rM
== 12))
1486 char buf
[MAX_REGISTER_SIZE
];
1487 CORE_ADDR saved_sp
= 0;
1488 /* adds r2, spilloffset, rFramePointer
1490 adds r2, spilloffset, r12
1492 Get ready for stf.spill or st8.spill instructions.
1493 The address to start spilling at is loaded into r2.
1494 FIXME: Why r2? That's what gcc currently uses; it
1495 could well be different for other compilers. */
1497 /* Hmm... whether or not this will work will depend on
1498 where the pc is. If it's still early in the prologue
1499 this'll be wrong. FIXME */
1502 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1503 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1504 get_frame_register (this_frame
, sp_regnum
, buf
);
1505 saved_sp
= extract_unsigned_integer (buf
, 8, byte_order
);
1507 spill_addr
= saved_sp
1508 + (rM
== 12 ? 0 : mem_stack_frame_size
)
1511 last_prologue_pc
= next_pc
;
1513 else if (qp
== 0 && rM
>= 32 && rM
< 40 && !instores
[rM
-32] &&
1514 rN
< 256 && imm
== 0)
1516 /* mov rN, rM where rM is an input register. */
1517 reg_contents
[rN
] = rM
;
1518 last_prologue_pc
= next_pc
;
1520 else if (frameless
&& qp
== 0 && rN
== fp_reg
&& imm
== 0 &&
1524 last_prologue_pc
= next_pc
;
1529 && ( ((instr
& 0x1efc0000000LL
) == 0x0eec0000000LL
)
1530 || ((instr
& 0x1ffc8000000LL
) == 0x0cec0000000LL
) ))
1532 /* stf.spill [rN] = fM, imm9
1534 stf.spill [rN] = fM */
1536 int imm
= imm9(instr
);
1537 int rN
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1538 int fM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1539 int qp
= (int) (instr
& 0x0000000003fLL
);
1540 if (qp
== 0 && rN
== spill_reg
&& spill_addr
!= 0
1541 && ((2 <= fM
&& fM
<= 5) || (16 <= fM
&& fM
<= 31)))
1543 cache
->saved_regs
[IA64_FR0_REGNUM
+ fM
] = spill_addr
;
1545 if ((instr
& 0x1efc0000000LL
) == 0x0eec0000000LL
)
1548 spill_addr
= 0; /* last one; must be done. */
1549 last_prologue_pc
= next_pc
;
1552 else if ((it
== M
&& ((instr
& 0x1eff8000000LL
) == 0x02110000000LL
))
1553 || (it
== I
&& ((instr
& 0x1eff8000000LL
) == 0x00050000000LL
)) )
1559 int arM
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1560 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1561 int qp
= (int) (instr
& 0x0000000003fLL
);
1562 if (qp
== 0 && isScratch (rN
) && arM
== 36 /* ar.unat */)
1564 /* We have something like "mov.m r3 = ar.unat". Remember the
1565 r3 (or whatever) and watch for a store of this register... */
1567 last_prologue_pc
= next_pc
;
1570 else if (it
== I
&& ((instr
& 0x1eff8000000LL
) == 0x00198000000LL
))
1573 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1574 int qp
= (int) (instr
& 0x0000000003fLL
);
1575 if (qp
== 0 && isScratch (rN
))
1578 last_prologue_pc
= next_pc
;
1582 && ( ((instr
& 0x1ffc8000000LL
) == 0x08cc0000000LL
)
1583 || ((instr
& 0x1efc0000000LL
) == 0x0acc0000000LL
)))
1587 st8 [rN] = rM, imm9 */
1588 int rN
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1589 int rM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1590 int qp
= (int) (instr
& 0x0000000003fLL
);
1591 int indirect
= rM
< 256 ? reg_contents
[rM
] : 0;
1592 if (qp
== 0 && rN
== spill_reg
&& spill_addr
!= 0
1593 && (rM
== unat_save_reg
|| rM
== pr_save_reg
))
1595 /* We've found a spill of either the UNAT register or the PR
1596 register. (Well, not exactly; what we've actually found is
1597 a spill of the register that UNAT or PR was moved to).
1598 Record that fact and move on... */
1599 if (rM
== unat_save_reg
)
1601 /* Track UNAT register. */
1602 cache
->saved_regs
[IA64_UNAT_REGNUM
] = spill_addr
;
1607 /* Track PR register. */
1608 cache
->saved_regs
[IA64_PR_REGNUM
] = spill_addr
;
1611 if ((instr
& 0x1efc0000000LL
) == 0x0acc0000000LL
)
1612 /* st8 [rN] = rM, imm9 */
1613 spill_addr
+= imm9(instr
);
1615 spill_addr
= 0; /* Must be done spilling. */
1616 last_prologue_pc
= next_pc
;
1618 else if (qp
== 0 && 32 <= rM
&& rM
< 40 && !instores
[rM
-32])
1620 /* Allow up to one store of each input register. */
1621 instores
[rM
-32] = 1;
1622 last_prologue_pc
= next_pc
;
1624 else if (qp
== 0 && 32 <= indirect
&& indirect
< 40 &&
1625 !instores
[indirect
-32])
1627 /* Allow an indirect store of an input register. */
1628 instores
[indirect
-32] = 1;
1629 last_prologue_pc
= next_pc
;
1632 else if (it
== M
&& ((instr
& 0x1ff08000000LL
) == 0x08c00000000LL
))
1639 Note that the st8 case is handled in the clause above.
1641 Advance over stores of input registers. One store per input
1642 register is permitted. */
1643 int rM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1644 int qp
= (int) (instr
& 0x0000000003fLL
);
1645 int indirect
= rM
< 256 ? reg_contents
[rM
] : 0;
1646 if (qp
== 0 && 32 <= rM
&& rM
< 40 && !instores
[rM
-32])
1648 instores
[rM
-32] = 1;
1649 last_prologue_pc
= next_pc
;
1651 else if (qp
== 0 && 32 <= indirect
&& indirect
< 40 &&
1652 !instores
[indirect
-32])
1654 /* Allow an indirect store of an input register. */
1655 instores
[indirect
-32] = 1;
1656 last_prologue_pc
= next_pc
;
1659 else if (it
== M
&& ((instr
& 0x1ff88000000LL
) == 0x0cc80000000LL
))
1666 Advance over stores of floating point input registers. Again
1667 one store per register is permitted. */
1668 int fM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1669 int qp
= (int) (instr
& 0x0000000003fLL
);
1670 if (qp
== 0 && 8 <= fM
&& fM
< 16 && !infpstores
[fM
- 8])
1672 infpstores
[fM
-8] = 1;
1673 last_prologue_pc
= next_pc
;
1677 && ( ((instr
& 0x1ffc8000000LL
) == 0x08ec0000000LL
)
1678 || ((instr
& 0x1efc0000000LL
) == 0x0aec0000000LL
)))
1680 /* st8.spill [rN] = rM
1682 st8.spill [rN] = rM, imm9 */
1683 int rN
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1684 int rM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1685 int qp
= (int) (instr
& 0x0000000003fLL
);
1686 if (qp
== 0 && rN
== spill_reg
&& 4 <= rM
&& rM
<= 7)
1688 /* We've found a spill of one of the preserved general purpose
1689 regs. Record the spill address and advance the spill
1690 register if appropriate. */
1691 cache
->saved_regs
[IA64_GR0_REGNUM
+ rM
] = spill_addr
;
1692 if ((instr
& 0x1efc0000000LL
) == 0x0aec0000000LL
)
1693 /* st8.spill [rN] = rM, imm9 */
1694 spill_addr
+= imm9(instr
);
1696 spill_addr
= 0; /* Done spilling. */
1697 last_prologue_pc
= next_pc
;
1704 /* If not frameless and we aren't called by skip_prologue, then we need
1705 to calculate registers for the previous frame which will be needed
1708 if (!frameless
&& this_frame
)
1710 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1711 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1713 /* Extract the size of the rotating portion of the stack
1714 frame and the register rename base from the current
1720 rrb_gr
= (cfm
>> 18) & 0x7f;
1722 /* Find the bof (beginning of frame). */
1723 bof
= rse_address_add (cache
->bsp
, -sof
);
1725 for (i
= 0, addr
= bof
;
1729 if (IS_NaT_COLLECTION_ADDR (addr
))
1733 if (i
+32 == cfm_reg
)
1734 cache
->saved_regs
[IA64_CFM_REGNUM
] = addr
;
1735 if (i
+32 == ret_reg
)
1736 cache
->saved_regs
[IA64_VRAP_REGNUM
] = addr
;
1738 cache
->saved_regs
[IA64_VFP_REGNUM
] = addr
;
1741 /* For the previous argument registers we require the previous bof.
1742 If we can't find the previous cfm, then we can do nothing. */
1744 if (cache
->saved_regs
[IA64_CFM_REGNUM
] != 0)
1746 cfm
= read_memory_integer (cache
->saved_regs
[IA64_CFM_REGNUM
],
1749 else if (cfm_reg
!= 0)
1751 get_frame_register (this_frame
, cfm_reg
, buf
);
1752 cfm
= extract_unsigned_integer (buf
, 8, byte_order
);
1754 cache
->prev_cfm
= cfm
;
1758 sor
= ((cfm
>> 14) & 0xf) * 8;
1760 sol
= (cfm
>> 7) & 0x7f;
1761 rrb_gr
= (cfm
>> 18) & 0x7f;
1763 /* The previous bof only requires subtraction of the sol (size of
1764 locals) due to the overlap between output and input of
1765 subsequent frames. */
1766 bof
= rse_address_add (bof
, -sol
);
1768 for (i
= 0, addr
= bof
;
1772 if (IS_NaT_COLLECTION_ADDR (addr
))
1777 cache
->saved_regs
[IA64_GR32_REGNUM
1778 + ((i
+ (sor
- rrb_gr
)) % sor
)]
1781 cache
->saved_regs
[IA64_GR32_REGNUM
+ i
] = addr
;
1787 /* Try and trust the lim_pc value whenever possible. */
1788 if (trust_limit
&& lim_pc
>= last_prologue_pc
)
1789 last_prologue_pc
= lim_pc
;
1791 cache
->frameless
= frameless
;
1792 cache
->after_prologue
= last_prologue_pc
;
1793 cache
->mem_stack_frame_size
= mem_stack_frame_size
;
1794 cache
->fp_reg
= fp_reg
;
1796 return last_prologue_pc
;
1800 ia64_skip_prologue (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
1802 struct ia64_frame_cache cache
;
1804 cache
.after_prologue
= 0;
1808 /* Call examine_prologue with - as third argument since we don't
1809 have a next frame pointer to send. */
1810 return examine_prologue (pc
, pc
+1024, 0, &cache
);
1814 /* Normal frames. */
1816 static struct ia64_frame_cache
*
1817 ia64_frame_cache (struct frame_info
*this_frame
, void **this_cache
)
1819 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1820 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1821 struct ia64_frame_cache
*cache
;
1823 CORE_ADDR cfm
, sof
, sol
, bsp
, psr
;
1829 cache
= ia64_alloc_frame_cache ();
1830 *this_cache
= cache
;
1832 get_frame_register (this_frame
, sp_regnum
, buf
);
1833 cache
->saved_sp
= extract_unsigned_integer (buf
, 8, byte_order
);
1835 /* We always want the bsp to point to the end of frame.
1836 This way, we can always get the beginning of frame (bof)
1837 by subtracting frame size. */
1838 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
1839 cache
->bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
1841 get_frame_register (this_frame
, IA64_PSR_REGNUM
, buf
);
1842 psr
= extract_unsigned_integer (buf
, 8, byte_order
);
1844 get_frame_register (this_frame
, IA64_CFM_REGNUM
, buf
);
1845 cfm
= extract_unsigned_integer (buf
, 8, byte_order
);
1847 cache
->sof
= (cfm
& 0x7f);
1848 cache
->sol
= (cfm
>> 7) & 0x7f;
1849 cache
->sor
= ((cfm
>> 14) & 0xf) * 8;
1853 cache
->pc
= get_frame_func (this_frame
);
1856 examine_prologue (cache
->pc
, get_frame_pc (this_frame
), this_frame
, cache
);
1858 cache
->base
= cache
->saved_sp
+ cache
->mem_stack_frame_size
;
1864 ia64_frame_this_id (struct frame_info
*this_frame
, void **this_cache
,
1865 struct frame_id
*this_id
)
1867 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1868 struct ia64_frame_cache
*cache
=
1869 ia64_frame_cache (this_frame
, this_cache
);
1871 /* If outermost frame, mark with null frame id. */
1872 if (cache
->base
!= 0)
1873 (*this_id
) = frame_id_build_special (cache
->base
, cache
->pc
, cache
->bsp
);
1874 if (gdbarch_debug
>= 1)
1875 fprintf_unfiltered (gdb_stdlog
,
1876 "regular frame id: code %s, stack %s, "
1877 "special %s, this_frame %s\n",
1878 paddress (gdbarch
, this_id
->code_addr
),
1879 paddress (gdbarch
, this_id
->stack_addr
),
1880 paddress (gdbarch
, cache
->bsp
),
1881 host_address_to_string (this_frame
));
1884 static struct value
*
1885 ia64_frame_prev_register (struct frame_info
*this_frame
, void **this_cache
,
1888 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1889 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1890 struct ia64_frame_cache
*cache
= ia64_frame_cache (this_frame
, this_cache
);
1893 gdb_assert (regnum
>= 0);
1895 if (!target_has_registers
)
1896 error (_("No registers."));
1898 if (regnum
== gdbarch_sp_regnum (gdbarch
))
1899 return frame_unwind_got_constant (this_frame
, regnum
, cache
->base
);
1901 else if (regnum
== IA64_BSP_REGNUM
)
1904 CORE_ADDR prev_cfm
, bsp
, prev_bsp
;
1906 /* We want to calculate the previous bsp as the end of the previous
1907 register stack frame. This corresponds to what the hardware bsp
1908 register will be if we pop the frame back which is why we might
1909 have been called. We know the beginning of the current frame is
1910 cache->bsp - cache->sof. This value in the previous frame points
1911 to the start of the output registers. We can calculate the end of
1912 that frame by adding the size of output:
1913 (sof (size of frame) - sol (size of locals)). */
1914 val
= ia64_frame_prev_register (this_frame
, this_cache
, IA64_CFM_REGNUM
);
1915 prev_cfm
= extract_unsigned_integer (value_contents_all (val
),
1917 bsp
= rse_address_add (cache
->bsp
, -(cache
->sof
));
1919 rse_address_add (bsp
, (prev_cfm
& 0x7f) - ((prev_cfm
>> 7) & 0x7f));
1921 return frame_unwind_got_constant (this_frame
, regnum
, prev_bsp
);
1924 else if (regnum
== IA64_CFM_REGNUM
)
1926 CORE_ADDR addr
= cache
->saved_regs
[IA64_CFM_REGNUM
];
1929 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
1931 if (cache
->prev_cfm
)
1932 return frame_unwind_got_constant (this_frame
, regnum
, cache
->prev_cfm
);
1934 if (cache
->frameless
)
1935 return frame_unwind_got_register (this_frame
, IA64_PFS_REGNUM
,
1937 return frame_unwind_got_register (this_frame
, regnum
, 0);
1940 else if (regnum
== IA64_VFP_REGNUM
)
1942 /* If the function in question uses an automatic register (r32-r127)
1943 for the frame pointer, it'll be found by ia64_find_saved_register()
1944 above. If the function lacks one of these frame pointers, we can
1945 still provide a value since we know the size of the frame. */
1946 return frame_unwind_got_constant (this_frame
, regnum
, cache
->base
);
1949 else if (VP0_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1951 struct value
*pr_val
;
1954 pr_val
= ia64_frame_prev_register (this_frame
, this_cache
,
1956 if (VP16_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1958 /* Fetch predicate register rename base from current frame
1959 marker for this frame. */
1960 int rrb_pr
= (cache
->cfm
>> 32) & 0x3f;
1962 /* Adjust the register number to account for register rotation. */
1963 regnum
= VP16_REGNUM
+ ((regnum
- VP16_REGNUM
) + rrb_pr
) % 48;
1965 prN
= extract_bit_field (value_contents_all (pr_val
),
1966 regnum
- VP0_REGNUM
, 1);
1967 return frame_unwind_got_constant (this_frame
, regnum
, prN
);
1970 else if (IA64_NAT0_REGNUM
<= regnum
&& regnum
<= IA64_NAT31_REGNUM
)
1972 struct value
*unat_val
;
1974 unat_val
= ia64_frame_prev_register (this_frame
, this_cache
,
1976 unatN
= extract_bit_field (value_contents_all (unat_val
),
1977 regnum
- IA64_NAT0_REGNUM
, 1);
1978 return frame_unwind_got_constant (this_frame
, regnum
, unatN
);
1981 else if (IA64_NAT32_REGNUM
<= regnum
&& regnum
<= IA64_NAT127_REGNUM
)
1984 /* Find address of general register corresponding to nat bit we're
1988 gr_addr
= cache
->saved_regs
[regnum
- IA64_NAT0_REGNUM
+ IA64_GR0_REGNUM
];
1992 /* Compute address of nat collection bits. */
1993 CORE_ADDR nat_addr
= gr_addr
| 0x1f8;
1995 CORE_ADDR nat_collection
;
1998 /* If our nat collection address is bigger than bsp, we have to get
1999 the nat collection from rnat. Otherwise, we fetch the nat
2000 collection from the computed address. */
2001 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
2002 bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
2003 if (nat_addr
>= bsp
)
2005 get_frame_register (this_frame
, IA64_RNAT_REGNUM
, buf
);
2006 nat_collection
= extract_unsigned_integer (buf
, 8, byte_order
);
2009 nat_collection
= read_memory_integer (nat_addr
, 8, byte_order
);
2010 nat_bit
= (gr_addr
>> 3) & 0x3f;
2011 natval
= (nat_collection
>> nat_bit
) & 1;
2014 return frame_unwind_got_constant (this_frame
, regnum
, natval
);
2017 else if (regnum
== IA64_IP_REGNUM
)
2020 CORE_ADDR addr
= cache
->saved_regs
[IA64_VRAP_REGNUM
];
2024 read_memory (addr
, buf
, register_size (gdbarch
, IA64_IP_REGNUM
));
2025 pc
= extract_unsigned_integer (buf
, 8, byte_order
);
2027 else if (cache
->frameless
)
2029 get_frame_register (this_frame
, IA64_BR0_REGNUM
, buf
);
2030 pc
= extract_unsigned_integer (buf
, 8, byte_order
);
2033 return frame_unwind_got_constant (this_frame
, regnum
, pc
);
2036 else if (regnum
== IA64_PSR_REGNUM
)
2038 /* We don't know how to get the complete previous PSR, but we need it
2039 for the slot information when we unwind the pc (pc is formed of IP
2040 register plus slot information from PSR). To get the previous
2041 slot information, we mask it off the return address. */
2042 ULONGEST slot_num
= 0;
2045 CORE_ADDR addr
= cache
->saved_regs
[IA64_VRAP_REGNUM
];
2047 get_frame_register (this_frame
, IA64_PSR_REGNUM
, buf
);
2048 psr
= extract_unsigned_integer (buf
, 8, byte_order
);
2052 read_memory (addr
, buf
, register_size (gdbarch
, IA64_IP_REGNUM
));
2053 pc
= extract_unsigned_integer (buf
, 8, byte_order
);
2055 else if (cache
->frameless
)
2057 get_frame_register (this_frame
, IA64_BR0_REGNUM
, buf
);
2058 pc
= extract_unsigned_integer (buf
, 8, byte_order
);
2060 psr
&= ~(3LL << 41);
2061 slot_num
= pc
& 0x3LL
;
2062 psr
|= (CORE_ADDR
)slot_num
<< 41;
2063 return frame_unwind_got_constant (this_frame
, regnum
, psr
);
2066 else if (regnum
== IA64_BR0_REGNUM
)
2068 CORE_ADDR addr
= cache
->saved_regs
[IA64_BR0_REGNUM
];
2071 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2073 return frame_unwind_got_constant (this_frame
, regnum
, 0);
2076 else if ((regnum
>= IA64_GR32_REGNUM
&& regnum
<= IA64_GR127_REGNUM
)
2077 || (regnum
>= V32_REGNUM
&& regnum
<= V127_REGNUM
))
2081 if (regnum
>= V32_REGNUM
)
2082 regnum
= IA64_GR32_REGNUM
+ (regnum
- V32_REGNUM
);
2083 addr
= cache
->saved_regs
[regnum
];
2085 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2087 if (cache
->frameless
)
2089 struct value
*reg_val
;
2090 CORE_ADDR prev_cfm
, prev_bsp
, prev_bof
;
2092 /* FIXME: brobecker/2008-05-01: Doesn't this seem redundant
2093 with the same code above? */
2094 if (regnum
>= V32_REGNUM
)
2095 regnum
= IA64_GR32_REGNUM
+ (regnum
- V32_REGNUM
);
2096 reg_val
= ia64_frame_prev_register (this_frame
, this_cache
,
2098 prev_cfm
= extract_unsigned_integer (value_contents_all (reg_val
),
2100 reg_val
= ia64_frame_prev_register (this_frame
, this_cache
,
2102 prev_bsp
= extract_unsigned_integer (value_contents_all (reg_val
),
2104 prev_bof
= rse_address_add (prev_bsp
, -(prev_cfm
& 0x7f));
2106 addr
= rse_address_add (prev_bof
, (regnum
- IA64_GR32_REGNUM
));
2107 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2110 return frame_unwind_got_constant (this_frame
, regnum
, 0);
2113 else /* All other registers. */
2117 if (IA64_FR32_REGNUM
<= regnum
&& regnum
<= IA64_FR127_REGNUM
)
2119 /* Fetch floating point register rename base from current
2120 frame marker for this frame. */
2121 int rrb_fr
= (cache
->cfm
>> 25) & 0x7f;
2123 /* Adjust the floating point register number to account for
2124 register rotation. */
2125 regnum
= IA64_FR32_REGNUM
2126 + ((regnum
- IA64_FR32_REGNUM
) + rrb_fr
) % 96;
2129 /* If we have stored a memory address, access the register. */
2130 addr
= cache
->saved_regs
[regnum
];
2132 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2133 /* Otherwise, punt and get the current value of the register. */
2135 return frame_unwind_got_register (this_frame
, regnum
, regnum
);
2139 static const struct frame_unwind ia64_frame_unwind
=
2142 &ia64_frame_this_id
,
2143 &ia64_frame_prev_register
,
2145 default_frame_sniffer
2148 /* Signal trampolines. */
2151 ia64_sigtramp_frame_init_saved_regs (struct frame_info
*this_frame
,
2152 struct ia64_frame_cache
*cache
)
2154 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2155 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2157 if (tdep
->sigcontext_register_address
)
2161 cache
->saved_regs
[IA64_VRAP_REGNUM
]
2162 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2164 cache
->saved_regs
[IA64_CFM_REGNUM
]
2165 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2167 cache
->saved_regs
[IA64_PSR_REGNUM
]
2168 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2170 cache
->saved_regs
[IA64_BSP_REGNUM
]
2171 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2173 cache
->saved_regs
[IA64_RNAT_REGNUM
]
2174 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2176 cache
->saved_regs
[IA64_CCV_REGNUM
]
2177 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2179 cache
->saved_regs
[IA64_UNAT_REGNUM
]
2180 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2182 cache
->saved_regs
[IA64_FPSR_REGNUM
]
2183 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2185 cache
->saved_regs
[IA64_PFS_REGNUM
]
2186 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2188 cache
->saved_regs
[IA64_LC_REGNUM
]
2189 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2192 for (regno
= IA64_GR1_REGNUM
; regno
<= IA64_GR31_REGNUM
; regno
++)
2193 cache
->saved_regs
[regno
] =
2194 tdep
->sigcontext_register_address (gdbarch
, cache
->base
, regno
);
2195 for (regno
= IA64_BR0_REGNUM
; regno
<= IA64_BR7_REGNUM
; regno
++)
2196 cache
->saved_regs
[regno
] =
2197 tdep
->sigcontext_register_address (gdbarch
, cache
->base
, regno
);
2198 for (regno
= IA64_FR2_REGNUM
; regno
<= IA64_FR31_REGNUM
; regno
++)
2199 cache
->saved_regs
[regno
] =
2200 tdep
->sigcontext_register_address (gdbarch
, cache
->base
, regno
);
2204 static struct ia64_frame_cache
*
2205 ia64_sigtramp_frame_cache (struct frame_info
*this_frame
, void **this_cache
)
2207 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2208 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2209 struct ia64_frame_cache
*cache
;
2217 cache
= ia64_alloc_frame_cache ();
2219 get_frame_register (this_frame
, sp_regnum
, buf
);
2220 /* Note that frame size is hard-coded below. We cannot calculate it
2221 via prologue examination. */
2222 cache
->base
= extract_unsigned_integer (buf
, 8, byte_order
) + 16;
2224 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
2225 cache
->bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
2227 get_frame_register (this_frame
, IA64_CFM_REGNUM
, buf
);
2228 cache
->cfm
= extract_unsigned_integer (buf
, 8, byte_order
);
2229 cache
->sof
= cache
->cfm
& 0x7f;
2231 ia64_sigtramp_frame_init_saved_regs (this_frame
, cache
);
2233 *this_cache
= cache
;
2238 ia64_sigtramp_frame_this_id (struct frame_info
*this_frame
,
2239 void **this_cache
, struct frame_id
*this_id
)
2241 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2242 struct ia64_frame_cache
*cache
=
2243 ia64_sigtramp_frame_cache (this_frame
, this_cache
);
2245 (*this_id
) = frame_id_build_special (cache
->base
,
2246 get_frame_pc (this_frame
),
2248 if (gdbarch_debug
>= 1)
2249 fprintf_unfiltered (gdb_stdlog
,
2250 "sigtramp frame id: code %s, stack %s, "
2251 "special %s, this_frame %s\n",
2252 paddress (gdbarch
, this_id
->code_addr
),
2253 paddress (gdbarch
, this_id
->stack_addr
),
2254 paddress (gdbarch
, cache
->bsp
),
2255 host_address_to_string (this_frame
));
2258 static struct value
*
2259 ia64_sigtramp_frame_prev_register (struct frame_info
*this_frame
,
2260 void **this_cache
, int regnum
)
2262 char buf
[MAX_REGISTER_SIZE
];
2264 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2265 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2266 struct ia64_frame_cache
*cache
=
2267 ia64_sigtramp_frame_cache (this_frame
, this_cache
);
2269 gdb_assert (regnum
>= 0);
2271 if (!target_has_registers
)
2272 error (_("No registers."));
2274 if (regnum
== IA64_IP_REGNUM
)
2277 CORE_ADDR addr
= cache
->saved_regs
[IA64_VRAP_REGNUM
];
2281 read_memory (addr
, buf
, register_size (gdbarch
, IA64_IP_REGNUM
));
2282 pc
= extract_unsigned_integer (buf
, 8, byte_order
);
2285 return frame_unwind_got_constant (this_frame
, regnum
, pc
);
2288 else if ((regnum
>= IA64_GR32_REGNUM
&& regnum
<= IA64_GR127_REGNUM
)
2289 || (regnum
>= V32_REGNUM
&& regnum
<= V127_REGNUM
))
2293 if (regnum
>= V32_REGNUM
)
2294 regnum
= IA64_GR32_REGNUM
+ (regnum
- V32_REGNUM
);
2295 addr
= cache
->saved_regs
[regnum
];
2297 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2299 return frame_unwind_got_constant (this_frame
, regnum
, 0);
2302 else /* All other registers not listed above. */
2304 CORE_ADDR addr
= cache
->saved_regs
[regnum
];
2307 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2309 return frame_unwind_got_constant (this_frame
, regnum
, 0);
2314 ia64_sigtramp_frame_sniffer (const struct frame_unwind
*self
,
2315 struct frame_info
*this_frame
,
2318 struct gdbarch_tdep
*tdep
= gdbarch_tdep (get_frame_arch (this_frame
));
2319 if (tdep
->pc_in_sigtramp
)
2321 CORE_ADDR pc
= get_frame_pc (this_frame
);
2323 if (tdep
->pc_in_sigtramp (pc
))
2330 static const struct frame_unwind ia64_sigtramp_frame_unwind
=
2333 ia64_sigtramp_frame_this_id
,
2334 ia64_sigtramp_frame_prev_register
,
2336 ia64_sigtramp_frame_sniffer
2342 ia64_frame_base_address (struct frame_info
*this_frame
, void **this_cache
)
2344 struct ia64_frame_cache
*cache
= ia64_frame_cache (this_frame
, this_cache
);
2349 static const struct frame_base ia64_frame_base
=
2352 ia64_frame_base_address
,
2353 ia64_frame_base_address
,
2354 ia64_frame_base_address
2357 #ifdef HAVE_LIBUNWIND_IA64_H
2359 struct ia64_unwind_table_entry
2361 unw_word_t start_offset
;
2362 unw_word_t end_offset
;
2363 unw_word_t info_offset
;
2366 static __inline__
uint64_t
2367 ia64_rse_slot_num (uint64_t addr
)
2369 return (addr
>> 3) & 0x3f;
2372 /* Skip over a designated number of registers in the backing
2373 store, remembering every 64th position is for NAT. */
2374 static __inline__
uint64_t
2375 ia64_rse_skip_regs (uint64_t addr
, long num_regs
)
2377 long delta
= ia64_rse_slot_num(addr
) + num_regs
;
2381 return addr
+ ((num_regs
+ delta
/0x3f) << 3);
2384 /* Gdb libunwind-frame callback function to convert from an ia64 gdb register
2385 number to a libunwind register number. */
2387 ia64_gdb2uw_regnum (int regnum
)
2389 if (regnum
== sp_regnum
)
2391 else if (regnum
== IA64_BSP_REGNUM
)
2392 return UNW_IA64_BSP
;
2393 else if ((unsigned) (regnum
- IA64_GR0_REGNUM
) < 128)
2394 return UNW_IA64_GR
+ (regnum
- IA64_GR0_REGNUM
);
2395 else if ((unsigned) (regnum
- V32_REGNUM
) < 95)
2396 return UNW_IA64_GR
+ 32 + (regnum
- V32_REGNUM
);
2397 else if ((unsigned) (regnum
- IA64_FR0_REGNUM
) < 128)
2398 return UNW_IA64_FR
+ (regnum
- IA64_FR0_REGNUM
);
2399 else if ((unsigned) (regnum
- IA64_PR0_REGNUM
) < 64)
2401 else if ((unsigned) (regnum
- IA64_BR0_REGNUM
) < 8)
2402 return UNW_IA64_BR
+ (regnum
- IA64_BR0_REGNUM
);
2403 else if (regnum
== IA64_PR_REGNUM
)
2405 else if (regnum
== IA64_IP_REGNUM
)
2407 else if (regnum
== IA64_CFM_REGNUM
)
2408 return UNW_IA64_CFM
;
2409 else if ((unsigned) (regnum
- IA64_AR0_REGNUM
) < 128)
2410 return UNW_IA64_AR
+ (regnum
- IA64_AR0_REGNUM
);
2411 else if ((unsigned) (regnum
- IA64_NAT0_REGNUM
) < 128)
2412 return UNW_IA64_NAT
+ (regnum
- IA64_NAT0_REGNUM
);
2417 /* Gdb libunwind-frame callback function to convert from a libunwind register
2418 number to a ia64 gdb register number. */
2420 ia64_uw2gdb_regnum (int uw_regnum
)
2422 if (uw_regnum
== UNW_IA64_SP
)
2424 else if (uw_regnum
== UNW_IA64_BSP
)
2425 return IA64_BSP_REGNUM
;
2426 else if ((unsigned) (uw_regnum
- UNW_IA64_GR
) < 32)
2427 return IA64_GR0_REGNUM
+ (uw_regnum
- UNW_IA64_GR
);
2428 else if ((unsigned) (uw_regnum
- UNW_IA64_GR
) < 128)
2429 return V32_REGNUM
+ (uw_regnum
- (IA64_GR0_REGNUM
+ 32));
2430 else if ((unsigned) (uw_regnum
- UNW_IA64_FR
) < 128)
2431 return IA64_FR0_REGNUM
+ (uw_regnum
- UNW_IA64_FR
);
2432 else if ((unsigned) (uw_regnum
- UNW_IA64_BR
) < 8)
2433 return IA64_BR0_REGNUM
+ (uw_regnum
- UNW_IA64_BR
);
2434 else if (uw_regnum
== UNW_IA64_PR
)
2435 return IA64_PR_REGNUM
;
2436 else if (uw_regnum
== UNW_REG_IP
)
2437 return IA64_IP_REGNUM
;
2438 else if (uw_regnum
== UNW_IA64_CFM
)
2439 return IA64_CFM_REGNUM
;
2440 else if ((unsigned) (uw_regnum
- UNW_IA64_AR
) < 128)
2441 return IA64_AR0_REGNUM
+ (uw_regnum
- UNW_IA64_AR
);
2442 else if ((unsigned) (uw_regnum
- UNW_IA64_NAT
) < 128)
2443 return IA64_NAT0_REGNUM
+ (uw_regnum
- UNW_IA64_NAT
);
2448 /* Gdb libunwind-frame callback function to reveal if register is a float
2451 ia64_is_fpreg (int uw_regnum
)
2453 return unw_is_fpreg (uw_regnum
);
2456 /* Libunwind callback accessor function for general registers. */
2458 ia64_access_reg (unw_addr_space_t as
, unw_regnum_t uw_regnum
, unw_word_t
*val
,
2459 int write
, void *arg
)
2461 int regnum
= ia64_uw2gdb_regnum (uw_regnum
);
2462 unw_word_t bsp
, sof
, sol
, cfm
, psr
, ip
;
2463 struct frame_info
*this_frame
= arg
;
2464 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2465 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2466 long new_sof
, old_sof
;
2467 char buf
[MAX_REGISTER_SIZE
];
2469 /* We never call any libunwind routines that need to write registers. */
2470 gdb_assert (!write
);
2475 /* Libunwind expects to see the pc value which means the slot number
2476 from the psr must be merged with the ip word address. */
2477 get_frame_register (this_frame
, IA64_IP_REGNUM
, buf
);
2478 ip
= extract_unsigned_integer (buf
, 8, byte_order
);
2479 get_frame_register (this_frame
, IA64_PSR_REGNUM
, buf
);
2480 psr
= extract_unsigned_integer (buf
, 8, byte_order
);
2481 *val
= ip
| ((psr
>> 41) & 0x3);
2484 case UNW_IA64_AR_BSP
:
2485 /* Libunwind expects to see the beginning of the current
2486 register frame so we must account for the fact that
2487 ptrace() will return a value for bsp that points *after*
2488 the current register frame. */
2489 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
2490 bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
2491 get_frame_register (this_frame
, IA64_CFM_REGNUM
, buf
);
2492 cfm
= extract_unsigned_integer (buf
, 8, byte_order
);
2493 sof
= gdbarch_tdep (gdbarch
)->size_of_register_frame (this_frame
, cfm
);
2494 *val
= ia64_rse_skip_regs (bsp
, -sof
);
2497 case UNW_IA64_AR_BSPSTORE
:
2498 /* Libunwind wants bspstore to be after the current register frame.
2499 This is what ptrace() and gdb treats as the regular bsp value. */
2500 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
2501 *val
= extract_unsigned_integer (buf
, 8, byte_order
);
2505 /* For all other registers, just unwind the value directly. */
2506 get_frame_register (this_frame
, regnum
, buf
);
2507 *val
= extract_unsigned_integer (buf
, 8, byte_order
);
2511 if (gdbarch_debug
>= 1)
2512 fprintf_unfiltered (gdb_stdlog
,
2513 " access_reg: from cache: %4s=%s\n",
2514 (((unsigned) regnum
<= IA64_NAT127_REGNUM
)
2515 ? ia64_register_names
[regnum
] : "r??"),
2516 paddress (gdbarch
, *val
));
2520 /* Libunwind callback accessor function for floating-point registers. */
2522 ia64_access_fpreg (unw_addr_space_t as
, unw_regnum_t uw_regnum
,
2523 unw_fpreg_t
*val
, int write
, void *arg
)
2525 int regnum
= ia64_uw2gdb_regnum (uw_regnum
);
2526 struct frame_info
*this_frame
= arg
;
2528 /* We never call any libunwind routines that need to write registers. */
2529 gdb_assert (!write
);
2531 get_frame_register (this_frame
, regnum
, (char *) val
);
2536 /* Libunwind callback accessor function for top-level rse registers. */
2538 ia64_access_rse_reg (unw_addr_space_t as
, unw_regnum_t uw_regnum
,
2539 unw_word_t
*val
, int write
, void *arg
)
2541 int regnum
= ia64_uw2gdb_regnum (uw_regnum
);
2542 unw_word_t bsp
, sof
, sol
, cfm
, psr
, ip
;
2543 struct regcache
*regcache
= arg
;
2544 struct gdbarch
*gdbarch
= get_regcache_arch (regcache
);
2545 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2546 long new_sof
, old_sof
;
2547 char buf
[MAX_REGISTER_SIZE
];
2549 /* We never call any libunwind routines that need to write registers. */
2550 gdb_assert (!write
);
2555 /* Libunwind expects to see the pc value which means the slot number
2556 from the psr must be merged with the ip word address. */
2557 regcache_cooked_read (regcache
, IA64_IP_REGNUM
, buf
);
2558 ip
= extract_unsigned_integer (buf
, 8, byte_order
);
2559 regcache_cooked_read (regcache
, IA64_PSR_REGNUM
, buf
);
2560 psr
= extract_unsigned_integer (buf
, 8, byte_order
);
2561 *val
= ip
| ((psr
>> 41) & 0x3);
2564 case UNW_IA64_AR_BSP
:
2565 /* Libunwind expects to see the beginning of the current
2566 register frame so we must account for the fact that
2567 ptrace() will return a value for bsp that points *after*
2568 the current register frame. */
2569 regcache_cooked_read (regcache
, IA64_BSP_REGNUM
, buf
);
2570 bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
2571 regcache_cooked_read (regcache
, IA64_CFM_REGNUM
, buf
);
2572 cfm
= extract_unsigned_integer (buf
, 8, byte_order
);
2574 *val
= ia64_rse_skip_regs (bsp
, -sof
);
2577 case UNW_IA64_AR_BSPSTORE
:
2578 /* Libunwind wants bspstore to be after the current register frame.
2579 This is what ptrace() and gdb treats as the regular bsp value. */
2580 regcache_cooked_read (regcache
, IA64_BSP_REGNUM
, buf
);
2581 *val
= extract_unsigned_integer (buf
, 8, byte_order
);
2585 /* For all other registers, just unwind the value directly. */
2586 regcache_cooked_read (regcache
, regnum
, buf
);
2587 *val
= extract_unsigned_integer (buf
, 8, byte_order
);
2591 if (gdbarch_debug
>= 1)
2592 fprintf_unfiltered (gdb_stdlog
,
2593 " access_rse_reg: from cache: %4s=%s\n",
2594 (((unsigned) regnum
<= IA64_NAT127_REGNUM
)
2595 ? ia64_register_names
[regnum
] : "r??"),
2596 paddress (gdbarch
, *val
));
2601 /* Libunwind callback accessor function for top-level fp registers. */
2603 ia64_access_rse_fpreg (unw_addr_space_t as
, unw_regnum_t uw_regnum
,
2604 unw_fpreg_t
*val
, int write
, void *arg
)
2606 int regnum
= ia64_uw2gdb_regnum (uw_regnum
);
2607 struct regcache
*regcache
= arg
;
2609 /* We never call any libunwind routines that need to write registers. */
2610 gdb_assert (!write
);
2612 regcache_cooked_read (regcache
, regnum
, (char *) val
);
2617 /* Libunwind callback accessor function for accessing memory. */
2619 ia64_access_mem (unw_addr_space_t as
,
2620 unw_word_t addr
, unw_word_t
*val
,
2621 int write
, void *arg
)
2623 if (addr
- KERNEL_START
< ktab_size
)
2625 unw_word_t
*laddr
= (unw_word_t
*) ((char *) ktab
2626 + (addr
- KERNEL_START
));
2635 /* XXX do we need to normalize byte-order here? */
2637 return target_write_memory (addr
, (char *) val
, sizeof (unw_word_t
));
2639 return target_read_memory (addr
, (char *) val
, sizeof (unw_word_t
));
2642 /* Call low-level function to access the kernel unwind table. */
2644 getunwind_table (gdb_byte
**buf_p
)
2648 /* FIXME drow/2005-09-10: This code used to call
2649 ia64_linux_xfer_unwind_table directly to fetch the unwind table
2650 for the currently running ia64-linux kernel. That data should
2651 come from the core file and be accessed via the auxv vector; if
2652 we want to preserve fall back to the running kernel's table, then
2653 we should find a way to override the corefile layer's
2654 xfer_partial method. */
2656 x
= target_read_alloc (¤t_target
, TARGET_OBJECT_UNWIND_TABLE
,
2662 /* Get the kernel unwind table. */
2664 get_kernel_table (unw_word_t ip
, unw_dyn_info_t
*di
)
2666 static struct ia64_table_entry
*etab
;
2673 size
= getunwind_table (&ktab_buf
);
2675 return -UNW_ENOINFO
;
2677 ktab
= (struct ia64_table_entry
*) ktab_buf
;
2680 for (etab
= ktab
; etab
->start_offset
; ++etab
)
2681 etab
->info_offset
+= KERNEL_START
;
2684 if (ip
< ktab
[0].start_offset
|| ip
>= etab
[-1].end_offset
)
2685 return -UNW_ENOINFO
;
2687 di
->format
= UNW_INFO_FORMAT_TABLE
;
2689 di
->start_ip
= ktab
[0].start_offset
;
2690 di
->end_ip
= etab
[-1].end_offset
;
2691 di
->u
.ti
.name_ptr
= (unw_word_t
) "<kernel>";
2692 di
->u
.ti
.segbase
= 0;
2693 di
->u
.ti
.table_len
= ((char *) etab
- (char *) ktab
) / sizeof (unw_word_t
);
2694 di
->u
.ti
.table_data
= (unw_word_t
*) ktab
;
2696 if (gdbarch_debug
>= 1)
2697 fprintf_unfiltered (gdb_stdlog
, "get_kernel_table: found table `%s': "
2698 "segbase=%s, length=%s, gp=%s\n",
2699 (char *) di
->u
.ti
.name_ptr
,
2700 hex_string (di
->u
.ti
.segbase
),
2701 pulongest (di
->u
.ti
.table_len
),
2702 hex_string (di
->gp
));
2706 /* Find the unwind table entry for a specified address. */
2708 ia64_find_unwind_table (struct objfile
*objfile
, unw_word_t ip
,
2709 unw_dyn_info_t
*dip
, void **buf
)
2711 Elf_Internal_Phdr
*phdr
, *p_text
= NULL
, *p_unwind
= NULL
;
2712 Elf_Internal_Ehdr
*ehdr
;
2713 unw_word_t segbase
= 0;
2714 CORE_ADDR load_base
;
2718 bfd
= objfile
->obfd
;
2720 ehdr
= elf_tdata (bfd
)->elf_header
;
2721 phdr
= elf_tdata (bfd
)->phdr
;
2723 load_base
= ANOFFSET (objfile
->section_offsets
, SECT_OFF_TEXT (objfile
));
2725 for (i
= 0; i
< ehdr
->e_phnum
; ++i
)
2727 switch (phdr
[i
].p_type
)
2730 if ((unw_word_t
) (ip
- load_base
- phdr
[i
].p_vaddr
)
2735 case PT_IA_64_UNWIND
:
2736 p_unwind
= phdr
+ i
;
2744 if (!p_text
|| !p_unwind
)
2745 return -UNW_ENOINFO
;
2747 /* Verify that the segment that contains the IP also contains
2748 the static unwind table. If not, we may be in the Linux kernel's
2749 DSO gate page in which case the unwind table is another segment.
2750 Otherwise, we are dealing with runtime-generated code, for which we
2751 have no info here. */
2752 segbase
= p_text
->p_vaddr
+ load_base
;
2754 if ((p_unwind
->p_vaddr
- p_text
->p_vaddr
) >= p_text
->p_memsz
)
2757 for (i
= 0; i
< ehdr
->e_phnum
; ++i
)
2759 if (phdr
[i
].p_type
== PT_LOAD
2760 && (p_unwind
->p_vaddr
- phdr
[i
].p_vaddr
) < phdr
[i
].p_memsz
)
2763 /* Get the segbase from the section containing the
2765 segbase
= phdr
[i
].p_vaddr
+ load_base
;
2769 return -UNW_ENOINFO
;
2772 dip
->start_ip
= p_text
->p_vaddr
+ load_base
;
2773 dip
->end_ip
= dip
->start_ip
+ p_text
->p_memsz
;
2774 dip
->gp
= ia64_find_global_pointer (get_objfile_arch (objfile
), ip
);
2775 dip
->format
= UNW_INFO_FORMAT_REMOTE_TABLE
;
2776 dip
->u
.rti
.name_ptr
= (unw_word_t
) bfd_get_filename (bfd
);
2777 dip
->u
.rti
.segbase
= segbase
;
2778 dip
->u
.rti
.table_len
= p_unwind
->p_memsz
/ sizeof (unw_word_t
);
2779 dip
->u
.rti
.table_data
= p_unwind
->p_vaddr
+ load_base
;
2784 /* Libunwind callback accessor function to acquire procedure unwind-info. */
2786 ia64_find_proc_info_x (unw_addr_space_t as
, unw_word_t ip
, unw_proc_info_t
*pi
,
2787 int need_unwind_info
, void *arg
)
2789 struct obj_section
*sec
= find_pc_section (ip
);
2796 /* XXX This only works if the host and the target architecture are
2797 both ia64 and if the have (more or less) the same kernel
2799 if (get_kernel_table (ip
, &di
) < 0)
2800 return -UNW_ENOINFO
;
2802 if (gdbarch_debug
>= 1)
2803 fprintf_unfiltered (gdb_stdlog
, "ia64_find_proc_info_x: %s -> "
2804 "(name=`%s',segbase=%s,start=%s,end=%s,gp=%s,"
2805 "length=%s,data=%s)\n",
2806 hex_string (ip
), (char *)di
.u
.ti
.name_ptr
,
2807 hex_string (di
.u
.ti
.segbase
),
2808 hex_string (di
.start_ip
), hex_string (di
.end_ip
),
2810 pulongest (di
.u
.ti
.table_len
),
2811 hex_string ((CORE_ADDR
)di
.u
.ti
.table_data
));
2815 ret
= ia64_find_unwind_table (sec
->objfile
, ip
, &di
, &buf
);
2819 if (gdbarch_debug
>= 1)
2820 fprintf_unfiltered (gdb_stdlog
, "ia64_find_proc_info_x: %s -> "
2821 "(name=`%s',segbase=%s,start=%s,end=%s,gp=%s,"
2822 "length=%s,data=%s)\n",
2823 hex_string (ip
), (char *)di
.u
.rti
.name_ptr
,
2824 hex_string (di
.u
.rti
.segbase
),
2825 hex_string (di
.start_ip
), hex_string (di
.end_ip
),
2827 pulongest (di
.u
.rti
.table_len
),
2828 hex_string (di
.u
.rti
.table_data
));
2831 ret
= libunwind_search_unwind_table (&as
, ip
, &di
, pi
, need_unwind_info
,
2834 /* We no longer need the dyn info storage so free it. */
2840 /* Libunwind callback accessor function for cleanup. */
2842 ia64_put_unwind_info (unw_addr_space_t as
,
2843 unw_proc_info_t
*pip
, void *arg
)
2845 /* Nothing required for now. */
2848 /* Libunwind callback accessor function to get head of the dynamic
2849 unwind-info registration list. */
2851 ia64_get_dyn_info_list (unw_addr_space_t as
,
2852 unw_word_t
*dilap
, void *arg
)
2854 struct obj_section
*text_sec
;
2855 struct objfile
*objfile
;
2856 unw_word_t ip
, addr
;
2860 if (!libunwind_is_initialized ())
2861 return -UNW_ENOINFO
;
2863 for (objfile
= object_files
; objfile
; objfile
= objfile
->next
)
2867 text_sec
= objfile
->sections
+ SECT_OFF_TEXT (objfile
);
2868 ip
= obj_section_addr (text_sec
);
2869 ret
= ia64_find_unwind_table (objfile
, ip
, &di
, &buf
);
2872 addr
= libunwind_find_dyn_list (as
, &di
, arg
);
2873 /* We no longer need the dyn info storage so free it. */
2878 if (gdbarch_debug
>= 1)
2879 fprintf_unfiltered (gdb_stdlog
,
2880 "dynamic unwind table in objfile %s "
2882 bfd_get_filename (objfile
->obfd
),
2883 hex_string (addr
), hex_string (di
.gp
));
2889 return -UNW_ENOINFO
;
2893 /* Frame interface functions for libunwind. */
2896 ia64_libunwind_frame_this_id (struct frame_info
*this_frame
, void **this_cache
,
2897 struct frame_id
*this_id
)
2899 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2900 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2901 struct frame_id id
= outer_frame_id
;
2905 libunwind_frame_this_id (this_frame
, this_cache
, &id
);
2906 if (frame_id_eq (id
, outer_frame_id
))
2908 (*this_id
) = outer_frame_id
;
2912 /* We must add the bsp as the special address for frame comparison
2914 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
2915 bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
2917 (*this_id
) = frame_id_build_special (id
.stack_addr
, id
.code_addr
, bsp
);
2919 if (gdbarch_debug
>= 1)
2920 fprintf_unfiltered (gdb_stdlog
,
2921 "libunwind frame id: code %s, stack %s, "
2922 "special %s, this_frame %s\n",
2923 paddress (gdbarch
, id
.code_addr
),
2924 paddress (gdbarch
, id
.stack_addr
),
2925 paddress (gdbarch
, bsp
),
2926 host_address_to_string (this_frame
));
2929 static struct value
*
2930 ia64_libunwind_frame_prev_register (struct frame_info
*this_frame
,
2931 void **this_cache
, int regnum
)
2934 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2935 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2938 if (VP0_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
2939 reg
= IA64_PR_REGNUM
;
2940 else if (IA64_NAT0_REGNUM
<= regnum
&& regnum
<= IA64_NAT127_REGNUM
)
2941 reg
= IA64_UNAT_REGNUM
;
2943 /* Let libunwind do most of the work. */
2944 val
= libunwind_frame_prev_register (this_frame
, this_cache
, reg
);
2946 if (VP0_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
2950 if (VP16_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
2954 unsigned char buf
[MAX_REGISTER_SIZE
];
2956 /* Fetch predicate register rename base from current frame
2957 marker for this frame. */
2958 get_frame_register (this_frame
, IA64_CFM_REGNUM
, buf
);
2959 cfm
= extract_unsigned_integer (buf
, 8, byte_order
);
2960 rrb_pr
= (cfm
>> 32) & 0x3f;
2962 /* Adjust the register number to account for register rotation. */
2963 regnum
= VP16_REGNUM
+ ((regnum
- VP16_REGNUM
) + rrb_pr
) % 48;
2965 prN_val
= extract_bit_field (value_contents_all (val
),
2966 regnum
- VP0_REGNUM
, 1);
2967 return frame_unwind_got_constant (this_frame
, regnum
, prN_val
);
2970 else if (IA64_NAT0_REGNUM
<= regnum
&& regnum
<= IA64_NAT127_REGNUM
)
2974 unatN_val
= extract_bit_field (value_contents_all (val
),
2975 regnum
- IA64_NAT0_REGNUM
, 1);
2976 return frame_unwind_got_constant (this_frame
, regnum
, unatN_val
);
2979 else if (regnum
== IA64_BSP_REGNUM
)
2981 struct value
*cfm_val
;
2982 CORE_ADDR prev_bsp
, prev_cfm
;
2984 /* We want to calculate the previous bsp as the end of the previous
2985 register stack frame. This corresponds to what the hardware bsp
2986 register will be if we pop the frame back which is why we might
2987 have been called. We know that libunwind will pass us back the
2988 beginning of the current frame so we should just add sof to it. */
2989 prev_bsp
= extract_unsigned_integer (value_contents_all (val
),
2991 cfm_val
= libunwind_frame_prev_register (this_frame
, this_cache
,
2993 prev_cfm
= extract_unsigned_integer (value_contents_all (cfm_val
),
2995 prev_bsp
= rse_address_add (prev_bsp
, (prev_cfm
& 0x7f));
2997 return frame_unwind_got_constant (this_frame
, regnum
, prev_bsp
);
3004 ia64_libunwind_frame_sniffer (const struct frame_unwind
*self
,
3005 struct frame_info
*this_frame
,
3008 if (libunwind_is_initialized ()
3009 && libunwind_frame_sniffer (self
, this_frame
, this_cache
))
3015 static const struct frame_unwind ia64_libunwind_frame_unwind
=
3018 ia64_libunwind_frame_this_id
,
3019 ia64_libunwind_frame_prev_register
,
3021 ia64_libunwind_frame_sniffer
,
3022 libunwind_frame_dealloc_cache
3026 ia64_libunwind_sigtramp_frame_this_id (struct frame_info
*this_frame
,
3028 struct frame_id
*this_id
)
3030 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
3031 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3034 struct frame_id id
= outer_frame_id
;
3037 libunwind_frame_this_id (this_frame
, this_cache
, &id
);
3038 if (frame_id_eq (id
, outer_frame_id
))
3040 (*this_id
) = outer_frame_id
;
3044 /* We must add the bsp as the special address for frame comparison
3046 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
3047 bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
3049 /* For a sigtramp frame, we don't make the check for previous ip being 0. */
3050 (*this_id
) = frame_id_build_special (id
.stack_addr
, id
.code_addr
, bsp
);
3052 if (gdbarch_debug
>= 1)
3053 fprintf_unfiltered (gdb_stdlog
,
3054 "libunwind sigtramp frame id: code %s, "
3055 "stack %s, special %s, this_frame %s\n",
3056 paddress (gdbarch
, id
.code_addr
),
3057 paddress (gdbarch
, id
.stack_addr
),
3058 paddress (gdbarch
, bsp
),
3059 host_address_to_string (this_frame
));
3062 static struct value
*
3063 ia64_libunwind_sigtramp_frame_prev_register (struct frame_info
*this_frame
,
3064 void **this_cache
, int regnum
)
3066 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
3067 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3068 struct value
*prev_ip_val
;
3071 /* If the previous frame pc value is 0, then we want to use the SIGCONTEXT
3072 method of getting previous registers. */
3073 prev_ip_val
= libunwind_frame_prev_register (this_frame
, this_cache
,
3075 prev_ip
= extract_unsigned_integer (value_contents_all (prev_ip_val
),
3080 void *tmp_cache
= NULL
;
3081 return ia64_sigtramp_frame_prev_register (this_frame
, &tmp_cache
,
3085 return ia64_libunwind_frame_prev_register (this_frame
, this_cache
, regnum
);
3089 ia64_libunwind_sigtramp_frame_sniffer (const struct frame_unwind
*self
,
3090 struct frame_info
*this_frame
,
3093 if (libunwind_is_initialized ())
3095 if (libunwind_sigtramp_frame_sniffer (self
, this_frame
, this_cache
))
3100 return ia64_sigtramp_frame_sniffer (self
, this_frame
, this_cache
);
3103 static const struct frame_unwind ia64_libunwind_sigtramp_frame_unwind
=
3106 ia64_libunwind_sigtramp_frame_this_id
,
3107 ia64_libunwind_sigtramp_frame_prev_register
,
3109 ia64_libunwind_sigtramp_frame_sniffer
3112 /* Set of libunwind callback acccessor functions. */
3113 static unw_accessors_t ia64_unw_accessors
=
3115 ia64_find_proc_info_x
,
3116 ia64_put_unwind_info
,
3117 ia64_get_dyn_info_list
,
3125 /* Set of special libunwind callback acccessor functions specific for accessing
3126 the rse registers. At the top of the stack, we want libunwind to figure out
3127 how to read r32 - r127. Though usually they are found sequentially in
3128 memory starting from $bof, this is not always true. */
3129 static unw_accessors_t ia64_unw_rse_accessors
=
3131 ia64_find_proc_info_x
,
3132 ia64_put_unwind_info
,
3133 ia64_get_dyn_info_list
,
3135 ia64_access_rse_reg
,
3136 ia64_access_rse_fpreg
,
3141 /* Set of ia64 gdb libunwind-frame callbacks and data for generic
3142 libunwind-frame code to use. */
3143 static struct libunwind_descr ia64_libunwind_descr
=
3148 &ia64_unw_accessors
,
3149 &ia64_unw_rse_accessors
,
3152 #endif /* HAVE_LIBUNWIND_IA64_H */
3155 ia64_use_struct_convention (struct type
*type
)
3157 struct type
*float_elt_type
;
3159 /* Don't use the struct convention for anything but structure,
3160 union, or array types. */
3161 if (!(TYPE_CODE (type
) == TYPE_CODE_STRUCT
3162 || TYPE_CODE (type
) == TYPE_CODE_UNION
3163 || TYPE_CODE (type
) == TYPE_CODE_ARRAY
))
3166 /* HFAs are structures (or arrays) consisting entirely of floating
3167 point values of the same length. Up to 8 of these are returned
3168 in registers. Don't use the struct convention when this is the
3170 float_elt_type
= is_float_or_hfa_type (type
);
3171 if (float_elt_type
!= NULL
3172 && TYPE_LENGTH (type
) / TYPE_LENGTH (float_elt_type
) <= 8)
3175 /* Other structs of length 32 or less are returned in r8-r11.
3176 Don't use the struct convention for those either. */
3177 return TYPE_LENGTH (type
) > 32;
3180 /* Return non-zero if TYPE is a structure or union type. */
3183 ia64_struct_type_p (const struct type
*type
)
3185 return (TYPE_CODE (type
) == TYPE_CODE_STRUCT
3186 || TYPE_CODE (type
) == TYPE_CODE_UNION
);
3190 ia64_extract_return_value (struct type
*type
, struct regcache
*regcache
,
3193 struct gdbarch
*gdbarch
= get_regcache_arch (regcache
);
3194 struct type
*float_elt_type
;
3196 float_elt_type
= is_float_or_hfa_type (type
);
3197 if (float_elt_type
!= NULL
)
3199 char from
[MAX_REGISTER_SIZE
];
3201 int regnum
= IA64_FR8_REGNUM
;
3202 int n
= TYPE_LENGTH (type
) / TYPE_LENGTH (float_elt_type
);
3206 regcache_cooked_read (regcache
, regnum
, from
);
3207 convert_typed_floating (from
, ia64_ext_type (gdbarch
),
3208 (char *)valbuf
+ offset
, float_elt_type
);
3209 offset
+= TYPE_LENGTH (float_elt_type
);
3213 else if (!ia64_struct_type_p (type
) && TYPE_LENGTH (type
) < 8)
3215 /* This is an integral value, and its size is less than 8 bytes.
3216 These values are LSB-aligned, so extract the relevant bytes,
3217 and copy them into VALBUF. */
3218 /* brobecker/2005-12-30: Actually, all integral values are LSB aligned,
3219 so I suppose we should also add handling here for integral values
3220 whose size is greater than 8. But I wasn't able to create such
3221 a type, neither in C nor in Ada, so not worrying about these yet. */
3222 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3225 regcache_cooked_read_unsigned (regcache
, IA64_GR8_REGNUM
, &val
);
3226 store_unsigned_integer (valbuf
, TYPE_LENGTH (type
), byte_order
, val
);
3232 int regnum
= IA64_GR8_REGNUM
;
3233 int reglen
= TYPE_LENGTH (register_type (gdbarch
, IA64_GR8_REGNUM
));
3234 int n
= TYPE_LENGTH (type
) / reglen
;
3235 int m
= TYPE_LENGTH (type
) % reglen
;
3240 regcache_cooked_read_unsigned (regcache
, regnum
, &val
);
3241 memcpy ((char *)valbuf
+ offset
, &val
, reglen
);
3248 regcache_cooked_read_unsigned (regcache
, regnum
, &val
);
3249 memcpy ((char *)valbuf
+ offset
, &val
, m
);
3255 ia64_store_return_value (struct type
*type
, struct regcache
*regcache
,
3256 const gdb_byte
*valbuf
)
3258 struct gdbarch
*gdbarch
= get_regcache_arch (regcache
);
3259 struct type
*float_elt_type
;
3261 float_elt_type
= is_float_or_hfa_type (type
);
3262 if (float_elt_type
!= NULL
)
3264 char to
[MAX_REGISTER_SIZE
];
3266 int regnum
= IA64_FR8_REGNUM
;
3267 int n
= TYPE_LENGTH (type
) / TYPE_LENGTH (float_elt_type
);
3271 convert_typed_floating ((char *)valbuf
+ offset
, float_elt_type
,
3272 to
, ia64_ext_type (gdbarch
));
3273 regcache_cooked_write (regcache
, regnum
, to
);
3274 offset
+= TYPE_LENGTH (float_elt_type
);
3282 int regnum
= IA64_GR8_REGNUM
;
3283 int reglen
= TYPE_LENGTH (register_type (gdbarch
, IA64_GR8_REGNUM
));
3284 int n
= TYPE_LENGTH (type
) / reglen
;
3285 int m
= TYPE_LENGTH (type
) % reglen
;
3290 memcpy (&val
, (char *)valbuf
+ offset
, reglen
);
3291 regcache_cooked_write_unsigned (regcache
, regnum
, val
);
3298 memcpy (&val
, (char *)valbuf
+ offset
, m
);
3299 regcache_cooked_write_unsigned (regcache
, regnum
, val
);
3304 static enum return_value_convention
3305 ia64_return_value (struct gdbarch
*gdbarch
, struct type
*func_type
,
3306 struct type
*valtype
, struct regcache
*regcache
,
3307 gdb_byte
*readbuf
, const gdb_byte
*writebuf
)
3309 int struct_return
= ia64_use_struct_convention (valtype
);
3311 if (writebuf
!= NULL
)
3313 gdb_assert (!struct_return
);
3314 ia64_store_return_value (valtype
, regcache
, writebuf
);
3317 if (readbuf
!= NULL
)
3319 gdb_assert (!struct_return
);
3320 ia64_extract_return_value (valtype
, regcache
, readbuf
);
3324 return RETURN_VALUE_STRUCT_CONVENTION
;
3326 return RETURN_VALUE_REGISTER_CONVENTION
;
3330 is_float_or_hfa_type_recurse (struct type
*t
, struct type
**etp
)
3332 switch (TYPE_CODE (t
))
3336 return TYPE_LENGTH (*etp
) == TYPE_LENGTH (t
);
3343 case TYPE_CODE_ARRAY
:
3345 is_float_or_hfa_type_recurse (check_typedef (TYPE_TARGET_TYPE (t
)),
3348 case TYPE_CODE_STRUCT
:
3352 for (i
= 0; i
< TYPE_NFIELDS (t
); i
++)
3353 if (!is_float_or_hfa_type_recurse
3354 (check_typedef (TYPE_FIELD_TYPE (t
, i
)), etp
))
3365 /* Determine if the given type is one of the floating point types or
3366 and HFA (which is a struct, array, or combination thereof whose
3367 bottom-most elements are all of the same floating point type). */
3369 static struct type
*
3370 is_float_or_hfa_type (struct type
*t
)
3372 struct type
*et
= 0;
3374 return is_float_or_hfa_type_recurse (t
, &et
) ? et
: 0;
3378 /* Return 1 if the alignment of T is such that the next even slot
3379 should be used. Return 0, if the next available slot should
3380 be used. (See section 8.5.1 of the IA-64 Software Conventions
3381 and Runtime manual). */
3384 slot_alignment_is_next_even (struct type
*t
)
3386 switch (TYPE_CODE (t
))
3390 if (TYPE_LENGTH (t
) > 8)
3394 case TYPE_CODE_ARRAY
:
3396 slot_alignment_is_next_even (check_typedef (TYPE_TARGET_TYPE (t
)));
3397 case TYPE_CODE_STRUCT
:
3401 for (i
= 0; i
< TYPE_NFIELDS (t
); i
++)
3402 if (slot_alignment_is_next_even
3403 (check_typedef (TYPE_FIELD_TYPE (t
, i
))))
3412 /* Attempt to find (and return) the global pointer for the given
3415 This is a rather nasty bit of code searchs for the .dynamic section
3416 in the objfile corresponding to the pc of the function we're trying
3417 to call. Once it finds the addresses at which the .dynamic section
3418 lives in the child process, it scans the Elf64_Dyn entries for a
3419 DT_PLTGOT tag. If it finds one of these, the corresponding
3420 d_un.d_ptr value is the global pointer. */
3423 ia64_find_global_pointer_from_dynamic_section (struct gdbarch
*gdbarch
,
3426 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3427 struct obj_section
*faddr_sect
;
3429 faddr_sect
= find_pc_section (faddr
);
3430 if (faddr_sect
!= NULL
)
3432 struct obj_section
*osect
;
3434 ALL_OBJFILE_OSECTIONS (faddr_sect
->objfile
, osect
)
3436 if (strcmp (osect
->the_bfd_section
->name
, ".dynamic") == 0)
3440 if (osect
< faddr_sect
->objfile
->sections_end
)
3442 CORE_ADDR addr
, endaddr
;
3444 addr
= obj_section_addr (osect
);
3445 endaddr
= obj_section_endaddr (osect
);
3447 while (addr
< endaddr
)
3453 status
= target_read_memory (addr
, buf
, sizeof (buf
));
3456 tag
= extract_signed_integer (buf
, sizeof (buf
), byte_order
);
3458 if (tag
== DT_PLTGOT
)
3460 CORE_ADDR global_pointer
;
3462 status
= target_read_memory (addr
+ 8, buf
, sizeof (buf
));
3465 global_pointer
= extract_unsigned_integer (buf
, sizeof (buf
),
3469 return global_pointer
;
3482 /* Attempt to find (and return) the global pointer for the given
3483 function. We first try the find_global_pointer_from_solib routine
3484 from the gdbarch tdep vector, if provided. And if that does not
3485 work, then we try ia64_find_global_pointer_from_dynamic_section. */
3488 ia64_find_global_pointer (struct gdbarch
*gdbarch
, CORE_ADDR faddr
)
3490 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
3493 if (tdep
->find_global_pointer_from_solib
)
3494 addr
= tdep
->find_global_pointer_from_solib (gdbarch
, faddr
);
3496 addr
= ia64_find_global_pointer_from_dynamic_section (gdbarch
, faddr
);
3500 /* Given a function's address, attempt to find (and return) the
3501 corresponding (canonical) function descriptor. Return 0 if
3504 find_extant_func_descr (struct gdbarch
*gdbarch
, CORE_ADDR faddr
)
3506 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3507 struct obj_section
*faddr_sect
;
3509 /* Return early if faddr is already a function descriptor. */
3510 faddr_sect
= find_pc_section (faddr
);
3511 if (faddr_sect
&& strcmp (faddr_sect
->the_bfd_section
->name
, ".opd") == 0)
3514 if (faddr_sect
!= NULL
)
3516 struct obj_section
*osect
;
3517 ALL_OBJFILE_OSECTIONS (faddr_sect
->objfile
, osect
)
3519 if (strcmp (osect
->the_bfd_section
->name
, ".opd") == 0)
3523 if (osect
< faddr_sect
->objfile
->sections_end
)
3525 CORE_ADDR addr
, endaddr
;
3527 addr
= obj_section_addr (osect
);
3528 endaddr
= obj_section_endaddr (osect
);
3530 while (addr
< endaddr
)
3536 status
= target_read_memory (addr
, buf
, sizeof (buf
));
3539 faddr2
= extract_signed_integer (buf
, sizeof (buf
), byte_order
);
3541 if (faddr
== faddr2
)
3551 /* Attempt to find a function descriptor corresponding to the
3552 given address. If none is found, construct one on the
3553 stack using the address at fdaptr. */
3556 find_func_descr (struct regcache
*regcache
, CORE_ADDR faddr
, CORE_ADDR
*fdaptr
)
3558 struct gdbarch
*gdbarch
= get_regcache_arch (regcache
);
3559 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3562 fdesc
= find_extant_func_descr (gdbarch
, faddr
);
3566 ULONGEST global_pointer
;
3572 global_pointer
= ia64_find_global_pointer (gdbarch
, faddr
);
3574 if (global_pointer
== 0)
3575 regcache_cooked_read_unsigned (regcache
,
3576 IA64_GR1_REGNUM
, &global_pointer
);
3578 store_unsigned_integer (buf
, 8, byte_order
, faddr
);
3579 store_unsigned_integer (buf
+ 8, 8, byte_order
, global_pointer
);
3581 write_memory (fdesc
, buf
, 16);
3587 /* Use the following routine when printing out function pointers
3588 so the user can see the function address rather than just the
3589 function descriptor. */
3591 ia64_convert_from_func_ptr_addr (struct gdbarch
*gdbarch
, CORE_ADDR addr
,
3592 struct target_ops
*targ
)
3594 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3595 struct obj_section
*s
;
3598 s
= find_pc_section (addr
);
3600 /* check if ADDR points to a function descriptor. */
3601 if (s
&& strcmp (s
->the_bfd_section
->name
, ".opd") == 0)
3602 return read_memory_unsigned_integer (addr
, 8, byte_order
);
3604 /* Normally, functions live inside a section that is executable.
3605 So, if ADDR points to a non-executable section, then treat it
3606 as a function descriptor and return the target address iff
3607 the target address itself points to a section that is executable.
3608 Check first the memory of the whole length of 8 bytes is readable. */
3609 if (s
&& (s
->the_bfd_section
->flags
& SEC_CODE
) == 0
3610 && target_read_memory (addr
, buf
, 8) == 0)
3612 CORE_ADDR pc
= extract_unsigned_integer (buf
, 8, byte_order
);
3613 struct obj_section
*pc_section
= find_pc_section (pc
);
3615 if (pc_section
&& (pc_section
->the_bfd_section
->flags
& SEC_CODE
))
3619 /* There are also descriptors embedded in vtables. */
3622 struct minimal_symbol
*minsym
;
3624 minsym
= lookup_minimal_symbol_by_pc (addr
);
3626 if (minsym
&& is_vtable_name (SYMBOL_LINKAGE_NAME (minsym
)))
3627 return read_memory_unsigned_integer (addr
, 8, byte_order
);
3634 ia64_frame_align (struct gdbarch
*gdbarch
, CORE_ADDR sp
)
3639 /* The default "allocate_new_rse_frame" ia64_infcall_ops routine for ia64. */
3642 ia64_allocate_new_rse_frame (struct regcache
*regcache
, ULONGEST bsp
, int sof
)
3644 ULONGEST cfm
, pfs
, new_bsp
;
3646 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
3648 new_bsp
= rse_address_add (bsp
, sof
);
3649 regcache_cooked_write_unsigned (regcache
, IA64_BSP_REGNUM
, new_bsp
);
3651 regcache_cooked_read_unsigned (regcache
, IA64_PFS_REGNUM
, &pfs
);
3652 pfs
&= 0xc000000000000000LL
;
3653 pfs
|= (cfm
& 0xffffffffffffLL
);
3654 regcache_cooked_write_unsigned (regcache
, IA64_PFS_REGNUM
, pfs
);
3656 cfm
&= 0xc000000000000000LL
;
3658 regcache_cooked_write_unsigned (regcache
, IA64_CFM_REGNUM
, cfm
);
3661 /* The default "store_argument_in_slot" ia64_infcall_ops routine for
3665 ia64_store_argument_in_slot (struct regcache
*regcache
, CORE_ADDR bsp
,
3666 int slotnum
, gdb_byte
*buf
)
3668 write_memory (rse_address_add (bsp
, slotnum
), buf
, 8);
3671 /* The default "set_function_addr" ia64_infcall_ops routine for ia64. */
3674 ia64_set_function_addr (struct regcache
*regcache
, CORE_ADDR func_addr
)
3676 /* Nothing needed. */
3680 ia64_push_dummy_call (struct gdbarch
*gdbarch
, struct value
*function
,
3681 struct regcache
*regcache
, CORE_ADDR bp_addr
,
3682 int nargs
, struct value
**args
, CORE_ADDR sp
,
3683 int struct_return
, CORE_ADDR struct_addr
)
3685 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
3686 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3691 int nslots
, rseslots
, memslots
, slotnum
, nfuncargs
;
3694 CORE_ADDR funcdescaddr
, pc
, global_pointer
;
3695 CORE_ADDR func_addr
= find_function_addr (function
, NULL
);
3699 /* Count the number of slots needed for the arguments. */
3700 for (argno
= 0; argno
< nargs
; argno
++)
3703 type
= check_typedef (value_type (arg
));
3704 len
= TYPE_LENGTH (type
);
3706 if ((nslots
& 1) && slot_alignment_is_next_even (type
))
3709 if (TYPE_CODE (type
) == TYPE_CODE_FUNC
)
3712 nslots
+= (len
+ 7) / 8;
3715 /* Divvy up the slots between the RSE and the memory stack. */
3716 rseslots
= (nslots
> 8) ? 8 : nslots
;
3717 memslots
= nslots
- rseslots
;
3719 /* Allocate a new RSE frame. */
3720 regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, &bsp
);
3721 tdep
->infcall_ops
.allocate_new_rse_frame (regcache
, bsp
, rseslots
);
3723 /* We will attempt to find function descriptors in the .opd segment,
3724 but if we can't we'll construct them ourselves. That being the
3725 case, we'll need to reserve space on the stack for them. */
3726 funcdescaddr
= sp
- nfuncargs
* 16;
3727 funcdescaddr
&= ~0xfLL
;
3729 /* Adjust the stack pointer to it's new value. The calling conventions
3730 require us to have 16 bytes of scratch, plus whatever space is
3731 necessary for the memory slots and our function descriptors. */
3732 sp
= sp
- 16 - (memslots
+ nfuncargs
) * 8;
3733 sp
&= ~0xfLL
; /* Maintain 16 byte alignment. */
3735 /* Place the arguments where they belong. The arguments will be
3736 either placed in the RSE backing store or on the memory stack.
3737 In addition, floating point arguments or HFAs are placed in
3738 floating point registers. */
3740 floatreg
= IA64_FR8_REGNUM
;
3741 for (argno
= 0; argno
< nargs
; argno
++)
3743 struct type
*float_elt_type
;
3746 type
= check_typedef (value_type (arg
));
3747 len
= TYPE_LENGTH (type
);
3749 /* Special handling for function parameters. */
3751 && TYPE_CODE (type
) == TYPE_CODE_PTR
3752 && TYPE_CODE (TYPE_TARGET_TYPE (type
)) == TYPE_CODE_FUNC
)
3755 ULONGEST faddr
= extract_unsigned_integer (value_contents (arg
),
3757 store_unsigned_integer (val_buf
, 8, byte_order
,
3758 find_func_descr (regcache
, faddr
,
3760 if (slotnum
< rseslots
)
3761 tdep
->infcall_ops
.store_argument_in_slot (regcache
, bsp
,
3764 write_memory (sp
+ 16 + 8 * (slotnum
- rseslots
), val_buf
, 8);
3771 /* Skip odd slot if necessary... */
3772 if ((slotnum
& 1) && slot_alignment_is_next_even (type
))
3780 memset (val_buf
, 0, 8);
3781 if (!ia64_struct_type_p (type
) && len
< 8)
3783 /* Integral types are LSB-aligned, so we have to be careful
3784 to insert the argument on the correct side of the buffer.
3785 This is why we use store_unsigned_integer. */
3786 store_unsigned_integer
3787 (val_buf
, 8, byte_order
,
3788 extract_unsigned_integer (value_contents (arg
), len
,
3793 /* This is either an 8bit integral type, or an aggregate.
3794 For 8bit integral type, there is no problem, we just
3795 copy the value over.
3797 For aggregates, the only potentially tricky portion
3798 is to write the last one if it is less than 8 bytes.
3799 In this case, the data is Byte0-aligned. Happy news,
3800 this means that we don't need to differentiate the
3801 handling of 8byte blocks and less-than-8bytes blocks. */
3802 memcpy (val_buf
, value_contents (arg
) + argoffset
,
3803 (len
> 8) ? 8 : len
);
3806 if (slotnum
< rseslots
)
3807 tdep
->infcall_ops
.store_argument_in_slot (regcache
, bsp
,
3810 write_memory (sp
+ 16 + 8 * (slotnum
- rseslots
), val_buf
, 8);
3817 /* Handle floating point types (including HFAs). */
3818 float_elt_type
= is_float_or_hfa_type (type
);
3819 if (float_elt_type
!= NULL
)
3822 len
= TYPE_LENGTH (type
);
3823 while (len
> 0 && floatreg
< IA64_FR16_REGNUM
)
3825 char to
[MAX_REGISTER_SIZE
];
3826 convert_typed_floating (value_contents (arg
) + argoffset
,
3828 ia64_ext_type (gdbarch
));
3829 regcache_cooked_write (regcache
, floatreg
, (void *)to
);
3831 argoffset
+= TYPE_LENGTH (float_elt_type
);
3832 len
-= TYPE_LENGTH (float_elt_type
);
3837 /* Store the struct return value in r8 if necessary. */
3840 regcache_cooked_write_unsigned (regcache
, IA64_GR8_REGNUM
,
3841 (ULONGEST
) struct_addr
);
3844 global_pointer
= ia64_find_global_pointer (gdbarch
, func_addr
);
3846 if (global_pointer
!= 0)
3847 regcache_cooked_write_unsigned (regcache
, IA64_GR1_REGNUM
, global_pointer
);
3849 /* The following is not necessary on HP-UX, because we're using
3850 a dummy code sequence pushed on the stack to make the call, and
3851 this sequence doesn't need b0 to be set in order for our dummy
3852 breakpoint to be hit. Nonetheless, this doesn't interfere, and
3853 it's needed for other OSes, so we do this unconditionaly. */
3854 regcache_cooked_write_unsigned (regcache
, IA64_BR0_REGNUM
, bp_addr
);
3856 regcache_cooked_write_unsigned (regcache
, sp_regnum
, sp
);
3858 tdep
->infcall_ops
.set_function_addr (regcache
, func_addr
);
3863 static const struct ia64_infcall_ops ia64_infcall_ops
=
3865 ia64_allocate_new_rse_frame
,
3866 ia64_store_argument_in_slot
,
3867 ia64_set_function_addr
3870 static struct frame_id
3871 ia64_dummy_id (struct gdbarch
*gdbarch
, struct frame_info
*this_frame
)
3873 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3877 get_frame_register (this_frame
, sp_regnum
, buf
);
3878 sp
= extract_unsigned_integer (buf
, 8, byte_order
);
3880 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
3881 bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
3883 if (gdbarch_debug
>= 1)
3884 fprintf_unfiltered (gdb_stdlog
,
3885 "dummy frame id: code %s, stack %s, special %s\n",
3886 paddress (gdbarch
, get_frame_pc (this_frame
)),
3887 paddress (gdbarch
, sp
), paddress (gdbarch
, bsp
));
3889 return frame_id_build_special (sp
, get_frame_pc (this_frame
), bsp
);
3893 ia64_unwind_pc (struct gdbarch
*gdbarch
, struct frame_info
*next_frame
)
3895 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3897 CORE_ADDR ip
, psr
, pc
;
3899 frame_unwind_register (next_frame
, IA64_IP_REGNUM
, buf
);
3900 ip
= extract_unsigned_integer (buf
, 8, byte_order
);
3901 frame_unwind_register (next_frame
, IA64_PSR_REGNUM
, buf
);
3902 psr
= extract_unsigned_integer (buf
, 8, byte_order
);
3904 pc
= (ip
& ~0xf) | ((psr
>> 41) & 3);
3909 ia64_print_insn (bfd_vma memaddr
, struct disassemble_info
*info
)
3911 info
->bytes_per_line
= SLOT_MULTIPLIER
;
3912 return print_insn_ia64 (memaddr
, info
);
3915 /* The default "size_of_register_frame" gdbarch_tdep routine for ia64. */
3918 ia64_size_of_register_frame (struct frame_info
*this_frame
, ULONGEST cfm
)
3920 return (cfm
& 0x7f);
3923 static struct gdbarch
*
3924 ia64_gdbarch_init (struct gdbarch_info info
, struct gdbarch_list
*arches
)
3926 struct gdbarch
*gdbarch
;
3927 struct gdbarch_tdep
*tdep
;
3929 /* If there is already a candidate, use it. */
3930 arches
= gdbarch_list_lookup_by_info (arches
, &info
);
3932 return arches
->gdbarch
;
3934 tdep
= xzalloc (sizeof (struct gdbarch_tdep
));
3935 gdbarch
= gdbarch_alloc (&info
, tdep
);
3937 tdep
->size_of_register_frame
= ia64_size_of_register_frame
;
3939 /* According to the ia64 specs, instructions that store long double
3940 floats in memory use a long-double format different than that
3941 used in the floating registers. The memory format matches the
3942 x86 extended float format which is 80 bits. An OS may choose to
3943 use this format (e.g. GNU/Linux) or choose to use a different
3944 format for storing long doubles (e.g. HPUX). In the latter case,
3945 the setting of the format may be moved/overridden in an
3946 OS-specific tdep file. */
3947 set_gdbarch_long_double_format (gdbarch
, floatformats_i387_ext
);
3949 set_gdbarch_short_bit (gdbarch
, 16);
3950 set_gdbarch_int_bit (gdbarch
, 32);
3951 set_gdbarch_long_bit (gdbarch
, 64);
3952 set_gdbarch_long_long_bit (gdbarch
, 64);
3953 set_gdbarch_float_bit (gdbarch
, 32);
3954 set_gdbarch_double_bit (gdbarch
, 64);
3955 set_gdbarch_long_double_bit (gdbarch
, 128);
3956 set_gdbarch_ptr_bit (gdbarch
, 64);
3958 set_gdbarch_num_regs (gdbarch
, NUM_IA64_RAW_REGS
);
3959 set_gdbarch_num_pseudo_regs (gdbarch
,
3960 LAST_PSEUDO_REGNUM
- FIRST_PSEUDO_REGNUM
);
3961 set_gdbarch_sp_regnum (gdbarch
, sp_regnum
);
3962 set_gdbarch_fp0_regnum (gdbarch
, IA64_FR0_REGNUM
);
3964 set_gdbarch_register_name (gdbarch
, ia64_register_name
);
3965 set_gdbarch_register_type (gdbarch
, ia64_register_type
);
3967 set_gdbarch_pseudo_register_read (gdbarch
, ia64_pseudo_register_read
);
3968 set_gdbarch_pseudo_register_write (gdbarch
, ia64_pseudo_register_write
);
3969 set_gdbarch_dwarf2_reg_to_regnum (gdbarch
, ia64_dwarf_reg_to_regnum
);
3970 set_gdbarch_register_reggroup_p (gdbarch
, ia64_register_reggroup_p
);
3971 set_gdbarch_convert_register_p (gdbarch
, ia64_convert_register_p
);
3972 set_gdbarch_register_to_value (gdbarch
, ia64_register_to_value
);
3973 set_gdbarch_value_to_register (gdbarch
, ia64_value_to_register
);
3975 set_gdbarch_skip_prologue (gdbarch
, ia64_skip_prologue
);
3977 set_gdbarch_return_value (gdbarch
, ia64_return_value
);
3979 set_gdbarch_memory_insert_breakpoint (gdbarch
,
3980 ia64_memory_insert_breakpoint
);
3981 set_gdbarch_memory_remove_breakpoint (gdbarch
,
3982 ia64_memory_remove_breakpoint
);
3983 set_gdbarch_breakpoint_from_pc (gdbarch
, ia64_breakpoint_from_pc
);
3984 set_gdbarch_read_pc (gdbarch
, ia64_read_pc
);
3985 set_gdbarch_write_pc (gdbarch
, ia64_write_pc
);
3987 /* Settings for calling functions in the inferior. */
3988 set_gdbarch_push_dummy_call (gdbarch
, ia64_push_dummy_call
);
3989 tdep
->infcall_ops
= ia64_infcall_ops
;
3990 set_gdbarch_frame_align (gdbarch
, ia64_frame_align
);
3991 set_gdbarch_dummy_id (gdbarch
, ia64_dummy_id
);
3993 set_gdbarch_unwind_pc (gdbarch
, ia64_unwind_pc
);
3994 #ifdef HAVE_LIBUNWIND_IA64_H
3995 frame_unwind_append_unwinder (gdbarch
,
3996 &ia64_libunwind_sigtramp_frame_unwind
);
3997 frame_unwind_append_unwinder (gdbarch
, &ia64_libunwind_frame_unwind
);
3998 frame_unwind_append_unwinder (gdbarch
, &ia64_sigtramp_frame_unwind
);
3999 libunwind_frame_set_descr (gdbarch
, &ia64_libunwind_descr
);
4001 frame_unwind_append_unwinder (gdbarch
, &ia64_sigtramp_frame_unwind
);
4003 frame_unwind_append_unwinder (gdbarch
, &ia64_frame_unwind
);
4004 frame_base_set_default (gdbarch
, &ia64_frame_base
);
4006 /* Settings that should be unnecessary. */
4007 set_gdbarch_inner_than (gdbarch
, core_addr_lessthan
);
4009 set_gdbarch_print_insn (gdbarch
, ia64_print_insn
);
4010 set_gdbarch_convert_from_func_ptr_addr (gdbarch
,
4011 ia64_convert_from_func_ptr_addr
);
4013 /* The virtual table contains 16-byte descriptors, not pointers to
4015 set_gdbarch_vtable_function_descriptors (gdbarch
, 1);
4017 /* Hook in ABI-specific overrides, if they have been registered. */
4018 gdbarch_init_osabi (info
, gdbarch
);
4023 extern initialize_file_ftype _initialize_ia64_tdep
; /* -Wmissing-prototypes */
4026 _initialize_ia64_tdep (void)
4028 gdbarch_register (bfd_arch_ia64
, ia64_gdbarch_init
, NULL
);