1 /* Target-dependent code for the IA-64 for GDB, the GNU debugger.
3 Copyright (C) 1999-2024 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/>. */
20 #include "extract-store-integer.h"
23 #include "arch-utils.h"
24 #include "floatformat.h"
27 #include "reggroups.h"
29 #include "frame-base.h"
30 #include "frame-unwind.h"
31 #include "target-float.h"
34 #include "elf/common.h"
39 #include "ia64-tdep.h"
42 #ifdef HAVE_LIBUNWIND_IA64_H
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
;
72 static std::optional
<gdb::byte_vector
> ktab_buf
;
76 /* An enumeration of the different IA-64 instruction types. */
78 enum ia64_instruction_type
80 A
, /* Integer ALU ; I-unit or M-unit */
81 I
, /* Non-ALU integer; I-unit */
82 M
, /* Memory ; M-unit */
83 F
, /* Floating-point ; F-unit */
84 B
, /* Branch ; B-unit */
85 L
, /* Extended (L+X) ; I-unit */
86 X
, /* Extended (L+X) ; I-unit */
87 undefined
/* undefined or reserved */
90 /* We represent IA-64 PC addresses as the value of the instruction
91 pointer or'd with some bit combination in the low nibble which
92 represents the slot number in the bundle addressed by the
93 instruction pointer. The problem is that the Linux kernel
94 multiplies its slot numbers (for exceptions) by one while the
95 disassembler multiplies its slot numbers by 6. In addition, I've
96 heard it said that the simulator uses 1 as the multiplier.
98 I've fixed the disassembler so that the bytes_per_line field will
99 be the slot multiplier. If bytes_per_line comes in as zero, it
100 is set to six (which is how it was set up initially). -- objdump
101 displays pretty disassembly dumps with this value. For our purposes,
102 we'll set bytes_per_line to SLOT_MULTIPLIER. This is okay since we
103 never want to also display the raw bytes the way objdump does. */
105 #define SLOT_MULTIPLIER 1
107 /* Length in bytes of an instruction bundle. */
109 #define BUNDLE_LEN 16
111 /* See the saved memory layout comment for ia64_memory_insert_breakpoint. */
113 #if BREAKPOINT_MAX < BUNDLE_LEN - 2
114 # error "BREAKPOINT_MAX < BUNDLE_LEN - 2"
117 static gdbarch_init_ftype ia64_gdbarch_init
;
119 static gdbarch_register_name_ftype ia64_register_name
;
120 static gdbarch_register_type_ftype ia64_register_type
;
121 static gdbarch_breakpoint_from_pc_ftype ia64_breakpoint_from_pc
;
122 static gdbarch_skip_prologue_ftype ia64_skip_prologue
;
123 static struct type
*is_float_or_hfa_type (struct type
*t
);
124 static CORE_ADDR
ia64_find_global_pointer (struct gdbarch
*gdbarch
,
127 #define NUM_IA64_RAW_REGS 462
129 /* Big enough to hold a FP register in bytes. */
130 #define IA64_FP_REGISTER_SIZE 16
132 static int sp_regnum
= IA64_GR12_REGNUM
;
134 /* NOTE: we treat the register stack registers r32-r127 as
135 pseudo-registers because they may not be accessible via the ptrace
136 register get/set interfaces. */
138 enum pseudo_regs
{ FIRST_PSEUDO_REGNUM
= NUM_IA64_RAW_REGS
,
139 VBOF_REGNUM
= IA64_NAT127_REGNUM
+ 1, V32_REGNUM
,
140 V127_REGNUM
= V32_REGNUM
+ 95,
141 VP0_REGNUM
, VP16_REGNUM
= VP0_REGNUM
+ 16,
142 VP63_REGNUM
= VP0_REGNUM
+ 63, LAST_PSEUDO_REGNUM
};
144 /* Array of register names; There should be ia64_num_regs strings in
147 static const char * const ia64_register_names
[] =
148 { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
149 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
150 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
151 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
152 "", "", "", "", "", "", "", "",
153 "", "", "", "", "", "", "", "",
154 "", "", "", "", "", "", "", "",
155 "", "", "", "", "", "", "", "",
156 "", "", "", "", "", "", "", "",
157 "", "", "", "", "", "", "", "",
158 "", "", "", "", "", "", "", "",
159 "", "", "", "", "", "", "", "",
160 "", "", "", "", "", "", "", "",
161 "", "", "", "", "", "", "", "",
162 "", "", "", "", "", "", "", "",
163 "", "", "", "", "", "", "", "",
165 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
166 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
167 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
168 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
169 "f32", "f33", "f34", "f35", "f36", "f37", "f38", "f39",
170 "f40", "f41", "f42", "f43", "f44", "f45", "f46", "f47",
171 "f48", "f49", "f50", "f51", "f52", "f53", "f54", "f55",
172 "f56", "f57", "f58", "f59", "f60", "f61", "f62", "f63",
173 "f64", "f65", "f66", "f67", "f68", "f69", "f70", "f71",
174 "f72", "f73", "f74", "f75", "f76", "f77", "f78", "f79",
175 "f80", "f81", "f82", "f83", "f84", "f85", "f86", "f87",
176 "f88", "f89", "f90", "f91", "f92", "f93", "f94", "f95",
177 "f96", "f97", "f98", "f99", "f100", "f101", "f102", "f103",
178 "f104", "f105", "f106", "f107", "f108", "f109", "f110", "f111",
179 "f112", "f113", "f114", "f115", "f116", "f117", "f118", "f119",
180 "f120", "f121", "f122", "f123", "f124", "f125", "f126", "f127",
182 "", "", "", "", "", "", "", "",
183 "", "", "", "", "", "", "", "",
184 "", "", "", "", "", "", "", "",
185 "", "", "", "", "", "", "", "",
186 "", "", "", "", "", "", "", "",
187 "", "", "", "", "", "", "", "",
188 "", "", "", "", "", "", "", "",
189 "", "", "", "", "", "", "", "",
191 "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7",
195 "pr", "ip", "psr", "cfm",
197 "kr0", "kr1", "kr2", "kr3", "kr4", "kr5", "kr6", "kr7",
198 "", "", "", "", "", "", "", "",
199 "rsc", "bsp", "bspstore", "rnat",
201 "eflag", "csd", "ssd", "cflg", "fsr", "fir", "fdr", "",
202 "ccv", "", "", "", "unat", "", "", "",
203 "fpsr", "", "", "", "itc",
204 "", "", "", "", "", "", "", "", "", "",
205 "", "", "", "", "", "", "", "", "",
207 "", "", "", "", "", "", "", "", "", "",
208 "", "", "", "", "", "", "", "", "", "",
209 "", "", "", "", "", "", "", "", "", "",
210 "", "", "", "", "", "", "", "", "", "",
211 "", "", "", "", "", "", "", "", "", "",
212 "", "", "", "", "", "", "", "", "", "",
214 "nat0", "nat1", "nat2", "nat3", "nat4", "nat5", "nat6", "nat7",
215 "nat8", "nat9", "nat10", "nat11", "nat12", "nat13", "nat14", "nat15",
216 "nat16", "nat17", "nat18", "nat19", "nat20", "nat21", "nat22", "nat23",
217 "nat24", "nat25", "nat26", "nat27", "nat28", "nat29", "nat30", "nat31",
218 "nat32", "nat33", "nat34", "nat35", "nat36", "nat37", "nat38", "nat39",
219 "nat40", "nat41", "nat42", "nat43", "nat44", "nat45", "nat46", "nat47",
220 "nat48", "nat49", "nat50", "nat51", "nat52", "nat53", "nat54", "nat55",
221 "nat56", "nat57", "nat58", "nat59", "nat60", "nat61", "nat62", "nat63",
222 "nat64", "nat65", "nat66", "nat67", "nat68", "nat69", "nat70", "nat71",
223 "nat72", "nat73", "nat74", "nat75", "nat76", "nat77", "nat78", "nat79",
224 "nat80", "nat81", "nat82", "nat83", "nat84", "nat85", "nat86", "nat87",
225 "nat88", "nat89", "nat90", "nat91", "nat92", "nat93", "nat94", "nat95",
226 "nat96", "nat97", "nat98", "nat99", "nat100","nat101","nat102","nat103",
227 "nat104","nat105","nat106","nat107","nat108","nat109","nat110","nat111",
228 "nat112","nat113","nat114","nat115","nat116","nat117","nat118","nat119",
229 "nat120","nat121","nat122","nat123","nat124","nat125","nat126","nat127",
233 "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39",
234 "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47",
235 "r48", "r49", "r50", "r51", "r52", "r53", "r54", "r55",
236 "r56", "r57", "r58", "r59", "r60", "r61", "r62", "r63",
237 "r64", "r65", "r66", "r67", "r68", "r69", "r70", "r71",
238 "r72", "r73", "r74", "r75", "r76", "r77", "r78", "r79",
239 "r80", "r81", "r82", "r83", "r84", "r85", "r86", "r87",
240 "r88", "r89", "r90", "r91", "r92", "r93", "r94", "r95",
241 "r96", "r97", "r98", "r99", "r100", "r101", "r102", "r103",
242 "r104", "r105", "r106", "r107", "r108", "r109", "r110", "r111",
243 "r112", "r113", "r114", "r115", "r116", "r117", "r118", "r119",
244 "r120", "r121", "r122", "r123", "r124", "r125", "r126", "r127",
246 "p0", "p1", "p2", "p3", "p4", "p5", "p6", "p7",
247 "p8", "p9", "p10", "p11", "p12", "p13", "p14", "p15",
248 "p16", "p17", "p18", "p19", "p20", "p21", "p22", "p23",
249 "p24", "p25", "p26", "p27", "p28", "p29", "p30", "p31",
250 "p32", "p33", "p34", "p35", "p36", "p37", "p38", "p39",
251 "p40", "p41", "p42", "p43", "p44", "p45", "p46", "p47",
252 "p48", "p49", "p50", "p51", "p52", "p53", "p54", "p55",
253 "p56", "p57", "p58", "p59", "p60", "p61", "p62", "p63",
256 struct ia64_frame_cache
258 CORE_ADDR base
; /* frame pointer base for frame */
259 CORE_ADDR pc
; /* function start pc for frame */
260 CORE_ADDR saved_sp
; /* stack pointer for frame */
261 CORE_ADDR bsp
; /* points at r32 for the current frame */
262 CORE_ADDR cfm
; /* cfm value for current frame */
263 CORE_ADDR prev_cfm
; /* cfm value for previous frame */
265 int sof
; /* Size of frame (decoded from cfm value). */
266 int sol
; /* Size of locals (decoded from cfm value). */
267 int sor
; /* Number of rotating registers (decoded from
269 CORE_ADDR after_prologue
;
270 /* Address of first instruction after the last
271 prologue instruction; Note that there may
272 be instructions from the function's body
273 intermingled with the prologue. */
274 int mem_stack_frame_size
;
275 /* Size of the memory stack frame (may be zero),
276 or -1 if it has not been determined yet. */
277 int fp_reg
; /* Register number (if any) used a frame pointer
278 for this frame. 0 if no register is being used
279 as the frame pointer. */
281 /* Saved registers. */
282 CORE_ADDR saved_regs
[NUM_IA64_RAW_REGS
];
287 floatformat_valid (const struct floatformat
*fmt
, const void *from
)
292 static const struct floatformat floatformat_ia64_ext_little
=
294 floatformat_little
, 82, 0, 1, 17, 65535, 0x1ffff, 18, 64,
295 floatformat_intbit_yes
, "floatformat_ia64_ext_little", floatformat_valid
, NULL
298 static const struct floatformat floatformat_ia64_ext_big
=
300 floatformat_big
, 82, 46, 47, 17, 65535, 0x1ffff, 64, 64,
301 floatformat_intbit_yes
, "floatformat_ia64_ext_big", floatformat_valid
304 static const struct floatformat
*floatformats_ia64_ext
[2] =
306 &floatformat_ia64_ext_big
,
307 &floatformat_ia64_ext_little
311 ia64_ext_type (struct gdbarch
*gdbarch
)
313 ia64_gdbarch_tdep
*tdep
= gdbarch_tdep
<ia64_gdbarch_tdep
> (gdbarch
);
315 if (!tdep
->ia64_ext_type
)
317 type_allocator
alloc (gdbarch
);
319 = init_float_type (alloc
, 128, "builtin_type_ia64_ext",
320 floatformats_ia64_ext
);
323 return tdep
->ia64_ext_type
;
327 ia64_register_reggroup_p (struct gdbarch
*gdbarch
, int regnum
,
328 const struct reggroup
*group
)
333 if (group
== all_reggroup
)
335 vector_p
= register_type (gdbarch
, regnum
)->is_vector ();
336 float_p
= register_type (gdbarch
, regnum
)->code () == TYPE_CODE_FLT
;
337 raw_p
= regnum
< NUM_IA64_RAW_REGS
;
338 if (group
== float_reggroup
)
340 if (group
== vector_reggroup
)
342 if (group
== general_reggroup
)
343 return (!vector_p
&& !float_p
);
344 if (group
== save_reggroup
|| group
== restore_reggroup
)
350 ia64_register_name (struct gdbarch
*gdbarch
, int reg
)
352 return ia64_register_names
[reg
];
356 ia64_register_type (struct gdbarch
*arch
, int reg
)
358 if (reg
>= IA64_FR0_REGNUM
&& reg
<= IA64_FR127_REGNUM
)
359 return ia64_ext_type (arch
);
361 return builtin_type (arch
)->builtin_long
;
365 ia64_dwarf_reg_to_regnum (struct gdbarch
*gdbarch
, int reg
)
367 if (reg
>= IA64_GR32_REGNUM
&& reg
<= IA64_GR127_REGNUM
)
368 return V32_REGNUM
+ (reg
- IA64_GR32_REGNUM
);
373 /* Extract ``len'' bits from an instruction bundle starting at
377 extract_bit_field (const gdb_byte
*bundle
, int from
, int len
)
379 long long result
= 0LL;
381 int from_byte
= from
/ 8;
382 int to_byte
= to
/ 8;
383 unsigned char *b
= (unsigned char *) bundle
;
389 if (from_byte
== to_byte
)
390 c
= ((unsigned char) (c
<< (8 - to
% 8))) >> (8 - to
% 8);
391 result
= c
>> (from
% 8);
392 lshift
= 8 - (from
% 8);
394 for (i
= from_byte
+1; i
< to_byte
; i
++)
396 result
|= ((long long) b
[i
]) << lshift
;
400 if (from_byte
< to_byte
&& (to
% 8 != 0))
403 c
= ((unsigned char) (c
<< (8 - to
% 8))) >> (8 - to
% 8);
404 result
|= ((long long) c
) << lshift
;
410 /* Replace the specified bits in an instruction bundle. */
413 replace_bit_field (gdb_byte
*bundle
, long long val
, int from
, int len
)
416 int from_byte
= from
/ 8;
417 int to_byte
= to
/ 8;
418 unsigned char *b
= (unsigned char *) bundle
;
421 if (from_byte
== to_byte
)
423 unsigned char left
, right
;
425 left
= (c
>> (to
% 8)) << (to
% 8);
426 right
= ((unsigned char) (c
<< (8 - from
% 8))) >> (8 - from
% 8);
427 c
= (unsigned char) (val
& 0xff);
428 c
= (unsigned char) (c
<< (from
% 8 + 8 - to
% 8)) >> (8 - to
% 8);
436 c
= ((unsigned char) (c
<< (8 - from
% 8))) >> (8 - from
% 8);
437 c
= c
| (val
<< (from
% 8));
439 val
>>= 8 - from
% 8;
441 for (i
= from_byte
+1; i
< to_byte
; i
++)
450 unsigned char cv
= (unsigned char) val
;
452 c
= c
>> (to
% 8) << (to
% 8);
453 c
|= ((unsigned char) (cv
<< (8 - to
% 8))) >> (8 - to
% 8);
459 /* Return the contents of slot N (for N = 0, 1, or 2) in
460 and instruction bundle. */
463 slotN_contents (gdb_byte
*bundle
, int slotnum
)
465 return extract_bit_field (bundle
, 5+41*slotnum
, 41);
468 /* Store an instruction in an instruction bundle. */
471 replace_slotN_contents (gdb_byte
*bundle
, long long instr
, int slotnum
)
473 replace_bit_field (bundle
, instr
, 5+41*slotnum
, 41);
476 static const enum ia64_instruction_type template_encoding_table
[32][3] =
478 { M
, I
, I
}, /* 00 */
479 { M
, I
, I
}, /* 01 */
480 { M
, I
, I
}, /* 02 */
481 { M
, I
, I
}, /* 03 */
482 { M
, L
, X
}, /* 04 */
483 { M
, L
, X
}, /* 05 */
484 { undefined
, undefined
, undefined
}, /* 06 */
485 { undefined
, undefined
, undefined
}, /* 07 */
486 { M
, M
, I
}, /* 08 */
487 { M
, M
, I
}, /* 09 */
488 { M
, M
, I
}, /* 0A */
489 { M
, M
, I
}, /* 0B */
490 { M
, F
, I
}, /* 0C */
491 { M
, F
, I
}, /* 0D */
492 { M
, M
, F
}, /* 0E */
493 { M
, M
, F
}, /* 0F */
494 { M
, I
, B
}, /* 10 */
495 { M
, I
, B
}, /* 11 */
496 { M
, B
, B
}, /* 12 */
497 { M
, B
, B
}, /* 13 */
498 { undefined
, undefined
, undefined
}, /* 14 */
499 { undefined
, undefined
, undefined
}, /* 15 */
500 { B
, B
, B
}, /* 16 */
501 { B
, B
, B
}, /* 17 */
502 { M
, M
, B
}, /* 18 */
503 { M
, M
, B
}, /* 19 */
504 { undefined
, undefined
, undefined
}, /* 1A */
505 { undefined
, undefined
, undefined
}, /* 1B */
506 { M
, F
, B
}, /* 1C */
507 { M
, F
, B
}, /* 1D */
508 { undefined
, undefined
, undefined
}, /* 1E */
509 { undefined
, undefined
, undefined
}, /* 1F */
512 /* Fetch and (partially) decode an instruction at ADDR and return the
513 address of the next instruction to fetch. */
516 fetch_instruction (CORE_ADDR addr
, ia64_instruction_type
*it
, long long *instr
)
518 gdb_byte bundle
[BUNDLE_LEN
];
519 int slotnum
= (int) (addr
& 0x0f) / SLOT_MULTIPLIER
;
523 /* Warn about slot numbers greater than 2. We used to generate
524 an error here on the assumption that the user entered an invalid
525 address. But, sometimes GDB itself requests an invalid address.
526 This can (easily) happen when execution stops in a function for
527 which there are no symbols. The prologue scanner will attempt to
528 find the beginning of the function - if the nearest symbol
529 happens to not be aligned on a bundle boundary (16 bytes), the
530 resulting starting address will cause GDB to think that the slot
533 So we warn about it and set the slot number to zero. It is
534 not necessarily a fatal condition, particularly if debugging
535 at the assembly language level. */
538 warning (_("Can't fetch instructions for slot numbers greater than 2.\n"
539 "Using slot 0 instead"));
545 val
= target_read_memory (addr
, bundle
, BUNDLE_LEN
);
550 *instr
= slotN_contents (bundle
, slotnum
);
551 templ
= extract_bit_field (bundle
, 0, 5);
552 *it
= template_encoding_table
[(int)templ
][slotnum
];
554 if (slotnum
== 2 || (slotnum
== 1 && *it
== L
))
557 addr
+= (slotnum
+ 1) * SLOT_MULTIPLIER
;
562 /* There are 5 different break instructions (break.i, break.b,
563 break.m, break.f, and break.x), but they all have the same
564 encoding. (The five bit template in the low five bits of the
565 instruction bundle distinguishes one from another.)
567 The runtime architecture manual specifies that break instructions
568 used for debugging purposes must have the upper two bits of the 21
569 bit immediate set to a 0 and a 1 respectively. A breakpoint
570 instruction encodes the most significant bit of its 21 bit
571 immediate at bit 36 of the 41 bit instruction. The penultimate msb
572 is at bit 25 which leads to the pattern below.
574 Originally, I had this set up to do, e.g, a "break.i 0x80000" But
575 it turns out that 0x80000 was used as the syscall break in the early
576 simulators. So I changed the pattern slightly to do "break.i 0x080001"
577 instead. But that didn't work either (I later found out that this
578 pattern was used by the simulator that I was using.) So I ended up
579 using the pattern seen below.
581 SHADOW_CONTENTS has byte-based addressing (PLACED_ADDRESS and SHADOW_LEN)
582 while we need bit-based addressing as the instructions length is 41 bits and
583 we must not modify/corrupt the adjacent slots in the same bundle.
584 Fortunately we may store larger memory incl. the adjacent bits with the
585 original memory content (not the possibly already stored breakpoints there).
586 We need to be careful in ia64_memory_remove_breakpoint to always restore
587 only the specific bits of this instruction ignoring any adjacent stored
590 We use the original addressing with the low nibble in the range <0..2> which
591 gets incorrectly interpreted by generic non-ia64 breakpoint_restore_shadows
592 as the direct byte offset of SHADOW_CONTENTS. We store whole BUNDLE_LEN
593 bytes just without these two possibly skipped bytes to not to exceed to the
596 If we would like to store the whole bundle to SHADOW_CONTENTS we would have
597 to store already the base address (`address & ~0x0f') into PLACED_ADDRESS.
598 In such case there is no other place where to store
599 SLOTNUM (`adress & 0x0f', value in the range <0..2>). We need to know
600 SLOTNUM in ia64_memory_remove_breakpoint.
602 There is one special case where we need to be extra careful:
603 L-X instructions, which are instructions that occupy 2 slots
604 (The L part is always in slot 1, and the X part is always in
605 slot 2). We must refuse to insert breakpoints for an address
606 that points at slot 2 of a bundle where an L-X instruction is
607 present, since there is logically no instruction at that address.
608 However, to make things more interesting, the opcode of L-X
609 instructions is located in slot 2. This means that, to insert
610 a breakpoint at an address that points to slot 1, we actually
611 need to write the breakpoint in slot 2! Slot 1 is actually
612 the extended operand, so writing the breakpoint there would not
613 have the desired effect. Another side-effect of this issue
614 is that we need to make sure that the shadow contents buffer
615 does save byte 15 of our instruction bundle (this is the tail
616 end of slot 2, which wouldn't be saved if we were to insert
617 the breakpoint in slot 1).
619 ia64 16-byte bundle layout:
620 | 5 bits | slot 0 with 41 bits | slot 1 with 41 bits | slot 2 with 41 bits |
622 The current addressing used by the code below:
623 original PC placed_address placed_size required covered
624 == bp_tgt->shadow_len reqd \subset covered
625 0xABCDE0 0xABCDE0 0x10 <0x0...0x5> <0x0..0xF>
626 0xABCDE1 0xABCDE1 0xF <0x5...0xA> <0x1..0xF>
627 0xABCDE2 0xABCDE2 0xE <0xA...0xF> <0x2..0xF>
629 L-X instructions are treated a little specially, as explained above:
630 0xABCDE1 0xABCDE1 0xF <0xA...0xF> <0x1..0xF>
632 `objdump -d' and some other tools show a bit unjustified offsets:
633 original PC byte where starts the instruction objdump offset
634 0xABCDE0 0xABCDE0 0xABCDE0
635 0xABCDE1 0xABCDE5 0xABCDE6
636 0xABCDE2 0xABCDEA 0xABCDEC
639 #define IA64_BREAKPOINT 0x00003333300LL
642 ia64_memory_insert_breakpoint (struct gdbarch
*gdbarch
,
643 struct bp_target_info
*bp_tgt
)
645 CORE_ADDR addr
= bp_tgt
->placed_address
= bp_tgt
->reqstd_address
;
646 gdb_byte bundle
[BUNDLE_LEN
];
647 int slotnum
= (int) (addr
& 0x0f) / SLOT_MULTIPLIER
, shadow_slotnum
;
648 long long instr_breakpoint
;
653 error (_("Can't insert breakpoint for slot numbers greater than 2."));
657 /* Enable the automatic memory restoration from breakpoints while
658 we read our instruction bundle for the purpose of SHADOW_CONTENTS.
659 Otherwise, we could possibly store into the shadow parts of the adjacent
660 placed breakpoints. It is due to our SHADOW_CONTENTS overlapping the real
661 breakpoint instruction bits region. */
662 scoped_restore restore_memory_0
663 = make_scoped_restore_show_memory_breakpoints (0);
664 val
= target_read_memory (addr
, bundle
, BUNDLE_LEN
);
668 /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
669 for addressing the SHADOW_CONTENTS placement. */
670 shadow_slotnum
= slotnum
;
672 /* Always cover the last byte of the bundle in case we are inserting
673 a breakpoint on an L-X instruction. */
674 bp_tgt
->shadow_len
= BUNDLE_LEN
- shadow_slotnum
;
676 templ
= extract_bit_field (bundle
, 0, 5);
677 if (template_encoding_table
[templ
][slotnum
] == X
)
679 /* X unit types can only be used in slot 2, and are actually
680 part of a 2-slot L-X instruction. We cannot break at this
681 address, as this is the second half of an instruction that
682 lives in slot 1 of that bundle. */
683 gdb_assert (slotnum
== 2);
684 error (_("Can't insert breakpoint for non-existing slot X"));
686 if (template_encoding_table
[templ
][slotnum
] == L
)
688 /* L unit types can only be used in slot 1. But the associated
689 opcode for that instruction is in slot 2, so bump the slot number
691 gdb_assert (slotnum
== 1);
695 /* Store the whole bundle, except for the initial skipped bytes by the slot
696 number interpreted as bytes offset in PLACED_ADDRESS. */
697 memcpy (bp_tgt
->shadow_contents
, bundle
+ shadow_slotnum
,
700 /* Re-read the same bundle as above except that, this time, read it in order
701 to compute the new bundle inside which we will be inserting the
702 breakpoint. Therefore, disable the automatic memory restoration from
703 breakpoints while we read our instruction bundle. Otherwise, the general
704 restoration mechanism kicks in and we would possibly remove parts of the
705 adjacent placed breakpoints. It is due to our SHADOW_CONTENTS overlapping
706 the real breakpoint instruction bits region. */
707 scoped_restore restore_memory_1
708 = make_scoped_restore_show_memory_breakpoints (1);
709 val
= target_read_memory (addr
, bundle
, BUNDLE_LEN
);
713 /* Breakpoints already present in the code will get detected and not get
714 reinserted by bp_loc_is_permanent. Multiple breakpoints at the same
715 location cannot induce the internal error as they are optimized into
716 a single instance by update_global_location_list. */
717 instr_breakpoint
= slotN_contents (bundle
, slotnum
);
718 if (instr_breakpoint
== IA64_BREAKPOINT
)
719 internal_error (_("Address %s already contains a breakpoint."),
720 paddress (gdbarch
, bp_tgt
->placed_address
));
721 replace_slotN_contents (bundle
, IA64_BREAKPOINT
, slotnum
);
723 val
= target_write_memory (addr
+ shadow_slotnum
, bundle
+ shadow_slotnum
,
730 ia64_memory_remove_breakpoint (struct gdbarch
*gdbarch
,
731 struct bp_target_info
*bp_tgt
)
733 CORE_ADDR addr
= bp_tgt
->placed_address
;
734 gdb_byte bundle_mem
[BUNDLE_LEN
], bundle_saved
[BUNDLE_LEN
];
735 int slotnum
= (addr
& 0x0f) / SLOT_MULTIPLIER
, shadow_slotnum
;
736 long long instr_breakpoint
, instr_saved
;
742 /* Disable the automatic memory restoration from breakpoints while
743 we read our instruction bundle. Otherwise, the general restoration
744 mechanism kicks in and we would possibly remove parts of the adjacent
745 placed breakpoints. It is due to our SHADOW_CONTENTS overlapping the real
746 breakpoint instruction bits region. */
747 scoped_restore restore_memory_1
748 = make_scoped_restore_show_memory_breakpoints (1);
749 val
= target_read_memory (addr
, bundle_mem
, BUNDLE_LEN
);
753 /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
754 for addressing the SHADOW_CONTENTS placement. */
755 shadow_slotnum
= slotnum
;
757 templ
= extract_bit_field (bundle_mem
, 0, 5);
758 if (template_encoding_table
[templ
][slotnum
] == X
)
760 /* X unit types can only be used in slot 2, and are actually
761 part of a 2-slot L-X instruction. We refuse to insert
762 breakpoints at this address, so there should be no reason
763 for us attempting to remove one there, except if the program's
764 code somehow got modified in memory. */
765 gdb_assert (slotnum
== 2);
766 warning (_("Cannot remove breakpoint at address %s from non-existing "
767 "X-type slot, memory has changed underneath"),
768 paddress (gdbarch
, bp_tgt
->placed_address
));
771 if (template_encoding_table
[templ
][slotnum
] == L
)
773 /* L unit types can only be used in slot 1. But the breakpoint
774 was actually saved using slot 2, so update the slot number
776 gdb_assert (slotnum
== 1);
780 gdb_assert (bp_tgt
->shadow_len
== BUNDLE_LEN
- shadow_slotnum
);
782 instr_breakpoint
= slotN_contents (bundle_mem
, slotnum
);
783 if (instr_breakpoint
!= IA64_BREAKPOINT
)
785 warning (_("Cannot remove breakpoint at address %s, "
786 "no break instruction at such address."),
787 paddress (gdbarch
, bp_tgt
->placed_address
));
791 /* Extract the original saved instruction from SLOTNUM normalizing its
792 bit-shift for INSTR_SAVED. */
793 memcpy (bundle_saved
, bundle_mem
, BUNDLE_LEN
);
794 memcpy (bundle_saved
+ shadow_slotnum
, bp_tgt
->shadow_contents
,
796 instr_saved
= slotN_contents (bundle_saved
, slotnum
);
798 /* In BUNDLE_MEM, be careful to modify only the bits belonging to SLOTNUM
799 and not any of the other ones that are stored in SHADOW_CONTENTS. */
800 replace_slotN_contents (bundle_mem
, instr_saved
, slotnum
);
801 val
= target_write_raw_memory (addr
, bundle_mem
, BUNDLE_LEN
);
806 /* Implement the breakpoint_kind_from_pc gdbarch method. */
809 ia64_breakpoint_kind_from_pc (struct gdbarch
*gdbarch
, CORE_ADDR
*pcptr
)
811 /* A place holder of gdbarch method breakpoint_kind_from_pc. */
815 /* As gdbarch_breakpoint_from_pc ranges have byte granularity and ia64
816 instruction slots ranges are bit-granular (41 bits) we have to provide an
817 extended range as described for ia64_memory_insert_breakpoint. We also take
818 care of preserving the `break' instruction 21-bit (or 62-bit) parameter to
819 make a match for permanent breakpoints. */
821 static const gdb_byte
*
822 ia64_breakpoint_from_pc (struct gdbarch
*gdbarch
,
823 CORE_ADDR
*pcptr
, int *lenptr
)
825 CORE_ADDR addr
= *pcptr
;
826 static gdb_byte bundle
[BUNDLE_LEN
];
827 int slotnum
= (int) (*pcptr
& 0x0f) / SLOT_MULTIPLIER
, shadow_slotnum
;
828 long long instr_fetched
;
833 error (_("Can't insert breakpoint for slot numbers greater than 2."));
837 /* Enable the automatic memory restoration from breakpoints while
838 we read our instruction bundle to match bp_loc_is_permanent. */
840 scoped_restore restore_memory_0
841 = make_scoped_restore_show_memory_breakpoints (0);
842 val
= target_read_memory (addr
, bundle
, BUNDLE_LEN
);
845 /* The memory might be unreachable. This can happen, for instance,
846 when the user inserts a breakpoint at an invalid address. */
850 /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
851 for addressing the SHADOW_CONTENTS placement. */
852 shadow_slotnum
= slotnum
;
854 /* Cover always the last byte of the bundle for the L-X slot case. */
855 *lenptr
= BUNDLE_LEN
- shadow_slotnum
;
857 /* Check for L type instruction in slot 1, if present then bump up the slot
858 number to the slot 2. */
859 templ
= extract_bit_field (bundle
, 0, 5);
860 if (template_encoding_table
[templ
][slotnum
] == X
)
862 gdb_assert (slotnum
== 2);
863 error (_("Can't insert breakpoint for non-existing slot X"));
865 if (template_encoding_table
[templ
][slotnum
] == L
)
867 gdb_assert (slotnum
== 1);
871 /* A break instruction has its all its opcode bits cleared except for
872 the parameter value. For L+X slot pair we are at the X slot (slot 2) so
873 we should not touch the L slot - the upper 41 bits of the parameter. */
874 instr_fetched
= slotN_contents (bundle
, slotnum
);
875 instr_fetched
&= 0x1003ffffc0LL
;
876 replace_slotN_contents (bundle
, instr_fetched
, slotnum
);
878 return bundle
+ shadow_slotnum
;
882 ia64_read_pc (readable_regcache
*regcache
)
884 ULONGEST psr_value
, pc_value
;
887 regcache
->cooked_read (IA64_PSR_REGNUM
, &psr_value
);
888 regcache
->cooked_read (IA64_IP_REGNUM
, &pc_value
);
889 slot_num
= (psr_value
>> 41) & 3;
891 return pc_value
| (slot_num
* SLOT_MULTIPLIER
);
895 ia64_write_pc (struct regcache
*regcache
, CORE_ADDR new_pc
)
897 int slot_num
= (int) (new_pc
& 0xf) / SLOT_MULTIPLIER
;
900 regcache_cooked_read_unsigned (regcache
, IA64_PSR_REGNUM
, &psr_value
);
901 psr_value
&= ~(3LL << 41);
902 psr_value
|= (ULONGEST
)(slot_num
& 0x3) << 41;
906 regcache_cooked_write_unsigned (regcache
, IA64_PSR_REGNUM
, psr_value
);
907 regcache_cooked_write_unsigned (regcache
, IA64_IP_REGNUM
, new_pc
);
910 #define IS_NaT_COLLECTION_ADDR(addr) ((((addr) >> 3) & 0x3f) == 0x3f)
912 /* Returns the address of the slot that's NSLOTS slots away from
913 the address ADDR. NSLOTS may be positive or negative. */
915 rse_address_add(CORE_ADDR addr
, int nslots
)
918 int mandatory_nat_slots
= nslots
/ 63;
919 int direction
= nslots
< 0 ? -1 : 1;
921 new_addr
= addr
+ 8 * (nslots
+ mandatory_nat_slots
);
923 if ((new_addr
>> 9) != ((addr
+ 8 * 64 * mandatory_nat_slots
) >> 9))
924 new_addr
+= 8 * direction
;
926 if (IS_NaT_COLLECTION_ADDR(new_addr
))
927 new_addr
+= 8 * direction
;
932 static enum register_status
933 ia64_pseudo_register_read (struct gdbarch
*gdbarch
, readable_regcache
*regcache
,
934 int regnum
, gdb_byte
*buf
)
936 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
937 enum register_status status
;
939 if (regnum
>= V32_REGNUM
&& regnum
<= V127_REGNUM
)
941 #ifdef HAVE_LIBUNWIND_IA64_H
942 /* First try and use the libunwind special reg accessor,
943 otherwise fallback to standard logic. */
944 if (!libunwind_is_initialized ()
945 || libunwind_get_reg_special (gdbarch
, regcache
, regnum
, buf
) != 0)
948 /* The fallback position is to assume that r32-r127 are
949 found sequentially in memory starting at $bof. This
950 isn't always true, but without libunwind, this is the
956 status
= regcache
->cooked_read (IA64_BSP_REGNUM
, &bsp
);
957 if (status
!= REG_VALID
)
960 status
= regcache
->cooked_read (IA64_CFM_REGNUM
, &cfm
);
961 if (status
!= REG_VALID
)
964 /* The bsp points at the end of the register frame so we
965 subtract the size of frame from it to get start of
967 bsp
= rse_address_add (bsp
, -(cfm
& 0x7f));
969 if ((cfm
& 0x7f) > regnum
- V32_REGNUM
)
971 ULONGEST reg_addr
= rse_address_add (bsp
, (regnum
- V32_REGNUM
));
972 reg
= read_memory_integer ((CORE_ADDR
)reg_addr
, 8, byte_order
);
973 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
977 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
981 else if (IA64_NAT0_REGNUM
<= regnum
&& regnum
<= IA64_NAT31_REGNUM
)
986 status
= regcache
->cooked_read (IA64_UNAT_REGNUM
, &unat
);
987 if (status
!= REG_VALID
)
989 unatN_val
= (unat
& (1LL << (regnum
- IA64_NAT0_REGNUM
))) != 0;
990 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
991 byte_order
, unatN_val
);
993 else if (IA64_NAT32_REGNUM
<= regnum
&& regnum
<= IA64_NAT127_REGNUM
)
995 ULONGEST natN_val
= 0;
998 CORE_ADDR gr_addr
= 0;
1000 status
= regcache
->cooked_read (IA64_BSP_REGNUM
, &bsp
);
1001 if (status
!= REG_VALID
)
1004 status
= regcache
->cooked_read (IA64_CFM_REGNUM
, &cfm
);
1005 if (status
!= REG_VALID
)
1008 /* The bsp points at the end of the register frame so we
1009 subtract the size of frame from it to get start of register frame. */
1010 bsp
= rse_address_add (bsp
, -(cfm
& 0x7f));
1012 if ((cfm
& 0x7f) > regnum
- V32_REGNUM
)
1013 gr_addr
= rse_address_add (bsp
, (regnum
- V32_REGNUM
));
1017 /* Compute address of nat collection bits. */
1018 CORE_ADDR nat_addr
= gr_addr
| 0x1f8;
1019 ULONGEST nat_collection
;
1021 /* If our nat collection address is bigger than bsp, we have to get
1022 the nat collection from rnat. Otherwise, we fetch the nat
1023 collection from the computed address. */
1024 if (nat_addr
>= bsp
)
1025 regcache
->cooked_read (IA64_RNAT_REGNUM
, &nat_collection
);
1027 nat_collection
= read_memory_integer (nat_addr
, 8, byte_order
);
1028 nat_bit
= (gr_addr
>> 3) & 0x3f;
1029 natN_val
= (nat_collection
>> nat_bit
) & 1;
1032 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
1033 byte_order
, natN_val
);
1035 else if (regnum
== VBOF_REGNUM
)
1037 /* A virtual register frame start is provided for user convenience.
1038 It can be calculated as the bsp - sof (sizeof frame). */
1042 status
= regcache
->cooked_read (IA64_BSP_REGNUM
, &bsp
);
1043 if (status
!= REG_VALID
)
1045 status
= regcache
->cooked_read (IA64_CFM_REGNUM
, &cfm
);
1046 if (status
!= REG_VALID
)
1049 /* The bsp points at the end of the register frame so we
1050 subtract the size of frame from it to get beginning of frame. */
1051 vbsp
= rse_address_add (bsp
, -(cfm
& 0x7f));
1052 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
1055 else if (VP0_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1061 status
= regcache
->cooked_read (IA64_PR_REGNUM
, &pr
);
1062 if (status
!= REG_VALID
)
1064 status
= regcache
->cooked_read (IA64_CFM_REGNUM
, &cfm
);
1065 if (status
!= REG_VALID
)
1068 if (VP16_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1070 /* Fetch predicate register rename base from current frame
1071 marker for this frame. */
1072 int rrb_pr
= (cfm
>> 32) & 0x3f;
1074 /* Adjust the register number to account for register rotation. */
1075 regnum
= VP16_REGNUM
1076 + ((regnum
- VP16_REGNUM
) + rrb_pr
) % 48;
1078 prN_val
= (pr
& (1LL << (regnum
- VP0_REGNUM
))) != 0;
1079 store_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
1080 byte_order
, prN_val
);
1083 memset (buf
, 0, register_size (gdbarch
, regnum
));
1089 ia64_pseudo_register_write (struct gdbarch
*gdbarch
, struct regcache
*regcache
,
1090 int regnum
, const gdb_byte
*buf
)
1092 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1094 if (regnum
>= V32_REGNUM
&& regnum
<= V127_REGNUM
)
1098 regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, &bsp
);
1099 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
1101 bsp
= rse_address_add (bsp
, -(cfm
& 0x7f));
1103 if ((cfm
& 0x7f) > regnum
- V32_REGNUM
)
1105 ULONGEST reg_addr
= rse_address_add (bsp
, (regnum
- V32_REGNUM
));
1106 write_memory (reg_addr
, buf
, 8);
1109 else if (IA64_NAT0_REGNUM
<= regnum
&& regnum
<= IA64_NAT31_REGNUM
)
1111 ULONGEST unatN_val
, unat
, unatN_mask
;
1112 regcache_cooked_read_unsigned (regcache
, IA64_UNAT_REGNUM
, &unat
);
1113 unatN_val
= extract_unsigned_integer (buf
, register_size (gdbarch
,
1116 unatN_mask
= (1LL << (regnum
- IA64_NAT0_REGNUM
));
1118 unat
&= ~unatN_mask
;
1119 else if (unatN_val
== 1)
1121 regcache_cooked_write_unsigned (regcache
, IA64_UNAT_REGNUM
, unat
);
1123 else if (IA64_NAT32_REGNUM
<= regnum
&& regnum
<= IA64_NAT127_REGNUM
)
1128 CORE_ADDR gr_addr
= 0;
1129 regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, &bsp
);
1130 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
1132 /* The bsp points at the end of the register frame so we
1133 subtract the size of frame from it to get start of register frame. */
1134 bsp
= rse_address_add (bsp
, -(cfm
& 0x7f));
1136 if ((cfm
& 0x7f) > regnum
- V32_REGNUM
)
1137 gr_addr
= rse_address_add (bsp
, (regnum
- V32_REGNUM
));
1139 natN_val
= extract_unsigned_integer (buf
, register_size (gdbarch
,
1143 if (gr_addr
!= 0 && (natN_val
== 0 || natN_val
== 1))
1145 /* Compute address of nat collection bits. */
1146 CORE_ADDR nat_addr
= gr_addr
| 0x1f8;
1147 CORE_ADDR nat_collection
;
1148 int natN_bit
= (gr_addr
>> 3) & 0x3f;
1149 ULONGEST natN_mask
= (1LL << natN_bit
);
1150 /* If our nat collection address is bigger than bsp, we have to get
1151 the nat collection from rnat. Otherwise, we fetch the nat
1152 collection from the computed address. */
1153 if (nat_addr
>= bsp
)
1155 regcache_cooked_read_unsigned (regcache
,
1159 nat_collection
|= natN_mask
;
1161 nat_collection
&= ~natN_mask
;
1162 regcache_cooked_write_unsigned (regcache
, IA64_RNAT_REGNUM
,
1167 gdb_byte nat_buf
[8];
1168 nat_collection
= read_memory_integer (nat_addr
, 8, byte_order
);
1170 nat_collection
|= natN_mask
;
1172 nat_collection
&= ~natN_mask
;
1173 store_unsigned_integer (nat_buf
, register_size (gdbarch
, regnum
),
1174 byte_order
, nat_collection
);
1175 write_memory (nat_addr
, nat_buf
, 8);
1179 else if (VP0_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1186 regcache_cooked_read_unsigned (regcache
, IA64_PR_REGNUM
, &pr
);
1187 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
1189 if (VP16_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1191 /* Fetch predicate register rename base from current frame
1192 marker for this frame. */
1193 int rrb_pr
= (cfm
>> 32) & 0x3f;
1195 /* Adjust the register number to account for register rotation. */
1196 regnum
= VP16_REGNUM
1197 + ((regnum
- VP16_REGNUM
) + rrb_pr
) % 48;
1199 prN_val
= extract_unsigned_integer (buf
, register_size (gdbarch
, regnum
),
1201 prN_mask
= (1LL << (regnum
- VP0_REGNUM
));
1204 else if (prN_val
== 1)
1206 regcache_cooked_write_unsigned (regcache
, IA64_PR_REGNUM
, pr
);
1210 /* The ia64 needs to convert between various ieee floating-point formats
1211 and the special ia64 floating point register format. */
1214 ia64_convert_register_p (struct gdbarch
*gdbarch
, int regno
, struct type
*type
)
1216 return (regno
>= IA64_FR0_REGNUM
&& regno
<= IA64_FR127_REGNUM
1217 && type
->code () == TYPE_CODE_FLT
1218 && type
!= ia64_ext_type (gdbarch
));
1222 ia64_register_to_value (const frame_info_ptr
&frame
, int regnum
,
1223 struct type
*valtype
, gdb_byte
*out
,
1224 int *optimizedp
, int *unavailablep
)
1226 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
1227 gdb_byte in
[IA64_FP_REGISTER_SIZE
];
1229 /* Convert to TYPE. */
1230 auto in_view
= gdb::make_array_view (in
, register_size (gdbarch
, regnum
));
1231 frame_info_ptr next_frame
= get_next_frame_sentinel_okay (frame
);
1232 if (!get_frame_register_bytes (next_frame
, regnum
, 0, in_view
, optimizedp
,
1236 target_float_convert (in
, ia64_ext_type (gdbarch
), out
, valtype
);
1237 *optimizedp
= *unavailablep
= 0;
1242 ia64_value_to_register (const frame_info_ptr
&frame
, int regnum
,
1243 struct type
*valtype
, const gdb_byte
*in
)
1245 struct gdbarch
*gdbarch
= get_frame_arch (frame
);
1246 gdb_byte out
[IA64_FP_REGISTER_SIZE
];
1247 type
*to_type
= ia64_ext_type (gdbarch
);
1248 target_float_convert (in
, valtype
, out
, to_type
);
1249 auto out_view
= gdb::make_array_view (out
, to_type
->length ());
1250 put_frame_register (get_next_frame_sentinel_okay (frame
), regnum
, out_view
);
1254 /* Limit the number of skipped non-prologue instructions since examining
1255 of the prologue is expensive. */
1256 static int max_skip_non_prologue_insns
= 40;
1258 /* Given PC representing the starting address of a function, and
1259 LIM_PC which is the (sloppy) limit to which to scan when looking
1260 for a prologue, attempt to further refine this limit by using
1261 the line data in the symbol table. If successful, a better guess
1262 on where the prologue ends is returned, otherwise the previous
1263 value of lim_pc is returned. TRUST_LIMIT is a pointer to a flag
1264 which will be set to indicate whether the returned limit may be
1265 used with no further scanning in the event that the function is
1268 /* FIXME: cagney/2004-02-14: This function and logic have largely been
1269 superseded by skip_prologue_using_sal. */
1272 refine_prologue_limit (CORE_ADDR pc
, CORE_ADDR lim_pc
, int *trust_limit
)
1274 struct symtab_and_line prologue_sal
;
1275 CORE_ADDR start_pc
= pc
;
1278 /* The prologue can not possibly go past the function end itself,
1279 so we can already adjust LIM_PC accordingly. */
1280 if (find_pc_partial_function (pc
, NULL
, NULL
, &end_pc
) && end_pc
< lim_pc
)
1283 /* Start off not trusting the limit. */
1286 prologue_sal
= find_pc_line (pc
, 0);
1287 if (prologue_sal
.line
!= 0)
1290 CORE_ADDR addr
= prologue_sal
.end
;
1292 /* Handle the case in which compiler's optimizer/scheduler
1293 has moved instructions into the prologue. We scan ahead
1294 in the function looking for address ranges whose corresponding
1295 line number is less than or equal to the first one that we
1296 found for the function. (It can be less than when the
1297 scheduler puts a body instruction before the first prologue
1299 for (i
= 2 * max_skip_non_prologue_insns
;
1300 i
> 0 && (lim_pc
== 0 || addr
< lim_pc
);
1303 struct symtab_and_line sal
;
1305 sal
= find_pc_line (addr
, 0);
1308 if (sal
.line
<= prologue_sal
.line
1309 && sal
.symtab
== prologue_sal
.symtab
)
1316 if (lim_pc
== 0 || prologue_sal
.end
< lim_pc
)
1318 lim_pc
= prologue_sal
.end
;
1319 if (start_pc
== get_pc_function_start (lim_pc
))
1326 #define isScratch(_regnum_) ((_regnum_) == 2 || (_regnum_) == 3 \
1327 || (8 <= (_regnum_) && (_regnum_) <= 11) \
1328 || (14 <= (_regnum_) && (_regnum_) <= 31))
1329 #define imm9(_instr_) \
1330 ( ((((_instr_) & 0x01000000000LL) ? -1 : 0) << 8) \
1331 | (((_instr_) & 0x00008000000LL) >> 20) \
1332 | (((_instr_) & 0x00000001fc0LL) >> 6))
1334 /* Allocate and initialize a frame cache. */
1336 static struct ia64_frame_cache
*
1337 ia64_alloc_frame_cache (void)
1339 struct ia64_frame_cache
*cache
;
1342 cache
= FRAME_OBSTACK_ZALLOC (struct ia64_frame_cache
);
1348 cache
->prev_cfm
= 0;
1354 cache
->frameless
= 1;
1356 for (i
= 0; i
< NUM_IA64_RAW_REGS
; i
++)
1357 cache
->saved_regs
[i
] = 0;
1363 examine_prologue (CORE_ADDR pc
, CORE_ADDR lim_pc
,
1364 const frame_info_ptr
&this_frame
,
1365 struct ia64_frame_cache
*cache
)
1368 CORE_ADDR last_prologue_pc
= pc
;
1369 ia64_instruction_type it
;
1374 int unat_save_reg
= 0;
1375 int pr_save_reg
= 0;
1376 int mem_stack_frame_size
= 0;
1378 CORE_ADDR spill_addr
= 0;
1381 char reg_contents
[256];
1387 CORE_ADDR bof
, sor
, sol
, sof
, cfm
, rrb_gr
;
1389 memset (instores
, 0, sizeof instores
);
1390 memset (infpstores
, 0, sizeof infpstores
);
1391 memset (reg_contents
, 0, sizeof reg_contents
);
1393 if (cache
->after_prologue
!= 0
1394 && cache
->after_prologue
<= lim_pc
)
1395 return cache
->after_prologue
;
1397 lim_pc
= refine_prologue_limit (pc
, lim_pc
, &trust_limit
);
1398 next_pc
= fetch_instruction (pc
, &it
, &instr
);
1400 /* We want to check if we have a recognizable function start before we
1401 look ahead for a prologue. */
1402 if (pc
< lim_pc
&& next_pc
1403 && it
== M
&& ((instr
& 0x1ee0000003fLL
) == 0x02c00000000LL
))
1405 /* alloc - start of a regular function. */
1406 int sol_bits
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1407 int sof_bits
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1408 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1410 /* Verify that the current cfm matches what we think is the
1411 function start. If we have somehow jumped within a function,
1412 we do not want to interpret the prologue and calculate the
1413 addresses of various registers such as the return address.
1414 We will instead treat the frame as frameless. */
1416 (sof_bits
== (cache
->cfm
& 0x7f) &&
1417 sol_bits
== ((cache
->cfm
>> 7) & 0x7f)))
1421 last_prologue_pc
= next_pc
;
1426 /* Look for a leaf routine. */
1427 if (pc
< lim_pc
&& next_pc
1428 && (it
== I
|| it
== M
)
1429 && ((instr
& 0x1ee00000000LL
) == 0x10800000000LL
))
1431 /* adds rN = imm14, rM (or mov rN, rM when imm14 is 0) */
1432 int imm
= (int) ((((instr
& 0x01000000000LL
) ? -1 : 0) << 13)
1433 | ((instr
& 0x001f8000000LL
) >> 20)
1434 | ((instr
& 0x000000fe000LL
) >> 13));
1435 int rM
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1436 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1437 int qp
= (int) (instr
& 0x0000000003fLL
);
1438 if (qp
== 0 && rN
== 2 && imm
== 0 && rM
== 12 && fp_reg
== 0)
1440 /* mov r2, r12 - beginning of leaf routine. */
1442 last_prologue_pc
= next_pc
;
1446 /* If we don't recognize a regular function or leaf routine, we are
1452 last_prologue_pc
= lim_pc
;
1456 /* Loop, looking for prologue instructions, keeping track of
1457 where preserved registers were spilled. */
1460 next_pc
= fetch_instruction (pc
, &it
, &instr
);
1464 if (it
== B
&& ((instr
& 0x1e1f800003fLL
) != 0x04000000000LL
))
1466 /* Exit loop upon hitting a non-nop branch instruction. */
1471 else if (((instr
& 0x3fLL
) != 0LL) &&
1472 (frameless
|| ret_reg
!= 0))
1474 /* Exit loop upon hitting a predicated instruction if
1475 we already have the return register or if we are frameless. */
1480 else if (it
== I
&& ((instr
& 0x1eff8000000LL
) == 0x00188000000LL
))
1483 int b2
= (int) ((instr
& 0x0000000e000LL
) >> 13);
1484 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1485 int qp
= (int) (instr
& 0x0000000003f);
1487 if (qp
== 0 && b2
== 0 && rN
>= 32 && ret_reg
== 0)
1490 last_prologue_pc
= next_pc
;
1493 else if ((it
== I
|| it
== M
)
1494 && ((instr
& 0x1ee00000000LL
) == 0x10800000000LL
))
1496 /* adds rN = imm14, rM (or mov rN, rM when imm14 is 0) */
1497 int imm
= (int) ((((instr
& 0x01000000000LL
) ? -1 : 0) << 13)
1498 | ((instr
& 0x001f8000000LL
) >> 20)
1499 | ((instr
& 0x000000fe000LL
) >> 13));
1500 int rM
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1501 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1502 int qp
= (int) (instr
& 0x0000000003fLL
);
1504 if (qp
== 0 && rN
>= 32 && imm
== 0 && rM
== 12 && fp_reg
== 0)
1508 last_prologue_pc
= next_pc
;
1510 else if (qp
== 0 && rN
== 12 && rM
== 12)
1512 /* adds r12, -mem_stack_frame_size, r12 */
1513 mem_stack_frame_size
-= imm
;
1514 last_prologue_pc
= next_pc
;
1516 else if (qp
== 0 && rN
== 2
1517 && ((rM
== fp_reg
&& fp_reg
!= 0) || rM
== 12))
1519 CORE_ADDR saved_sp
= 0;
1520 /* adds r2, spilloffset, rFramePointer
1522 adds r2, spilloffset, r12
1524 Get ready for stf.spill or st8.spill instructions.
1525 The address to start spilling at is loaded into r2.
1526 FIXME: Why r2? That's what gcc currently uses; it
1527 could well be different for other compilers. */
1529 /* Hmm... whether or not this will work will depend on
1530 where the pc is. If it's still early in the prologue
1531 this'll be wrong. FIXME */
1533 saved_sp
= get_frame_register_unsigned (this_frame
,
1535 spill_addr
= saved_sp
1536 + (rM
== 12 ? 0 : mem_stack_frame_size
)
1539 last_prologue_pc
= next_pc
;
1541 else if (qp
== 0 && rM
>= 32 && rM
< 40 && !instores
[rM
-32] &&
1542 rN
< 256 && imm
== 0)
1544 /* mov rN, rM where rM is an input register. */
1545 reg_contents
[rN
] = rM
;
1546 last_prologue_pc
= next_pc
;
1548 else if (frameless
&& qp
== 0 && rN
== fp_reg
&& imm
== 0 &&
1552 last_prologue_pc
= next_pc
;
1557 && ( ((instr
& 0x1efc0000000LL
) == 0x0eec0000000LL
)
1558 || ((instr
& 0x1ffc8000000LL
) == 0x0cec0000000LL
) ))
1560 /* stf.spill [rN] = fM, imm9
1562 stf.spill [rN] = fM */
1564 int imm
= imm9(instr
);
1565 int rN
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1566 int fM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1567 int qp
= (int) (instr
& 0x0000000003fLL
);
1568 if (qp
== 0 && rN
== spill_reg
&& spill_addr
!= 0
1569 && ((2 <= fM
&& fM
<= 5) || (16 <= fM
&& fM
<= 31)))
1571 cache
->saved_regs
[IA64_FR0_REGNUM
+ fM
] = spill_addr
;
1573 if ((instr
& 0x1efc0000000LL
) == 0x0eec0000000LL
)
1576 spill_addr
= 0; /* last one; must be done. */
1577 last_prologue_pc
= next_pc
;
1580 else if ((it
== M
&& ((instr
& 0x1eff8000000LL
) == 0x02110000000LL
))
1581 || (it
== I
&& ((instr
& 0x1eff8000000LL
) == 0x00050000000LL
)) )
1587 int arM
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1588 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1589 int qp
= (int) (instr
& 0x0000000003fLL
);
1590 if (qp
== 0 && isScratch (rN
) && arM
== 36 /* ar.unat */)
1592 /* We have something like "mov.m r3 = ar.unat". Remember the
1593 r3 (or whatever) and watch for a store of this register... */
1595 last_prologue_pc
= next_pc
;
1598 else if (it
== I
&& ((instr
& 0x1eff8000000LL
) == 0x00198000000LL
))
1601 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
1602 int qp
= (int) (instr
& 0x0000000003fLL
);
1603 if (qp
== 0 && isScratch (rN
))
1606 last_prologue_pc
= next_pc
;
1610 && ( ((instr
& 0x1ffc8000000LL
) == 0x08cc0000000LL
)
1611 || ((instr
& 0x1efc0000000LL
) == 0x0acc0000000LL
)))
1615 st8 [rN] = rM, imm9 */
1616 int rN
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1617 int rM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1618 int qp
= (int) (instr
& 0x0000000003fLL
);
1619 int indirect
= rM
< 256 ? reg_contents
[rM
] : 0;
1620 if (qp
== 0 && rN
== spill_reg
&& spill_addr
!= 0
1621 && (rM
== unat_save_reg
|| rM
== pr_save_reg
))
1623 /* We've found a spill of either the UNAT register or the PR
1624 register. (Well, not exactly; what we've actually found is
1625 a spill of the register that UNAT or PR was moved to).
1626 Record that fact and move on... */
1627 if (rM
== unat_save_reg
)
1629 /* Track UNAT register. */
1630 cache
->saved_regs
[IA64_UNAT_REGNUM
] = spill_addr
;
1635 /* Track PR register. */
1636 cache
->saved_regs
[IA64_PR_REGNUM
] = spill_addr
;
1639 if ((instr
& 0x1efc0000000LL
) == 0x0acc0000000LL
)
1640 /* st8 [rN] = rM, imm9 */
1641 spill_addr
+= imm9(instr
);
1643 spill_addr
= 0; /* Must be done spilling. */
1644 last_prologue_pc
= next_pc
;
1646 else if (qp
== 0 && 32 <= rM
&& rM
< 40 && !instores
[rM
-32])
1648 /* Allow up to one store of each input register. */
1649 instores
[rM
-32] = 1;
1650 last_prologue_pc
= next_pc
;
1652 else if (qp
== 0 && 32 <= indirect
&& indirect
< 40 &&
1653 !instores
[indirect
-32])
1655 /* Allow an indirect store of an input register. */
1656 instores
[indirect
-32] = 1;
1657 last_prologue_pc
= next_pc
;
1660 else if (it
== M
&& ((instr
& 0x1ff08000000LL
) == 0x08c00000000LL
))
1667 Note that the st8 case is handled in the clause above.
1669 Advance over stores of input registers. One store per input
1670 register is permitted. */
1671 int rM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1672 int qp
= (int) (instr
& 0x0000000003fLL
);
1673 int indirect
= rM
< 256 ? reg_contents
[rM
] : 0;
1674 if (qp
== 0 && 32 <= rM
&& rM
< 40 && !instores
[rM
-32])
1676 instores
[rM
-32] = 1;
1677 last_prologue_pc
= next_pc
;
1679 else if (qp
== 0 && 32 <= indirect
&& indirect
< 40 &&
1680 !instores
[indirect
-32])
1682 /* Allow an indirect store of an input register. */
1683 instores
[indirect
-32] = 1;
1684 last_prologue_pc
= next_pc
;
1687 else if (it
== M
&& ((instr
& 0x1ff88000000LL
) == 0x0cc80000000LL
))
1694 Advance over stores of floating point input registers. Again
1695 one store per register is permitted. */
1696 int fM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1697 int qp
= (int) (instr
& 0x0000000003fLL
);
1698 if (qp
== 0 && 8 <= fM
&& fM
< 16 && !infpstores
[fM
- 8])
1700 infpstores
[fM
-8] = 1;
1701 last_prologue_pc
= next_pc
;
1705 && ( ((instr
& 0x1ffc8000000LL
) == 0x08ec0000000LL
)
1706 || ((instr
& 0x1efc0000000LL
) == 0x0aec0000000LL
)))
1708 /* st8.spill [rN] = rM
1710 st8.spill [rN] = rM, imm9 */
1711 int rN
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1712 int rM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1713 int qp
= (int) (instr
& 0x0000000003fLL
);
1714 if (qp
== 0 && rN
== spill_reg
&& 4 <= rM
&& rM
<= 7)
1716 /* We've found a spill of one of the preserved general purpose
1717 regs. Record the spill address and advance the spill
1718 register if appropriate. */
1719 cache
->saved_regs
[IA64_GR0_REGNUM
+ rM
] = spill_addr
;
1720 if ((instr
& 0x1efc0000000LL
) == 0x0aec0000000LL
)
1721 /* st8.spill [rN] = rM, imm9 */
1722 spill_addr
+= imm9(instr
);
1724 spill_addr
= 0; /* Done spilling. */
1725 last_prologue_pc
= next_pc
;
1732 /* If not frameless and we aren't called by skip_prologue, then we need
1733 to calculate registers for the previous frame which will be needed
1736 if (!frameless
&& this_frame
)
1738 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1739 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1741 /* Extract the size of the rotating portion of the stack
1742 frame and the register rename base from the current
1748 rrb_gr
= (cfm
>> 18) & 0x7f;
1750 /* Find the bof (beginning of frame). */
1751 bof
= rse_address_add (cache
->bsp
, -sof
);
1753 for (i
= 0, addr
= bof
;
1757 if (IS_NaT_COLLECTION_ADDR (addr
))
1761 if (i
+32 == cfm_reg
)
1762 cache
->saved_regs
[IA64_CFM_REGNUM
] = addr
;
1763 if (i
+32 == ret_reg
)
1764 cache
->saved_regs
[IA64_VRAP_REGNUM
] = addr
;
1766 cache
->saved_regs
[IA64_VFP_REGNUM
] = addr
;
1769 /* For the previous argument registers we require the previous bof.
1770 If we can't find the previous cfm, then we can do nothing. */
1772 if (cache
->saved_regs
[IA64_CFM_REGNUM
] != 0)
1774 cfm
= read_memory_integer (cache
->saved_regs
[IA64_CFM_REGNUM
],
1777 else if (cfm_reg
!= 0)
1779 get_frame_register (this_frame
, cfm_reg
, buf
);
1780 cfm
= extract_unsigned_integer (buf
, 8, byte_order
);
1782 cache
->prev_cfm
= cfm
;
1786 sor
= ((cfm
>> 14) & 0xf) * 8;
1788 sol
= (cfm
>> 7) & 0x7f;
1789 rrb_gr
= (cfm
>> 18) & 0x7f;
1791 /* The previous bof only requires subtraction of the sol (size of
1792 locals) due to the overlap between output and input of
1793 subsequent frames. */
1794 bof
= rse_address_add (bof
, -sol
);
1796 for (i
= 0, addr
= bof
;
1800 if (IS_NaT_COLLECTION_ADDR (addr
))
1805 cache
->saved_regs
[IA64_GR32_REGNUM
1806 + ((i
+ (sor
- rrb_gr
)) % sor
)]
1809 cache
->saved_regs
[IA64_GR32_REGNUM
+ i
] = addr
;
1815 /* Try and trust the lim_pc value whenever possible. */
1816 if (trust_limit
&& lim_pc
>= last_prologue_pc
)
1817 last_prologue_pc
= lim_pc
;
1819 cache
->frameless
= frameless
;
1820 cache
->after_prologue
= last_prologue_pc
;
1821 cache
->mem_stack_frame_size
= mem_stack_frame_size
;
1822 cache
->fp_reg
= fp_reg
;
1824 return last_prologue_pc
;
1828 ia64_skip_prologue (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
1830 struct ia64_frame_cache cache
;
1832 cache
.after_prologue
= 0;
1836 /* Call examine_prologue with - as third argument since we don't
1837 have a next frame pointer to send. */
1838 return examine_prologue (pc
, pc
+1024, 0, &cache
);
1842 /* Normal frames. */
1844 static struct ia64_frame_cache
*
1845 ia64_frame_cache (const frame_info_ptr
&this_frame
, void **this_cache
)
1847 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1848 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1849 struct ia64_frame_cache
*cache
;
1854 return (struct ia64_frame_cache
*) *this_cache
;
1856 cache
= ia64_alloc_frame_cache ();
1857 *this_cache
= cache
;
1859 get_frame_register (this_frame
, sp_regnum
, buf
);
1860 cache
->saved_sp
= extract_unsigned_integer (buf
, 8, byte_order
);
1862 /* We always want the bsp to point to the end of frame.
1863 This way, we can always get the beginning of frame (bof)
1864 by subtracting frame size. */
1865 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
1866 cache
->bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
1868 get_frame_register (this_frame
, IA64_PSR_REGNUM
, buf
);
1870 get_frame_register (this_frame
, IA64_CFM_REGNUM
, buf
);
1871 cfm
= extract_unsigned_integer (buf
, 8, byte_order
);
1873 cache
->sof
= (cfm
& 0x7f);
1874 cache
->sol
= (cfm
>> 7) & 0x7f;
1875 cache
->sor
= ((cfm
>> 14) & 0xf) * 8;
1879 cache
->pc
= get_frame_func (this_frame
);
1882 examine_prologue (cache
->pc
, get_frame_pc (this_frame
), this_frame
, cache
);
1884 cache
->base
= cache
->saved_sp
+ cache
->mem_stack_frame_size
;
1890 ia64_frame_this_id (const frame_info_ptr
&this_frame
, void **this_cache
,
1891 struct frame_id
*this_id
)
1893 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1894 struct ia64_frame_cache
*cache
=
1895 ia64_frame_cache (this_frame
, this_cache
);
1897 /* If outermost frame, mark with null frame id. */
1898 if (cache
->base
!= 0)
1899 (*this_id
) = frame_id_build_special (cache
->base
, cache
->pc
, cache
->bsp
);
1900 if (gdbarch_debug
>= 1)
1901 gdb_printf (gdb_stdlog
,
1902 "regular frame id: code %s, stack %s, "
1903 "special %s, this_frame %s\n",
1904 paddress (gdbarch
, this_id
->code_addr
),
1905 paddress (gdbarch
, this_id
->stack_addr
),
1906 paddress (gdbarch
, cache
->bsp
),
1907 host_address_to_string (this_frame
.get ()));
1910 static struct value
*
1911 ia64_frame_prev_register (const frame_info_ptr
&this_frame
, void **this_cache
,
1914 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
1915 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
1916 struct ia64_frame_cache
*cache
= ia64_frame_cache (this_frame
, this_cache
);
1919 gdb_assert (regnum
>= 0);
1921 if (!target_has_registers ())
1922 error (_("No registers."));
1924 if (regnum
== gdbarch_sp_regnum (gdbarch
))
1925 return frame_unwind_got_constant (this_frame
, regnum
, cache
->base
);
1927 else if (regnum
== IA64_BSP_REGNUM
)
1930 CORE_ADDR prev_cfm
, bsp
, prev_bsp
;
1932 /* We want to calculate the previous bsp as the end of the previous
1933 register stack frame. This corresponds to what the hardware bsp
1934 register will be if we pop the frame back which is why we might
1935 have been called. We know the beginning of the current frame is
1936 cache->bsp - cache->sof. This value in the previous frame points
1937 to the start of the output registers. We can calculate the end of
1938 that frame by adding the size of output:
1939 (sof (size of frame) - sol (size of locals)). */
1940 val
= ia64_frame_prev_register (this_frame
, this_cache
, IA64_CFM_REGNUM
);
1941 prev_cfm
= extract_unsigned_integer (val
->contents_all ().data (),
1943 bsp
= rse_address_add (cache
->bsp
, -(cache
->sof
));
1945 rse_address_add (bsp
, (prev_cfm
& 0x7f) - ((prev_cfm
>> 7) & 0x7f));
1947 return frame_unwind_got_constant (this_frame
, regnum
, prev_bsp
);
1950 else if (regnum
== IA64_CFM_REGNUM
)
1952 CORE_ADDR addr
= cache
->saved_regs
[IA64_CFM_REGNUM
];
1955 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
1957 if (cache
->prev_cfm
)
1958 return frame_unwind_got_constant (this_frame
, regnum
, cache
->prev_cfm
);
1960 if (cache
->frameless
)
1961 return frame_unwind_got_register (this_frame
, IA64_PFS_REGNUM
,
1963 return frame_unwind_got_register (this_frame
, regnum
, 0);
1966 else if (regnum
== IA64_VFP_REGNUM
)
1968 /* If the function in question uses an automatic register (r32-r127)
1969 for the frame pointer, it'll be found by ia64_find_saved_register()
1970 above. If the function lacks one of these frame pointers, we can
1971 still provide a value since we know the size of the frame. */
1972 return frame_unwind_got_constant (this_frame
, regnum
, cache
->base
);
1975 else if (VP0_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1977 struct value
*pr_val
;
1980 pr_val
= ia64_frame_prev_register (this_frame
, this_cache
,
1982 if (VP16_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
1984 /* Fetch predicate register rename base from current frame
1985 marker for this frame. */
1986 int rrb_pr
= (cache
->cfm
>> 32) & 0x3f;
1988 /* Adjust the register number to account for register rotation. */
1989 regnum
= VP16_REGNUM
+ ((regnum
- VP16_REGNUM
) + rrb_pr
) % 48;
1991 prN
= extract_bit_field (pr_val
->contents_all ().data (),
1992 regnum
- VP0_REGNUM
, 1);
1993 return frame_unwind_got_constant (this_frame
, regnum
, prN
);
1996 else if (IA64_NAT0_REGNUM
<= regnum
&& regnum
<= IA64_NAT31_REGNUM
)
1998 struct value
*unat_val
;
2000 unat_val
= ia64_frame_prev_register (this_frame
, this_cache
,
2002 unatN
= extract_bit_field (unat_val
->contents_all ().data (),
2003 regnum
- IA64_NAT0_REGNUM
, 1);
2004 return frame_unwind_got_constant (this_frame
, regnum
, unatN
);
2007 else if (IA64_NAT32_REGNUM
<= regnum
&& regnum
<= IA64_NAT127_REGNUM
)
2010 /* Find address of general register corresponding to nat bit we're
2014 gr_addr
= cache
->saved_regs
[regnum
- IA64_NAT0_REGNUM
+ IA64_GR0_REGNUM
];
2018 /* Compute address of nat collection bits. */
2019 CORE_ADDR nat_addr
= gr_addr
| 0x1f8;
2021 CORE_ADDR nat_collection
;
2024 /* If our nat collection address is bigger than bsp, we have to get
2025 the nat collection from rnat. Otherwise, we fetch the nat
2026 collection from the computed address. */
2027 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
2028 bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
2029 if (nat_addr
>= bsp
)
2031 get_frame_register (this_frame
, IA64_RNAT_REGNUM
, buf
);
2032 nat_collection
= extract_unsigned_integer (buf
, 8, byte_order
);
2035 nat_collection
= read_memory_integer (nat_addr
, 8, byte_order
);
2036 nat_bit
= (gr_addr
>> 3) & 0x3f;
2037 natval
= (nat_collection
>> nat_bit
) & 1;
2040 return frame_unwind_got_constant (this_frame
, regnum
, natval
);
2043 else if (regnum
== IA64_IP_REGNUM
)
2046 CORE_ADDR addr
= cache
->saved_regs
[IA64_VRAP_REGNUM
];
2050 read_memory (addr
, buf
, register_size (gdbarch
, IA64_IP_REGNUM
));
2051 pc
= extract_unsigned_integer (buf
, 8, byte_order
);
2053 else if (cache
->frameless
)
2055 get_frame_register (this_frame
, IA64_BR0_REGNUM
, buf
);
2056 pc
= extract_unsigned_integer (buf
, 8, byte_order
);
2059 return frame_unwind_got_constant (this_frame
, regnum
, pc
);
2062 else if (regnum
== IA64_PSR_REGNUM
)
2064 /* We don't know how to get the complete previous PSR, but we need it
2065 for the slot information when we unwind the pc (pc is formed of IP
2066 register plus slot information from PSR). To get the previous
2067 slot information, we mask it off the return address. */
2068 ULONGEST slot_num
= 0;
2071 CORE_ADDR addr
= cache
->saved_regs
[IA64_VRAP_REGNUM
];
2073 get_frame_register (this_frame
, IA64_PSR_REGNUM
, buf
);
2074 psr
= extract_unsigned_integer (buf
, 8, byte_order
);
2078 read_memory (addr
, buf
, register_size (gdbarch
, IA64_IP_REGNUM
));
2079 pc
= extract_unsigned_integer (buf
, 8, byte_order
);
2081 else if (cache
->frameless
)
2083 get_frame_register (this_frame
, IA64_BR0_REGNUM
, buf
);
2084 pc
= extract_unsigned_integer (buf
, 8, byte_order
);
2086 psr
&= ~(3LL << 41);
2087 slot_num
= pc
& 0x3LL
;
2088 psr
|= (CORE_ADDR
)slot_num
<< 41;
2089 return frame_unwind_got_constant (this_frame
, regnum
, psr
);
2092 else if (regnum
== IA64_BR0_REGNUM
)
2094 CORE_ADDR addr
= cache
->saved_regs
[IA64_BR0_REGNUM
];
2097 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2099 return frame_unwind_got_constant (this_frame
, regnum
, 0);
2102 else if ((regnum
>= IA64_GR32_REGNUM
&& regnum
<= IA64_GR127_REGNUM
)
2103 || (regnum
>= V32_REGNUM
&& regnum
<= V127_REGNUM
))
2107 if (regnum
>= V32_REGNUM
)
2108 regnum
= IA64_GR32_REGNUM
+ (regnum
- V32_REGNUM
);
2109 addr
= cache
->saved_regs
[regnum
];
2111 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2113 if (cache
->frameless
)
2115 struct value
*reg_val
;
2116 CORE_ADDR prev_cfm
, prev_bsp
, prev_bof
;
2118 /* FIXME: brobecker/2008-05-01: Doesn't this seem redundant
2119 with the same code above? */
2120 if (regnum
>= V32_REGNUM
)
2121 regnum
= IA64_GR32_REGNUM
+ (regnum
- V32_REGNUM
);
2122 reg_val
= ia64_frame_prev_register (this_frame
, this_cache
,
2124 prev_cfm
= extract_unsigned_integer
2125 (reg_val
->contents_all ().data (), 8, byte_order
);
2126 reg_val
= ia64_frame_prev_register (this_frame
, this_cache
,
2128 prev_bsp
= extract_unsigned_integer
2129 (reg_val
->contents_all ().data (), 8, byte_order
);
2130 prev_bof
= rse_address_add (prev_bsp
, -(prev_cfm
& 0x7f));
2132 addr
= rse_address_add (prev_bof
, (regnum
- IA64_GR32_REGNUM
));
2133 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2136 return frame_unwind_got_constant (this_frame
, regnum
, 0);
2139 else /* All other registers. */
2143 if (IA64_FR32_REGNUM
<= regnum
&& regnum
<= IA64_FR127_REGNUM
)
2145 /* Fetch floating point register rename base from current
2146 frame marker for this frame. */
2147 int rrb_fr
= (cache
->cfm
>> 25) & 0x7f;
2149 /* Adjust the floating point register number to account for
2150 register rotation. */
2151 regnum
= IA64_FR32_REGNUM
2152 + ((regnum
- IA64_FR32_REGNUM
) + rrb_fr
) % 96;
2155 /* If we have stored a memory address, access the register. */
2156 addr
= cache
->saved_regs
[regnum
];
2158 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2159 /* Otherwise, punt and get the current value of the register. */
2161 return frame_unwind_got_register (this_frame
, regnum
, regnum
);
2165 static const struct frame_unwind ia64_frame_unwind
=
2169 default_frame_unwind_stop_reason
,
2170 &ia64_frame_this_id
,
2171 &ia64_frame_prev_register
,
2173 default_frame_sniffer
2176 /* Signal trampolines. */
2179 ia64_sigtramp_frame_init_saved_regs (const frame_info_ptr
&this_frame
,
2180 struct ia64_frame_cache
*cache
)
2182 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2183 ia64_gdbarch_tdep
*tdep
= gdbarch_tdep
<ia64_gdbarch_tdep
> (gdbarch
);
2185 if (tdep
->sigcontext_register_address
)
2189 cache
->saved_regs
[IA64_VRAP_REGNUM
]
2190 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2192 cache
->saved_regs
[IA64_CFM_REGNUM
]
2193 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2195 cache
->saved_regs
[IA64_PSR_REGNUM
]
2196 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2198 cache
->saved_regs
[IA64_BSP_REGNUM
]
2199 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2201 cache
->saved_regs
[IA64_RNAT_REGNUM
]
2202 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2204 cache
->saved_regs
[IA64_CCV_REGNUM
]
2205 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2207 cache
->saved_regs
[IA64_UNAT_REGNUM
]
2208 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2210 cache
->saved_regs
[IA64_FPSR_REGNUM
]
2211 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2213 cache
->saved_regs
[IA64_PFS_REGNUM
]
2214 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2216 cache
->saved_regs
[IA64_LC_REGNUM
]
2217 = tdep
->sigcontext_register_address (gdbarch
, cache
->base
,
2220 for (regno
= IA64_GR1_REGNUM
; regno
<= IA64_GR31_REGNUM
; regno
++)
2221 cache
->saved_regs
[regno
] =
2222 tdep
->sigcontext_register_address (gdbarch
, cache
->base
, regno
);
2223 for (regno
= IA64_BR0_REGNUM
; regno
<= IA64_BR7_REGNUM
; regno
++)
2224 cache
->saved_regs
[regno
] =
2225 tdep
->sigcontext_register_address (gdbarch
, cache
->base
, regno
);
2226 for (regno
= IA64_FR2_REGNUM
; regno
<= IA64_FR31_REGNUM
; regno
++)
2227 cache
->saved_regs
[regno
] =
2228 tdep
->sigcontext_register_address (gdbarch
, cache
->base
, regno
);
2232 static struct ia64_frame_cache
*
2233 ia64_sigtramp_frame_cache (const frame_info_ptr
&this_frame
, void **this_cache
)
2235 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2236 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2237 struct ia64_frame_cache
*cache
;
2241 return (struct ia64_frame_cache
*) *this_cache
;
2243 cache
= ia64_alloc_frame_cache ();
2245 get_frame_register (this_frame
, sp_regnum
, buf
);
2246 /* Note that frame size is hard-coded below. We cannot calculate it
2247 via prologue examination. */
2248 cache
->base
= extract_unsigned_integer (buf
, 8, byte_order
) + 16;
2250 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
2251 cache
->bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
2253 get_frame_register (this_frame
, IA64_CFM_REGNUM
, buf
);
2254 cache
->cfm
= extract_unsigned_integer (buf
, 8, byte_order
);
2255 cache
->sof
= cache
->cfm
& 0x7f;
2257 ia64_sigtramp_frame_init_saved_regs (this_frame
, cache
);
2259 *this_cache
= cache
;
2264 ia64_sigtramp_frame_this_id (const frame_info_ptr
&this_frame
,
2265 void **this_cache
, struct frame_id
*this_id
)
2267 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2268 struct ia64_frame_cache
*cache
=
2269 ia64_sigtramp_frame_cache (this_frame
, this_cache
);
2271 (*this_id
) = frame_id_build_special (cache
->base
,
2272 get_frame_pc (this_frame
),
2274 if (gdbarch_debug
>= 1)
2275 gdb_printf (gdb_stdlog
,
2276 "sigtramp frame id: code %s, stack %s, "
2277 "special %s, this_frame %s\n",
2278 paddress (gdbarch
, this_id
->code_addr
),
2279 paddress (gdbarch
, this_id
->stack_addr
),
2280 paddress (gdbarch
, cache
->bsp
),
2281 host_address_to_string (this_frame
.get ()));
2284 static struct value
*
2285 ia64_sigtramp_frame_prev_register (const frame_info_ptr
&this_frame
,
2286 void **this_cache
, int regnum
)
2288 struct ia64_frame_cache
*cache
=
2289 ia64_sigtramp_frame_cache (this_frame
, this_cache
);
2291 gdb_assert (regnum
>= 0);
2293 if (!target_has_registers ())
2294 error (_("No registers."));
2296 if (regnum
== IA64_IP_REGNUM
)
2299 CORE_ADDR addr
= cache
->saved_regs
[IA64_VRAP_REGNUM
];
2303 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2304 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2305 pc
= read_memory_unsigned_integer (addr
, 8, byte_order
);
2308 return frame_unwind_got_constant (this_frame
, regnum
, pc
);
2311 else if ((regnum
>= IA64_GR32_REGNUM
&& regnum
<= IA64_GR127_REGNUM
)
2312 || (regnum
>= V32_REGNUM
&& regnum
<= V127_REGNUM
))
2316 if (regnum
>= V32_REGNUM
)
2317 regnum
= IA64_GR32_REGNUM
+ (regnum
- V32_REGNUM
);
2318 addr
= cache
->saved_regs
[regnum
];
2320 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2322 return frame_unwind_got_constant (this_frame
, regnum
, 0);
2325 else /* All other registers not listed above. */
2327 CORE_ADDR addr
= cache
->saved_regs
[regnum
];
2330 return frame_unwind_got_memory (this_frame
, regnum
, addr
);
2332 return frame_unwind_got_constant (this_frame
, regnum
, 0);
2337 ia64_sigtramp_frame_sniffer (const struct frame_unwind
*self
,
2338 const frame_info_ptr
&this_frame
,
2341 gdbarch
*arch
= get_frame_arch (this_frame
);
2342 ia64_gdbarch_tdep
*tdep
= gdbarch_tdep
<ia64_gdbarch_tdep
> (arch
);
2343 if (tdep
->pc_in_sigtramp
)
2345 CORE_ADDR pc
= get_frame_pc (this_frame
);
2347 if (tdep
->pc_in_sigtramp (pc
))
2354 static const struct frame_unwind ia64_sigtramp_frame_unwind
=
2358 default_frame_unwind_stop_reason
,
2359 ia64_sigtramp_frame_this_id
,
2360 ia64_sigtramp_frame_prev_register
,
2362 ia64_sigtramp_frame_sniffer
2368 ia64_frame_base_address (const frame_info_ptr
&this_frame
, void **this_cache
)
2370 struct ia64_frame_cache
*cache
= ia64_frame_cache (this_frame
, this_cache
);
2375 static const struct frame_base ia64_frame_base
=
2378 ia64_frame_base_address
,
2379 ia64_frame_base_address
,
2380 ia64_frame_base_address
2383 #ifdef HAVE_LIBUNWIND_IA64_H
2385 struct ia64_unwind_table_entry
2387 unw_word_t start_offset
;
2388 unw_word_t end_offset
;
2389 unw_word_t info_offset
;
2392 static __inline__
uint64_t
2393 ia64_rse_slot_num (uint64_t addr
)
2395 return (addr
>> 3) & 0x3f;
2398 /* Skip over a designated number of registers in the backing
2399 store, remembering every 64th position is for NAT. */
2400 static __inline__
uint64_t
2401 ia64_rse_skip_regs (uint64_t addr
, long num_regs
)
2403 long delta
= ia64_rse_slot_num(addr
) + num_regs
;
2407 return addr
+ ((num_regs
+ delta
/0x3f) << 3);
2410 /* Gdb ia64-libunwind-tdep callback function to convert from an ia64 gdb
2411 register number to a libunwind register number. */
2413 ia64_gdb2uw_regnum (int regnum
)
2415 if (regnum
== sp_regnum
)
2417 else if (regnum
== IA64_BSP_REGNUM
)
2418 return UNW_IA64_BSP
;
2419 else if ((unsigned) (regnum
- IA64_GR0_REGNUM
) < 128)
2420 return UNW_IA64_GR
+ (regnum
- IA64_GR0_REGNUM
);
2421 else if ((unsigned) (regnum
- V32_REGNUM
) < 95)
2422 return UNW_IA64_GR
+ 32 + (regnum
- V32_REGNUM
);
2423 else if ((unsigned) (regnum
- IA64_FR0_REGNUM
) < 128)
2424 return UNW_IA64_FR
+ (regnum
- IA64_FR0_REGNUM
);
2425 else if ((unsigned) (regnum
- IA64_PR0_REGNUM
) < 64)
2427 else if ((unsigned) (regnum
- IA64_BR0_REGNUM
) < 8)
2428 return UNW_IA64_BR
+ (regnum
- IA64_BR0_REGNUM
);
2429 else if (regnum
== IA64_PR_REGNUM
)
2431 else if (regnum
== IA64_IP_REGNUM
)
2433 else if (regnum
== IA64_CFM_REGNUM
)
2434 return UNW_IA64_CFM
;
2435 else if ((unsigned) (regnum
- IA64_AR0_REGNUM
) < 128)
2436 return UNW_IA64_AR
+ (regnum
- IA64_AR0_REGNUM
);
2437 else if ((unsigned) (regnum
- IA64_NAT0_REGNUM
) < 128)
2438 return UNW_IA64_NAT
+ (regnum
- IA64_NAT0_REGNUM
);
2443 /* Gdb ia64-libunwind-tdep callback function to convert from a libunwind
2444 register number to a ia64 gdb register number. */
2446 ia64_uw2gdb_regnum (int uw_regnum
)
2448 if (uw_regnum
== UNW_IA64_SP
)
2450 else if (uw_regnum
== UNW_IA64_BSP
)
2451 return IA64_BSP_REGNUM
;
2452 else if ((unsigned) (uw_regnum
- UNW_IA64_GR
) < 32)
2453 return IA64_GR0_REGNUM
+ (uw_regnum
- UNW_IA64_GR
);
2454 else if ((unsigned) (uw_regnum
- UNW_IA64_GR
) < 128)
2455 return V32_REGNUM
+ (uw_regnum
- (IA64_GR0_REGNUM
+ 32));
2456 else if ((unsigned) (uw_regnum
- UNW_IA64_FR
) < 128)
2457 return IA64_FR0_REGNUM
+ (uw_regnum
- UNW_IA64_FR
);
2458 else if ((unsigned) (uw_regnum
- UNW_IA64_BR
) < 8)
2459 return IA64_BR0_REGNUM
+ (uw_regnum
- UNW_IA64_BR
);
2460 else if (uw_regnum
== UNW_IA64_PR
)
2461 return IA64_PR_REGNUM
;
2462 else if (uw_regnum
== UNW_REG_IP
)
2463 return IA64_IP_REGNUM
;
2464 else if (uw_regnum
== UNW_IA64_CFM
)
2465 return IA64_CFM_REGNUM
;
2466 else if ((unsigned) (uw_regnum
- UNW_IA64_AR
) < 128)
2467 return IA64_AR0_REGNUM
+ (uw_regnum
- UNW_IA64_AR
);
2468 else if ((unsigned) (uw_regnum
- UNW_IA64_NAT
) < 128)
2469 return IA64_NAT0_REGNUM
+ (uw_regnum
- UNW_IA64_NAT
);
2474 /* Gdb ia64-libunwind-tdep callback function to reveal if register is
2475 a float register or not. */
2477 ia64_is_fpreg (int uw_regnum
)
2479 return unw_is_fpreg (uw_regnum
);
2482 /* Libunwind callback accessor function for general registers. */
2484 ia64_access_reg (unw_addr_space_t as
, unw_regnum_t uw_regnum
, unw_word_t
*val
,
2485 int write
, void *arg
)
2487 int regnum
= ia64_uw2gdb_regnum (uw_regnum
);
2488 unw_word_t bsp
, sof
, cfm
, psr
, ip
;
2489 struct frame_info
*this_frame
= (frame_info
*) arg
;
2490 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2491 ia64_gdbarch_tdep
*tdep
= gdbarch_tdep
<ia64_gdbarch_tdep
> (gdbarch
);
2493 /* We never call any libunwind routines that need to write registers. */
2494 gdb_assert (!write
);
2499 /* Libunwind expects to see the pc value which means the slot number
2500 from the psr must be merged with the ip word address. */
2501 ip
= get_frame_register_unsigned (this_frame
, IA64_IP_REGNUM
);
2502 psr
= get_frame_register_unsigned (this_frame
, IA64_PSR_REGNUM
);
2503 *val
= ip
| ((psr
>> 41) & 0x3);
2506 case UNW_IA64_AR_BSP
:
2507 /* Libunwind expects to see the beginning of the current
2508 register frame so we must account for the fact that
2509 ptrace() will return a value for bsp that points *after*
2510 the current register frame. */
2511 bsp
= get_frame_register_unsigned (this_frame
, IA64_BSP_REGNUM
);
2512 cfm
= get_frame_register_unsigned (this_frame
, IA64_CFM_REGNUM
);
2513 sof
= tdep
->size_of_register_frame (this_frame
, cfm
);
2514 *val
= ia64_rse_skip_regs (bsp
, -sof
);
2517 case UNW_IA64_AR_BSPSTORE
:
2518 /* Libunwind wants bspstore to be after the current register frame.
2519 This is what ptrace() and gdb treats as the regular bsp value. */
2520 *val
= get_frame_register_unsigned (this_frame
, IA64_BSP_REGNUM
);
2524 /* For all other registers, just unwind the value directly. */
2525 *val
= get_frame_register_unsigned (this_frame
, regnum
);
2529 if (gdbarch_debug
>= 1)
2530 gdb_printf (gdb_stdlog
,
2531 " access_reg: from cache: %4s=%s\n",
2532 (((unsigned) regnum
<= IA64_NAT127_REGNUM
)
2533 ? ia64_register_names
[regnum
] : "r??"),
2534 paddress (gdbarch
, *val
));
2538 /* Libunwind callback accessor function for floating-point registers. */
2540 ia64_access_fpreg (unw_addr_space_t as
, unw_regnum_t uw_regnum
,
2541 unw_fpreg_t
*val
, int write
, void *arg
)
2543 int regnum
= ia64_uw2gdb_regnum (uw_regnum
);
2544 frame_info_ptr this_frame
= (const frame_info_ptr
&) arg
;
2546 /* We never call any libunwind routines that need to write registers. */
2547 gdb_assert (!write
);
2549 get_frame_register (this_frame
, regnum
, (gdb_byte
*) val
);
2554 /* Libunwind callback accessor function for top-level rse registers. */
2556 ia64_access_rse_reg (unw_addr_space_t as
, unw_regnum_t uw_regnum
,
2557 unw_word_t
*val
, int write
, void *arg
)
2559 int regnum
= ia64_uw2gdb_regnum (uw_regnum
);
2560 unw_word_t bsp
, sof
, cfm
, psr
, ip
;
2561 struct regcache
*regcache
= (struct regcache
*) arg
;
2562 struct gdbarch
*gdbarch
= regcache
->arch ();
2564 /* We never call any libunwind routines that need to write registers. */
2565 gdb_assert (!write
);
2570 /* Libunwind expects to see the pc value which means the slot number
2571 from the psr must be merged with the ip word address. */
2572 regcache_cooked_read_unsigned (regcache
, IA64_IP_REGNUM
, &ip
);
2573 regcache_cooked_read_unsigned (regcache
, IA64_PSR_REGNUM
, &psr
);
2574 *val
= ip
| ((psr
>> 41) & 0x3);
2577 case UNW_IA64_AR_BSP
:
2578 /* Libunwind expects to see the beginning of the current
2579 register frame so we must account for the fact that
2580 ptrace() will return a value for bsp that points *after*
2581 the current register frame. */
2582 regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, &bsp
);
2583 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
2585 *val
= ia64_rse_skip_regs (bsp
, -sof
);
2588 case UNW_IA64_AR_BSPSTORE
:
2589 /* Libunwind wants bspstore to be after the current register frame.
2590 This is what ptrace() and gdb treats as the regular bsp value. */
2591 regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, val
);
2595 /* For all other registers, just unwind the value directly. */
2596 regcache_cooked_read_unsigned (regcache
, regnum
, val
);
2600 if (gdbarch_debug
>= 1)
2601 gdb_printf (gdb_stdlog
,
2602 " access_rse_reg: from cache: %4s=%s\n",
2603 (((unsigned) regnum
<= IA64_NAT127_REGNUM
)
2604 ? ia64_register_names
[regnum
] : "r??"),
2605 paddress (gdbarch
, *val
));
2610 /* Libunwind callback accessor function for top-level fp registers. */
2612 ia64_access_rse_fpreg (unw_addr_space_t as
, unw_regnum_t uw_regnum
,
2613 unw_fpreg_t
*val
, int write
, void *arg
)
2615 int regnum
= ia64_uw2gdb_regnum (uw_regnum
);
2616 struct regcache
*regcache
= (struct regcache
*) arg
;
2618 /* We never call any libunwind routines that need to write registers. */
2619 gdb_assert (!write
);
2621 regcache
->cooked_read (regnum
, (gdb_byte
*) val
);
2626 /* Libunwind callback accessor function for accessing memory. */
2628 ia64_access_mem (unw_addr_space_t as
,
2629 unw_word_t addr
, unw_word_t
*val
,
2630 int write
, void *arg
)
2632 if (addr
- KERNEL_START
< ktab_size
)
2634 unw_word_t
*laddr
= (unw_word_t
*) ((char *) ktab
2635 + (addr
- KERNEL_START
));
2644 /* XXX do we need to normalize byte-order here? */
2646 return target_write_memory (addr
, (gdb_byte
*) val
, sizeof (unw_word_t
));
2648 return target_read_memory (addr
, (gdb_byte
*) val
, sizeof (unw_word_t
));
2651 /* Call low-level function to access the kernel unwind table. */
2652 static std::optional
<gdb::byte_vector
>
2655 /* FIXME drow/2005-09-10: This code used to call
2656 ia64_linux_xfer_unwind_table directly to fetch the unwind table
2657 for the currently running ia64-linux kernel. That data should
2658 come from the core file and be accessed via the auxv vector; if
2659 we want to preserve fall back to the running kernel's table, then
2660 we should find a way to override the corefile layer's
2661 xfer_partial method. */
2663 return target_read_alloc (current_inferior ()->top_target (),
2664 TARGET_OBJECT_UNWIND_TABLE
, NULL
);
2667 /* Get the kernel unwind table. */
2669 get_kernel_table (unw_word_t ip
, unw_dyn_info_t
*di
)
2671 static struct ia64_table_entry
*etab
;
2675 ktab_buf
= getunwind_table ();
2677 return -UNW_ENOINFO
;
2679 ktab
= (struct ia64_table_entry
*) ktab_buf
->data ();
2680 ktab_size
= ktab_buf
->size ();
2682 for (etab
= ktab
; etab
->start_offset
; ++etab
)
2683 etab
->info_offset
+= KERNEL_START
;
2686 if (ip
< ktab
[0].start_offset
|| ip
>= etab
[-1].end_offset
)
2687 return -UNW_ENOINFO
;
2689 di
->format
= UNW_INFO_FORMAT_TABLE
;
2691 di
->start_ip
= ktab
[0].start_offset
;
2692 di
->end_ip
= etab
[-1].end_offset
;
2693 di
->u
.ti
.name_ptr
= (unw_word_t
) "<kernel>";
2694 di
->u
.ti
.segbase
= 0;
2695 di
->u
.ti
.table_len
= ((char *) etab
- (char *) ktab
) / sizeof (unw_word_t
);
2696 di
->u
.ti
.table_data
= (unw_word_t
*) ktab
;
2698 if (gdbarch_debug
>= 1)
2699 gdb_printf (gdb_stdlog
, "get_kernel_table: found table `%s': "
2700 "segbase=%s, length=%s, gp=%s\n",
2701 (char *) di
->u
.ti
.name_ptr
,
2702 hex_string (di
->u
.ti
.segbase
),
2703 pulongest (di
->u
.ti
.table_len
),
2704 hex_string (di
->gp
));
2708 /* Find the unwind table entry for a specified address. */
2710 ia64_find_unwind_table (struct objfile
*objfile
, unw_word_t ip
,
2711 unw_dyn_info_t
*dip
, void **buf
)
2713 Elf_Internal_Phdr
*phdr
, *p_text
= NULL
, *p_unwind
= NULL
;
2714 Elf_Internal_Ehdr
*ehdr
;
2715 unw_word_t segbase
= 0;
2716 CORE_ADDR load_base
;
2720 bfd
= objfile
->obfd
;
2722 ehdr
= elf_tdata (bfd
)->elf_header
;
2723 phdr
= elf_tdata (bfd
)->phdr
;
2725 load_base
= objfile
->text_section_offset ();
2727 for (i
= 0; i
< ehdr
->e_phnum
; ++i
)
2729 switch (phdr
[i
].p_type
)
2732 if ((unw_word_t
) (ip
- load_base
- phdr
[i
].p_vaddr
)
2737 case PT_IA_64_UNWIND
:
2738 p_unwind
= phdr
+ i
;
2746 if (!p_text
|| !p_unwind
)
2747 return -UNW_ENOINFO
;
2749 /* Verify that the segment that contains the IP also contains
2750 the static unwind table. If not, we may be in the Linux kernel's
2751 DSO gate page in which case the unwind table is another segment.
2752 Otherwise, we are dealing with runtime-generated code, for which we
2753 have no info here. */
2754 segbase
= p_text
->p_vaddr
+ load_base
;
2756 if ((p_unwind
->p_vaddr
- p_text
->p_vaddr
) >= p_text
->p_memsz
)
2759 for (i
= 0; i
< ehdr
->e_phnum
; ++i
)
2761 if (phdr
[i
].p_type
== PT_LOAD
2762 && (p_unwind
->p_vaddr
- phdr
[i
].p_vaddr
) < phdr
[i
].p_memsz
)
2765 /* Get the segbase from the section containing the
2767 segbase
= phdr
[i
].p_vaddr
+ load_base
;
2771 return -UNW_ENOINFO
;
2774 dip
->start_ip
= p_text
->p_vaddr
+ load_base
;
2775 dip
->end_ip
= dip
->start_ip
+ p_text
->p_memsz
;
2776 dip
->gp
= ia64_find_global_pointer (objfile
->arch (), ip
);
2777 dip
->format
= UNW_INFO_FORMAT_REMOTE_TABLE
;
2778 dip
->u
.rti
.name_ptr
= (unw_word_t
) bfd_get_filename (bfd
);
2779 dip
->u
.rti
.segbase
= segbase
;
2780 dip
->u
.rti
.table_len
= p_unwind
->p_memsz
/ sizeof (unw_word_t
);
2781 dip
->u
.rti
.table_data
= p_unwind
->p_vaddr
+ load_base
;
2786 /* Libunwind callback accessor function to acquire procedure unwind-info. */
2788 ia64_find_proc_info_x (unw_addr_space_t as
, unw_word_t ip
, unw_proc_info_t
*pi
,
2789 int need_unwind_info
, void *arg
)
2791 struct obj_section
*sec
= find_pc_section (ip
);
2798 /* XXX This only works if the host and the target architecture are
2799 both ia64 and if the have (more or less) the same kernel
2801 if (get_kernel_table (ip
, &di
) < 0)
2802 return -UNW_ENOINFO
;
2804 if (gdbarch_debug
>= 1)
2805 gdb_printf (gdb_stdlog
, "ia64_find_proc_info_x: %s -> "
2806 "(name=`%s',segbase=%s,start=%s,end=%s,gp=%s,"
2807 "length=%s,data=%s)\n",
2808 hex_string (ip
), (char *)di
.u
.ti
.name_ptr
,
2809 hex_string (di
.u
.ti
.segbase
),
2810 hex_string (di
.start_ip
), hex_string (di
.end_ip
),
2812 pulongest (di
.u
.ti
.table_len
),
2813 hex_string ((CORE_ADDR
)di
.u
.ti
.table_data
));
2817 ret
= ia64_find_unwind_table (sec
->objfile
, ip
, &di
, &buf
);
2821 if (gdbarch_debug
>= 1)
2822 gdb_printf (gdb_stdlog
, "ia64_find_proc_info_x: %s -> "
2823 "(name=`%s',segbase=%s,start=%s,end=%s,gp=%s,"
2824 "length=%s,data=%s)\n",
2825 hex_string (ip
), (char *)di
.u
.rti
.name_ptr
,
2826 hex_string (di
.u
.rti
.segbase
),
2827 hex_string (di
.start_ip
), hex_string (di
.end_ip
),
2829 pulongest (di
.u
.rti
.table_len
),
2830 hex_string (di
.u
.rti
.table_data
));
2833 ret
= libunwind_search_unwind_table (&as
, ip
, &di
, pi
, need_unwind_info
,
2836 /* We no longer need the dyn info storage so free it. */
2842 /* Libunwind callback accessor function for cleanup. */
2844 ia64_put_unwind_info (unw_addr_space_t as
,
2845 unw_proc_info_t
*pip
, void *arg
)
2847 /* Nothing required for now. */
2850 /* Libunwind callback accessor function to get head of the dynamic
2851 unwind-info registration list. */
2853 ia64_get_dyn_info_list (unw_addr_space_t as
,
2854 unw_word_t
*dilap
, void *arg
)
2856 struct obj_section
*text_sec
;
2857 unw_word_t ip
, addr
;
2861 if (!libunwind_is_initialized ())
2862 return -UNW_ENOINFO
;
2864 for (objfile
*objfile
: current_program_space
->objfiles ())
2868 text_sec
= objfile
->sections
+ SECT_OFF_TEXT (objfile
);
2869 ip
= text_sec
->addr ();
2870 ret
= ia64_find_unwind_table (objfile
, ip
, &di
, &buf
);
2873 addr
= libunwind_find_dyn_list (as
, &di
, arg
);
2874 /* We no longer need the dyn info storage so free it. */
2879 if (gdbarch_debug
>= 1)
2880 gdb_printf (gdb_stdlog
,
2881 "dynamic unwind table in objfile %s "
2883 bfd_get_filename (objfile
->obfd
),
2884 hex_string (addr
), hex_string (di
.gp
));
2890 return -UNW_ENOINFO
;
2894 /* Frame interface functions for libunwind. */
2897 ia64_libunwind_frame_this_id (const frame_info_ptr
&this_frame
, void **this_cache
,
2898 struct frame_id
*this_id
)
2900 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2901 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2902 struct frame_id id
= outer_frame_id
;
2906 libunwind_frame_this_id (this_frame
, this_cache
, &id
);
2907 if (id
== outer_frame_id
)
2909 (*this_id
) = outer_frame_id
;
2913 /* We must add the bsp as the special address for frame comparison
2915 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
2916 bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
2918 (*this_id
) = frame_id_build_special (id
.stack_addr
, id
.code_addr
, bsp
);
2920 if (gdbarch_debug
>= 1)
2921 gdb_printf (gdb_stdlog
,
2922 "libunwind frame id: code %s, stack %s, "
2923 "special %s, this_frame %s\n",
2924 paddress (gdbarch
, id
.code_addr
),
2925 paddress (gdbarch
, id
.stack_addr
),
2926 paddress (gdbarch
, bsp
),
2927 host_address_to_string (this_frame
));
2930 static struct value
*
2931 ia64_libunwind_frame_prev_register (const frame_info_ptr
&this_frame
,
2932 void **this_cache
, int regnum
)
2935 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
2936 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
2939 if (VP0_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
2940 reg
= IA64_PR_REGNUM
;
2941 else if (IA64_NAT0_REGNUM
<= regnum
&& regnum
<= IA64_NAT127_REGNUM
)
2942 reg
= IA64_UNAT_REGNUM
;
2944 /* Let libunwind do most of the work. */
2945 val
= libunwind_frame_prev_register (this_frame
, this_cache
, reg
);
2947 if (VP0_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
2951 if (VP16_REGNUM
<= regnum
&& regnum
<= VP63_REGNUM
)
2956 /* Fetch predicate register rename base from current frame
2957 marker for this frame. */
2958 cfm
= get_frame_register_unsigned (this_frame
, IA64_CFM_REGNUM
);
2959 rrb_pr
= (cfm
>> 32) & 0x3f;
2961 /* Adjust the register number to account for register rotation. */
2962 regnum
= VP16_REGNUM
+ ((regnum
- VP16_REGNUM
) + rrb_pr
) % 48;
2964 prN_val
= extract_bit_field (val
->contents_all ().data (),
2965 regnum
- VP0_REGNUM
, 1);
2966 return frame_unwind_got_constant (this_frame
, regnum
, prN_val
);
2969 else if (IA64_NAT0_REGNUM
<= regnum
&& regnum
<= IA64_NAT127_REGNUM
)
2973 unatN_val
= extract_bit_field (val
->contents_all ().data (),
2974 regnum
- IA64_NAT0_REGNUM
, 1);
2975 return frame_unwind_got_constant (this_frame
, regnum
, unatN_val
);
2978 else if (regnum
== IA64_BSP_REGNUM
)
2980 struct value
*cfm_val
;
2981 CORE_ADDR prev_bsp
, prev_cfm
;
2983 /* We want to calculate the previous bsp as the end of the previous
2984 register stack frame. This corresponds to what the hardware bsp
2985 register will be if we pop the frame back which is why we might
2986 have been called. We know that libunwind will pass us back the
2987 beginning of the current frame so we should just add sof to it. */
2988 prev_bsp
= extract_unsigned_integer (val
->contents_all ().data (),
2990 cfm_val
= libunwind_frame_prev_register (this_frame
, this_cache
,
2992 prev_cfm
= extract_unsigned_integer (cfm_val
->contents_all ().data (),
2994 prev_bsp
= rse_address_add (prev_bsp
, (prev_cfm
& 0x7f));
2996 return frame_unwind_got_constant (this_frame
, regnum
, prev_bsp
);
3003 ia64_libunwind_frame_sniffer (const struct frame_unwind
*self
,
3004 const frame_info_ptr
&this_frame
,
3007 if (libunwind_is_initialized ()
3008 && libunwind_frame_sniffer (self
, this_frame
, this_cache
))
3014 static const struct frame_unwind ia64_libunwind_frame_unwind
=
3018 default_frame_unwind_stop_reason
,
3019 ia64_libunwind_frame_this_id
,
3020 ia64_libunwind_frame_prev_register
,
3022 ia64_libunwind_frame_sniffer
,
3023 libunwind_frame_dealloc_cache
3027 ia64_libunwind_sigtramp_frame_this_id (const frame_info_ptr
&this_frame
,
3029 struct frame_id
*this_id
)
3031 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
3032 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3035 struct frame_id id
= outer_frame_id
;
3037 libunwind_frame_this_id (this_frame
, this_cache
, &id
);
3038 if (id
== outer_frame_id
)
3040 (*this_id
) = outer_frame_id
;
3044 /* We must add the bsp as the special address for frame comparison
3046 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
3047 bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
3049 /* For a sigtramp frame, we don't make the check for previous ip being 0. */
3050 (*this_id
) = frame_id_build_special (id
.stack_addr
, id
.code_addr
, bsp
);
3052 if (gdbarch_debug
>= 1)
3053 gdb_printf (gdb_stdlog
,
3054 "libunwind sigtramp frame id: code %s, "
3055 "stack %s, special %s, this_frame %s\n",
3056 paddress (gdbarch
, id
.code_addr
),
3057 paddress (gdbarch
, id
.stack_addr
),
3058 paddress (gdbarch
, bsp
),
3059 host_address_to_string (this_frame
));
3062 static struct value
*
3063 ia64_libunwind_sigtramp_frame_prev_register (const frame_info_ptr
&this_frame
,
3064 void **this_cache
, int regnum
)
3066 struct gdbarch
*gdbarch
= get_frame_arch (this_frame
);
3067 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3068 struct value
*prev_ip_val
;
3071 /* If the previous frame pc value is 0, then we want to use the SIGCONTEXT
3072 method of getting previous registers. */
3073 prev_ip_val
= libunwind_frame_prev_register (this_frame
, this_cache
,
3075 prev_ip
= extract_unsigned_integer (prev_ip_val
->contents_all ().data (),
3080 void *tmp_cache
= NULL
;
3081 return ia64_sigtramp_frame_prev_register (this_frame
, &tmp_cache
,
3085 return ia64_libunwind_frame_prev_register (this_frame
, this_cache
, regnum
);
3089 ia64_libunwind_sigtramp_frame_sniffer (const struct frame_unwind
*self
,
3090 const frame_info_ptr
&this_frame
,
3093 if (libunwind_is_initialized ())
3095 if (libunwind_sigtramp_frame_sniffer (self
, this_frame
, this_cache
))
3100 return ia64_sigtramp_frame_sniffer (self
, this_frame
, this_cache
);
3103 static const struct frame_unwind ia64_libunwind_sigtramp_frame_unwind
=
3105 "ia64 libunwind sigtramp",
3107 default_frame_unwind_stop_reason
,
3108 ia64_libunwind_sigtramp_frame_this_id
,
3109 ia64_libunwind_sigtramp_frame_prev_register
,
3111 ia64_libunwind_sigtramp_frame_sniffer
3114 /* Set of libunwind callback acccessor functions. */
3115 unw_accessors_t ia64_unw_accessors
=
3117 ia64_find_proc_info_x
,
3118 ia64_put_unwind_info
,
3119 ia64_get_dyn_info_list
,
3127 /* Set of special libunwind callback acccessor functions specific for accessing
3128 the rse registers. At the top of the stack, we want libunwind to figure out
3129 how to read r32 - r127. Though usually they are found sequentially in
3130 memory starting from $bof, this is not always true. */
3131 unw_accessors_t ia64_unw_rse_accessors
=
3133 ia64_find_proc_info_x
,
3134 ia64_put_unwind_info
,
3135 ia64_get_dyn_info_list
,
3137 ia64_access_rse_reg
,
3138 ia64_access_rse_fpreg
,
3143 /* Set of ia64-libunwind-tdep gdb callbacks and data for generic
3144 ia64-libunwind-tdep code to use. */
3145 struct libunwind_descr ia64_libunwind_descr
=
3150 &ia64_unw_accessors
,
3151 &ia64_unw_rse_accessors
,
3154 #endif /* HAVE_LIBUNWIND_IA64_H */
3157 ia64_use_struct_convention (struct type
*type
)
3159 struct type
*float_elt_type
;
3161 /* Don't use the struct convention for anything but structure,
3162 union, or array types. */
3163 if (!(type
->code () == TYPE_CODE_STRUCT
3164 || type
->code () == TYPE_CODE_UNION
3165 || type
->code () == TYPE_CODE_ARRAY
))
3168 /* HFAs are structures (or arrays) consisting entirely of floating
3169 point values of the same length. Up to 8 of these are returned
3170 in registers. Don't use the struct convention when this is the
3172 float_elt_type
= is_float_or_hfa_type (type
);
3173 if (float_elt_type
!= NULL
3174 && type
->length () / float_elt_type
->length () <= 8)
3177 /* Other structs of length 32 or less are returned in r8-r11.
3178 Don't use the struct convention for those either. */
3179 return type
->length () > 32;
3182 /* Return non-zero if TYPE is a structure or union type. */
3185 ia64_struct_type_p (const struct type
*type
)
3187 return (type
->code () == TYPE_CODE_STRUCT
3188 || type
->code () == TYPE_CODE_UNION
);
3192 ia64_extract_return_value (struct type
*type
, struct regcache
*regcache
,
3195 struct gdbarch
*gdbarch
= regcache
->arch ();
3196 struct type
*float_elt_type
;
3198 float_elt_type
= is_float_or_hfa_type (type
);
3199 if (float_elt_type
!= NULL
)
3201 gdb_byte from
[IA64_FP_REGISTER_SIZE
];
3203 int regnum
= IA64_FR8_REGNUM
;
3204 int n
= type
->length () / float_elt_type
->length ();
3208 regcache
->cooked_read (regnum
, from
);
3209 target_float_convert (from
, ia64_ext_type (gdbarch
),
3210 valbuf
+ offset
, float_elt_type
);
3211 offset
+= float_elt_type
->length ();
3215 else if (!ia64_struct_type_p (type
) && type
->length () < 8)
3217 /* This is an integral value, and its size is less than 8 bytes.
3218 These values are LSB-aligned, so extract the relevant bytes,
3219 and copy them into VALBUF. */
3220 /* brobecker/2005-12-30: Actually, all integral values are LSB aligned,
3221 so I suppose we should also add handling here for integral values
3222 whose size is greater than 8. But I wasn't able to create such
3223 a type, neither in C nor in Ada, so not worrying about these yet. */
3224 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3227 regcache_cooked_read_unsigned (regcache
, IA64_GR8_REGNUM
, &val
);
3228 store_unsigned_integer (valbuf
, type
->length (), byte_order
, val
);
3234 int regnum
= IA64_GR8_REGNUM
;
3235 int reglen
= register_type (gdbarch
, IA64_GR8_REGNUM
)->length ();
3236 int n
= type
->length () / reglen
;
3237 int m
= type
->length () % reglen
;
3242 regcache_cooked_read_unsigned (regcache
, regnum
, ®val
);
3243 memcpy ((char *)valbuf
+ offset
, ®val
, reglen
);
3250 regcache_cooked_read_unsigned (regcache
, regnum
, &val
);
3251 memcpy ((char *)valbuf
+ offset
, &val
, m
);
3257 ia64_store_return_value (struct type
*type
, struct regcache
*regcache
,
3258 const gdb_byte
*valbuf
)
3260 struct gdbarch
*gdbarch
= regcache
->arch ();
3261 struct type
*float_elt_type
;
3263 float_elt_type
= is_float_or_hfa_type (type
);
3264 if (float_elt_type
!= NULL
)
3266 gdb_byte to
[IA64_FP_REGISTER_SIZE
];
3268 int regnum
= IA64_FR8_REGNUM
;
3269 int n
= type
->length () / float_elt_type
->length ();
3273 target_float_convert (valbuf
+ offset
, float_elt_type
,
3274 to
, ia64_ext_type (gdbarch
));
3275 regcache
->cooked_write (regnum
, to
);
3276 offset
+= float_elt_type
->length ();
3283 int regnum
= IA64_GR8_REGNUM
;
3284 int reglen
= register_type (gdbarch
, IA64_GR8_REGNUM
)->length ();
3285 int n
= type
->length () / reglen
;
3286 int m
= type
->length () % reglen
;
3291 memcpy (&val
, (char *)valbuf
+ offset
, reglen
);
3292 regcache_cooked_write_unsigned (regcache
, regnum
, val
);
3300 memcpy (&val
, (char *)valbuf
+ offset
, m
);
3301 regcache_cooked_write_unsigned (regcache
, regnum
, val
);
3306 static enum return_value_convention
3307 ia64_return_value (struct gdbarch
*gdbarch
, struct value
*function
,
3308 struct type
*valtype
, struct regcache
*regcache
,
3309 gdb_byte
*readbuf
, const gdb_byte
*writebuf
)
3311 int struct_return
= ia64_use_struct_convention (valtype
);
3313 if (writebuf
!= NULL
)
3315 gdb_assert (!struct_return
);
3316 ia64_store_return_value (valtype
, regcache
, writebuf
);
3319 if (readbuf
!= NULL
)
3321 gdb_assert (!struct_return
);
3322 ia64_extract_return_value (valtype
, regcache
, readbuf
);
3326 return RETURN_VALUE_STRUCT_CONVENTION
;
3328 return RETURN_VALUE_REGISTER_CONVENTION
;
3332 is_float_or_hfa_type_recurse (struct type
*t
, struct type
**etp
)
3338 return (*etp
)->length () == t
->length ();
3345 case TYPE_CODE_ARRAY
:
3347 is_float_or_hfa_type_recurse (check_typedef (t
->target_type ()),
3350 case TYPE_CODE_STRUCT
:
3354 for (i
= 0; i
< t
->num_fields (); i
++)
3355 if (!is_float_or_hfa_type_recurse
3356 (check_typedef (t
->field (i
).type ()), etp
))
3368 /* Determine if the given type is one of the floating point types or
3369 and HFA (which is a struct, array, or combination thereof whose
3370 bottom-most elements are all of the same floating point type). */
3372 static struct type
*
3373 is_float_or_hfa_type (struct type
*t
)
3375 struct type
*et
= 0;
3377 return is_float_or_hfa_type_recurse (t
, &et
) ? et
: 0;
3381 /* Return 1 if the alignment of T is such that the next even slot
3382 should be used. Return 0, if the next available slot should
3383 be used. (See section 8.5.1 of the IA-64 Software Conventions
3384 and Runtime manual). */
3387 slot_alignment_is_next_even (struct type
*t
)
3393 if (t
->length () > 8)
3397 case TYPE_CODE_ARRAY
:
3399 slot_alignment_is_next_even (check_typedef (t
->target_type ()));
3400 case TYPE_CODE_STRUCT
:
3404 for (i
= 0; i
< t
->num_fields (); i
++)
3405 if (slot_alignment_is_next_even
3406 (check_typedef (t
->field (i
).type ())))
3415 /* Attempt to find (and return) the global pointer for the given
3418 This is a rather nasty bit of code searchs for the .dynamic section
3419 in the objfile corresponding to the pc of the function we're trying
3420 to call. Once it finds the addresses at which the .dynamic section
3421 lives in the child process, it scans the Elf64_Dyn entries for a
3422 DT_PLTGOT tag. If it finds one of these, the corresponding
3423 d_un.d_ptr value is the global pointer. */
3426 ia64_find_global_pointer_from_dynamic_section (struct gdbarch
*gdbarch
,
3429 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3430 struct obj_section
*faddr_sect
;
3432 faddr_sect
= find_pc_section (faddr
);
3433 if (faddr_sect
!= NULL
)
3435 for (obj_section
*osect
: faddr_sect
->objfile
->sections ())
3437 if (strcmp (osect
->the_bfd_section
->name
, ".dynamic") == 0)
3439 CORE_ADDR addr
= osect
->addr ();
3440 CORE_ADDR endaddr
= osect
->endaddr ();
3442 while (addr
< endaddr
)
3448 status
= target_read_memory (addr
, buf
, sizeof (buf
));
3451 tag
= extract_signed_integer (buf
, byte_order
);
3453 if (tag
== DT_PLTGOT
)
3455 CORE_ADDR global_pointer
;
3457 status
= target_read_memory (addr
+ 8, buf
,
3462 = extract_unsigned_integer (buf
, sizeof (buf
),
3466 return global_pointer
;
3482 /* Attempt to find (and return) the global pointer for the given
3483 function. We first try the find_global_pointer_from_solib routine
3484 from the gdbarch tdep vector, if provided. And if that does not
3485 work, then we try ia64_find_global_pointer_from_dynamic_section. */
3488 ia64_find_global_pointer (struct gdbarch
*gdbarch
, CORE_ADDR faddr
)
3490 ia64_gdbarch_tdep
*tdep
= gdbarch_tdep
<ia64_gdbarch_tdep
> (gdbarch
);
3493 if (tdep
->find_global_pointer_from_solib
)
3494 addr
= tdep
->find_global_pointer_from_solib (gdbarch
, faddr
);
3496 addr
= ia64_find_global_pointer_from_dynamic_section (gdbarch
, faddr
);
3500 /* Given a function's address, attempt to find (and return) the
3501 corresponding (canonical) function descriptor. Return 0 if
3504 find_extant_func_descr (struct gdbarch
*gdbarch
, CORE_ADDR faddr
)
3506 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3507 struct obj_section
*faddr_sect
;
3509 /* Return early if faddr is already a function descriptor. */
3510 faddr_sect
= find_pc_section (faddr
);
3511 if (faddr_sect
&& strcmp (faddr_sect
->the_bfd_section
->name
, ".opd") == 0)
3514 if (faddr_sect
!= NULL
)
3516 for (obj_section
*osect
: faddr_sect
->objfile
->sections ())
3518 if (strcmp (osect
->the_bfd_section
->name
, ".opd") == 0)
3520 CORE_ADDR addr
= osect
->addr ();
3521 CORE_ADDR endaddr
= osect
->endaddr ();
3523 while (addr
< endaddr
)
3529 status
= target_read_memory (addr
, buf
, sizeof (buf
));
3532 faddr2
= extract_signed_integer (buf
, byte_order
);
3534 if (faddr
== faddr2
)
3547 /* Attempt to find a function descriptor corresponding to the
3548 given address. If none is found, construct one on the
3549 stack using the address at fdaptr. */
3552 find_func_descr (struct regcache
*regcache
, CORE_ADDR faddr
, CORE_ADDR
*fdaptr
)
3554 struct gdbarch
*gdbarch
= regcache
->arch ();
3555 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3558 fdesc
= find_extant_func_descr (gdbarch
, faddr
);
3562 ULONGEST global_pointer
;
3568 global_pointer
= ia64_find_global_pointer (gdbarch
, faddr
);
3570 if (global_pointer
== 0)
3571 regcache_cooked_read_unsigned (regcache
,
3572 IA64_GR1_REGNUM
, &global_pointer
);
3574 store_unsigned_integer (buf
, 8, byte_order
, faddr
);
3575 store_unsigned_integer (buf
+ 8, 8, byte_order
, global_pointer
);
3577 write_memory (fdesc
, buf
, 16);
3583 /* Use the following routine when printing out function pointers
3584 so the user can see the function address rather than just the
3585 function descriptor. */
3587 ia64_convert_from_func_ptr_addr (struct gdbarch
*gdbarch
, CORE_ADDR addr
,
3588 struct target_ops
*targ
)
3590 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3591 struct obj_section
*s
;
3594 s
= find_pc_section (addr
);
3596 /* check if ADDR points to a function descriptor. */
3597 if (s
&& strcmp (s
->the_bfd_section
->name
, ".opd") == 0)
3598 return read_memory_unsigned_integer (addr
, 8, byte_order
);
3600 /* Normally, functions live inside a section that is executable.
3601 So, if ADDR points to a non-executable section, then treat it
3602 as a function descriptor and return the target address iff
3603 the target address itself points to a section that is executable.
3604 Check first the memory of the whole length of 8 bytes is readable. */
3605 if (s
&& (s
->the_bfd_section
->flags
& SEC_CODE
) == 0
3606 && target_read_memory (addr
, buf
, 8) == 0)
3608 CORE_ADDR pc
= extract_unsigned_integer (buf
, 8, byte_order
);
3609 struct obj_section
*pc_section
= find_pc_section (pc
);
3611 if (pc_section
&& (pc_section
->the_bfd_section
->flags
& SEC_CODE
))
3615 /* There are also descriptors embedded in vtables. */
3618 struct bound_minimal_symbol minsym
;
3620 minsym
= lookup_minimal_symbol_by_pc (addr
);
3623 && is_vtable_name (minsym
.minsym
->linkage_name ()))
3624 return read_memory_unsigned_integer (addr
, 8, byte_order
);
3631 ia64_frame_align (struct gdbarch
*gdbarch
, CORE_ADDR sp
)
3636 /* The default "allocate_new_rse_frame" ia64_infcall_ops routine for ia64. */
3639 ia64_allocate_new_rse_frame (struct regcache
*regcache
, ULONGEST bsp
, int sof
)
3641 ULONGEST cfm
, pfs
, new_bsp
;
3643 regcache_cooked_read_unsigned (regcache
, IA64_CFM_REGNUM
, &cfm
);
3645 new_bsp
= rse_address_add (bsp
, sof
);
3646 regcache_cooked_write_unsigned (regcache
, IA64_BSP_REGNUM
, new_bsp
);
3648 regcache_cooked_read_unsigned (regcache
, IA64_PFS_REGNUM
, &pfs
);
3649 pfs
&= 0xc000000000000000LL
;
3650 pfs
|= (cfm
& 0xffffffffffffLL
);
3651 regcache_cooked_write_unsigned (regcache
, IA64_PFS_REGNUM
, pfs
);
3653 cfm
&= 0xc000000000000000LL
;
3655 regcache_cooked_write_unsigned (regcache
, IA64_CFM_REGNUM
, cfm
);
3658 /* The default "store_argument_in_slot" ia64_infcall_ops routine for
3662 ia64_store_argument_in_slot (struct regcache
*regcache
, CORE_ADDR bsp
,
3663 int slotnum
, gdb_byte
*buf
)
3665 write_memory (rse_address_add (bsp
, slotnum
), buf
, 8);
3668 /* The default "set_function_addr" ia64_infcall_ops routine for ia64. */
3671 ia64_set_function_addr (struct regcache
*regcache
, CORE_ADDR func_addr
)
3673 /* Nothing needed. */
3677 ia64_push_dummy_call (struct gdbarch
*gdbarch
, struct value
*function
,
3678 struct regcache
*regcache
, CORE_ADDR bp_addr
,
3679 int nargs
, struct value
**args
, CORE_ADDR sp
,
3680 function_call_return_method return_method
,
3681 CORE_ADDR struct_addr
)
3683 ia64_gdbarch_tdep
*tdep
= gdbarch_tdep
<ia64_gdbarch_tdep
> (gdbarch
);
3684 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3689 int nslots
, rseslots
, memslots
, slotnum
, nfuncargs
;
3692 CORE_ADDR funcdescaddr
, global_pointer
;
3693 CORE_ADDR func_addr
= find_function_addr (function
, NULL
);
3697 /* Count the number of slots needed for the arguments. */
3698 for (argno
= 0; argno
< nargs
; argno
++)
3701 type
= check_typedef (arg
->type ());
3702 len
= type
->length ();
3704 if ((nslots
& 1) && slot_alignment_is_next_even (type
))
3707 if (type
->code () == TYPE_CODE_FUNC
)
3710 nslots
+= (len
+ 7) / 8;
3713 /* Divvy up the slots between the RSE and the memory stack. */
3714 rseslots
= (nslots
> 8) ? 8 : nslots
;
3715 memslots
= nslots
- rseslots
;
3717 /* Allocate a new RSE frame. */
3718 regcache_cooked_read_unsigned (regcache
, IA64_BSP_REGNUM
, &bsp
);
3719 tdep
->infcall_ops
.allocate_new_rse_frame (regcache
, bsp
, rseslots
);
3721 /* We will attempt to find function descriptors in the .opd segment,
3722 but if we can't we'll construct them ourselves. That being the
3723 case, we'll need to reserve space on the stack for them. */
3724 funcdescaddr
= sp
- nfuncargs
* 16;
3725 funcdescaddr
&= ~0xfLL
;
3727 /* Adjust the stack pointer to it's new value. The calling conventions
3728 require us to have 16 bytes of scratch, plus whatever space is
3729 necessary for the memory slots and our function descriptors. */
3730 sp
= sp
- 16 - (memslots
+ nfuncargs
) * 8;
3731 sp
&= ~0xfLL
; /* Maintain 16 byte alignment. */
3733 /* Place the arguments where they belong. The arguments will be
3734 either placed in the RSE backing store or on the memory stack.
3735 In addition, floating point arguments or HFAs are placed in
3736 floating point registers. */
3738 floatreg
= IA64_FR8_REGNUM
;
3739 for (argno
= 0; argno
< nargs
; argno
++)
3741 struct type
*float_elt_type
;
3744 type
= check_typedef (arg
->type ());
3745 len
= type
->length ();
3747 /* Special handling for function parameters. */
3749 && type
->code () == TYPE_CODE_PTR
3750 && type
->target_type ()->code () == TYPE_CODE_FUNC
)
3752 gdb_byte val_buf
[8];
3753 ULONGEST faddr
= extract_unsigned_integer
3754 (arg
->contents ().data (), 8, byte_order
);
3755 store_unsigned_integer (val_buf
, 8, byte_order
,
3756 find_func_descr (regcache
, faddr
,
3758 if (slotnum
< rseslots
)
3759 tdep
->infcall_ops
.store_argument_in_slot (regcache
, bsp
,
3762 write_memory (sp
+ 16 + 8 * (slotnum
- rseslots
), val_buf
, 8);
3769 /* Skip odd slot if necessary... */
3770 if ((slotnum
& 1) && slot_alignment_is_next_even (type
))
3776 gdb_byte val_buf
[8];
3778 memset (val_buf
, 0, 8);
3779 if (!ia64_struct_type_p (type
) && len
< 8)
3781 /* Integral types are LSB-aligned, so we have to be careful
3782 to insert the argument on the correct side of the buffer.
3783 This is why we use store_unsigned_integer. */
3784 store_unsigned_integer
3785 (val_buf
, 8, byte_order
,
3786 extract_unsigned_integer (arg
->contents ().data (), len
,
3791 /* This is either an 8bit integral type, or an aggregate.
3792 For 8bit integral type, there is no problem, we just
3793 copy the value over.
3795 For aggregates, the only potentially tricky portion
3796 is to write the last one if it is less than 8 bytes.
3797 In this case, the data is Byte0-aligned. Happy news,
3798 this means that we don't need to differentiate the
3799 handling of 8byte blocks and less-than-8bytes blocks. */
3800 memcpy (val_buf
, arg
->contents ().data () + argoffset
,
3801 (len
> 8) ? 8 : len
);
3804 if (slotnum
< rseslots
)
3805 tdep
->infcall_ops
.store_argument_in_slot (regcache
, bsp
,
3808 write_memory (sp
+ 16 + 8 * (slotnum
- rseslots
), val_buf
, 8);
3815 /* Handle floating point types (including HFAs). */
3816 float_elt_type
= is_float_or_hfa_type (type
);
3817 if (float_elt_type
!= NULL
)
3820 len
= type
->length ();
3821 while (len
> 0 && floatreg
< IA64_FR16_REGNUM
)
3823 gdb_byte to
[IA64_FP_REGISTER_SIZE
];
3824 target_float_convert (arg
->contents ().data () + argoffset
,
3826 ia64_ext_type (gdbarch
));
3827 regcache
->cooked_write (floatreg
, to
);
3829 argoffset
+= float_elt_type
->length ();
3830 len
-= float_elt_type
->length ();
3835 /* Store the struct return value in r8 if necessary. */
3836 if (return_method
== return_method_struct
)
3837 regcache_cooked_write_unsigned (regcache
, IA64_GR8_REGNUM
,
3838 (ULONGEST
) struct_addr
);
3840 global_pointer
= ia64_find_global_pointer (gdbarch
, func_addr
);
3842 if (global_pointer
!= 0)
3843 regcache_cooked_write_unsigned (regcache
, IA64_GR1_REGNUM
, global_pointer
);
3845 /* The following is not necessary on HP-UX, because we're using
3846 a dummy code sequence pushed on the stack to make the call, and
3847 this sequence doesn't need b0 to be set in order for our dummy
3848 breakpoint to be hit. Nonetheless, this doesn't interfere, and
3849 it's needed for other OSes, so we do this unconditionaly. */
3850 regcache_cooked_write_unsigned (regcache
, IA64_BR0_REGNUM
, bp_addr
);
3852 regcache_cooked_write_unsigned (regcache
, sp_regnum
, sp
);
3854 tdep
->infcall_ops
.set_function_addr (regcache
, func_addr
);
3859 static const struct ia64_infcall_ops ia64_infcall_ops
=
3861 ia64_allocate_new_rse_frame
,
3862 ia64_store_argument_in_slot
,
3863 ia64_set_function_addr
3866 static struct frame_id
3867 ia64_dummy_id (struct gdbarch
*gdbarch
, const frame_info_ptr
&this_frame
)
3869 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3873 get_frame_register (this_frame
, sp_regnum
, buf
);
3874 sp
= extract_unsigned_integer (buf
, 8, byte_order
);
3876 get_frame_register (this_frame
, IA64_BSP_REGNUM
, buf
);
3877 bsp
= extract_unsigned_integer (buf
, 8, byte_order
);
3879 if (gdbarch_debug
>= 1)
3880 gdb_printf (gdb_stdlog
,
3881 "dummy frame id: code %s, stack %s, special %s\n",
3882 paddress (gdbarch
, get_frame_pc (this_frame
)),
3883 paddress (gdbarch
, sp
), paddress (gdbarch
, bsp
));
3885 return frame_id_build_special (sp
, get_frame_pc (this_frame
), bsp
);
3889 ia64_unwind_pc (struct gdbarch
*gdbarch
, const frame_info_ptr
&next_frame
)
3891 enum bfd_endian byte_order
= gdbarch_byte_order (gdbarch
);
3893 CORE_ADDR ip
, psr
, pc
;
3895 frame_unwind_register (next_frame
, IA64_IP_REGNUM
, buf
);
3896 ip
= extract_unsigned_integer (buf
, 8, byte_order
);
3897 frame_unwind_register (next_frame
, IA64_PSR_REGNUM
, buf
);
3898 psr
= extract_unsigned_integer (buf
, 8, byte_order
);
3900 pc
= (ip
& ~0xf) | ((psr
>> 41) & 3);
3905 ia64_print_insn (bfd_vma memaddr
, struct disassemble_info
*info
)
3907 info
->bytes_per_line
= SLOT_MULTIPLIER
;
3908 return default_print_insn (memaddr
, info
);
3911 /* The default "size_of_register_frame" gdbarch_tdep routine for ia64. */
3914 ia64_size_of_register_frame (const frame_info_ptr
&this_frame
, ULONGEST cfm
)
3916 return (cfm
& 0x7f);
3919 static struct gdbarch
*
3920 ia64_gdbarch_init (struct gdbarch_info info
, struct gdbarch_list
*arches
)
3922 /* If there is already a candidate, use it. */
3923 arches
= gdbarch_list_lookup_by_info (arches
, &info
);
3925 return arches
->gdbarch
;
3928 = gdbarch_alloc (&info
, gdbarch_tdep_up (new ia64_gdbarch_tdep
));
3929 ia64_gdbarch_tdep
*tdep
= gdbarch_tdep
<ia64_gdbarch_tdep
> (gdbarch
);
3931 tdep
->size_of_register_frame
= ia64_size_of_register_frame
;
3933 /* According to the ia64 specs, instructions that store long double
3934 floats in memory use a long-double format different than that
3935 used in the floating registers. The memory format matches the
3936 x86 extended float format which is 80 bits. An OS may choose to
3937 use this format (e.g. GNU/Linux) or choose to use a different
3938 format for storing long doubles (e.g. HPUX). In the latter case,
3939 the setting of the format may be moved/overridden in an
3940 OS-specific tdep file. */
3941 set_gdbarch_long_double_format (gdbarch
, floatformats_i387_ext
);
3943 set_gdbarch_short_bit (gdbarch
, 16);
3944 set_gdbarch_int_bit (gdbarch
, 32);
3945 set_gdbarch_long_bit (gdbarch
, 64);
3946 set_gdbarch_long_long_bit (gdbarch
, 64);
3947 set_gdbarch_float_bit (gdbarch
, 32);
3948 set_gdbarch_double_bit (gdbarch
, 64);
3949 set_gdbarch_long_double_bit (gdbarch
, 128);
3950 set_gdbarch_ptr_bit (gdbarch
, 64);
3952 set_gdbarch_num_regs (gdbarch
, NUM_IA64_RAW_REGS
);
3953 set_gdbarch_num_pseudo_regs (gdbarch
,
3954 LAST_PSEUDO_REGNUM
- FIRST_PSEUDO_REGNUM
);
3955 set_gdbarch_sp_regnum (gdbarch
, sp_regnum
);
3956 set_gdbarch_fp0_regnum (gdbarch
, IA64_FR0_REGNUM
);
3958 set_gdbarch_register_name (gdbarch
, ia64_register_name
);
3959 set_gdbarch_register_type (gdbarch
, ia64_register_type
);
3961 set_gdbarch_pseudo_register_read (gdbarch
, ia64_pseudo_register_read
);
3962 set_gdbarch_deprecated_pseudo_register_write (gdbarch
,
3963 ia64_pseudo_register_write
);
3964 set_gdbarch_dwarf2_reg_to_regnum (gdbarch
, ia64_dwarf_reg_to_regnum
);
3965 set_gdbarch_register_reggroup_p (gdbarch
, ia64_register_reggroup_p
);
3966 set_gdbarch_convert_register_p (gdbarch
, ia64_convert_register_p
);
3967 set_gdbarch_register_to_value (gdbarch
, ia64_register_to_value
);
3968 set_gdbarch_value_to_register (gdbarch
, ia64_value_to_register
);
3970 set_gdbarch_skip_prologue (gdbarch
, ia64_skip_prologue
);
3972 set_gdbarch_return_value (gdbarch
, ia64_return_value
);
3974 set_gdbarch_memory_insert_breakpoint (gdbarch
,
3975 ia64_memory_insert_breakpoint
);
3976 set_gdbarch_memory_remove_breakpoint (gdbarch
,
3977 ia64_memory_remove_breakpoint
);
3978 set_gdbarch_breakpoint_from_pc (gdbarch
, ia64_breakpoint_from_pc
);
3979 set_gdbarch_breakpoint_kind_from_pc (gdbarch
, ia64_breakpoint_kind_from_pc
);
3980 set_gdbarch_read_pc (gdbarch
, ia64_read_pc
);
3981 set_gdbarch_write_pc (gdbarch
, ia64_write_pc
);
3983 /* Settings for calling functions in the inferior. */
3984 set_gdbarch_push_dummy_call (gdbarch
, ia64_push_dummy_call
);
3985 tdep
->infcall_ops
= ia64_infcall_ops
;
3986 set_gdbarch_frame_align (gdbarch
, ia64_frame_align
);
3987 set_gdbarch_dummy_id (gdbarch
, ia64_dummy_id
);
3989 set_gdbarch_unwind_pc (gdbarch
, ia64_unwind_pc
);
3990 #ifdef HAVE_LIBUNWIND_IA64_H
3991 frame_unwind_append_unwinder (gdbarch
,
3992 &ia64_libunwind_sigtramp_frame_unwind
);
3993 frame_unwind_append_unwinder (gdbarch
, &ia64_libunwind_frame_unwind
);
3994 frame_unwind_append_unwinder (gdbarch
, &ia64_sigtramp_frame_unwind
);
3995 libunwind_frame_set_descr (gdbarch
, &ia64_libunwind_descr
);
3997 frame_unwind_append_unwinder (gdbarch
, &ia64_sigtramp_frame_unwind
);
3999 frame_unwind_append_unwinder (gdbarch
, &ia64_frame_unwind
);
4000 frame_base_set_default (gdbarch
, &ia64_frame_base
);
4002 /* Settings that should be unnecessary. */
4003 set_gdbarch_inner_than (gdbarch
, core_addr_lessthan
);
4005 set_gdbarch_print_insn (gdbarch
, ia64_print_insn
);
4006 set_gdbarch_convert_from_func_ptr_addr (gdbarch
,
4007 ia64_convert_from_func_ptr_addr
);
4009 /* The virtual table contains 16-byte descriptors, not pointers to
4011 set_gdbarch_vtable_function_descriptors (gdbarch
, 1);
4013 /* Hook in ABI-specific overrides, if they have been registered. */
4014 gdbarch_init_osabi (info
, gdbarch
);
4019 void _initialize_ia64_tdep ();
4021 _initialize_ia64_tdep ()
4023 gdbarch_register (bfd_arch_ia64
, ia64_gdbarch_init
, NULL
);