1 /* Target-dependent code for the IA-64 for GDB, the GNU debugger.
3 Copyright (C) 1999-2017 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
23 #include "arch-utils.h"
24 #include "floatformat.h"
27 #include "reggroups.h"
29 #include "frame-base.h"
30 #include "frame-unwind.h"
34 #include "elf/common.h" /* for DT_PLTGOT value */
39 #include "ia64-tdep.h"
42 #ifdef HAVE_LIBUNWIND_IA64_H
43 #include "elf/ia64.h" /* for PT_IA_64_UNWIND value */
44 #include "ia64-libunwind-tdep.h"
46 /* Note: KERNEL_START is supposed to be an address which is not going
47 to ever contain any valid unwind info. For ia64 linux, the choice
48 of 0xc000000000000000 is fairly safe since that's uncached space.
50 We use KERNEL_START as follows: after obtaining the kernel's
51 unwind table via getunwind(), we project its unwind data into
52 address-range KERNEL_START-(KERNEL_START+ktab_size) and then
53 when ia64_access_mem() sees a memory access to this
54 address-range, we redirect it to ktab instead.
56 None of this hackery is needed with a modern kernel/libcs
57 which uses the kernel virtual DSO to provide access to the
58 kernel's unwind info. In that case, ktab_size remains 0 and
59 hence the value of KERNEL_START doesn't matter. */
61 #define KERNEL_START 0xc000000000000000ULL
63 static size_t ktab_size
= 0;
64 struct ia64_table_entry
66 uint64_t start_offset
;
71 static struct ia64_table_entry
*ktab
= NULL
;
75 /* An enumeration of the different IA-64 instruction types. */
77 typedef enum instruction_type
79 A
, /* Integer ALU ; I-unit or M-unit */
80 I
, /* Non-ALU integer; I-unit */
81 M
, /* Memory ; M-unit */
82 F
, /* Floating-point ; F-unit */
83 B
, /* Branch ; B-unit */
84 L
, /* Extended (L+X) ; I-unit */
85 X
, /* Extended (L+X) ; I-unit */
86 undefined
/* undefined or reserved */
89 /* We represent IA-64 PC addresses as the value of the instruction
90 pointer or'd with some bit combination in the low nibble which
91 represents the slot number in the bundle addressed by the
92 instruction pointer. The problem is that the Linux kernel
93 multiplies its slot numbers (for exceptions) by one while the
94 disassembler multiplies its slot numbers by 6. In addition, I've
95 heard it said that the simulator uses 1 as the multiplier.
97 I've fixed the disassembler so that the bytes_per_line field will
98 be the slot multiplier. If bytes_per_line comes in as zero, it
99 is set to six (which is how it was set up initially). -- objdump
100 displays pretty disassembly dumps with this value. For our purposes,
101 we'll set bytes_per_line to SLOT_MULTIPLIER. This is okay since we
102 never want to also display the raw bytes the way objdump does. */
104 #define SLOT_MULTIPLIER 1
106 /* Length in bytes of an instruction bundle. */
108 #define BUNDLE_LEN 16
110 /* See the saved memory layout comment for ia64_memory_insert_breakpoint. */
112 #if BREAKPOINT_MAX < BUNDLE_LEN - 2
113 # error "BREAKPOINT_MAX < BUNDLE_LEN - 2"
116 static gdbarch_init_ftype ia64_gdbarch_init
;
118 static gdbarch_register_name_ftype ia64_register_name
;
119 static gdbarch_register_type_ftype ia64_register_type
;
120 static gdbarch_breakpoint_from_pc_ftype ia64_breakpoint_from_pc
;
121 static gdbarch_skip_prologue_ftype ia64_skip_prologue
;
122 static struct type
*is_float_or_hfa_type (struct type
*t
);
123 static CORE_ADDR
ia64_find_global_pointer (struct gdbarch
*gdbarch
,
126 #define NUM_IA64_RAW_REGS 462
128 /* Big enough to hold a FP register in bytes. */
129 #define IA64_FP_REGISTER_SIZE 16
131 static int sp_regnum
= IA64_GR12_REGNUM
;
133 /* NOTE: we treat the register stack registers r32-r127 as
134 pseudo-registers because they may not be accessible via the ptrace
135 register get/set interfaces. */
137 enum pseudo_regs
{ FIRST_PSEUDO_REGNUM
= NUM_IA64_RAW_REGS
,
138 VBOF_REGNUM
= IA64_NAT127_REGNUM
+ 1, V32_REGNUM
,
139 V127_REGNUM
= V32_REGNUM
+ 95,
140 VP0_REGNUM
, VP16_REGNUM
= VP0_REGNUM
+ 16,
141 VP63_REGNUM
= VP0_REGNUM
+ 63, LAST_PSEUDO_REGNUM
};
143 /* Array of register names; There should be ia64_num_regs strings in
146 static const char *ia64_register_names
[] =
147 { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
148 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
149 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
150 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
151 "", "", "", "", "", "", "", "",
152 "", "", "", "", "", "", "", "",
153 "", "", "", "", "", "", "", "",
154 "", "", "", "", "", "", "", "",
155 "", "", "", "", "", "", "", "",
156 "", "", "", "", "", "", "", "",
157 "", "", "", "", "", "", "", "",
158 "", "", "", "", "", "", "", "",
159 "", "", "", "", "", "", "", "",
160 "", "", "", "", "", "", "", "",
161 "", "", "", "", "", "", "", "",
162 "", "", "", "", "", "", "", "",
164 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
165 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
166 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
167 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
168 "f32", "f33", "f34", "f35", "f36", "f37", "f38", "f39",
169 "f40", "f41", "f42", "f43", "f44", "f45", "f46", "f47",
170 "f48", "f49", "f50", "f51", "f52", "f53", "f54", "f55",
171 "f56", "f57", "f58", "f59", "f60", "f61", "f62", "f63",
172 "f64", "f65", "f66", "f67", "f68", "f69", "f70", "f71",
173 "f72", "f73", "f74", "f75", "f76", "f77", "f78", "f79",
174 "f80", "f81", "f82", "f83", "f84", "f85", "f86", "f87",
175 "f88", "f89", "f90", "f91", "f92", "f93", "f94", "f95",
176 "f96", "f97", "f98", "f99", "f100", "f101", "f102", "f103",
177 "f104", "f105", "f106", "f107", "f108", "f109", "f110", "f111",
178 "f112", "f113", "f114", "f115", "f116", "f117", "f118", "f119",
179 "f120", "f121", "f122", "f123", "f124", "f125", "f126", "f127",
181 "", "", "", "", "", "", "", "",
182 "", "", "", "", "", "", "", "",
183 "", "", "", "", "", "", "", "",
184 "", "", "", "", "", "", "", "",
185 "", "", "", "", "", "", "", "",
186 "", "", "", "", "", "", "", "",
187 "", "", "", "", "", "", "", "",
188 "", "", "", "", "", "", "", "",
190 "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7",
194 "pr", "ip", "psr", "cfm",
196 "kr0", "kr1", "kr2", "kr3", "kr4", "kr5", "kr6", "kr7",
197 "", "", "", "", "", "", "", "",
198 "rsc", "bsp", "bspstore", "rnat",
200 "eflag", "csd", "ssd", "cflg", "fsr", "fir", "fdr", "",
201 "ccv", "", "", "", "unat", "", "", "",
202 "fpsr", "", "", "", "itc",
203 "", "", "", "", "", "", "", "", "", "",
204 "", "", "", "", "", "", "", "", "",
206 "", "", "", "", "", "", "", "", "", "",
207 "", "", "", "", "", "", "", "", "", "",
208 "", "", "", "", "", "", "", "", "", "",
209 "", "", "", "", "", "", "", "", "", "",
210 "", "", "", "", "", "", "", "", "", "",
211 "", "", "", "", "", "", "", "", "", "",
213 "nat0", "nat1", "nat2", "nat3", "nat4", "nat5", "nat6", "nat7",
214 "nat8", "nat9", "nat10", "nat11", "nat12", "nat13", "nat14", "nat15",
215 "nat16", "nat17", "nat18", "nat19", "nat20", "nat21", "nat22", "nat23",
216 "nat24", "nat25", "nat26", "nat27", "nat28", "nat29", "nat30", "nat31",
217 "nat32", "nat33", "nat34", "nat35", "nat36", "nat37", "nat38", "nat39",
218 "nat40", "nat41", "nat42", "nat43", "nat44", "nat45", "nat46", "nat47",
219 "nat48", "nat49", "nat50", "nat51", "nat52", "nat53", "nat54", "nat55",
220 "nat56", "nat57", "nat58", "nat59", "nat60", "nat61", "nat62", "nat63",
221 "nat64", "nat65", "nat66", "nat67", "nat68", "nat69", "nat70", "nat71",
222 "nat72", "nat73", "nat74", "nat75", "nat76", "nat77", "nat78", "nat79",
223 "nat80", "nat81", "nat82", "nat83", "nat84", "nat85", "nat86", "nat87",
224 "nat88", "nat89", "nat90", "nat91", "nat92", "nat93", "nat94", "nat95",
225 "nat96", "nat97", "nat98", "nat99", "nat100","nat101","nat102","nat103",
226 "nat104","nat105","nat106","nat107","nat108","nat109","nat110","nat111",
227 "nat112","nat113","nat114","nat115","nat116","nat117","nat118","nat119",
228 "nat120","nat121","nat122","nat123","nat124","nat125","nat126","nat127",
232 "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39",
233 "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47",
234 "r48", "r49", "r50", "r51", "r52", "r53", "r54", "r55",
235 "r56", "r57", "r58", "r59", "r60", "r61", "r62", "r63",
236 "r64", "r65", "r66", "r67", "r68", "r69", "r70", "r71",
237 "r72", "r73", "r74", "r75", "r76", "r77", "r78", "r79",
238 "r80", "r81", "r82", "r83", "r84", "r85", "r86", "r87",
239 "r88", "r89", "r90", "r91", "r92", "r93", "r94", "r95",
240 "r96", "r97", "r98", "r99", "r100", "r101", "r102", "r103",
241 "r104", "r105", "r106", "r107", "r108", "r109", "r110", "r111",
242 "r112", "r113", "r114", "r115", "r116", "r117", "r118", "r119",
243 "r120", "r121", "r122", "r123", "r124", "r125", "r126", "r127",
245 "p0", "p1", "p2", "p3", "p4", "p5", "p6", "p7",
246 "p8", "p9", "p10", "p11", "p12", "p13", "p14", "p15",
247 "p16", "p17", "p18", "p19", "p20", "p21", "p22", "p23",
248 "p24", "p25", "p26", "p27", "p28", "p29", "p30", "p31",
249 "p32", "p33", "p34", "p35", "p36", "p37", "p38", "p39",
250 "p40", "p41", "p42", "p43", "p44", "p45", "p46", "p47",
251 "p48", "p49", "p50", "p51", "p52", "p53", "p54", "p55",
252 "p56", "p57", "p58", "p59", "p60", "p61", "p62", "p63",
255 struct ia64_frame_cache
257 CORE_ADDR base
; /* frame pointer base for frame */
258 CORE_ADDR pc
; /* function start pc for frame */
259 CORE_ADDR saved_sp
; /* stack pointer for frame */
260 CORE_ADDR bsp
; /* points at r32 for the current frame */
261 CORE_ADDR cfm
; /* cfm value for current frame */
262 CORE_ADDR prev_cfm
; /* cfm value for previous frame */
264 int sof
; /* Size of frame (decoded from cfm value). */
265 int sol
; /* Size of locals (decoded from cfm value). */
266 int sor
; /* Number of rotating registers (decoded from
268 CORE_ADDR after_prologue
;
269 /* Address of first instruction after the last
270 prologue instruction; Note that there may
271 be instructions from the function's body
272 intermingled with the prologue. */
273 int mem_stack_frame_size
;
274 /* Size of the memory stack frame (may be zero),
275 or -1 if it has not been determined yet. */
276 int fp_reg
; /* Register number (if any) used a frame pointer
277 for this frame. 0 if no register is being used
278 as the frame pointer. */
280 /* Saved registers. */
281 CORE_ADDR saved_regs
[NUM_IA64_RAW_REGS
];
286 floatformat_valid (const struct floatformat
*fmt
, const void *from
)
291 static const struct floatformat floatformat_ia64_ext_little
=
293 floatformat_little
, 82, 0, 1, 17, 65535, 0x1ffff, 18, 64,
294 floatformat_intbit_yes
, "floatformat_ia64_ext_little", floatformat_valid
, NULL
297 static const struct floatformat floatformat_ia64_ext_big
=
299 floatformat_big
, 82, 46, 47, 17, 65535, 0x1ffff, 64, 64,
300 floatformat_intbit_yes
, "floatformat_ia64_ext_big", floatformat_valid
303 static const struct floatformat
*floatformats_ia64_ext
[2] =
305 &floatformat_ia64_ext_big
,
306 &floatformat_ia64_ext_little
310 ia64_ext_type (struct gdbarch
*gdbarch
)
312 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
314 if (!tdep
->ia64_ext_type
)
316 = arch_float_type (gdbarch
, 128, "builtin_type_ia64_ext",
317 floatformats_ia64_ext
);
319 return tdep
->ia64_ext_type
;
323 ia64_register_reggroup_p (struct gdbarch
*gdbarch
, int regnum
,
324 struct reggroup
*group
)
329 if (group
== all_reggroup
)
331 vector_p
= TYPE_VECTOR (register_type (gdbarch
, regnum
));
332 float_p
= TYPE_CODE (register_type (gdbarch
, regnum
)) == TYPE_CODE_FLT
;
333 raw_p
= regnum
< NUM_IA64_RAW_REGS
;
334 if (group
== float_reggroup
)
336 if (group
== vector_reggroup
)
338 if (group
== general_reggroup
)
339 return (!vector_p
&& !float_p
);
340 if (group
== save_reggroup
|| group
== restore_reggroup
)
346 ia64_register_name (struct gdbarch
*gdbarch
, int reg
)
348 return ia64_register_names
[reg
];
352 ia64_register_type (struct gdbarch
*arch
, int reg
)
354 if (reg
>= IA64_FR0_REGNUM
&& reg
<= IA64_FR127_REGNUM
)
355 return ia64_ext_type (arch
);
357 return builtin_type (arch
)->builtin_long
;
361 ia64_dwarf_reg_to_regnum (struct gdbarch
*gdbarch
, int reg
)
363 if (reg
>= IA64_GR32_REGNUM
&& reg
<= IA64_GR127_REGNUM
)
364 return V32_REGNUM
+ (reg
- IA64_GR32_REGNUM
);
369 /* Extract ``len'' bits from an instruction bundle starting at
373 extract_bit_field (const gdb_byte
*bundle
, int from
, int len
)
375 long long result
= 0LL;
377 int from_byte
= from
/ 8;
378 int to_byte
= to
/ 8;
379 unsigned char *b
= (unsigned char *) bundle
;
385 if (from_byte
== to_byte
)
386 c
= ((unsigned char) (c
<< (8 - to
% 8))) >> (8 - to
% 8);
387 result
= c
>> (from
% 8);
388 lshift
= 8 - (from
% 8);
390 for (i
= from_byte
+1; i
< to_byte
; i
++)
392 result
|= ((long long) b
[i
]) << lshift
;
396 if (from_byte
< to_byte
&& (to
% 8 != 0))
399 c
= ((unsigned char) (c
<< (8 - to
% 8))) >> (8 - to
% 8);
400 result
|= ((long long) c
) << lshift
;
406 /* Replace the specified bits in an instruction bundle. */
409 replace_bit_field (gdb_byte
*bundle
, long long val
, int from
, int len
)
412 int from_byte
= from
/ 8;
413 int to_byte
= to
/ 8;
414 unsigned char *b
= (unsigned char *) bundle
;
417 if (from_byte
== to_byte
)
419 unsigned char left
, right
;
421 left
= (c
>> (to
% 8)) << (to
% 8);
422 right
= ((unsigned char) (c
<< (8 - from
% 8))) >> (8 - from
% 8);
423 c
= (unsigned char) (val
& 0xff);
424 c
= (unsigned char) (c
<< (from
% 8 + 8 - to
% 8)) >> (8 - to
% 8);
432 c
= ((unsigned char) (c
<< (8 - from
% 8))) >> (8 - from
% 8);
433 c
= c
| (val
<< (from
% 8));
435 val
>>= 8 - from
% 8;
437 for (i
= from_byte
+1; i
< to_byte
; i
++)
446 unsigned char cv
= (unsigned char) val
;
448 c
= c
>> (to
% 8) << (to
% 8);
449 c
|= ((unsigned char) (cv
<< (8 - to
% 8))) >> (8 - to
% 8);
455 /* Return the contents of slot N (for N = 0, 1, or 2) in
456 and instruction bundle. */
459 slotN_contents (gdb_byte
*bundle
, int slotnum
)
461 return extract_bit_field (bundle
, 5+41*slotnum
, 41);
464 /* Store an instruction in an instruction bundle. */
467 replace_slotN_contents (gdb_byte
*bundle
, long long instr
, int slotnum
)
469 replace_bit_field (bundle
, instr
, 5+41*slotnum
, 41);
472 static const enum instruction_type template_encoding_table
[32][3] =
474 { M
, I
, I
}, /* 00 */
475 { M
, I
, I
}, /* 01 */
476 { M
, I
, I
}, /* 02 */
477 { M
, I
, I
}, /* 03 */
478 { M
, L
, X
}, /* 04 */
479 { M
, L
, X
}, /* 05 */
480 { undefined
, undefined
, undefined
}, /* 06 */
481 { undefined
, undefined
, undefined
}, /* 07 */
482 { M
, M
, I
}, /* 08 */
483 { M
, M
, I
}, /* 09 */
484 { M
, M
, I
}, /* 0A */
485 { M
, M
, I
}, /* 0B */
486 { M
, F
, I
}, /* 0C */
487 { M
, F
, I
}, /* 0D */
488 { M
, M
, F
}, /* 0E */
489 { M
, M
, F
}, /* 0F */
490 { M
, I
, B
}, /* 10 */
491 { M
, I
, B
}, /* 11 */
492 { M
, B
, B
}, /* 12 */
493 { M
, B
, B
}, /* 13 */
494 { undefined
, undefined
, undefined
}, /* 14 */
495 { undefined
, undefined
, undefined
}, /* 15 */
496 { B
, B
, B
}, /* 16 */
497 { B
, B
, B
}, /* 17 */
498 { M
, M
, B
}, /* 18 */
499 { M
, M
, B
}, /* 19 */
500 { undefined
, undefined
, undefined
}, /* 1A */
501 { undefined
, undefined
, undefined
}, /* 1B */
502 { M
, F
, B
}, /* 1C */
503 { M
, F
, B
}, /* 1D */
504 { undefined
, undefined
, undefined
}, /* 1E */
505 { undefined
, undefined
, undefined
}, /* 1F */
508 /* Fetch and (partially) decode an instruction at ADDR and return the
509 address of the next instruction to fetch. */
512 fetch_instruction (CORE_ADDR addr
, instruction_type
*it
, long long *instr
)
514 gdb_byte bundle
[BUNDLE_LEN
];
515 int slotnum
= (int) (addr
& 0x0f) / SLOT_MULTIPLIER
;
519 /* Warn about slot numbers greater than 2. We used to generate
520 an error here on the assumption that the user entered an invalid
521 address. But, sometimes GDB itself requests an invalid address.
522 This can (easily) happen when execution stops in a function for
523 which there are no symbols. The prologue scanner will attempt to
524 find the beginning of the function - if the nearest symbol
525 happens to not be aligned on a bundle boundary (16 bytes), the
526 resulting starting address will cause GDB to think that the slot
529 So we warn about it and set the slot number to zero. It is
530 not necessarily a fatal condition, particularly if debugging
531 at the assembly language level. */
534 warning (_("Can't fetch instructions for slot numbers greater than 2.\n"
535 "Using slot 0 instead"));
541 val
= target_read_memory (addr
, bundle
, BUNDLE_LEN
);
546 *instr
= slotN_contents (bundle
, slotnum
);
547 templ
= extract_bit_field (bundle
, 0, 5);
548 *it
= template_encoding_table
[(int)templ
][slotnum
];
550 if (slotnum
== 2 || (slotnum
== 1 && *it
== L
))
553 addr
+= (slotnum
+ 1) * SLOT_MULTIPLIER
;
558 /* There are 5 different break instructions (break.i, break.b,
559 break.m, break.f, and break.x), but they all have the same
560 encoding. (The five bit template in the low five bits of the
561 instruction bundle distinguishes one from another.)
563 The runtime architecture manual specifies that break instructions
564 used for debugging purposes must have the upper two bits of the 21
565 bit immediate set to a 0 and a 1 respectively. A breakpoint
566 instruction encodes the most significant bit of its 21 bit
567 immediate at bit 36 of the 41 bit instruction. The penultimate msb
568 is at bit 25 which leads to the pattern below.
570 Originally, I had this set up to do, e.g, a "break.i 0x80000" But
571 it turns out that 0x80000 was used as the syscall break in the early
572 simulators. So I changed the pattern slightly to do "break.i 0x080001"
573 instead. But that didn't work either (I later found out that this
574 pattern was used by the simulator that I was using.) So I ended up
575 using the pattern seen below.
577 SHADOW_CONTENTS has byte-based addressing (PLACED_ADDRESS and SHADOW_LEN)
578 while we need bit-based addressing as the instructions length is 41 bits and
579 we must not modify/corrupt the adjacent slots in the same bundle.
580 Fortunately we may store larger memory incl. the adjacent bits with the
581 original memory content (not the possibly already stored breakpoints there).
582 We need to be careful in ia64_memory_remove_breakpoint to always restore
583 only the specific bits of this instruction ignoring any adjacent stored
586 We use the original addressing with the low nibble in the range <0..2> which
587 gets incorrectly interpreted by generic non-ia64 breakpoint_restore_shadows
588 as the direct byte offset of SHADOW_CONTENTS. We store whole BUNDLE_LEN
589 bytes just without these two possibly skipped bytes to not to exceed to the
592 If we would like to store the whole bundle to SHADOW_CONTENTS we would have
593 to store already the base address (`address & ~0x0f') into PLACED_ADDRESS.
594 In such case there is no other place where to store
595 SLOTNUM (`adress & 0x0f', value in the range <0..2>). We need to know
596 SLOTNUM in ia64_memory_remove_breakpoint.
598 There is one special case where we need to be extra careful:
599 L-X instructions, which are instructions that occupy 2 slots
600 (The L part is always in slot 1, and the X part is always in
601 slot 2). We must refuse to insert breakpoints for an address
602 that points at slot 2 of a bundle where an L-X instruction is
603 present, since there is logically no instruction at that address.
604 However, to make things more interesting, the opcode of L-X
605 instructions is located in slot 2. This means that, to insert
606 a breakpoint at an address that points to slot 1, we actually
607 need to write the breakpoint in slot 2! Slot 1 is actually
608 the extended operand, so writing the breakpoint there would not
609 have the desired effect. Another side-effect of this issue
610 is that we need to make sure that the shadow contents buffer
611 does save byte 15 of our instruction bundle (this is the tail
612 end of slot 2, which wouldn't be saved if we were to insert
613 the breakpoint in slot 1).
615 ia64 16-byte bundle layout:
616 | 5 bits | slot 0 with 41 bits | slot 1 with 41 bits | slot 2 with 41 bits |
618 The current addressing used by the code below:
619 original PC placed_address placed_size required covered
620 == bp_tgt->shadow_len reqd \subset covered
621 0xABCDE0 0xABCDE0 0x10 <0x0...0x5> <0x0..0xF>
622 0xABCDE1 0xABCDE1 0xF <0x5...0xA> <0x1..0xF>
623 0xABCDE2 0xABCDE2 0xE <0xA...0xF> <0x2..0xF>
625 L-X instructions are treated a little specially, as explained above:
626 0xABCDE1 0xABCDE1 0xF <0xA...0xF> <0x1..0xF>
628 `objdump -d' and some other tools show a bit unjustified offsets:
629 original PC byte where starts the instruction objdump offset
630 0xABCDE0 0xABCDE0 0xABCDE0
631 0xABCDE1 0xABCDE5 0xABCDE6
632 0xABCDE2 0xABCDEA 0xABCDEC
635 #define IA64_BREAKPOINT 0x00003333300LL
638 ia64_memory_insert_breakpoint (struct gdbarch
*gdbarch
,
639 struct bp_target_info
*bp_tgt
)
641 CORE_ADDR addr
= bp_tgt
->placed_address
= bp_tgt
->reqstd_address
;
642 gdb_byte bundle
[BUNDLE_LEN
];
643 int slotnum
= (int) (addr
& 0x0f) / SLOT_MULTIPLIER
, shadow_slotnum
;
644 long long instr_breakpoint
;
647 struct cleanup
*cleanup
;
650 error (_("Can't insert breakpoint for slot numbers greater than 2."));
654 /* Enable the automatic memory restoration from breakpoints while
655 we read our instruction bundle for the purpose of SHADOW_CONTENTS.
656 Otherwise, we could possibly store into the shadow parts of the adjacent
657 placed breakpoints. It is due to our SHADOW_CONTENTS overlapping the real
658 breakpoint instruction bits region. */
659 cleanup
= make_show_memory_breakpoints_cleanup (0);
660 val
= target_read_memory (addr
, bundle
, BUNDLE_LEN
);
663 do_cleanups (cleanup
);
667 /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
668 for addressing the SHADOW_CONTENTS placement. */
669 shadow_slotnum
= slotnum
;
671 /* Always cover the last byte of the bundle in case we are inserting
672 a breakpoint on an L-X instruction. */
673 bp_tgt
->shadow_len
= BUNDLE_LEN
- shadow_slotnum
;
675 templ
= extract_bit_field (bundle
, 0, 5);
676 if (template_encoding_table
[templ
][slotnum
] == X
)
678 /* X unit types can only be used in slot 2, and are actually
679 part of a 2-slot L-X instruction. We cannot break at this
680 address, as this is the second half of an instruction that
681 lives in slot 1 of that bundle. */
682 gdb_assert (slotnum
== 2);
683 error (_("Can't insert breakpoint for non-existing slot X"));
685 if (template_encoding_table
[templ
][slotnum
] == L
)
687 /* L unit types can only be used in slot 1. But the associated
688 opcode for that instruction is in slot 2, so bump the slot number
690 gdb_assert (slotnum
== 1);
694 /* Store the whole bundle, except for the initial skipped bytes by the slot
695 number interpreted as bytes offset in PLACED_ADDRESS. */
696 memcpy (bp_tgt
->shadow_contents
, bundle
+ shadow_slotnum
,
699 /* Re-read the same bundle as above except that, this time, read it in order
700 to compute the new bundle inside which we will be inserting the
701 breakpoint. Therefore, disable the automatic memory restoration from
702 breakpoints while we read our instruction bundle. Otherwise, the general
703 restoration mechanism kicks in and we would possibly remove parts of the
704 adjacent placed breakpoints. It is due to our SHADOW_CONTENTS overlapping
705 the real breakpoint instruction bits region. */
706 make_show_memory_breakpoints_cleanup (1);
707 val
= target_read_memory (addr
, bundle
, BUNDLE_LEN
);
710 do_cleanups (cleanup
);
714 /* Breakpoints already present in the code will get deteacted and not get
715 reinserted by bp_loc_is_permanent. Multiple breakpoints at the same
716 location cannot induce the internal error as they are optimized into
717 a single instance by update_global_location_list. */
718 instr_breakpoint
= slotN_contents (bundle
, slotnum
);
719 if (instr_breakpoint
== IA64_BREAKPOINT
)
720 internal_error (__FILE__
, __LINE__
,
721 _("Address %s already contains a breakpoint."),
722 paddress (gdbarch
, bp_tgt
->placed_address
));
723 replace_slotN_contents (bundle
, IA64_BREAKPOINT
, slotnum
);
725 val
= target_write_memory (addr
+ shadow_slotnum
, bundle
+ shadow_slotnum
,
728 do_cleanups (cleanup
);
733 ia64_memory_remove_breakpoint (struct gdbarch
*gdbarch
,
734 struct bp_target_info
*bp_tgt
)
736 CORE_ADDR addr
= bp_tgt
->placed_address
;
737 gdb_byte bundle_mem
[BUNDLE_LEN
], bundle_saved
[BUNDLE_LEN
];
738 int slotnum
= (addr
& 0x0f) / SLOT_MULTIPLIER
, shadow_slotnum
;
739 long long instr_breakpoint
, instr_saved
;
742 struct cleanup
*cleanup
;
746 /* Disable the automatic memory restoration from breakpoints while
747 we read our instruction bundle. Otherwise, the general restoration
748 mechanism kicks in and we would possibly remove parts of the adjacent
749 placed breakpoints. It is due to our SHADOW_CONTENTS overlapping the real
750 breakpoint instruction bits region. */
751 cleanup
= make_show_memory_breakpoints_cleanup (1);
752 val
= target_read_memory (addr
, bundle_mem
, BUNDLE_LEN
);
755 do_cleanups (cleanup
);
759 /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
760 for addressing the SHADOW_CONTENTS placement. */
761 shadow_slotnum
= slotnum
;
763 templ
= extract_bit_field (bundle_mem
, 0, 5);
764 if (template_encoding_table
[templ
][slotnum
] == X
)
766 /* X unit types can only be used in slot 2, and are actually
767 part of a 2-slot L-X instruction. We refuse to insert
768 breakpoints at this address, so there should be no reason
769 for us attempting to remove one there, except if the program's
770 code somehow got modified in memory. */
771 gdb_assert (slotnum
== 2);
772 warning (_("Cannot remove breakpoint at address %s from non-existing "
773 "X-type slot, memory has changed underneath"),
774 paddress (gdbarch
, bp_tgt
->placed_address
));
775 do_cleanups (cleanup
);
778 if (template_encoding_table
[templ
][slotnum
] == L
)
780 /* L unit types can only be used in slot 1. But the breakpoint
781 was actually saved using slot 2, so update the slot number
783 gdb_assert (slotnum
== 1);
787 gdb_assert (bp_tgt
->shadow_len
== BUNDLE_LEN
- shadow_slotnum
);
789 instr_breakpoint
= slotN_contents (bundle_mem
, slotnum
);
790 if (instr_breakpoint
!= IA64_BREAKPOINT
)
792 warning (_("Cannot remove breakpoint at address %s, "
793 "no break instruction at such address."),
794 paddress (gdbarch
, bp_tgt
->placed_address
));
795 do_cleanups (cleanup
);
799 /* Extract the original saved instruction from SLOTNUM normalizing its
800 bit-shift for INSTR_SAVED. */
801 memcpy (bundle_saved
, bundle_mem
, BUNDLE_LEN
);
802 memcpy (bundle_saved
+ shadow_slotnum
, bp_tgt
->shadow_contents
,
804 instr_saved
= slotN_contents (bundle_saved
, slotnum
);
806 /* In BUNDLE_MEM, be careful to modify only the bits belonging to SLOTNUM
807 and not any of the other ones that are stored in SHADOW_CONTENTS. */
808 replace_slotN_contents (bundle_mem
, instr_saved
, slotnum
);
809 val
= target_write_raw_memory (addr
, bundle_mem
, BUNDLE_LEN
);
811 do_cleanups (cleanup
);
815 /* Implement the breakpoint_kind_from_pc gdbarch method. */
818 ia64_breakpoint_kind_from_pc (struct gdbarch
*gdbarch
, CORE_ADDR
*pcptr
)
820 /* A place holder of gdbarch method breakpoint_kind_from_pc. */
824 /* As gdbarch_breakpoint_from_pc ranges have byte granularity and ia64
825 instruction slots ranges are bit-granular (41 bits) we have to provide an
826 extended range as described for ia64_memory_insert_breakpoint. We also take
827 care of preserving the `break' instruction 21-bit (or 62-bit) parameter to
828 make a match for permanent breakpoints. */
830 static const gdb_byte
*
831 ia64_breakpoint_from_pc (struct gdbarch
*gdbarch
,
832 CORE_ADDR
*pcptr
, int *lenptr
)
834 CORE_ADDR addr
= *pcptr
;
835 static gdb_byte bundle
[BUNDLE_LEN
];
836 int slotnum
= (int) (*pcptr
& 0x0f) / SLOT_MULTIPLIER
, shadow_slotnum
;
837 long long instr_fetched
;
840 struct cleanup
*cleanup
;
843 error (_("Can't insert breakpoint for slot numbers greater than 2."));
847 /* Enable the automatic memory restoration from breakpoints while
848 we read our instruction bundle to match bp_loc_is_permanent. */
849 cleanup
= make_show_memory_breakpoints_cleanup (0);
850 val
= target_read_memory (addr
, bundle
, BUNDLE_LEN
);
851 do_cleanups (cleanup
);
853 /* The memory might be unreachable. This can happen, for instance,
854 when the user inserts a breakpoint at an invalid address. */
858 /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
859 for addressing the SHADOW_CONTENTS placement. */
860 shadow_slotnum
= slotnum
;
862 /* Cover always the last byte of the bundle for the L-X slot case. */
863 *lenptr
= BUNDLE_LEN
- shadow_slotnum
;
865 /* Check for L type instruction in slot 1, if present then bump up the slot
866 number to the slot 2. */
867 templ
= extract_bit_field (bundle
, 0, 5);
868 if (template_encoding_table
[templ
][slotnum
] == X
)
870 gdb_assert (slotnum
== 2);
871 error (_("Can't insert breakpoint for non-existing slot X"));
873 if (template_encoding_table
[templ
][slotnum
] == L
)
875 gdb_assert (slotnum
== 1);
879 /* A break instruction has its all its opcode bits cleared except for
880 the parameter value. For L+X slot pair we are at the X slot (slot 2) so
881 we should not touch the L slot - the upper 41 bits of the parameter. */
882 instr_fetched
= slotN_contents (bundle
, slotnum
);
883 instr_fetched
&= 0x1003ffffc0LL
;
884 replace_slotN_contents (bundle
, instr_fetched
, slotnum
);
886 return bundle
+ shadow_slotnum
;
890 ia64_read_pc (struct regcache
*regcache
)
892 ULONGEST psr_value
, pc_value
;
895 regcache_cooked_read_unsigned (regcache
, IA64_PSR_REGNUM
, &psr_value
);
896 regcache_cooked_read_unsigned (regcache
, IA64_IP_REGNUM
, &pc_value
);
897 slot_num
= (psr_value
>> 41) & 3;
899 return pc_value
| (slot_num
* SLOT_MULTIPLIER
);
903 ia64_write_pc (struct regcache
*regcache
, CORE_ADDR new_pc
)
905 int slot_num
= (int) (new_pc
& 0xf) / SLOT_MULTIPLIER
;
908 regcache_cooked_read_unsigned (regcache
, IA64_PSR_REGNUM
, &psr_value
);
909 psr_value
&= ~(3LL << 41);
910 psr_value
|= (ULONGEST
)(slot_num
& 0x3) << 41;
914 regcache_cooked_write_unsigned (regcache
, IA64_PSR_REGNUM
, psr_value
);
915 regcache_cooked_write_unsigned (regcache
, IA64_IP_REGNUM
, new_pc
);
918 #define IS_NaT_COLLECTION_ADDR(addr) ((((addr) >> 3) & 0x3f) == 0x3f)
920 /* Returns the address of the slot that's NSLOTS slots away from
921 the address ADDR. NSLOTS may be positive or negative. */
923 rse_address_add(CORE_ADDR addr
, int nslots
)
926 int mandatory_nat_slots
= nslots
/ 63;
927 int direction
= nslots
< 0 ? -1 : 1;
929 new_addr
= addr
+ 8 * (nslots
+ mandatory_nat_slots
);
931 if ((new_addr
>> 9) != ((addr
+ 8 * 64 * mandatory_nat_slots
) >> 9))
932 new_addr
+= 8 * direction
;
934 if (IS_NaT_COLLECTION_ADDR(new_addr
))
935 new_addr
+= 8 * direction
;
940 static enum register_status
941 ia64_pseudo_register_read (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
942 int regnum
, gdb_byte
*buf
)
944 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
945 enum register_status status
;
947 if (regnum
>= V32_REGNUM
&& regnum
<= V127_REGNUM
)
949 #ifdef HAVE_LIBUNWIND_IA64_H
950 /* First try and use the libunwind special reg accessor,
951 otherwise fallback to standard logic. */
952 if (!libunwind_is_initialized ()
953 || libunwind_get_reg_special (gdbarch
, regcache
, regnum
, buf
) != 0)
956 /* The fallback position is to assume that r32-r127 are
957 found sequentially in memory starting at $bof. This
958 isn't always true, but without libunwind, this is the
960 enum register_status status
;
965 status
= regcache_cooked_read_unsigned (regcache
,
966 IA64_BSP_REGNUM
, &bsp
);
967 if (status
!= REG_VALID
)
970 status
= regcache_cooked_read_unsigned (regcache
,
971 IA64_CFM_REGNUM
, &cfm
);
972 if (status
!= REG_VALID
)
975 /* The bsp points at the end of the register frame so we
976 subtract the size of frame from it to get start of
978 bsp
= rse_address_add (bsp
, -(cfm
& 0x7f));
980 if ((cfm
& 0x7f) > regnum
- V32_REGNUM
)
982 ULONGEST reg_addr
= rse_address_add (bsp
, (regnum
- V32_REGNUM
));
983 reg
= read_memory_integer ((CORE_ADDR
)reg_addr
, 8, byte_order
);
984 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
988 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
992 else if (IA64_NAT0_REGNUM
<= regnum
&& regnum
<= IA64_NAT31_REGNUM
)
996 status
= regcache_cooked_read_unsigned (regcache
, IA64_UNAT_REGNUM
, &unat
);
997 if (status
!= REG_VALID
)
999 unatN_val
= (unat
& (1LL << (regnum
- IA64_NAT0_REGNUM
))) != 0;
1000 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
1001 byte_order
, unatN_val
);
1003 else if (IA64_NAT32_REGNUM
<= regnum
&& regnum
<= IA64_NAT127_REGNUM
)
1005 ULONGEST natN_val
= 0;
1008 CORE_ADDR gr_addr
= 0;
1009 status
= regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, &bsp
);
1010 if (status
!= REG_VALID
)
1012 status
= regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
1013 if (status
!= REG_VALID
)
1016 /* The bsp points at the end of the register frame so we
1017 subtract the size of frame from it to get start of register frame. */
1018 bsp
= rse_address_add (bsp
, -(cfm
& 0x7f));
1020 if ((cfm
& 0x7f) > regnum
- V32_REGNUM
)
1021 gr_addr
= rse_address_add (bsp
, (regnum
- V32_REGNUM
));
1025 /* Compute address of nat collection bits. */
1026 CORE_ADDR nat_addr
= gr_addr
| 0x1f8;
1027 CORE_ADDR nat_collection
;
1029 /* If our nat collection address is bigger than bsp, we have to get
1030 the nat collection from rnat. Otherwise, we fetch the nat
1031 collection from the computed address. */
1032 if (nat_addr
>= bsp
)
1033 regcache_cooked_read_unsigned (regcache
, IA64_RNAT_REGNUM
,
1036 nat_collection
= read_memory_integer (nat_addr
, 8, byte_order
);
1037 nat_bit
= (gr_addr
>> 3) & 0x3f;
1038 natN_val
= (nat_collection
>> nat_bit
) & 1;
1041 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
1042 byte_order
, natN_val
);
1044 else if (regnum
== VBOF_REGNUM
)
1046 /* A virtual register frame start is provided for user convenience.
1047 It can be calculated as the bsp - sof (sizeof frame). */
1050 status
= regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, &bsp
);
1051 if (status
!= REG_VALID
)
1053 status
= regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
1054 if (status
!= REG_VALID
)
1057 /* The bsp points at the end of the register frame so we
1058 subtract the size of frame from it to get beginning of frame. */
1059 vbsp
= rse_address_add (bsp
, -(cfm
& 0x7f));
1060 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
1063 else if (VP0_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1068 status
= regcache_cooked_read_unsigned (regcache
, IA64_PR_REGNUM
, &pr
);
1069 if (status
!= REG_VALID
)
1071 status
= regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
1072 if (status
!= REG_VALID
)
1075 if (VP16_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1077 /* Fetch predicate register rename base from current frame
1078 marker for this frame. */
1079 int rrb_pr
= (cfm
>> 32) & 0x3f;
1081 /* Adjust the register number to account for register rotation. */
1082 regnum
= VP16_REGNUM
1083 + ((regnum
- VP16_REGNUM
) + rrb_pr
) % 48;
1085 prN_val
= (pr
& (1LL << (regnum
- VP0_REGNUM
))) != 0;
1086 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
1087 byte_order
, prN_val
);
1090 memset (buf
, 0, register_size (gdbarch
, regnum
));
1096 ia64_pseudo_register_write (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
1097 int regnum
, const gdb_byte
*buf
)
1099 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1101 if (regnum
>= V32_REGNUM
&& regnum
<= V127_REGNUM
)
1105 regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, &bsp
);
1106 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
1108 bsp
= rse_address_add (bsp
, -(cfm
& 0x7f));
1110 if ((cfm
& 0x7f) > regnum
- V32_REGNUM
)
1112 ULONGEST reg_addr
= rse_address_add (bsp
, (regnum
- V32_REGNUM
));
1113 write_memory (reg_addr
, buf
, 8);
1116 else if (IA64_NAT0_REGNUM
<= regnum
&& regnum
<= IA64_NAT31_REGNUM
)
1118 ULONGEST unatN_val
, unat
, unatN_mask
;
1119 regcache_cooked_read_unsigned (regcache
, IA64_UNAT_REGNUM
, &unat
);
1120 unatN_val
= extract_unsigned_integer (buf
, register_size (gdbarch
,
1123 unatN_mask
= (1LL << (regnum
- IA64_NAT0_REGNUM
));
1125 unat
&= ~unatN_mask
;
1126 else if (unatN_val
== 1)
1128 regcache_cooked_write_unsigned (regcache
, IA64_UNAT_REGNUM
, unat
);
1130 else if (IA64_NAT32_REGNUM
<= regnum
&& regnum
<= IA64_NAT127_REGNUM
)
1135 CORE_ADDR gr_addr
= 0;
1136 regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, &bsp
);
1137 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
1139 /* The bsp points at the end of the register frame so we
1140 subtract the size of frame from it to get start of register frame. */
1141 bsp
= rse_address_add (bsp
, -(cfm
& 0x7f));
1143 if ((cfm
& 0x7f) > regnum
- V32_REGNUM
)
1144 gr_addr
= rse_address_add (bsp
, (regnum
- V32_REGNUM
));
1146 natN_val
= extract_unsigned_integer (buf
, register_size (gdbarch
,
1150 if (gr_addr
!= 0 && (natN_val
== 0 || natN_val
== 1))
1152 /* Compute address of nat collection bits. */
1153 CORE_ADDR nat_addr
= gr_addr
| 0x1f8;
1154 CORE_ADDR nat_collection
;
1155 int natN_bit
= (gr_addr
>> 3) & 0x3f;
1156 ULONGEST natN_mask
= (1LL << natN_bit
);
1157 /* If our nat collection address is bigger than bsp, we have to get
1158 the nat collection from rnat. Otherwise, we fetch the nat
1159 collection from the computed address. */
1160 if (nat_addr
>= bsp
)
1162 regcache_cooked_read_unsigned (regcache
,
1166 nat_collection
|= natN_mask
;
1168 nat_collection
&= ~natN_mask
;
1169 regcache_cooked_write_unsigned (regcache
, IA64_RNAT_REGNUM
,
1174 gdb_byte nat_buf
[8];
1175 nat_collection
= read_memory_integer (nat_addr
, 8, byte_order
);
1177 nat_collection
|= natN_mask
;
1179 nat_collection
&= ~natN_mask
;
1180 store_unsigned_integer (nat_buf
, register_size (gdbarch
, regnum
),
1181 byte_order
, nat_collection
);
1182 write_memory (nat_addr
, nat_buf
, 8);
1186 else if (VP0_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1193 regcache_cooked_read_unsigned (regcache
, IA64_PR_REGNUM
, &pr
);
1194 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
1196 if (VP16_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1198 /* Fetch predicate register rename base from current frame
1199 marker for this frame. */
1200 int rrb_pr
= (cfm
>> 32) & 0x3f;
1202 /* Adjust the register number to account for register rotation. */
1203 regnum
= VP16_REGNUM
1204 + ((regnum
- VP16_REGNUM
) + rrb_pr
) % 48;
1206 prN_val
= extract_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
1208 prN_mask
= (1LL << (regnum
- VP0_REGNUM
));
1211 else if (prN_val
== 1)
1213 regcache_cooked_write_unsigned (regcache
, IA64_PR_REGNUM
, pr
);
1217 /* The ia64 needs to convert between various ieee floating-point formats
1218 and the special ia64 floating point register format. */
1221 ia64_convert_register_p (struct gdbarch
*gdbarch
, int regno
, struct type
*type
)
1223 return (regno
>= IA64_FR0_REGNUM
&& regno
<= IA64_FR127_REGNUM
1224 && TYPE_CODE (type
) == TYPE_CODE_FLT
1225 && type
!= ia64_ext_type (gdbarch
));
1229 ia64_register_to_value (struct frame_info
*frame
, int regnum
,
1230 struct type
*valtype
, gdb_byte
*out
,
1231 int *optimizedp
, int *unavailablep
)
1233 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
1234 gdb_byte in
[IA64_FP_REGISTER_SIZE
];
1236 /* Convert to TYPE. */
1237 if (!get_frame_register_bytes (frame
, regnum
, 0,
1238 register_size (gdbarch
, regnum
),
1239 in
, optimizedp
, unavailablep
))
1242 convert_typed_floating (in
, ia64_ext_type (gdbarch
), out
, valtype
);
1243 *optimizedp
= *unavailablep
= 0;
1248 ia64_value_to_register (struct frame_info
*frame
, int regnum
,
1249 struct type
*valtype
, const gdb_byte
*in
)
1251 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
1252 gdb_byte out
[IA64_FP_REGISTER_SIZE
];
1253 convert_typed_floating (in
, valtype
, out
, ia64_ext_type (gdbarch
));
1254 put_frame_register (frame
, regnum
, out
);
1258 /* Limit the number of skipped non-prologue instructions since examining
1259 of the prologue is expensive. */
1260 static int max_skip_non_prologue_insns
= 40;
1262 /* Given PC representing the starting address of a function, and
1263 LIM_PC which is the (sloppy) limit to which to scan when looking
1264 for a prologue, attempt to further refine this limit by using
1265 the line data in the symbol table. If successful, a better guess
1266 on where the prologue ends is returned, otherwise the previous
1267 value of lim_pc is returned. TRUST_LIMIT is a pointer to a flag
1268 which will be set to indicate whether the returned limit may be
1269 used with no further scanning in the event that the function is
1272 /* FIXME: cagney/2004-02-14: This function and logic have largely been
1273 superseded by skip_prologue_using_sal. */
1276 refine_prologue_limit (CORE_ADDR pc
, CORE_ADDR lim_pc
, int *trust_limit
)
1278 struct symtab_and_line prologue_sal
;
1279 CORE_ADDR start_pc
= pc
;
1282 /* The prologue can not possibly go past the function end itself,
1283 so we can already adjust LIM_PC accordingly. */
1284 if (find_pc_partial_function (pc
, NULL
, NULL
, &end_pc
) && end_pc
< lim_pc
)
1287 /* Start off not trusting the limit. */
1290 prologue_sal
= find_pc_line (pc
, 0);
1291 if (prologue_sal
.line
!= 0)
1294 CORE_ADDR addr
= prologue_sal
.end
;
1296 /* Handle the case in which compiler's optimizer/scheduler
1297 has moved instructions into the prologue. We scan ahead
1298 in the function looking for address ranges whose corresponding
1299 line number is less than or equal to the first one that we
1300 found for the function. (It can be less than when the
1301 scheduler puts a body instruction before the first prologue
1303 for (i
= 2 * max_skip_non_prologue_insns
;
1304 i
> 0 && (lim_pc
== 0 || addr
< lim_pc
);
1307 struct symtab_and_line sal
;
1309 sal
= find_pc_line (addr
, 0);
1312 if (sal
.line
<= prologue_sal
.line
1313 && sal
.symtab
== prologue_sal
.symtab
)
1320 if (lim_pc
== 0 || prologue_sal
.end
< lim_pc
)
1322 lim_pc
= prologue_sal
.end
;
1323 if (start_pc
== get_pc_function_start (lim_pc
))
1330 #define isScratch(_regnum_) ((_regnum_) == 2 || (_regnum_) == 3 \
1331 || (8 <= (_regnum_) && (_regnum_) <= 11) \
1332 || (14 <= (_regnum_) && (_regnum_) <= 31))
1333 #define imm9(_instr_) \
1334 ( ((((_instr_) & 0x01000000000LL) ? -1 : 0) << 8) \
1335 | (((_instr_) & 0x00008000000LL) >> 20) \
1336 | (((_instr_) & 0x00000001fc0LL) >> 6))
1338 /* Allocate and initialize a frame cache. */
1340 static struct ia64_frame_cache
*
1341 ia64_alloc_frame_cache (void)
1343 struct ia64_frame_cache
*cache
;
1346 cache
= FRAME_OBSTACK_ZALLOC (struct ia64_frame_cache
);
1352 cache
->prev_cfm
= 0;
1358 cache
->frameless
= 1;
1360 for (i
= 0; i
< NUM_IA64_RAW_REGS
; i
++)
1361 cache
->saved_regs
[i
] = 0;
1367 examine_prologue (CORE_ADDR pc
, CORE_ADDR lim_pc
,
1368 struct frame_info
*this_frame
,
1369 struct ia64_frame_cache
*cache
)
1372 CORE_ADDR last_prologue_pc
= pc
;
1373 instruction_type it
;
1378 int unat_save_reg
= 0;
1379 int pr_save_reg
= 0;
1380 int mem_stack_frame_size
= 0;
1382 CORE_ADDR spill_addr
= 0;
1385 char reg_contents
[256];
1391 CORE_ADDR bof
, sor
, sol
, sof
, cfm
, rrb_gr
;
1393 memset (instores
, 0, sizeof instores
);
1394 memset (infpstores
, 0, sizeof infpstores
);
1395 memset (reg_contents
, 0, sizeof reg_contents
);
1397 if (cache
->after_prologue
!= 0
1398 && cache
->after_prologue
<= lim_pc
)
1399 return cache
->after_prologue
;
1401 lim_pc
= refine_prologue_limit (pc
, lim_pc
, &trust_limit
);
1402 next_pc
= fetch_instruction (pc
, &it
, &instr
);
1404 /* We want to check if we have a recognizable function start before we
1405 look ahead for a prologue. */
1406 if (pc
< lim_pc
&& next_pc
1407 && it
== M
&& ((instr
& 0x1ee0000003fLL
) == 0x02c00000000LL
))
1409 /* alloc - start of a regular function. */
1410 int sol
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1411 int sof
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1412 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1414 /* Verify that the current cfm matches what we think is the
1415 function start. If we have somehow jumped within a function,
1416 we do not want to interpret the prologue and calculate the
1417 addresses of various registers such as the return address.
1418 We will instead treat the frame as frameless. */
1420 (sof
== (cache
->cfm
& 0x7f) &&
1421 sol
== ((cache
->cfm
>> 7) & 0x7f)))
1425 last_prologue_pc
= next_pc
;
1430 /* Look for a leaf routine. */
1431 if (pc
< lim_pc
&& next_pc
1432 && (it
== I
|| it
== M
)
1433 && ((instr
& 0x1ee00000000LL
) == 0x10800000000LL
))
1435 /* adds rN = imm14, rM (or mov rN, rM when imm14 is 0) */
1436 int imm
= (int) ((((instr
& 0x01000000000LL
) ? -1 : 0) << 13)
1437 | ((instr
& 0x001f8000000LL
) >> 20)
1438 | ((instr
& 0x000000fe000LL
) >> 13));
1439 int rM
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1440 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1441 int qp
= (int) (instr
& 0x0000000003fLL
);
1442 if (qp
== 0 && rN
== 2 && imm
== 0 && rM
== 12 && fp_reg
== 0)
1444 /* mov r2, r12 - beginning of leaf routine. */
1446 last_prologue_pc
= next_pc
;
1450 /* If we don't recognize a regular function or leaf routine, we are
1456 last_prologue_pc
= lim_pc
;
1460 /* Loop, looking for prologue instructions, keeping track of
1461 where preserved registers were spilled. */
1464 next_pc
= fetch_instruction (pc
, &it
, &instr
);
1468 if (it
== B
&& ((instr
& 0x1e1f800003fLL
) != 0x04000000000LL
))
1470 /* Exit loop upon hitting a non-nop branch instruction. */
1475 else if (((instr
& 0x3fLL
) != 0LL) &&
1476 (frameless
|| ret_reg
!= 0))
1478 /* Exit loop upon hitting a predicated instruction if
1479 we already have the return register or if we are frameless. */
1484 else if (it
== I
&& ((instr
& 0x1eff8000000LL
) == 0x00188000000LL
))
1487 int b2
= (int) ((instr
& 0x0000000e000LL
) >> 13);
1488 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1489 int qp
= (int) (instr
& 0x0000000003f);
1491 if (qp
== 0 && b2
== 0 && rN
>= 32 && ret_reg
== 0)
1494 last_prologue_pc
= next_pc
;
1497 else if ((it
== I
|| it
== M
)
1498 && ((instr
& 0x1ee00000000LL
) == 0x10800000000LL
))
1500 /* adds rN = imm14, rM (or mov rN, rM when imm14 is 0) */
1501 int imm
= (int) ((((instr
& 0x01000000000LL
) ? -1 : 0) << 13)
1502 | ((instr
& 0x001f8000000LL
) >> 20)
1503 | ((instr
& 0x000000fe000LL
) >> 13));
1504 int rM
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1505 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1506 int qp
= (int) (instr
& 0x0000000003fLL
);
1508 if (qp
== 0 && rN
>= 32 && imm
== 0 && rM
== 12 && fp_reg
== 0)
1512 last_prologue_pc
= next_pc
;
1514 else if (qp
== 0 && rN
== 12 && rM
== 12)
1516 /* adds r12, -mem_stack_frame_size, r12 */
1517 mem_stack_frame_size
-= imm
;
1518 last_prologue_pc
= next_pc
;
1520 else if (qp
== 0 && rN
== 2
1521 && ((rM
== fp_reg
&& fp_reg
!= 0) || rM
== 12))
1523 CORE_ADDR saved_sp
= 0;
1524 /* adds r2, spilloffset, rFramePointer
1526 adds r2, spilloffset, r12
1528 Get ready for stf.spill or st8.spill instructions.
1529 The address to start spilling at is loaded into r2.
1530 FIXME: Why r2? That's what gcc currently uses; it
1531 could well be different for other compilers. */
1533 /* Hmm... whether or not this will work will depend on
1534 where the pc is. If it's still early in the prologue
1535 this'll be wrong. FIXME */
1538 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1539 saved_sp
= get_frame_register_unsigned (this_frame
,
1542 spill_addr
= saved_sp
1543 + (rM
== 12 ? 0 : mem_stack_frame_size
)
1546 last_prologue_pc
= next_pc
;
1548 else if (qp
== 0 && rM
>= 32 && rM
< 40 && !instores
[rM
-32] &&
1549 rN
< 256 && imm
== 0)
1551 /* mov rN, rM where rM is an input register. */
1552 reg_contents
[rN
] = rM
;
1553 last_prologue_pc
= next_pc
;
1555 else if (frameless
&& qp
== 0 && rN
== fp_reg
&& imm
== 0 &&
1559 last_prologue_pc
= next_pc
;
1564 && ( ((instr
& 0x1efc0000000LL
) == 0x0eec0000000LL
)
1565 || ((instr
& 0x1ffc8000000LL
) == 0x0cec0000000LL
) ))
1567 /* stf.spill [rN] = fM, imm9
1569 stf.spill [rN] = fM */
1571 int imm
= imm9(instr
);
1572 int rN
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1573 int fM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1574 int qp
= (int) (instr
& 0x0000000003fLL
);
1575 if (qp
== 0 && rN
== spill_reg
&& spill_addr
!= 0
1576 && ((2 <= fM
&& fM
<= 5) || (16 <= fM
&& fM
<= 31)))
1578 cache
->saved_regs
[IA64_FR0_REGNUM
+ fM
] = spill_addr
;
1580 if ((instr
& 0x1efc0000000LL
) == 0x0eec0000000LL
)
1583 spill_addr
= 0; /* last one; must be done. */
1584 last_prologue_pc
= next_pc
;
1587 else if ((it
== M
&& ((instr
& 0x1eff8000000LL
) == 0x02110000000LL
))
1588 || (it
== I
&& ((instr
& 0x1eff8000000LL
) == 0x00050000000LL
)) )
1594 int arM
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1595 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1596 int qp
= (int) (instr
& 0x0000000003fLL
);
1597 if (qp
== 0 && isScratch (rN
) && arM
== 36 /* ar.unat */)
1599 /* We have something like "mov.m r3 = ar.unat". Remember the
1600 r3 (or whatever) and watch for a store of this register... */
1602 last_prologue_pc
= next_pc
;
1605 else if (it
== I
&& ((instr
& 0x1eff8000000LL
) == 0x00198000000LL
))
1608 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1609 int qp
= (int) (instr
& 0x0000000003fLL
);
1610 if (qp
== 0 && isScratch (rN
))
1613 last_prologue_pc
= next_pc
;
1617 && ( ((instr
& 0x1ffc8000000LL
) == 0x08cc0000000LL
)
1618 || ((instr
& 0x1efc0000000LL
) == 0x0acc0000000LL
)))
1622 st8 [rN] = rM, imm9 */
1623 int rN
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1624 int rM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1625 int qp
= (int) (instr
& 0x0000000003fLL
);
1626 int indirect
= rM
< 256 ? reg_contents
[rM
] : 0;
1627 if (qp
== 0 && rN
== spill_reg
&& spill_addr
!= 0
1628 && (rM
== unat_save_reg
|| rM
== pr_save_reg
))
1630 /* We've found a spill of either the UNAT register or the PR
1631 register. (Well, not exactly; what we've actually found is
1632 a spill of the register that UNAT or PR was moved to).
1633 Record that fact and move on... */
1634 if (rM
== unat_save_reg
)
1636 /* Track UNAT register. */
1637 cache
->saved_regs
[IA64_UNAT_REGNUM
] = spill_addr
;
1642 /* Track PR register. */
1643 cache
->saved_regs
[IA64_PR_REGNUM
] = spill_addr
;
1646 if ((instr
& 0x1efc0000000LL
) == 0x0acc0000000LL
)
1647 /* st8 [rN] = rM, imm9 */
1648 spill_addr
+= imm9(instr
);
1650 spill_addr
= 0; /* Must be done spilling. */
1651 last_prologue_pc
= next_pc
;
1653 else if (qp
== 0 && 32 <= rM
&& rM
< 40 && !instores
[rM
-32])
1655 /* Allow up to one store of each input register. */
1656 instores
[rM
-32] = 1;
1657 last_prologue_pc
= next_pc
;
1659 else if (qp
== 0 && 32 <= indirect
&& indirect
< 40 &&
1660 !instores
[indirect
-32])
1662 /* Allow an indirect store of an input register. */
1663 instores
[indirect
-32] = 1;
1664 last_prologue_pc
= next_pc
;
1667 else if (it
== M
&& ((instr
& 0x1ff08000000LL
) == 0x08c00000000LL
))
1674 Note that the st8 case is handled in the clause above.
1676 Advance over stores of input registers. One store per input
1677 register is permitted. */
1678 int rM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1679 int qp
= (int) (instr
& 0x0000000003fLL
);
1680 int indirect
= rM
< 256 ? reg_contents
[rM
] : 0;
1681 if (qp
== 0 && 32 <= rM
&& rM
< 40 && !instores
[rM
-32])
1683 instores
[rM
-32] = 1;
1684 last_prologue_pc
= next_pc
;
1686 else if (qp
== 0 && 32 <= indirect
&& indirect
< 40 &&
1687 !instores
[indirect
-32])
1689 /* Allow an indirect store of an input register. */
1690 instores
[indirect
-32] = 1;
1691 last_prologue_pc
= next_pc
;
1694 else if (it
== M
&& ((instr
& 0x1ff88000000LL
) == 0x0cc80000000LL
))
1701 Advance over stores of floating point input registers. Again
1702 one store per register is permitted. */
1703 int fM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1704 int qp
= (int) (instr
& 0x0000000003fLL
);
1705 if (qp
== 0 && 8 <= fM
&& fM
< 16 && !infpstores
[fM
- 8])
1707 infpstores
[fM
-8] = 1;
1708 last_prologue_pc
= next_pc
;
1712 && ( ((instr
& 0x1ffc8000000LL
) == 0x08ec0000000LL
)
1713 || ((instr
& 0x1efc0000000LL
) == 0x0aec0000000LL
)))
1715 /* st8.spill [rN] = rM
1717 st8.spill [rN] = rM, imm9 */
1718 int rN
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1719 int rM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1720 int qp
= (int) (instr
& 0x0000000003fLL
);
1721 if (qp
== 0 && rN
== spill_reg
&& 4 <= rM
&& rM
<= 7)
1723 /* We've found a spill of one of the preserved general purpose
1724 regs. Record the spill address and advance the spill
1725 register if appropriate. */
1726 cache
->saved_regs
[IA64_GR0_REGNUM
+ rM
] = spill_addr
;
1727 if ((instr
& 0x1efc0000000LL
) == 0x0aec0000000LL
)
1728 /* st8.spill [rN] = rM, imm9 */
1729 spill_addr
+= imm9(instr
);
1731 spill_addr
= 0; /* Done spilling. */
1732 last_prologue_pc
= next_pc
;
1739 /* If not frameless and we aren't called by skip_prologue, then we need
1740 to calculate registers for the previous frame which will be needed
1743 if (!frameless
&& this_frame
)
1745 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1746 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1748 /* Extract the size of the rotating portion of the stack
1749 frame and the register rename base from the current
1755 rrb_gr
= (cfm
>> 18) & 0x7f;
1757 /* Find the bof (beginning of frame). */
1758 bof
= rse_address_add (cache
->bsp
, -sof
);
1760 for (i
= 0, addr
= bof
;
1764 if (IS_NaT_COLLECTION_ADDR (addr
))
1768 if (i
+32 == cfm_reg
)
1769 cache
->saved_regs
[IA64_CFM_REGNUM
] = addr
;
1770 if (i
+32 == ret_reg
)
1771 cache
->saved_regs
[IA64_VRAP_REGNUM
] = addr
;
1773 cache
->saved_regs
[IA64_VFP_REGNUM
] = addr
;
1776 /* For the previous argument registers we require the previous bof.
1777 If we can't find the previous cfm, then we can do nothing. */
1779 if (cache
->saved_regs
[IA64_CFM_REGNUM
] != 0)
1781 cfm
= read_memory_integer (cache
->saved_regs
[IA64_CFM_REGNUM
],
1784 else if (cfm_reg
!= 0)
1786 get_frame_register (this_frame
, cfm_reg
, buf
);
1787 cfm
= extract_unsigned_integer (buf
, 8, byte_order
);
1789 cache
->prev_cfm
= cfm
;
1793 sor
= ((cfm
>> 14) & 0xf) * 8;
1795 sol
= (cfm
>> 7) & 0x7f;
1796 rrb_gr
= (cfm
>> 18) & 0x7f;
1798 /* The previous bof only requires subtraction of the sol (size of
1799 locals) due to the overlap between output and input of
1800 subsequent frames. */
1801 bof
= rse_address_add (bof
, -sol
);
1803 for (i
= 0, addr
= bof
;
1807 if (IS_NaT_COLLECTION_ADDR (addr
))
1812 cache
->saved_regs
[IA64_GR32_REGNUM
1813 + ((i
+ (sor
- rrb_gr
)) % sor
)]
1816 cache
->saved_regs
[IA64_GR32_REGNUM
+ i
] = addr
;
1822 /* Try and trust the lim_pc value whenever possible. */
1823 if (trust_limit
&& lim_pc
>= last_prologue_pc
)
1824 last_prologue_pc
= lim_pc
;
1826 cache
->frameless
= frameless
;
1827 cache
->after_prologue
= last_prologue_pc
;
1828 cache
->mem_stack_frame_size
= mem_stack_frame_size
;
1829 cache
->fp_reg
= fp_reg
;
1831 return last_prologue_pc
;
1835 ia64_skip_prologue (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
1837 struct ia64_frame_cache cache
;
1839 cache
.after_prologue
= 0;
1843 /* Call examine_prologue with - as third argument since we don't
1844 have a next frame pointer to send. */
1845 return examine_prologue (pc
, pc
+1024, 0, &cache
);
1849 /* Normal frames. */
1851 static struct ia64_frame_cache
*
1852 ia64_frame_cache (struct frame_info
*this_frame
, void **this_cache
)
1854 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1855 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1856 struct ia64_frame_cache
*cache
;
1861 return (struct ia64_frame_cache
*) *this_cache
;
1863 cache
= ia64_alloc_frame_cache ();
1864 *this_cache
= cache
;
1866 get_frame_register (this_frame
, sp_regnum
, buf
);
1867 cache
->saved_sp
= extract_unsigned_integer (buf
, 8, byte_order
);
1869 /* We always want the bsp to point to the end of frame.
1870 This way, we can always get the beginning of frame (bof)
1871 by subtracting frame size. */
1872 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
1873 cache
->bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
1875 get_frame_register (this_frame
, IA64_PSR_REGNUM
, buf
);
1877 get_frame_register (this_frame
, IA64_CFM_REGNUM
, buf
);
1878 cfm
= extract_unsigned_integer (buf
, 8, byte_order
);
1880 cache
->sof
= (cfm
& 0x7f);
1881 cache
->sol
= (cfm
>> 7) & 0x7f;
1882 cache
->sor
= ((cfm
>> 14) & 0xf) * 8;
1886 cache
->pc
= get_frame_func (this_frame
);
1889 examine_prologue (cache
->pc
, get_frame_pc (this_frame
), this_frame
, cache
);
1891 cache
->base
= cache
->saved_sp
+ cache
->mem_stack_frame_size
;
1897 ia64_frame_this_id (struct frame_info
*this_frame
, void **this_cache
,
1898 struct frame_id
*this_id
)
1900 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1901 struct ia64_frame_cache
*cache
=
1902 ia64_frame_cache (this_frame
, this_cache
);
1904 /* If outermost frame, mark with null frame id. */
1905 if (cache
->base
!= 0)
1906 (*this_id
) = frame_id_build_special (cache
->base
, cache
->pc
, cache
->bsp
);
1907 if (gdbarch_debug
>= 1)
1908 fprintf_unfiltered (gdb_stdlog
,
1909 "regular frame id: code %s, stack %s, "
1910 "special %s, this_frame %s\n",
1911 paddress (gdbarch
, this_id
->code_addr
),
1912 paddress (gdbarch
, this_id
->stack_addr
),
1913 paddress (gdbarch
, cache
->bsp
),
1914 host_address_to_string (this_frame
));
1917 static struct value
*
1918 ia64_frame_prev_register (struct frame_info
*this_frame
, void **this_cache
,
1921 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1922 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1923 struct ia64_frame_cache
*cache
= ia64_frame_cache (this_frame
, this_cache
);
1926 gdb_assert (regnum
>= 0);
1928 if (!target_has_registers
)
1929 error (_("No registers."));
1931 if (regnum
== gdbarch_sp_regnum (gdbarch
))
1932 return frame_unwind_got_constant (this_frame
, regnum
, cache
->base
);
1934 else if (regnum
== IA64_BSP_REGNUM
)
1937 CORE_ADDR prev_cfm
, bsp
, prev_bsp
;
1939 /* We want to calculate the previous bsp as the end of the previous
1940 register stack frame. This corresponds to what the hardware bsp
1941 register will be if we pop the frame back which is why we might
1942 have been called. We know the beginning of the current frame is
1943 cache->bsp - cache->sof. This value in the previous frame points
1944 to the start of the output registers. We can calculate the end of
1945 that frame by adding the size of output:
1946 (sof (size of frame) - sol (size of locals)). */
1947 val
= ia64_frame_prev_register (this_frame
, this_cache
, IA64_CFM_REGNUM
);
1948 prev_cfm
= extract_unsigned_integer (value_contents_all (val
),
1950 bsp
= rse_address_add (cache
->bsp
, -(cache
->sof
));
1952 rse_address_add (bsp
, (prev_cfm
& 0x7f) - ((prev_cfm
>> 7) & 0x7f));
1954 return frame_unwind_got_constant (this_frame
, regnum
, prev_bsp
);
1957 else if (regnum
== IA64_CFM_REGNUM
)
1959 CORE_ADDR addr
= cache
->saved_regs
[IA64_CFM_REGNUM
];
1962 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
1964 if (cache
->prev_cfm
)
1965 return frame_unwind_got_constant (this_frame
, regnum
, cache
->prev_cfm
);
1967 if (cache
->frameless
)
1968 return frame_unwind_got_register (this_frame
, IA64_PFS_REGNUM
,
1970 return frame_unwind_got_register (this_frame
, regnum
, 0);
1973 else if (regnum
== IA64_VFP_REGNUM
)
1975 /* If the function in question uses an automatic register (r32-r127)
1976 for the frame pointer, it'll be found by ia64_find_saved_register()
1977 above. If the function lacks one of these frame pointers, we can
1978 still provide a value since we know the size of the frame. */
1979 return frame_unwind_got_constant (this_frame
, regnum
, cache
->base
);
1982 else if (VP0_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1984 struct value
*pr_val
;
1987 pr_val
= ia64_frame_prev_register (this_frame
, this_cache
,
1989 if (VP16_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1991 /* Fetch predicate register rename base from current frame
1992 marker for this frame. */
1993 int rrb_pr
= (cache
->cfm
>> 32) & 0x3f;
1995 /* Adjust the register number to account for register rotation. */
1996 regnum
= VP16_REGNUM
+ ((regnum
- VP16_REGNUM
) + rrb_pr
) % 48;
1998 prN
= extract_bit_field (value_contents_all (pr_val
),
1999 regnum
- VP0_REGNUM
, 1);
2000 return frame_unwind_got_constant (this_frame
, regnum
, prN
);
2003 else if (IA64_NAT0_REGNUM
<= regnum
&& regnum
<= IA64_NAT31_REGNUM
)
2005 struct value
*unat_val
;
2007 unat_val
= ia64_frame_prev_register (this_frame
, this_cache
,
2009 unatN
= extract_bit_field (value_contents_all (unat_val
),
2010 regnum
- IA64_NAT0_REGNUM
, 1);
2011 return frame_unwind_got_constant (this_frame
, regnum
, unatN
);
2014 else if (IA64_NAT32_REGNUM
<= regnum
&& regnum
<= IA64_NAT127_REGNUM
)
2017 /* Find address of general register corresponding to nat bit we're
2021 gr_addr
= cache
->saved_regs
[regnum
- IA64_NAT0_REGNUM
+ IA64_GR0_REGNUM
];
2025 /* Compute address of nat collection bits. */
2026 CORE_ADDR nat_addr
= gr_addr
| 0x1f8;
2028 CORE_ADDR nat_collection
;
2031 /* If our nat collection address is bigger than bsp, we have to get
2032 the nat collection from rnat. Otherwise, we fetch the nat
2033 collection from the computed address. */
2034 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
2035 bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
2036 if (nat_addr
>= bsp
)
2038 get_frame_register (this_frame
, IA64_RNAT_REGNUM
, buf
);
2039 nat_collection
= extract_unsigned_integer (buf
, 8, byte_order
);
2042 nat_collection
= read_memory_integer (nat_addr
, 8, byte_order
);
2043 nat_bit
= (gr_addr
>> 3) & 0x3f;
2044 natval
= (nat_collection
>> nat_bit
) & 1;
2047 return frame_unwind_got_constant (this_frame
, regnum
, natval
);
2050 else if (regnum
== IA64_IP_REGNUM
)
2053 CORE_ADDR addr
= cache
->saved_regs
[IA64_VRAP_REGNUM
];
2057 read_memory (addr
, buf
, register_size (gdbarch
, IA64_IP_REGNUM
));
2058 pc
= extract_unsigned_integer (buf
, 8, byte_order
);
2060 else if (cache
->frameless
)
2062 get_frame_register (this_frame
, IA64_BR0_REGNUM
, buf
);
2063 pc
= extract_unsigned_integer (buf
, 8, byte_order
);
2066 return frame_unwind_got_constant (this_frame
, regnum
, pc
);
2069 else if (regnum
== IA64_PSR_REGNUM
)
2071 /* We don't know how to get the complete previous PSR, but we need it
2072 for the slot information when we unwind the pc (pc is formed of IP
2073 register plus slot information from PSR). To get the previous
2074 slot information, we mask it off the return address. */
2075 ULONGEST slot_num
= 0;
2078 CORE_ADDR addr
= cache
->saved_regs
[IA64_VRAP_REGNUM
];
2080 get_frame_register (this_frame
, IA64_PSR_REGNUM
, buf
);
2081 psr
= extract_unsigned_integer (buf
, 8, byte_order
);
2085 read_memory (addr
, buf
, register_size (gdbarch
, IA64_IP_REGNUM
));
2086 pc
= extract_unsigned_integer (buf
, 8, byte_order
);
2088 else if (cache
->frameless
)
2090 get_frame_register (this_frame
, IA64_BR0_REGNUM
, buf
);
2091 pc
= extract_unsigned_integer (buf
, 8, byte_order
);
2093 psr
&= ~(3LL << 41);
2094 slot_num
= pc
& 0x3LL
;
2095 psr
|= (CORE_ADDR
)slot_num
<< 41;
2096 return frame_unwind_got_constant (this_frame
, regnum
, psr
);
2099 else if (regnum
== IA64_BR0_REGNUM
)
2101 CORE_ADDR addr
= cache
->saved_regs
[IA64_BR0_REGNUM
];
2104 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2106 return frame_unwind_got_constant (this_frame
, regnum
, 0);
2109 else if ((regnum
>= IA64_GR32_REGNUM
&& regnum
<= IA64_GR127_REGNUM
)
2110 || (regnum
>= V32_REGNUM
&& regnum
<= V127_REGNUM
))
2114 if (regnum
>= V32_REGNUM
)
2115 regnum
= IA64_GR32_REGNUM
+ (regnum
- V32_REGNUM
);
2116 addr
= cache
->saved_regs
[regnum
];
2118 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2120 if (cache
->frameless
)
2122 struct value
*reg_val
;
2123 CORE_ADDR prev_cfm
, prev_bsp
, prev_bof
;
2125 /* FIXME: brobecker/2008-05-01: Doesn't this seem redundant
2126 with the same code above? */
2127 if (regnum
>= V32_REGNUM
)
2128 regnum
= IA64_GR32_REGNUM
+ (regnum
- V32_REGNUM
);
2129 reg_val
= ia64_frame_prev_register (this_frame
, this_cache
,
2131 prev_cfm
= extract_unsigned_integer (value_contents_all (reg_val
),
2133 reg_val
= ia64_frame_prev_register (this_frame
, this_cache
,
2135 prev_bsp
= extract_unsigned_integer (value_contents_all (reg_val
),
2137 prev_bof
= rse_address_add (prev_bsp
, -(prev_cfm
& 0x7f));
2139 addr
= rse_address_add (prev_bof
, (regnum
- IA64_GR32_REGNUM
));
2140 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2143 return frame_unwind_got_constant (this_frame
, regnum
, 0);
2146 else /* All other registers. */
2150 if (IA64_FR32_REGNUM
<= regnum
&& regnum
<= IA64_FR127_REGNUM
)
2152 /* Fetch floating point register rename base from current
2153 frame marker for this frame. */
2154 int rrb_fr
= (cache
->cfm
>> 25) & 0x7f;
2156 /* Adjust the floating point register number to account for
2157 register rotation. */
2158 regnum
= IA64_FR32_REGNUM
2159 + ((regnum
- IA64_FR32_REGNUM
) + rrb_fr
) % 96;
2162 /* If we have stored a memory address, access the register. */
2163 addr
= cache
->saved_regs
[regnum
];
2165 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2166 /* Otherwise, punt and get the current value of the register. */
2168 return frame_unwind_got_register (this_frame
, regnum
, regnum
);
2172 static const struct frame_unwind ia64_frame_unwind
=
2175 default_frame_unwind_stop_reason
,
2176 &ia64_frame_this_id
,
2177 &ia64_frame_prev_register
,
2179 default_frame_sniffer
2182 /* Signal trampolines. */
2185 ia64_sigtramp_frame_init_saved_regs (struct frame_info
*this_frame
,
2186 struct ia64_frame_cache
*cache
)
2188 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2189 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
2191 if (tdep
->sigcontext_register_address
)
2195 cache
->saved_regs
[IA64_VRAP_REGNUM
]
2196 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2198 cache
->saved_regs
[IA64_CFM_REGNUM
]
2199 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2201 cache
->saved_regs
[IA64_PSR_REGNUM
]
2202 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2204 cache
->saved_regs
[IA64_BSP_REGNUM
]
2205 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2207 cache
->saved_regs
[IA64_RNAT_REGNUM
]
2208 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2210 cache
->saved_regs
[IA64_CCV_REGNUM
]
2211 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2213 cache
->saved_regs
[IA64_UNAT_REGNUM
]
2214 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2216 cache
->saved_regs
[IA64_FPSR_REGNUM
]
2217 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2219 cache
->saved_regs
[IA64_PFS_REGNUM
]
2220 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2222 cache
->saved_regs
[IA64_LC_REGNUM
]
2223 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2226 for (regno
= IA64_GR1_REGNUM
; regno
<= IA64_GR31_REGNUM
; regno
++)
2227 cache
->saved_regs
[regno
] =
2228 tdep
->sigcontext_register_address (gdbarch
, cache
->base
, regno
);
2229 for (regno
= IA64_BR0_REGNUM
; regno
<= IA64_BR7_REGNUM
; regno
++)
2230 cache
->saved_regs
[regno
] =
2231 tdep
->sigcontext_register_address (gdbarch
, cache
->base
, regno
);
2232 for (regno
= IA64_FR2_REGNUM
; regno
<= IA64_FR31_REGNUM
; regno
++)
2233 cache
->saved_regs
[regno
] =
2234 tdep
->sigcontext_register_address (gdbarch
, cache
->base
, regno
);
2238 static struct ia64_frame_cache
*
2239 ia64_sigtramp_frame_cache (struct frame_info
*this_frame
, void **this_cache
)
2241 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2242 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2243 struct ia64_frame_cache
*cache
;
2247 return (struct ia64_frame_cache
*) *this_cache
;
2249 cache
= ia64_alloc_frame_cache ();
2251 get_frame_register (this_frame
, sp_regnum
, buf
);
2252 /* Note that frame size is hard-coded below. We cannot calculate it
2253 via prologue examination. */
2254 cache
->base
= extract_unsigned_integer (buf
, 8, byte_order
) + 16;
2256 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
2257 cache
->bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
2259 get_frame_register (this_frame
, IA64_CFM_REGNUM
, buf
);
2260 cache
->cfm
= extract_unsigned_integer (buf
, 8, byte_order
);
2261 cache
->sof
= cache
->cfm
& 0x7f;
2263 ia64_sigtramp_frame_init_saved_regs (this_frame
, cache
);
2265 *this_cache
= cache
;
2270 ia64_sigtramp_frame_this_id (struct frame_info
*this_frame
,
2271 void **this_cache
, struct frame_id
*this_id
)
2273 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2274 struct ia64_frame_cache
*cache
=
2275 ia64_sigtramp_frame_cache (this_frame
, this_cache
);
2277 (*this_id
) = frame_id_build_special (cache
->base
,
2278 get_frame_pc (this_frame
),
2280 if (gdbarch_debug
>= 1)
2281 fprintf_unfiltered (gdb_stdlog
,
2282 "sigtramp frame id: code %s, stack %s, "
2283 "special %s, this_frame %s\n",
2284 paddress (gdbarch
, this_id
->code_addr
),
2285 paddress (gdbarch
, this_id
->stack_addr
),
2286 paddress (gdbarch
, cache
->bsp
),
2287 host_address_to_string (this_frame
));
2290 static struct value
*
2291 ia64_sigtramp_frame_prev_register (struct frame_info
*this_frame
,
2292 void **this_cache
, int regnum
)
2294 struct ia64_frame_cache
*cache
=
2295 ia64_sigtramp_frame_cache (this_frame
, this_cache
);
2297 gdb_assert (regnum
>= 0);
2299 if (!target_has_registers
)
2300 error (_("No registers."));
2302 if (regnum
== IA64_IP_REGNUM
)
2305 CORE_ADDR addr
= cache
->saved_regs
[IA64_VRAP_REGNUM
];
2309 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2310 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2311 pc
= read_memory_unsigned_integer (addr
, 8, byte_order
);
2314 return frame_unwind_got_constant (this_frame
, regnum
, pc
);
2317 else if ((regnum
>= IA64_GR32_REGNUM
&& regnum
<= IA64_GR127_REGNUM
)
2318 || (regnum
>= V32_REGNUM
&& regnum
<= V127_REGNUM
))
2322 if (regnum
>= V32_REGNUM
)
2323 regnum
= IA64_GR32_REGNUM
+ (regnum
- V32_REGNUM
);
2324 addr
= cache
->saved_regs
[regnum
];
2326 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2328 return frame_unwind_got_constant (this_frame
, regnum
, 0);
2331 else /* All other registers not listed above. */
2333 CORE_ADDR addr
= cache
->saved_regs
[regnum
];
2336 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2338 return frame_unwind_got_constant (this_frame
, regnum
, 0);
2343 ia64_sigtramp_frame_sniffer (const struct frame_unwind
*self
,
2344 struct frame_info
*this_frame
,
2347 struct gdbarch_tdep
*tdep
= gdbarch_tdep (get_frame_arch (this_frame
));
2348 if (tdep
->pc_in_sigtramp
)
2350 CORE_ADDR pc
= get_frame_pc (this_frame
);
2352 if (tdep
->pc_in_sigtramp (pc
))
2359 static const struct frame_unwind ia64_sigtramp_frame_unwind
=
2362 default_frame_unwind_stop_reason
,
2363 ia64_sigtramp_frame_this_id
,
2364 ia64_sigtramp_frame_prev_register
,
2366 ia64_sigtramp_frame_sniffer
2372 ia64_frame_base_address (struct frame_info
*this_frame
, void **this_cache
)
2374 struct ia64_frame_cache
*cache
= ia64_frame_cache (this_frame
, this_cache
);
2379 static const struct frame_base ia64_frame_base
=
2382 ia64_frame_base_address
,
2383 ia64_frame_base_address
,
2384 ia64_frame_base_address
2387 #ifdef HAVE_LIBUNWIND_IA64_H
2389 struct ia64_unwind_table_entry
2391 unw_word_t start_offset
;
2392 unw_word_t end_offset
;
2393 unw_word_t info_offset
;
2396 static __inline__
uint64_t
2397 ia64_rse_slot_num (uint64_t addr
)
2399 return (addr
>> 3) & 0x3f;
2402 /* Skip over a designated number of registers in the backing
2403 store, remembering every 64th position is for NAT. */
2404 static __inline__
uint64_t
2405 ia64_rse_skip_regs (uint64_t addr
, long num_regs
)
2407 long delta
= ia64_rse_slot_num(addr
) + num_regs
;
2411 return addr
+ ((num_regs
+ delta
/0x3f) << 3);
2414 /* Gdb ia64-libunwind-tdep callback function to convert from an ia64 gdb
2415 register number to a libunwind register number. */
2417 ia64_gdb2uw_regnum (int regnum
)
2419 if (regnum
== sp_regnum
)
2421 else if (regnum
== IA64_BSP_REGNUM
)
2422 return UNW_IA64_BSP
;
2423 else if ((unsigned) (regnum
- IA64_GR0_REGNUM
) < 128)
2424 return UNW_IA64_GR
+ (regnum
- IA64_GR0_REGNUM
);
2425 else if ((unsigned) (regnum
- V32_REGNUM
) < 95)
2426 return UNW_IA64_GR
+ 32 + (regnum
- V32_REGNUM
);
2427 else if ((unsigned) (regnum
- IA64_FR0_REGNUM
) < 128)
2428 return UNW_IA64_FR
+ (regnum
- IA64_FR0_REGNUM
);
2429 else if ((unsigned) (regnum
- IA64_PR0_REGNUM
) < 64)
2431 else if ((unsigned) (regnum
- IA64_BR0_REGNUM
) < 8)
2432 return UNW_IA64_BR
+ (regnum
- IA64_BR0_REGNUM
);
2433 else if (regnum
== IA64_PR_REGNUM
)
2435 else if (regnum
== IA64_IP_REGNUM
)
2437 else if (regnum
== IA64_CFM_REGNUM
)
2438 return UNW_IA64_CFM
;
2439 else if ((unsigned) (regnum
- IA64_AR0_REGNUM
) < 128)
2440 return UNW_IA64_AR
+ (regnum
- IA64_AR0_REGNUM
);
2441 else if ((unsigned) (regnum
- IA64_NAT0_REGNUM
) < 128)
2442 return UNW_IA64_NAT
+ (regnum
- IA64_NAT0_REGNUM
);
2447 /* Gdb ia64-libunwind-tdep callback function to convert from a libunwind
2448 register number to a ia64 gdb register number. */
2450 ia64_uw2gdb_regnum (int uw_regnum
)
2452 if (uw_regnum
== UNW_IA64_SP
)
2454 else if (uw_regnum
== UNW_IA64_BSP
)
2455 return IA64_BSP_REGNUM
;
2456 else if ((unsigned) (uw_regnum
- UNW_IA64_GR
) < 32)
2457 return IA64_GR0_REGNUM
+ (uw_regnum
- UNW_IA64_GR
);
2458 else if ((unsigned) (uw_regnum
- UNW_IA64_GR
) < 128)
2459 return V32_REGNUM
+ (uw_regnum
- (IA64_GR0_REGNUM
+ 32));
2460 else if ((unsigned) (uw_regnum
- UNW_IA64_FR
) < 128)
2461 return IA64_FR0_REGNUM
+ (uw_regnum
- UNW_IA64_FR
);
2462 else if ((unsigned) (uw_regnum
- UNW_IA64_BR
) < 8)
2463 return IA64_BR0_REGNUM
+ (uw_regnum
- UNW_IA64_BR
);
2464 else if (uw_regnum
== UNW_IA64_PR
)
2465 return IA64_PR_REGNUM
;
2466 else if (uw_regnum
== UNW_REG_IP
)
2467 return IA64_IP_REGNUM
;
2468 else if (uw_regnum
== UNW_IA64_CFM
)
2469 return IA64_CFM_REGNUM
;
2470 else if ((unsigned) (uw_regnum
- UNW_IA64_AR
) < 128)
2471 return IA64_AR0_REGNUM
+ (uw_regnum
- UNW_IA64_AR
);
2472 else if ((unsigned) (uw_regnum
- UNW_IA64_NAT
) < 128)
2473 return IA64_NAT0_REGNUM
+ (uw_regnum
- UNW_IA64_NAT
);
2478 /* Gdb ia64-libunwind-tdep callback function to reveal if register is
2479 a float register or not. */
2481 ia64_is_fpreg (int uw_regnum
)
2483 return unw_is_fpreg (uw_regnum
);
2486 /* Libunwind callback accessor function for general registers. */
2488 ia64_access_reg (unw_addr_space_t as
, unw_regnum_t uw_regnum
, unw_word_t
*val
,
2489 int write
, void *arg
)
2491 int regnum
= ia64_uw2gdb_regnum (uw_regnum
);
2492 unw_word_t bsp
, sof
, cfm
, psr
, ip
;
2493 struct frame_info
*this_frame
= (struct frame_info
*) arg
;
2494 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2495 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2496 long new_sof
, old_sof
;
2498 /* We never call any libunwind routines that need to write registers. */
2499 gdb_assert (!write
);
2504 /* Libunwind expects to see the pc value which means the slot number
2505 from the psr must be merged with the ip word address. */
2506 ip
= get_frame_register_unsigned (this_frame
, IA64_IP_REGNUM
);
2507 psr
= get_frame_register_unsigned (this_frame
, IA64_PSR_REGNUM
);
2508 *val
= ip
| ((psr
>> 41) & 0x3);
2511 case UNW_IA64_AR_BSP
:
2512 /* Libunwind expects to see the beginning of the current
2513 register frame so we must account for the fact that
2514 ptrace() will return a value for bsp that points *after*
2515 the current register frame. */
2516 bsp
= get_frame_register_unsigned (this_frame
, IA64_BSP_REGNUM
);
2517 cfm
= get_frame_register_unsigned (this_frame
, IA64_CFM_REGNUM
);
2518 sof
= gdbarch_tdep (gdbarch
)->size_of_register_frame (this_frame
, cfm
);
2519 *val
= ia64_rse_skip_regs (bsp
, -sof
);
2522 case UNW_IA64_AR_BSPSTORE
:
2523 /* Libunwind wants bspstore to be after the current register frame.
2524 This is what ptrace() and gdb treats as the regular bsp value. */
2525 *val
= get_frame_register_unsigned (this_frame
, IA64_BSP_REGNUM
);
2529 /* For all other registers, just unwind the value directly. */
2530 *val
= get_frame_register_unsigned (this_frame
, regnum
);
2534 if (gdbarch_debug
>= 1)
2535 fprintf_unfiltered (gdb_stdlog
,
2536 " access_reg: from cache: %4s=%s\n",
2537 (((unsigned) regnum
<= IA64_NAT127_REGNUM
)
2538 ? ia64_register_names
[regnum
] : "r??"),
2539 paddress (gdbarch
, *val
));
2543 /* Libunwind callback accessor function for floating-point registers. */
2545 ia64_access_fpreg (unw_addr_space_t as
, unw_regnum_t uw_regnum
,
2546 unw_fpreg_t
*val
, int write
, void *arg
)
2548 int regnum
= ia64_uw2gdb_regnum (uw_regnum
);
2549 struct frame_info
*this_frame
= (struct frame_info
*) arg
;
2551 /* We never call any libunwind routines that need to write registers. */
2552 gdb_assert (!write
);
2554 get_frame_register (this_frame
, regnum
, (gdb_byte
*) val
);
2559 /* Libunwind callback accessor function for top-level rse registers. */
2561 ia64_access_rse_reg (unw_addr_space_t as
, unw_regnum_t uw_regnum
,
2562 unw_word_t
*val
, int write
, void *arg
)
2564 int regnum
= ia64_uw2gdb_regnum (uw_regnum
);
2565 unw_word_t bsp
, sof
, cfm
, psr
, ip
;
2566 struct regcache
*regcache
= (struct regcache
*) arg
;
2567 struct gdbarch
*gdbarch
= get_regcache_arch (regcache
);
2568 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2569 long new_sof
, old_sof
;
2571 /* We never call any libunwind routines that need to write registers. */
2572 gdb_assert (!write
);
2577 /* Libunwind expects to see the pc value which means the slot number
2578 from the psr must be merged with the ip word address. */
2579 regcache_cooked_read_unsigned (regcache
, IA64_IP_REGNUM
, &ip
);
2580 regcache_cooked_read_unsigned (regcache
, IA64_PSR_REGNUM
, &psr
);
2581 *val
= ip
| ((psr
>> 41) & 0x3);
2584 case UNW_IA64_AR_BSP
:
2585 /* Libunwind expects to see the beginning of the current
2586 register frame so we must account for the fact that
2587 ptrace() will return a value for bsp that points *after*
2588 the current register frame. */
2589 regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, &bsp
);
2590 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
2592 *val
= ia64_rse_skip_regs (bsp
, -sof
);
2595 case UNW_IA64_AR_BSPSTORE
:
2596 /* Libunwind wants bspstore to be after the current register frame.
2597 This is what ptrace() and gdb treats as the regular bsp value. */
2598 regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, val
);
2602 /* For all other registers, just unwind the value directly. */
2603 regcache_cooked_read_unsigned (regcache
, regnum
, val
);
2607 if (gdbarch_debug
>= 1)
2608 fprintf_unfiltered (gdb_stdlog
,
2609 " access_rse_reg: from cache: %4s=%s\n",
2610 (((unsigned) regnum
<= IA64_NAT127_REGNUM
)
2611 ? ia64_register_names
[regnum
] : "r??"),
2612 paddress (gdbarch
, *val
));
2617 /* Libunwind callback accessor function for top-level fp registers. */
2619 ia64_access_rse_fpreg (unw_addr_space_t as
, unw_regnum_t uw_regnum
,
2620 unw_fpreg_t
*val
, int write
, void *arg
)
2622 int regnum
= ia64_uw2gdb_regnum (uw_regnum
);
2623 struct regcache
*regcache
= (struct regcache
*) arg
;
2625 /* We never call any libunwind routines that need to write registers. */
2626 gdb_assert (!write
);
2628 regcache_cooked_read (regcache
, regnum
, (gdb_byte
*) val
);
2633 /* Libunwind callback accessor function for accessing memory. */
2635 ia64_access_mem (unw_addr_space_t as
,
2636 unw_word_t addr
, unw_word_t
*val
,
2637 int write
, void *arg
)
2639 if (addr
- KERNEL_START
< ktab_size
)
2641 unw_word_t
*laddr
= (unw_word_t
*) ((char *) ktab
2642 + (addr
- KERNEL_START
));
2651 /* XXX do we need to normalize byte-order here? */
2653 return target_write_memory (addr
, (gdb_byte
*) val
, sizeof (unw_word_t
));
2655 return target_read_memory (addr
, (gdb_byte
*) val
, sizeof (unw_word_t
));
2658 /* Call low-level function to access the kernel unwind table. */
2660 getunwind_table (gdb_byte
**buf_p
)
2664 /* FIXME drow/2005-09-10: This code used to call
2665 ia64_linux_xfer_unwind_table directly to fetch the unwind table
2666 for the currently running ia64-linux kernel. That data should
2667 come from the core file and be accessed via the auxv vector; if
2668 we want to preserve fall back to the running kernel's table, then
2669 we should find a way to override the corefile layer's
2670 xfer_partial method. */
2672 x
= target_read_alloc (¤t_target
, TARGET_OBJECT_UNWIND_TABLE
,
2678 /* Get the kernel unwind table. */
2680 get_kernel_table (unw_word_t ip
, unw_dyn_info_t
*di
)
2682 static struct ia64_table_entry
*etab
;
2689 size
= getunwind_table (&ktab_buf
);
2691 return -UNW_ENOINFO
;
2693 ktab
= (struct ia64_table_entry
*) ktab_buf
;
2696 for (etab
= ktab
; etab
->start_offset
; ++etab
)
2697 etab
->info_offset
+= KERNEL_START
;
2700 if (ip
< ktab
[0].start_offset
|| ip
>= etab
[-1].end_offset
)
2701 return -UNW_ENOINFO
;
2703 di
->format
= UNW_INFO_FORMAT_TABLE
;
2705 di
->start_ip
= ktab
[0].start_offset
;
2706 di
->end_ip
= etab
[-1].end_offset
;
2707 di
->u
.ti
.name_ptr
= (unw_word_t
) "<kernel>";
2708 di
->u
.ti
.segbase
= 0;
2709 di
->u
.ti
.table_len
= ((char *) etab
- (char *) ktab
) / sizeof (unw_word_t
);
2710 di
->u
.ti
.table_data
= (unw_word_t
*) ktab
;
2712 if (gdbarch_debug
>= 1)
2713 fprintf_unfiltered (gdb_stdlog
, "get_kernel_table: found table `%s': "
2714 "segbase=%s, length=%s, gp=%s\n",
2715 (char *) di
->u
.ti
.name_ptr
,
2716 hex_string (di
->u
.ti
.segbase
),
2717 pulongest (di
->u
.ti
.table_len
),
2718 hex_string (di
->gp
));
2722 /* Find the unwind table entry for a specified address. */
2724 ia64_find_unwind_table (struct objfile
*objfile
, unw_word_t ip
,
2725 unw_dyn_info_t
*dip
, void **buf
)
2727 Elf_Internal_Phdr
*phdr
, *p_text
= NULL
, *p_unwind
= NULL
;
2728 Elf_Internal_Ehdr
*ehdr
;
2729 unw_word_t segbase
= 0;
2730 CORE_ADDR load_base
;
2734 bfd
= objfile
->obfd
;
2736 ehdr
= elf_tdata (bfd
)->elf_header
;
2737 phdr
= elf_tdata (bfd
)->phdr
;
2739 load_base
= ANOFFSET (objfile
->section_offsets
, SECT_OFF_TEXT (objfile
));
2741 for (i
= 0; i
< ehdr
->e_phnum
; ++i
)
2743 switch (phdr
[i
].p_type
)
2746 if ((unw_word_t
) (ip
- load_base
- phdr
[i
].p_vaddr
)
2751 case PT_IA_64_UNWIND
:
2752 p_unwind
= phdr
+ i
;
2760 if (!p_text
|| !p_unwind
)
2761 return -UNW_ENOINFO
;
2763 /* Verify that the segment that contains the IP also contains
2764 the static unwind table. If not, we may be in the Linux kernel's
2765 DSO gate page in which case the unwind table is another segment.
2766 Otherwise, we are dealing with runtime-generated code, for which we
2767 have no info here. */
2768 segbase
= p_text
->p_vaddr
+ load_base
;
2770 if ((p_unwind
->p_vaddr
- p_text
->p_vaddr
) >= p_text
->p_memsz
)
2773 for (i
= 0; i
< ehdr
->e_phnum
; ++i
)
2775 if (phdr
[i
].p_type
== PT_LOAD
2776 && (p_unwind
->p_vaddr
- phdr
[i
].p_vaddr
) < phdr
[i
].p_memsz
)
2779 /* Get the segbase from the section containing the
2781 segbase
= phdr
[i
].p_vaddr
+ load_base
;
2785 return -UNW_ENOINFO
;
2788 dip
->start_ip
= p_text
->p_vaddr
+ load_base
;
2789 dip
->end_ip
= dip
->start_ip
+ p_text
->p_memsz
;
2790 dip
->gp
= ia64_find_global_pointer (get_objfile_arch (objfile
), ip
);
2791 dip
->format
= UNW_INFO_FORMAT_REMOTE_TABLE
;
2792 dip
->u
.rti
.name_ptr
= (unw_word_t
) bfd_get_filename (bfd
);
2793 dip
->u
.rti
.segbase
= segbase
;
2794 dip
->u
.rti
.table_len
= p_unwind
->p_memsz
/ sizeof (unw_word_t
);
2795 dip
->u
.rti
.table_data
= p_unwind
->p_vaddr
+ load_base
;
2800 /* Libunwind callback accessor function to acquire procedure unwind-info. */
2802 ia64_find_proc_info_x (unw_addr_space_t as
, unw_word_t ip
, unw_proc_info_t
*pi
,
2803 int need_unwind_info
, void *arg
)
2805 struct obj_section
*sec
= find_pc_section (ip
);
2812 /* XXX This only works if the host and the target architecture are
2813 both ia64 and if the have (more or less) the same kernel
2815 if (get_kernel_table (ip
, &di
) < 0)
2816 return -UNW_ENOINFO
;
2818 if (gdbarch_debug
>= 1)
2819 fprintf_unfiltered (gdb_stdlog
, "ia64_find_proc_info_x: %s -> "
2820 "(name=`%s',segbase=%s,start=%s,end=%s,gp=%s,"
2821 "length=%s,data=%s)\n",
2822 hex_string (ip
), (char *)di
.u
.ti
.name_ptr
,
2823 hex_string (di
.u
.ti
.segbase
),
2824 hex_string (di
.start_ip
), hex_string (di
.end_ip
),
2826 pulongest (di
.u
.ti
.table_len
),
2827 hex_string ((CORE_ADDR
)di
.u
.ti
.table_data
));
2831 ret
= ia64_find_unwind_table (sec
->objfile
, ip
, &di
, &buf
);
2835 if (gdbarch_debug
>= 1)
2836 fprintf_unfiltered (gdb_stdlog
, "ia64_find_proc_info_x: %s -> "
2837 "(name=`%s',segbase=%s,start=%s,end=%s,gp=%s,"
2838 "length=%s,data=%s)\n",
2839 hex_string (ip
), (char *)di
.u
.rti
.name_ptr
,
2840 hex_string (di
.u
.rti
.segbase
),
2841 hex_string (di
.start_ip
), hex_string (di
.end_ip
),
2843 pulongest (di
.u
.rti
.table_len
),
2844 hex_string (di
.u
.rti
.table_data
));
2847 ret
= libunwind_search_unwind_table (&as
, ip
, &di
, pi
, need_unwind_info
,
2850 /* We no longer need the dyn info storage so free it. */
2856 /* Libunwind callback accessor function for cleanup. */
2858 ia64_put_unwind_info (unw_addr_space_t as
,
2859 unw_proc_info_t
*pip
, void *arg
)
2861 /* Nothing required for now. */
2864 /* Libunwind callback accessor function to get head of the dynamic
2865 unwind-info registration list. */
2867 ia64_get_dyn_info_list (unw_addr_space_t as
,
2868 unw_word_t
*dilap
, void *arg
)
2870 struct obj_section
*text_sec
;
2871 struct objfile
*objfile
;
2872 unw_word_t ip
, addr
;
2876 if (!libunwind_is_initialized ())
2877 return -UNW_ENOINFO
;
2879 for (objfile
= object_files
; objfile
; objfile
= objfile
->next
)
2883 text_sec
= objfile
->sections
+ SECT_OFF_TEXT (objfile
);
2884 ip
= obj_section_addr (text_sec
);
2885 ret
= ia64_find_unwind_table (objfile
, ip
, &di
, &buf
);
2888 addr
= libunwind_find_dyn_list (as
, &di
, arg
);
2889 /* We no longer need the dyn info storage so free it. */
2894 if (gdbarch_debug
>= 1)
2895 fprintf_unfiltered (gdb_stdlog
,
2896 "dynamic unwind table in objfile %s "
2898 bfd_get_filename (objfile
->obfd
),
2899 hex_string (addr
), hex_string (di
.gp
));
2905 return -UNW_ENOINFO
;
2909 /* Frame interface functions for libunwind. */
2912 ia64_libunwind_frame_this_id (struct frame_info
*this_frame
, void **this_cache
,
2913 struct frame_id
*this_id
)
2915 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2916 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2917 struct frame_id id
= outer_frame_id
;
2921 libunwind_frame_this_id (this_frame
, this_cache
, &id
);
2922 if (frame_id_eq (id
, outer_frame_id
))
2924 (*this_id
) = outer_frame_id
;
2928 /* We must add the bsp as the special address for frame comparison
2930 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
2931 bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
2933 (*this_id
) = frame_id_build_special (id
.stack_addr
, id
.code_addr
, bsp
);
2935 if (gdbarch_debug
>= 1)
2936 fprintf_unfiltered (gdb_stdlog
,
2937 "libunwind frame id: code %s, stack %s, "
2938 "special %s, this_frame %s\n",
2939 paddress (gdbarch
, id
.code_addr
),
2940 paddress (gdbarch
, id
.stack_addr
),
2941 paddress (gdbarch
, bsp
),
2942 host_address_to_string (this_frame
));
2945 static struct value
*
2946 ia64_libunwind_frame_prev_register (struct frame_info
*this_frame
,
2947 void **this_cache
, int regnum
)
2950 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2951 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2954 if (VP0_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
2955 reg
= IA64_PR_REGNUM
;
2956 else if (IA64_NAT0_REGNUM
<= regnum
&& regnum
<= IA64_NAT127_REGNUM
)
2957 reg
= IA64_UNAT_REGNUM
;
2959 /* Let libunwind do most of the work. */
2960 val
= libunwind_frame_prev_register (this_frame
, this_cache
, reg
);
2962 if (VP0_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
2966 if (VP16_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
2971 /* Fetch predicate register rename base from current frame
2972 marker for this frame. */
2973 cfm
= get_frame_register_unsigned (this_frame
, IA64_CFM_REGNUM
);
2974 rrb_pr
= (cfm
>> 32) & 0x3f;
2976 /* Adjust the register number to account for register rotation. */
2977 regnum
= VP16_REGNUM
+ ((regnum
- VP16_REGNUM
) + rrb_pr
) % 48;
2979 prN_val
= extract_bit_field (value_contents_all (val
),
2980 regnum
- VP0_REGNUM
, 1);
2981 return frame_unwind_got_constant (this_frame
, regnum
, prN_val
);
2984 else if (IA64_NAT0_REGNUM
<= regnum
&& regnum
<= IA64_NAT127_REGNUM
)
2988 unatN_val
= extract_bit_field (value_contents_all (val
),
2989 regnum
- IA64_NAT0_REGNUM
, 1);
2990 return frame_unwind_got_constant (this_frame
, regnum
, unatN_val
);
2993 else if (regnum
== IA64_BSP_REGNUM
)
2995 struct value
*cfm_val
;
2996 CORE_ADDR prev_bsp
, prev_cfm
;
2998 /* We want to calculate the previous bsp as the end of the previous
2999 register stack frame. This corresponds to what the hardware bsp
3000 register will be if we pop the frame back which is why we might
3001 have been called. We know that libunwind will pass us back the
3002 beginning of the current frame so we should just add sof to it. */
3003 prev_bsp
= extract_unsigned_integer (value_contents_all (val
),
3005 cfm_val
= libunwind_frame_prev_register (this_frame
, this_cache
,
3007 prev_cfm
= extract_unsigned_integer (value_contents_all (cfm_val
),
3009 prev_bsp
= rse_address_add (prev_bsp
, (prev_cfm
& 0x7f));
3011 return frame_unwind_got_constant (this_frame
, regnum
, prev_bsp
);
3018 ia64_libunwind_frame_sniffer (const struct frame_unwind
*self
,
3019 struct frame_info
*this_frame
,
3022 if (libunwind_is_initialized ()
3023 && libunwind_frame_sniffer (self
, this_frame
, this_cache
))
3029 static const struct frame_unwind ia64_libunwind_frame_unwind
=
3032 default_frame_unwind_stop_reason
,
3033 ia64_libunwind_frame_this_id
,
3034 ia64_libunwind_frame_prev_register
,
3036 ia64_libunwind_frame_sniffer
,
3037 libunwind_frame_dealloc_cache
3041 ia64_libunwind_sigtramp_frame_this_id (struct frame_info
*this_frame
,
3043 struct frame_id
*this_id
)
3045 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
3046 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3049 struct frame_id id
= outer_frame_id
;
3052 libunwind_frame_this_id (this_frame
, this_cache
, &id
);
3053 if (frame_id_eq (id
, outer_frame_id
))
3055 (*this_id
) = outer_frame_id
;
3059 /* We must add the bsp as the special address for frame comparison
3061 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
3062 bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
3064 /* For a sigtramp frame, we don't make the check for previous ip being 0. */
3065 (*this_id
) = frame_id_build_special (id
.stack_addr
, id
.code_addr
, bsp
);
3067 if (gdbarch_debug
>= 1)
3068 fprintf_unfiltered (gdb_stdlog
,
3069 "libunwind sigtramp frame id: code %s, "
3070 "stack %s, special %s, this_frame %s\n",
3071 paddress (gdbarch
, id
.code_addr
),
3072 paddress (gdbarch
, id
.stack_addr
),
3073 paddress (gdbarch
, bsp
),
3074 host_address_to_string (this_frame
));
3077 static struct value
*
3078 ia64_libunwind_sigtramp_frame_prev_register (struct frame_info
*this_frame
,
3079 void **this_cache
, int regnum
)
3081 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
3082 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3083 struct value
*prev_ip_val
;
3086 /* If the previous frame pc value is 0, then we want to use the SIGCONTEXT
3087 method of getting previous registers. */
3088 prev_ip_val
= libunwind_frame_prev_register (this_frame
, this_cache
,
3090 prev_ip
= extract_unsigned_integer (value_contents_all (prev_ip_val
),
3095 void *tmp_cache
= NULL
;
3096 return ia64_sigtramp_frame_prev_register (this_frame
, &tmp_cache
,
3100 return ia64_libunwind_frame_prev_register (this_frame
, this_cache
, regnum
);
3104 ia64_libunwind_sigtramp_frame_sniffer (const struct frame_unwind
*self
,
3105 struct frame_info
*this_frame
,
3108 if (libunwind_is_initialized ())
3110 if (libunwind_sigtramp_frame_sniffer (self
, this_frame
, this_cache
))
3115 return ia64_sigtramp_frame_sniffer (self
, this_frame
, this_cache
);
3118 static const struct frame_unwind ia64_libunwind_sigtramp_frame_unwind
=
3121 default_frame_unwind_stop_reason
,
3122 ia64_libunwind_sigtramp_frame_this_id
,
3123 ia64_libunwind_sigtramp_frame_prev_register
,
3125 ia64_libunwind_sigtramp_frame_sniffer
3128 /* Set of libunwind callback acccessor functions. */
3129 unw_accessors_t ia64_unw_accessors
=
3131 ia64_find_proc_info_x
,
3132 ia64_put_unwind_info
,
3133 ia64_get_dyn_info_list
,
3141 /* Set of special libunwind callback acccessor functions specific for accessing
3142 the rse registers. At the top of the stack, we want libunwind to figure out
3143 how to read r32 - r127. Though usually they are found sequentially in
3144 memory starting from $bof, this is not always true. */
3145 unw_accessors_t ia64_unw_rse_accessors
=
3147 ia64_find_proc_info_x
,
3148 ia64_put_unwind_info
,
3149 ia64_get_dyn_info_list
,
3151 ia64_access_rse_reg
,
3152 ia64_access_rse_fpreg
,
3157 /* Set of ia64-libunwind-tdep gdb callbacks and data for generic
3158 ia64-libunwind-tdep code to use. */
3159 struct libunwind_descr ia64_libunwind_descr
=
3164 &ia64_unw_accessors
,
3165 &ia64_unw_rse_accessors
,
3168 #endif /* HAVE_LIBUNWIND_IA64_H */
3171 ia64_use_struct_convention (struct type
*type
)
3173 struct type
*float_elt_type
;
3175 /* Don't use the struct convention for anything but structure,
3176 union, or array types. */
3177 if (!(TYPE_CODE (type
) == TYPE_CODE_STRUCT
3178 || TYPE_CODE (type
) == TYPE_CODE_UNION
3179 || TYPE_CODE (type
) == TYPE_CODE_ARRAY
))
3182 /* HFAs are structures (or arrays) consisting entirely of floating
3183 point values of the same length. Up to 8 of these are returned
3184 in registers. Don't use the struct convention when this is the
3186 float_elt_type
= is_float_or_hfa_type (type
);
3187 if (float_elt_type
!= NULL
3188 && TYPE_LENGTH (type
) / TYPE_LENGTH (float_elt_type
) <= 8)
3191 /* Other structs of length 32 or less are returned in r8-r11.
3192 Don't use the struct convention for those either. */
3193 return TYPE_LENGTH (type
) > 32;
3196 /* Return non-zero if TYPE is a structure or union type. */
3199 ia64_struct_type_p (const struct type
*type
)
3201 return (TYPE_CODE (type
) == TYPE_CODE_STRUCT
3202 || TYPE_CODE (type
) == TYPE_CODE_UNION
);
3206 ia64_extract_return_value (struct type
*type
, struct regcache
*regcache
,
3209 struct gdbarch
*gdbarch
= get_regcache_arch (regcache
);
3210 struct type
*float_elt_type
;
3212 float_elt_type
= is_float_or_hfa_type (type
);
3213 if (float_elt_type
!= NULL
)
3215 gdb_byte from
[IA64_FP_REGISTER_SIZE
];
3217 int regnum
= IA64_FR8_REGNUM
;
3218 int n
= TYPE_LENGTH (type
) / TYPE_LENGTH (float_elt_type
);
3222 regcache_cooked_read (regcache
, regnum
, from
);
3223 convert_typed_floating (from
, ia64_ext_type (gdbarch
),
3224 (char *)valbuf
+ offset
, float_elt_type
);
3225 offset
+= TYPE_LENGTH (float_elt_type
);
3229 else if (!ia64_struct_type_p (type
) && TYPE_LENGTH (type
) < 8)
3231 /* This is an integral value, and its size is less than 8 bytes.
3232 These values are LSB-aligned, so extract the relevant bytes,
3233 and copy them into VALBUF. */
3234 /* brobecker/2005-12-30: Actually, all integral values are LSB aligned,
3235 so I suppose we should also add handling here for integral values
3236 whose size is greater than 8. But I wasn't able to create such
3237 a type, neither in C nor in Ada, so not worrying about these yet. */
3238 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3241 regcache_cooked_read_unsigned (regcache
, IA64_GR8_REGNUM
, &val
);
3242 store_unsigned_integer (valbuf
, TYPE_LENGTH (type
), byte_order
, val
);
3248 int regnum
= IA64_GR8_REGNUM
;
3249 int reglen
= TYPE_LENGTH (register_type (gdbarch
, IA64_GR8_REGNUM
));
3250 int n
= TYPE_LENGTH (type
) / reglen
;
3251 int m
= TYPE_LENGTH (type
) % reglen
;
3256 regcache_cooked_read_unsigned (regcache
, regnum
, &val
);
3257 memcpy ((char *)valbuf
+ offset
, &val
, reglen
);
3264 regcache_cooked_read_unsigned (regcache
, regnum
, &val
);
3265 memcpy ((char *)valbuf
+ offset
, &val
, m
);
3271 ia64_store_return_value (struct type
*type
, struct regcache
*regcache
,
3272 const gdb_byte
*valbuf
)
3274 struct gdbarch
*gdbarch
= get_regcache_arch (regcache
);
3275 struct type
*float_elt_type
;
3277 float_elt_type
= is_float_or_hfa_type (type
);
3278 if (float_elt_type
!= NULL
)
3280 gdb_byte to
[IA64_FP_REGISTER_SIZE
];
3282 int regnum
= IA64_FR8_REGNUM
;
3283 int n
= TYPE_LENGTH (type
) / TYPE_LENGTH (float_elt_type
);
3287 convert_typed_floating ((char *)valbuf
+ offset
, float_elt_type
,
3288 to
, ia64_ext_type (gdbarch
));
3289 regcache_cooked_write (regcache
, regnum
, to
);
3290 offset
+= TYPE_LENGTH (float_elt_type
);
3298 int regnum
= IA64_GR8_REGNUM
;
3299 int reglen
= TYPE_LENGTH (register_type (gdbarch
, IA64_GR8_REGNUM
));
3300 int n
= TYPE_LENGTH (type
) / reglen
;
3301 int m
= TYPE_LENGTH (type
) % reglen
;
3306 memcpy (&val
, (char *)valbuf
+ offset
, reglen
);
3307 regcache_cooked_write_unsigned (regcache
, regnum
, val
);
3314 memcpy (&val
, (char *)valbuf
+ offset
, m
);
3315 regcache_cooked_write_unsigned (regcache
, regnum
, val
);
3320 static enum return_value_convention
3321 ia64_return_value (struct gdbarch
*gdbarch
, struct value
*function
,
3322 struct type
*valtype
, struct regcache
*regcache
,
3323 gdb_byte
*readbuf
, const gdb_byte
*writebuf
)
3325 int struct_return
= ia64_use_struct_convention (valtype
);
3327 if (writebuf
!= NULL
)
3329 gdb_assert (!struct_return
);
3330 ia64_store_return_value (valtype
, regcache
, writebuf
);
3333 if (readbuf
!= NULL
)
3335 gdb_assert (!struct_return
);
3336 ia64_extract_return_value (valtype
, regcache
, readbuf
);
3340 return RETURN_VALUE_STRUCT_CONVENTION
;
3342 return RETURN_VALUE_REGISTER_CONVENTION
;
3346 is_float_or_hfa_type_recurse (struct type
*t
, struct type
**etp
)
3348 switch (TYPE_CODE (t
))
3352 return TYPE_LENGTH (*etp
) == TYPE_LENGTH (t
);
3359 case TYPE_CODE_ARRAY
:
3361 is_float_or_hfa_type_recurse (check_typedef (TYPE_TARGET_TYPE (t
)),
3364 case TYPE_CODE_STRUCT
:
3368 for (i
= 0; i
< TYPE_NFIELDS (t
); i
++)
3369 if (!is_float_or_hfa_type_recurse
3370 (check_typedef (TYPE_FIELD_TYPE (t
, i
)), etp
))
3381 /* Determine if the given type is one of the floating point types or
3382 and HFA (which is a struct, array, or combination thereof whose
3383 bottom-most elements are all of the same floating point type). */
3385 static struct type
*
3386 is_float_or_hfa_type (struct type
*t
)
3388 struct type
*et
= 0;
3390 return is_float_or_hfa_type_recurse (t
, &et
) ? et
: 0;
3394 /* Return 1 if the alignment of T is such that the next even slot
3395 should be used. Return 0, if the next available slot should
3396 be used. (See section 8.5.1 of the IA-64 Software Conventions
3397 and Runtime manual). */
3400 slot_alignment_is_next_even (struct type
*t
)
3402 switch (TYPE_CODE (t
))
3406 if (TYPE_LENGTH (t
) > 8)
3410 case TYPE_CODE_ARRAY
:
3412 slot_alignment_is_next_even (check_typedef (TYPE_TARGET_TYPE (t
)));
3413 case TYPE_CODE_STRUCT
:
3417 for (i
= 0; i
< TYPE_NFIELDS (t
); i
++)
3418 if (slot_alignment_is_next_even
3419 (check_typedef (TYPE_FIELD_TYPE (t
, i
))))
3428 /* Attempt to find (and return) the global pointer for the given
3431 This is a rather nasty bit of code searchs for the .dynamic section
3432 in the objfile corresponding to the pc of the function we're trying
3433 to call. Once it finds the addresses at which the .dynamic section
3434 lives in the child process, it scans the Elf64_Dyn entries for a
3435 DT_PLTGOT tag. If it finds one of these, the corresponding
3436 d_un.d_ptr value is the global pointer. */
3439 ia64_find_global_pointer_from_dynamic_section (struct gdbarch
*gdbarch
,
3442 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3443 struct obj_section
*faddr_sect
;
3445 faddr_sect
= find_pc_section (faddr
);
3446 if (faddr_sect
!= NULL
)
3448 struct obj_section
*osect
;
3450 ALL_OBJFILE_OSECTIONS (faddr_sect
->objfile
, osect
)
3452 if (strcmp (osect
->the_bfd_section
->name
, ".dynamic") == 0)
3456 if (osect
< faddr_sect
->objfile
->sections_end
)
3458 CORE_ADDR addr
, endaddr
;
3460 addr
= obj_section_addr (osect
);
3461 endaddr
= obj_section_endaddr (osect
);
3463 while (addr
< endaddr
)
3469 status
= target_read_memory (addr
, buf
, sizeof (buf
));
3472 tag
= extract_signed_integer (buf
, sizeof (buf
), byte_order
);
3474 if (tag
== DT_PLTGOT
)
3476 CORE_ADDR global_pointer
;
3478 status
= target_read_memory (addr
+ 8, buf
, sizeof (buf
));
3481 global_pointer
= extract_unsigned_integer (buf
, sizeof (buf
),
3485 return global_pointer
;
3498 /* Attempt to find (and return) the global pointer for the given
3499 function. We first try the find_global_pointer_from_solib routine
3500 from the gdbarch tdep vector, if provided. And if that does not
3501 work, then we try ia64_find_global_pointer_from_dynamic_section. */
3504 ia64_find_global_pointer (struct gdbarch
*gdbarch
, CORE_ADDR faddr
)
3506 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
3509 if (tdep
->find_global_pointer_from_solib
)
3510 addr
= tdep
->find_global_pointer_from_solib (gdbarch
, faddr
);
3512 addr
= ia64_find_global_pointer_from_dynamic_section (gdbarch
, faddr
);
3516 /* Given a function's address, attempt to find (and return) the
3517 corresponding (canonical) function descriptor. Return 0 if
3520 find_extant_func_descr (struct gdbarch
*gdbarch
, CORE_ADDR faddr
)
3522 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3523 struct obj_section
*faddr_sect
;
3525 /* Return early if faddr is already a function descriptor. */
3526 faddr_sect
= find_pc_section (faddr
);
3527 if (faddr_sect
&& strcmp (faddr_sect
->the_bfd_section
->name
, ".opd") == 0)
3530 if (faddr_sect
!= NULL
)
3532 struct obj_section
*osect
;
3533 ALL_OBJFILE_OSECTIONS (faddr_sect
->objfile
, osect
)
3535 if (strcmp (osect
->the_bfd_section
->name
, ".opd") == 0)
3539 if (osect
< faddr_sect
->objfile
->sections_end
)
3541 CORE_ADDR addr
, endaddr
;
3543 addr
= obj_section_addr (osect
);
3544 endaddr
= obj_section_endaddr (osect
);
3546 while (addr
< endaddr
)
3552 status
= target_read_memory (addr
, buf
, sizeof (buf
));
3555 faddr2
= extract_signed_integer (buf
, sizeof (buf
), byte_order
);
3557 if (faddr
== faddr2
)
3567 /* Attempt to find a function descriptor corresponding to the
3568 given address. If none is found, construct one on the
3569 stack using the address at fdaptr. */
3572 find_func_descr (struct regcache
*regcache
, CORE_ADDR faddr
, CORE_ADDR
*fdaptr
)
3574 struct gdbarch
*gdbarch
= get_regcache_arch (regcache
);
3575 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3578 fdesc
= find_extant_func_descr (gdbarch
, faddr
);
3582 ULONGEST global_pointer
;
3588 global_pointer
= ia64_find_global_pointer (gdbarch
, faddr
);
3590 if (global_pointer
== 0)
3591 regcache_cooked_read_unsigned (regcache
,
3592 IA64_GR1_REGNUM
, &global_pointer
);
3594 store_unsigned_integer (buf
, 8, byte_order
, faddr
);
3595 store_unsigned_integer (buf
+ 8, 8, byte_order
, global_pointer
);
3597 write_memory (fdesc
, buf
, 16);
3603 /* Use the following routine when printing out function pointers
3604 so the user can see the function address rather than just the
3605 function descriptor. */
3607 ia64_convert_from_func_ptr_addr (struct gdbarch
*gdbarch
, CORE_ADDR addr
,
3608 struct target_ops
*targ
)
3610 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3611 struct obj_section
*s
;
3614 s
= find_pc_section (addr
);
3616 /* check if ADDR points to a function descriptor. */
3617 if (s
&& strcmp (s
->the_bfd_section
->name
, ".opd") == 0)
3618 return read_memory_unsigned_integer (addr
, 8, byte_order
);
3620 /* Normally, functions live inside a section that is executable.
3621 So, if ADDR points to a non-executable section, then treat it
3622 as a function descriptor and return the target address iff
3623 the target address itself points to a section that is executable.
3624 Check first the memory of the whole length of 8 bytes is readable. */
3625 if (s
&& (s
->the_bfd_section
->flags
& SEC_CODE
) == 0
3626 && target_read_memory (addr
, buf
, 8) == 0)
3628 CORE_ADDR pc
= extract_unsigned_integer (buf
, 8, byte_order
);
3629 struct obj_section
*pc_section
= find_pc_section (pc
);
3631 if (pc_section
&& (pc_section
->the_bfd_section
->flags
& SEC_CODE
))
3635 /* There are also descriptors embedded in vtables. */
3638 struct bound_minimal_symbol minsym
;
3640 minsym
= lookup_minimal_symbol_by_pc (addr
);
3643 && is_vtable_name (MSYMBOL_LINKAGE_NAME (minsym
.minsym
)))
3644 return read_memory_unsigned_integer (addr
, 8, byte_order
);
3651 ia64_frame_align (struct gdbarch
*gdbarch
, CORE_ADDR sp
)
3656 /* The default "allocate_new_rse_frame" ia64_infcall_ops routine for ia64. */
3659 ia64_allocate_new_rse_frame (struct regcache
*regcache
, ULONGEST bsp
, int sof
)
3661 ULONGEST cfm
, pfs
, new_bsp
;
3663 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
3665 new_bsp
= rse_address_add (bsp
, sof
);
3666 regcache_cooked_write_unsigned (regcache
, IA64_BSP_REGNUM
, new_bsp
);
3668 regcache_cooked_read_unsigned (regcache
, IA64_PFS_REGNUM
, &pfs
);
3669 pfs
&= 0xc000000000000000LL
;
3670 pfs
|= (cfm
& 0xffffffffffffLL
);
3671 regcache_cooked_write_unsigned (regcache
, IA64_PFS_REGNUM
, pfs
);
3673 cfm
&= 0xc000000000000000LL
;
3675 regcache_cooked_write_unsigned (regcache
, IA64_CFM_REGNUM
, cfm
);
3678 /* The default "store_argument_in_slot" ia64_infcall_ops routine for
3682 ia64_store_argument_in_slot (struct regcache
*regcache
, CORE_ADDR bsp
,
3683 int slotnum
, gdb_byte
*buf
)
3685 write_memory (rse_address_add (bsp
, slotnum
), buf
, 8);
3688 /* The default "set_function_addr" ia64_infcall_ops routine for ia64. */
3691 ia64_set_function_addr (struct regcache
*regcache
, CORE_ADDR func_addr
)
3693 /* Nothing needed. */
3697 ia64_push_dummy_call (struct gdbarch
*gdbarch
, struct value
*function
,
3698 struct regcache
*regcache
, CORE_ADDR bp_addr
,
3699 int nargs
, struct value
**args
, CORE_ADDR sp
,
3700 int struct_return
, CORE_ADDR struct_addr
)
3702 struct gdbarch_tdep
*tdep
= gdbarch_tdep (gdbarch
);
3703 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3708 int nslots
, rseslots
, memslots
, slotnum
, nfuncargs
;
3711 CORE_ADDR funcdescaddr
, global_pointer
;
3712 CORE_ADDR func_addr
= find_function_addr (function
, NULL
);
3716 /* Count the number of slots needed for the arguments. */
3717 for (argno
= 0; argno
< nargs
; argno
++)
3720 type
= check_typedef (value_type (arg
));
3721 len
= TYPE_LENGTH (type
);
3723 if ((nslots
& 1) && slot_alignment_is_next_even (type
))
3726 if (TYPE_CODE (type
) == TYPE_CODE_FUNC
)
3729 nslots
+= (len
+ 7) / 8;
3732 /* Divvy up the slots between the RSE and the memory stack. */
3733 rseslots
= (nslots
> 8) ? 8 : nslots
;
3734 memslots
= nslots
- rseslots
;
3736 /* Allocate a new RSE frame. */
3737 regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, &bsp
);
3738 tdep
->infcall_ops
.allocate_new_rse_frame (regcache
, bsp
, rseslots
);
3740 /* We will attempt to find function descriptors in the .opd segment,
3741 but if we can't we'll construct them ourselves. That being the
3742 case, we'll need to reserve space on the stack for them. */
3743 funcdescaddr
= sp
- nfuncargs
* 16;
3744 funcdescaddr
&= ~0xfLL
;
3746 /* Adjust the stack pointer to it's new value. The calling conventions
3747 require us to have 16 bytes of scratch, plus whatever space is
3748 necessary for the memory slots and our function descriptors. */
3749 sp
= sp
- 16 - (memslots
+ nfuncargs
) * 8;
3750 sp
&= ~0xfLL
; /* Maintain 16 byte alignment. */
3752 /* Place the arguments where they belong. The arguments will be
3753 either placed in the RSE backing store or on the memory stack.
3754 In addition, floating point arguments or HFAs are placed in
3755 floating point registers. */
3757 floatreg
= IA64_FR8_REGNUM
;
3758 for (argno
= 0; argno
< nargs
; argno
++)
3760 struct type
*float_elt_type
;
3763 type
= check_typedef (value_type (arg
));
3764 len
= TYPE_LENGTH (type
);
3766 /* Special handling for function parameters. */
3768 && TYPE_CODE (type
) == TYPE_CODE_PTR
3769 && TYPE_CODE (TYPE_TARGET_TYPE (type
)) == TYPE_CODE_FUNC
)
3771 gdb_byte val_buf
[8];
3772 ULONGEST faddr
= extract_unsigned_integer (value_contents (arg
),
3774 store_unsigned_integer (val_buf
, 8, byte_order
,
3775 find_func_descr (regcache
, faddr
,
3777 if (slotnum
< rseslots
)
3778 tdep
->infcall_ops
.store_argument_in_slot (regcache
, bsp
,
3781 write_memory (sp
+ 16 + 8 * (slotnum
- rseslots
), val_buf
, 8);
3788 /* Skip odd slot if necessary... */
3789 if ((slotnum
& 1) && slot_alignment_is_next_even (type
))
3795 gdb_byte val_buf
[8];
3797 memset (val_buf
, 0, 8);
3798 if (!ia64_struct_type_p (type
) && len
< 8)
3800 /* Integral types are LSB-aligned, so we have to be careful
3801 to insert the argument on the correct side of the buffer.
3802 This is why we use store_unsigned_integer. */
3803 store_unsigned_integer
3804 (val_buf
, 8, byte_order
,
3805 extract_unsigned_integer (value_contents (arg
), len
,
3810 /* This is either an 8bit integral type, or an aggregate.
3811 For 8bit integral type, there is no problem, we just
3812 copy the value over.
3814 For aggregates, the only potentially tricky portion
3815 is to write the last one if it is less than 8 bytes.
3816 In this case, the data is Byte0-aligned. Happy news,
3817 this means that we don't need to differentiate the
3818 handling of 8byte blocks and less-than-8bytes blocks. */
3819 memcpy (val_buf
, value_contents (arg
) + argoffset
,
3820 (len
> 8) ? 8 : len
);
3823 if (slotnum
< rseslots
)
3824 tdep
->infcall_ops
.store_argument_in_slot (regcache
, bsp
,
3827 write_memory (sp
+ 16 + 8 * (slotnum
- rseslots
), val_buf
, 8);
3834 /* Handle floating point types (including HFAs). */
3835 float_elt_type
= is_float_or_hfa_type (type
);
3836 if (float_elt_type
!= NULL
)
3839 len
= TYPE_LENGTH (type
);
3840 while (len
> 0 && floatreg
< IA64_FR16_REGNUM
)
3842 gdb_byte to
[IA64_FP_REGISTER_SIZE
];
3843 convert_typed_floating (value_contents (arg
) + argoffset
,
3845 ia64_ext_type (gdbarch
));
3846 regcache_cooked_write (regcache
, floatreg
, to
);
3848 argoffset
+= TYPE_LENGTH (float_elt_type
);
3849 len
-= TYPE_LENGTH (float_elt_type
);
3854 /* Store the struct return value in r8 if necessary. */
3857 regcache_cooked_write_unsigned (regcache
, IA64_GR8_REGNUM
,
3858 (ULONGEST
) struct_addr
);
3861 global_pointer
= ia64_find_global_pointer (gdbarch
, func_addr
);
3863 if (global_pointer
!= 0)
3864 regcache_cooked_write_unsigned (regcache
, IA64_GR1_REGNUM
, global_pointer
);
3866 /* The following is not necessary on HP-UX, because we're using
3867 a dummy code sequence pushed on the stack to make the call, and
3868 this sequence doesn't need b0 to be set in order for our dummy
3869 breakpoint to be hit. Nonetheless, this doesn't interfere, and
3870 it's needed for other OSes, so we do this unconditionaly. */
3871 regcache_cooked_write_unsigned (regcache
, IA64_BR0_REGNUM
, bp_addr
);
3873 regcache_cooked_write_unsigned (regcache
, sp_regnum
, sp
);
3875 tdep
->infcall_ops
.set_function_addr (regcache
, func_addr
);
3880 static const struct ia64_infcall_ops ia64_infcall_ops
=
3882 ia64_allocate_new_rse_frame
,
3883 ia64_store_argument_in_slot
,
3884 ia64_set_function_addr
3887 static struct frame_id
3888 ia64_dummy_id (struct gdbarch
*gdbarch
, struct frame_info
*this_frame
)
3890 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3894 get_frame_register (this_frame
, sp_regnum
, buf
);
3895 sp
= extract_unsigned_integer (buf
, 8, byte_order
);
3897 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
3898 bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
3900 if (gdbarch_debug
>= 1)
3901 fprintf_unfiltered (gdb_stdlog
,
3902 "dummy frame id: code %s, stack %s, special %s\n",
3903 paddress (gdbarch
, get_frame_pc (this_frame
)),
3904 paddress (gdbarch
, sp
), paddress (gdbarch
, bsp
));
3906 return frame_id_build_special (sp
, get_frame_pc (this_frame
), bsp
);
3910 ia64_unwind_pc (struct gdbarch
*gdbarch
, struct frame_info
*next_frame
)
3912 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3914 CORE_ADDR ip
, psr
, pc
;
3916 frame_unwind_register (next_frame
, IA64_IP_REGNUM
, buf
);
3917 ip
= extract_unsigned_integer (buf
, 8, byte_order
);
3918 frame_unwind_register (next_frame
, IA64_PSR_REGNUM
, buf
);
3919 psr
= extract_unsigned_integer (buf
, 8, byte_order
);
3921 pc
= (ip
& ~0xf) | ((psr
>> 41) & 3);
3926 ia64_print_insn (bfd_vma memaddr
, struct disassemble_info
*info
)
3928 info
->bytes_per_line
= SLOT_MULTIPLIER
;
3929 return print_insn_ia64 (memaddr
, info
);
3932 /* The default "size_of_register_frame" gdbarch_tdep routine for ia64. */
3935 ia64_size_of_register_frame (struct frame_info
*this_frame
, ULONGEST cfm
)
3937 return (cfm
& 0x7f);
3940 static struct gdbarch
*
3941 ia64_gdbarch_init (struct gdbarch_info info
, struct gdbarch_list
*arches
)
3943 struct gdbarch
*gdbarch
;
3944 struct gdbarch_tdep
*tdep
;
3946 /* If there is already a candidate, use it. */
3947 arches
= gdbarch_list_lookup_by_info (arches
, &info
);
3949 return arches
->gdbarch
;
3951 tdep
= XCNEW (struct gdbarch_tdep
);
3952 gdbarch
= gdbarch_alloc (&info
, tdep
);
3954 tdep
->size_of_register_frame
= ia64_size_of_register_frame
;
3956 /* According to the ia64 specs, instructions that store long double
3957 floats in memory use a long-double format different than that
3958 used in the floating registers. The memory format matches the
3959 x86 extended float format which is 80 bits. An OS may choose to
3960 use this format (e.g. GNU/Linux) or choose to use a different
3961 format for storing long doubles (e.g. HPUX). In the latter case,
3962 the setting of the format may be moved/overridden in an
3963 OS-specific tdep file. */
3964 set_gdbarch_long_double_format (gdbarch
, floatformats_i387_ext
);
3966 set_gdbarch_short_bit (gdbarch
, 16);
3967 set_gdbarch_int_bit (gdbarch
, 32);
3968 set_gdbarch_long_bit (gdbarch
, 64);
3969 set_gdbarch_long_long_bit (gdbarch
, 64);
3970 set_gdbarch_float_bit (gdbarch
, 32);
3971 set_gdbarch_double_bit (gdbarch
, 64);
3972 set_gdbarch_long_double_bit (gdbarch
, 128);
3973 set_gdbarch_ptr_bit (gdbarch
, 64);
3975 set_gdbarch_num_regs (gdbarch
, NUM_IA64_RAW_REGS
);
3976 set_gdbarch_num_pseudo_regs (gdbarch
,
3977 LAST_PSEUDO_REGNUM
- FIRST_PSEUDO_REGNUM
);
3978 set_gdbarch_sp_regnum (gdbarch
, sp_regnum
);
3979 set_gdbarch_fp0_regnum (gdbarch
, IA64_FR0_REGNUM
);
3981 set_gdbarch_register_name (gdbarch
, ia64_register_name
);
3982 set_gdbarch_register_type (gdbarch
, ia64_register_type
);
3984 set_gdbarch_pseudo_register_read (gdbarch
, ia64_pseudo_register_read
);
3985 set_gdbarch_pseudo_register_write (gdbarch
, ia64_pseudo_register_write
);
3986 set_gdbarch_dwarf2_reg_to_regnum (gdbarch
, ia64_dwarf_reg_to_regnum
);
3987 set_gdbarch_register_reggroup_p (gdbarch
, ia64_register_reggroup_p
);
3988 set_gdbarch_convert_register_p (gdbarch
, ia64_convert_register_p
);
3989 set_gdbarch_register_to_value (gdbarch
, ia64_register_to_value
);
3990 set_gdbarch_value_to_register (gdbarch
, ia64_value_to_register
);
3992 set_gdbarch_skip_prologue (gdbarch
, ia64_skip_prologue
);
3994 set_gdbarch_return_value (gdbarch
, ia64_return_value
);
3996 set_gdbarch_memory_insert_breakpoint (gdbarch
,
3997 ia64_memory_insert_breakpoint
);
3998 set_gdbarch_memory_remove_breakpoint (gdbarch
,
3999 ia64_memory_remove_breakpoint
);
4000 set_gdbarch_breakpoint_from_pc (gdbarch
, ia64_breakpoint_from_pc
);
4001 set_gdbarch_breakpoint_kind_from_pc (gdbarch
, ia64_breakpoint_kind_from_pc
);
4002 set_gdbarch_read_pc (gdbarch
, ia64_read_pc
);
4003 set_gdbarch_write_pc (gdbarch
, ia64_write_pc
);
4005 /* Settings for calling functions in the inferior. */
4006 set_gdbarch_push_dummy_call (gdbarch
, ia64_push_dummy_call
);
4007 tdep
->infcall_ops
= ia64_infcall_ops
;
4008 set_gdbarch_frame_align (gdbarch
, ia64_frame_align
);
4009 set_gdbarch_dummy_id (gdbarch
, ia64_dummy_id
);
4011 set_gdbarch_unwind_pc (gdbarch
, ia64_unwind_pc
);
4012 #ifdef HAVE_LIBUNWIND_IA64_H
4013 frame_unwind_append_unwinder (gdbarch
,
4014 &ia64_libunwind_sigtramp_frame_unwind
);
4015 frame_unwind_append_unwinder (gdbarch
, &ia64_libunwind_frame_unwind
);
4016 frame_unwind_append_unwinder (gdbarch
, &ia64_sigtramp_frame_unwind
);
4017 libunwind_frame_set_descr (gdbarch
, &ia64_libunwind_descr
);
4019 frame_unwind_append_unwinder (gdbarch
, &ia64_sigtramp_frame_unwind
);
4021 frame_unwind_append_unwinder (gdbarch
, &ia64_frame_unwind
);
4022 frame_base_set_default (gdbarch
, &ia64_frame_base
);
4024 /* Settings that should be unnecessary. */
4025 set_gdbarch_inner_than (gdbarch
, core_addr_lessthan
);
4027 set_gdbarch_print_insn (gdbarch
, ia64_print_insn
);
4028 set_gdbarch_convert_from_func_ptr_addr (gdbarch
,
4029 ia64_convert_from_func_ptr_addr
);
4031 /* The virtual table contains 16-byte descriptors, not pointers to
4033 set_gdbarch_vtable_function_descriptors (gdbarch
, 1);
4035 /* Hook in ABI-specific overrides, if they have been registered. */
4036 gdbarch_init_osabi (info
, gdbarch
);
4041 extern initialize_file_ftype _initialize_ia64_tdep
; /* -Wmissing-prototypes */
4044 _initialize_ia64_tdep (void)
4046 gdbarch_register (bfd_arch_ia64
, ia64_gdbarch_init
, NULL
);