1 /* Target-dependent code for the IA-64 for GDB, the GNU debugger.
3 Copyright 1999, 2000, 2001, 2002, 2003 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 2 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, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
24 #include "symfile.h" /* for entry_point_address */
26 #include "arch-utils.h"
27 #include "floatformat.h"
33 #include "elf/common.h" /* for DT_PLTGOT value */
36 /* Hook for determining the global pointer when calling functions in
37 the inferior under AIX. The initialization code in ia64-aix-nat.c
38 sets this hook to the address of a function which will find the
39 global pointer for a given address.
41 The generic code which uses the dynamic section in the inferior for
42 finding the global pointer is not of much use on AIX since the
43 values obtained from the inferior have not been relocated. */
45 CORE_ADDR (*native_find_global_pointer
) (CORE_ADDR
) = 0;
47 /* An enumeration of the different IA-64 instruction types. */
49 typedef enum instruction_type
51 A
, /* Integer ALU ; I-unit or M-unit */
52 I
, /* Non-ALU integer; I-unit */
53 M
, /* Memory ; M-unit */
54 F
, /* Floating-point ; F-unit */
55 B
, /* Branch ; B-unit */
56 L
, /* Extended (L+X) ; I-unit */
57 X
, /* Extended (L+X) ; I-unit */
58 undefined
/* undefined or reserved */
61 /* We represent IA-64 PC addresses as the value of the instruction
62 pointer or'd with some bit combination in the low nibble which
63 represents the slot number in the bundle addressed by the
64 instruction pointer. The problem is that the Linux kernel
65 multiplies its slot numbers (for exceptions) by one while the
66 disassembler multiplies its slot numbers by 6. In addition, I've
67 heard it said that the simulator uses 1 as the multiplier.
69 I've fixed the disassembler so that the bytes_per_line field will
70 be the slot multiplier. If bytes_per_line comes in as zero, it
71 is set to six (which is how it was set up initially). -- objdump
72 displays pretty disassembly dumps with this value. For our purposes,
73 we'll set bytes_per_line to SLOT_MULTIPLIER. This is okay since we
74 never want to also display the raw bytes the way objdump does. */
76 #define SLOT_MULTIPLIER 1
78 /* Length in bytes of an instruction bundle */
82 /* FIXME: These extern declarations should go in ia64-tdep.h. */
83 extern CORE_ADDR
ia64_linux_sigcontext_register_address (CORE_ADDR
, int);
84 extern CORE_ADDR
ia64_aix_sigcontext_register_address (CORE_ADDR
, int);
86 static gdbarch_init_ftype ia64_gdbarch_init
;
88 static gdbarch_register_name_ftype ia64_register_name
;
89 static gdbarch_register_raw_size_ftype ia64_register_raw_size
;
90 static gdbarch_register_virtual_size_ftype ia64_register_virtual_size
;
91 static gdbarch_register_virtual_type_ftype ia64_register_virtual_type
;
92 static gdbarch_register_byte_ftype ia64_register_byte
;
93 static gdbarch_breakpoint_from_pc_ftype ia64_breakpoint_from_pc
;
94 static gdbarch_skip_prologue_ftype ia64_skip_prologue
;
95 static gdbarch_deprecated_extract_return_value_ftype ia64_extract_return_value
;
96 static gdbarch_deprecated_extract_struct_value_address_ftype ia64_extract_struct_value_address
;
97 static gdbarch_use_struct_convention_ftype ia64_use_struct_convention
;
98 static gdbarch_frameless_function_invocation_ftype ia64_frameless_function_invocation
;
99 static gdbarch_saved_pc_after_call_ftype ia64_saved_pc_after_call
;
100 static void ia64_pop_frame_regular (struct frame_info
*frame
);
101 static struct type
*is_float_or_hfa_type (struct type
*t
);
103 static int ia64_num_regs
= 590;
105 static int pc_regnum
= IA64_IP_REGNUM
;
106 static int sp_regnum
= IA64_GR12_REGNUM
;
107 static int fp_regnum
= IA64_VFP_REGNUM
;
108 static int lr_regnum
= IA64_VRAP_REGNUM
;
110 static LONGEST ia64_call_dummy_words
[] = {0};
112 /* Array of register names; There should be ia64_num_regs strings in
115 static char *ia64_register_names
[] =
116 { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
117 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
118 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
119 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
120 "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39",
121 "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47",
122 "r48", "r49", "r50", "r51", "r52", "r53", "r54", "r55",
123 "r56", "r57", "r58", "r59", "r60", "r61", "r62", "r63",
124 "r64", "r65", "r66", "r67", "r68", "r69", "r70", "r71",
125 "r72", "r73", "r74", "r75", "r76", "r77", "r78", "r79",
126 "r80", "r81", "r82", "r83", "r84", "r85", "r86", "r87",
127 "r88", "r89", "r90", "r91", "r92", "r93", "r94", "r95",
128 "r96", "r97", "r98", "r99", "r100", "r101", "r102", "r103",
129 "r104", "r105", "r106", "r107", "r108", "r109", "r110", "r111",
130 "r112", "r113", "r114", "r115", "r116", "r117", "r118", "r119",
131 "r120", "r121", "r122", "r123", "r124", "r125", "r126", "r127",
133 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
134 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
135 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
136 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
137 "f32", "f33", "f34", "f35", "f36", "f37", "f38", "f39",
138 "f40", "f41", "f42", "f43", "f44", "f45", "f46", "f47",
139 "f48", "f49", "f50", "f51", "f52", "f53", "f54", "f55",
140 "f56", "f57", "f58", "f59", "f60", "f61", "f62", "f63",
141 "f64", "f65", "f66", "f67", "f68", "f69", "f70", "f71",
142 "f72", "f73", "f74", "f75", "f76", "f77", "f78", "f79",
143 "f80", "f81", "f82", "f83", "f84", "f85", "f86", "f87",
144 "f88", "f89", "f90", "f91", "f92", "f93", "f94", "f95",
145 "f96", "f97", "f98", "f99", "f100", "f101", "f102", "f103",
146 "f104", "f105", "f106", "f107", "f108", "f109", "f110", "f111",
147 "f112", "f113", "f114", "f115", "f116", "f117", "f118", "f119",
148 "f120", "f121", "f122", "f123", "f124", "f125", "f126", "f127",
150 "p0", "p1", "p2", "p3", "p4", "p5", "p6", "p7",
151 "p8", "p9", "p10", "p11", "p12", "p13", "p14", "p15",
152 "p16", "p17", "p18", "p19", "p20", "p21", "p22", "p23",
153 "p24", "p25", "p26", "p27", "p28", "p29", "p30", "p31",
154 "p32", "p33", "p34", "p35", "p36", "p37", "p38", "p39",
155 "p40", "p41", "p42", "p43", "p44", "p45", "p46", "p47",
156 "p48", "p49", "p50", "p51", "p52", "p53", "p54", "p55",
157 "p56", "p57", "p58", "p59", "p60", "p61", "p62", "p63",
159 "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7",
163 "pr", "ip", "psr", "cfm",
165 "kr0", "kr1", "kr2", "kr3", "kr4", "kr5", "kr6", "kr7",
166 "", "", "", "", "", "", "", "",
167 "rsc", "bsp", "bspstore", "rnat",
169 "eflag", "csd", "ssd", "cflg", "fsr", "fir", "fdr", "",
170 "ccv", "", "", "", "unat", "", "", "",
171 "fpsr", "", "", "", "itc",
172 "", "", "", "", "", "", "", "", "", "",
173 "", "", "", "", "", "", "", "", "",
175 "", "", "", "", "", "", "", "", "", "",
176 "", "", "", "", "", "", "", "", "", "",
177 "", "", "", "", "", "", "", "", "", "",
178 "", "", "", "", "", "", "", "", "", "",
179 "", "", "", "", "", "", "", "", "", "",
180 "", "", "", "", "", "", "", "", "", "",
182 "nat0", "nat1", "nat2", "nat3", "nat4", "nat5", "nat6", "nat7",
183 "nat8", "nat9", "nat10", "nat11", "nat12", "nat13", "nat14", "nat15",
184 "nat16", "nat17", "nat18", "nat19", "nat20", "nat21", "nat22", "nat23",
185 "nat24", "nat25", "nat26", "nat27", "nat28", "nat29", "nat30", "nat31",
186 "nat32", "nat33", "nat34", "nat35", "nat36", "nat37", "nat38", "nat39",
187 "nat40", "nat41", "nat42", "nat43", "nat44", "nat45", "nat46", "nat47",
188 "nat48", "nat49", "nat50", "nat51", "nat52", "nat53", "nat54", "nat55",
189 "nat56", "nat57", "nat58", "nat59", "nat60", "nat61", "nat62", "nat63",
190 "nat64", "nat65", "nat66", "nat67", "nat68", "nat69", "nat70", "nat71",
191 "nat72", "nat73", "nat74", "nat75", "nat76", "nat77", "nat78", "nat79",
192 "nat80", "nat81", "nat82", "nat83", "nat84", "nat85", "nat86", "nat87",
193 "nat88", "nat89", "nat90", "nat91", "nat92", "nat93", "nat94", "nat95",
194 "nat96", "nat97", "nat98", "nat99", "nat100","nat101","nat102","nat103",
195 "nat104","nat105","nat106","nat107","nat108","nat109","nat110","nat111",
196 "nat112","nat113","nat114","nat115","nat116","nat117","nat118","nat119",
197 "nat120","nat121","nat122","nat123","nat124","nat125","nat126","nat127",
200 struct frame_extra_info
202 CORE_ADDR bsp
; /* points at r32 for the current frame */
203 CORE_ADDR cfm
; /* cfm value for current frame */
204 int sof
; /* Size of frame (decoded from cfm value) */
205 int sol
; /* Size of locals (decoded from cfm value) */
206 CORE_ADDR after_prologue
;
207 /* Address of first instruction after the last
208 prologue instruction; Note that there may
209 be instructions from the function's body
210 intermingled with the prologue. */
211 int mem_stack_frame_size
;
212 /* Size of the memory stack frame (may be zero),
213 or -1 if it has not been determined yet. */
214 int fp_reg
; /* Register number (if any) used a frame pointer
215 for this frame. 0 if no register is being used
216 as the frame pointer. */
221 int os_ident
; /* From the ELF header, one of the ELFOSABI_
222 constants: ELFOSABI_LINUX, ELFOSABI_AIX,
224 CORE_ADDR (*sigcontext_register_address
) (CORE_ADDR
, int);
225 /* OS specific function which, given a frame address
226 and register number, returns the offset to the
227 given register from the start of the frame. */
228 CORE_ADDR (*find_global_pointer
) (CORE_ADDR
);
231 #define SIGCONTEXT_REGISTER_ADDRESS \
232 (gdbarch_tdep (current_gdbarch)->sigcontext_register_address)
233 #define FIND_GLOBAL_POINTER \
234 (gdbarch_tdep (current_gdbarch)->find_global_pointer)
237 ia64_register_name (int reg
)
239 return ia64_register_names
[reg
];
243 ia64_register_raw_size (int reg
)
245 return (IA64_FR0_REGNUM
<= reg
&& reg
<= IA64_FR127_REGNUM
) ? 16 : 8;
249 ia64_register_virtual_size (int reg
)
251 return (IA64_FR0_REGNUM
<= reg
&& reg
<= IA64_FR127_REGNUM
) ? 16 : 8;
254 /* Return true iff register N's virtual format is different from
257 ia64_register_convertible (int nr
)
259 return (IA64_FR0_REGNUM
<= nr
&& nr
<= IA64_FR127_REGNUM
);
262 const struct floatformat floatformat_ia64_ext
=
264 floatformat_little
, 82, 0, 1, 17, 65535, 0x1ffff, 18, 64,
265 floatformat_intbit_yes
269 ia64_register_convert_to_virtual (int regnum
, struct type
*type
,
270 char *from
, char *to
)
272 if (regnum
>= IA64_FR0_REGNUM
&& regnum
<= IA64_FR127_REGNUM
)
275 floatformat_to_doublest (&floatformat_ia64_ext
, from
, &val
);
276 store_floating(to
, TYPE_LENGTH(type
), val
);
279 error("ia64_register_convert_to_virtual called with non floating point register number");
283 ia64_register_convert_to_raw (struct type
*type
, int regnum
,
284 char *from
, char *to
)
286 if (regnum
>= IA64_FR0_REGNUM
&& regnum
<= IA64_FR127_REGNUM
)
288 DOUBLEST val
= extract_floating (from
, TYPE_LENGTH(type
));
289 floatformat_from_doublest (&floatformat_ia64_ext
, &val
, to
);
292 error("ia64_register_convert_to_raw called with non floating point register number");
296 ia64_register_virtual_type (int reg
)
298 if (reg
>= IA64_FR0_REGNUM
&& reg
<= IA64_FR127_REGNUM
)
299 return builtin_type_long_double
;
301 return builtin_type_long
;
305 ia64_register_byte (int reg
)
308 (reg
<= IA64_FR0_REGNUM
? 0 : 8 * ((reg
> IA64_FR127_REGNUM
) ? 128 : reg
- IA64_FR0_REGNUM
));
311 /* Read the given register from a sigcontext structure in the
315 read_sigcontext_register (struct frame_info
*frame
, int regnum
)
320 internal_error (__FILE__
, __LINE__
,
321 "read_sigcontext_register: NULL frame");
322 if (!(get_frame_type (frame
) == SIGTRAMP_FRAME
))
323 internal_error (__FILE__
, __LINE__
,
324 "read_sigcontext_register: frame not a signal trampoline");
325 if (SIGCONTEXT_REGISTER_ADDRESS
== 0)
326 internal_error (__FILE__
, __LINE__
,
327 "read_sigcontext_register: SIGCONTEXT_REGISTER_ADDRESS is 0");
329 regaddr
= SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame
), regnum
);
331 return read_memory_integer (regaddr
, REGISTER_RAW_SIZE (regnum
));
333 internal_error (__FILE__
, __LINE__
,
334 "read_sigcontext_register: Register %d not in struct sigcontext", regnum
);
337 /* Extract ``len'' bits from an instruction bundle starting at
341 extract_bit_field (char *bundle
, int from
, int len
)
343 long long result
= 0LL;
345 int from_byte
= from
/ 8;
346 int to_byte
= to
/ 8;
347 unsigned char *b
= (unsigned char *) bundle
;
353 if (from_byte
== to_byte
)
354 c
= ((unsigned char) (c
<< (8 - to
% 8))) >> (8 - to
% 8);
355 result
= c
>> (from
% 8);
356 lshift
= 8 - (from
% 8);
358 for (i
= from_byte
+1; i
< to_byte
; i
++)
360 result
|= ((long long) b
[i
]) << lshift
;
364 if (from_byte
< to_byte
&& (to
% 8 != 0))
367 c
= ((unsigned char) (c
<< (8 - to
% 8))) >> (8 - to
% 8);
368 result
|= ((long long) c
) << lshift
;
374 /* Replace the specified bits in an instruction bundle */
377 replace_bit_field (char *bundle
, long long val
, int from
, int len
)
380 int from_byte
= from
/ 8;
381 int to_byte
= to
/ 8;
382 unsigned char *b
= (unsigned char *) bundle
;
385 if (from_byte
== to_byte
)
387 unsigned char left
, right
;
389 left
= (c
>> (to
% 8)) << (to
% 8);
390 right
= ((unsigned char) (c
<< (8 - from
% 8))) >> (8 - from
% 8);
391 c
= (unsigned char) (val
& 0xff);
392 c
= (unsigned char) (c
<< (from
% 8 + 8 - to
% 8)) >> (8 - to
% 8);
400 c
= ((unsigned char) (c
<< (8 - from
% 8))) >> (8 - from
% 8);
401 c
= c
| (val
<< (from
% 8));
403 val
>>= 8 - from
% 8;
405 for (i
= from_byte
+1; i
< to_byte
; i
++)
414 unsigned char cv
= (unsigned char) val
;
416 c
= c
>> (to
% 8) << (to
% 8);
417 c
|= ((unsigned char) (cv
<< (8 - to
% 8))) >> (8 - to
% 8);
423 /* Return the contents of slot N (for N = 0, 1, or 2) in
424 and instruction bundle */
427 slotN_contents (char *bundle
, int slotnum
)
429 return extract_bit_field (bundle
, 5+41*slotnum
, 41);
432 /* Store an instruction in an instruction bundle */
435 replace_slotN_contents (char *bundle
, long long instr
, int slotnum
)
437 replace_bit_field (bundle
, instr
, 5+41*slotnum
, 41);
440 static enum instruction_type template_encoding_table
[32][3] =
442 { M
, I
, I
}, /* 00 */
443 { M
, I
, I
}, /* 01 */
444 { M
, I
, I
}, /* 02 */
445 { M
, I
, I
}, /* 03 */
446 { M
, L
, X
}, /* 04 */
447 { M
, L
, X
}, /* 05 */
448 { undefined
, undefined
, undefined
}, /* 06 */
449 { undefined
, undefined
, undefined
}, /* 07 */
450 { M
, M
, I
}, /* 08 */
451 { M
, M
, I
}, /* 09 */
452 { M
, M
, I
}, /* 0A */
453 { M
, M
, I
}, /* 0B */
454 { M
, F
, I
}, /* 0C */
455 { M
, F
, I
}, /* 0D */
456 { M
, M
, F
}, /* 0E */
457 { M
, M
, F
}, /* 0F */
458 { M
, I
, B
}, /* 10 */
459 { M
, I
, B
}, /* 11 */
460 { M
, B
, B
}, /* 12 */
461 { M
, B
, B
}, /* 13 */
462 { undefined
, undefined
, undefined
}, /* 14 */
463 { undefined
, undefined
, undefined
}, /* 15 */
464 { B
, B
, B
}, /* 16 */
465 { B
, B
, B
}, /* 17 */
466 { M
, M
, B
}, /* 18 */
467 { M
, M
, B
}, /* 19 */
468 { undefined
, undefined
, undefined
}, /* 1A */
469 { undefined
, undefined
, undefined
}, /* 1B */
470 { M
, F
, B
}, /* 1C */
471 { M
, F
, B
}, /* 1D */
472 { undefined
, undefined
, undefined
}, /* 1E */
473 { undefined
, undefined
, undefined
}, /* 1F */
476 /* Fetch and (partially) decode an instruction at ADDR and return the
477 address of the next instruction to fetch. */
480 fetch_instruction (CORE_ADDR addr
, instruction_type
*it
, long long *instr
)
482 char bundle
[BUNDLE_LEN
];
483 int slotnum
= (int) (addr
& 0x0f) / SLOT_MULTIPLIER
;
487 /* Warn about slot numbers greater than 2. We used to generate
488 an error here on the assumption that the user entered an invalid
489 address. But, sometimes GDB itself requests an invalid address.
490 This can (easily) happen when execution stops in a function for
491 which there are no symbols. The prologue scanner will attempt to
492 find the beginning of the function - if the nearest symbol
493 happens to not be aligned on a bundle boundary (16 bytes), the
494 resulting starting address will cause GDB to think that the slot
497 So we warn about it and set the slot number to zero. It is
498 not necessarily a fatal condition, particularly if debugging
499 at the assembly language level. */
502 warning ("Can't fetch instructions for slot numbers greater than 2.\n"
503 "Using slot 0 instead");
509 val
= target_read_memory (addr
, bundle
, BUNDLE_LEN
);
514 *instr
= slotN_contents (bundle
, slotnum
);
515 template = extract_bit_field (bundle
, 0, 5);
516 *it
= template_encoding_table
[(int)template][slotnum
];
518 if (slotnum
== 2 || (slotnum
== 1 && *it
== L
))
521 addr
+= (slotnum
+ 1) * SLOT_MULTIPLIER
;
526 /* There are 5 different break instructions (break.i, break.b,
527 break.m, break.f, and break.x), but they all have the same
528 encoding. (The five bit template in the low five bits of the
529 instruction bundle distinguishes one from another.)
531 The runtime architecture manual specifies that break instructions
532 used for debugging purposes must have the upper two bits of the 21
533 bit immediate set to a 0 and a 1 respectively. A breakpoint
534 instruction encodes the most significant bit of its 21 bit
535 immediate at bit 36 of the 41 bit instruction. The penultimate msb
536 is at bit 25 which leads to the pattern below.
538 Originally, I had this set up to do, e.g, a "break.i 0x80000" But
539 it turns out that 0x80000 was used as the syscall break in the early
540 simulators. So I changed the pattern slightly to do "break.i 0x080001"
541 instead. But that didn't work either (I later found out that this
542 pattern was used by the simulator that I was using.) So I ended up
543 using the pattern seen below. */
546 #define BREAKPOINT 0x00002000040LL
548 #define BREAKPOINT 0x00003333300LL
551 ia64_memory_insert_breakpoint (CORE_ADDR addr
, char *contents_cache
)
553 char bundle
[BUNDLE_LEN
];
554 int slotnum
= (int) (addr
& 0x0f) / SLOT_MULTIPLIER
;
560 error("Can't insert breakpoint for slot numbers greater than 2.");
564 val
= target_read_memory (addr
, bundle
, BUNDLE_LEN
);
566 /* Check for L type instruction in 2nd slot, if present then
567 bump up the slot number to the 3rd slot */
568 template = extract_bit_field (bundle
, 0, 5);
569 if (slotnum
== 1 && template_encoding_table
[template][1] == L
)
574 instr
= slotN_contents (bundle
, slotnum
);
575 memcpy(contents_cache
, &instr
, sizeof(instr
));
576 replace_slotN_contents (bundle
, BREAKPOINT
, slotnum
);
578 target_write_memory (addr
, bundle
, BUNDLE_LEN
);
584 ia64_memory_remove_breakpoint (CORE_ADDR addr
, char *contents_cache
)
586 char bundle
[BUNDLE_LEN
];
587 int slotnum
= (addr
& 0x0f) / SLOT_MULTIPLIER
;
594 val
= target_read_memory (addr
, bundle
, BUNDLE_LEN
);
596 /* Check for L type instruction in 2nd slot, if present then
597 bump up the slot number to the 3rd slot */
598 template = extract_bit_field (bundle
, 0, 5);
599 if (slotnum
== 1 && template_encoding_table
[template][1] == L
)
604 memcpy (&instr
, contents_cache
, sizeof instr
);
605 replace_slotN_contents (bundle
, instr
, slotnum
);
607 target_write_memory (addr
, bundle
, BUNDLE_LEN
);
612 /* We don't really want to use this, but remote.c needs to call it in order
613 to figure out if Z-packets are supported or not. Oh, well. */
614 const unsigned char *
615 ia64_breakpoint_from_pc (CORE_ADDR
*pcptr
, int *lenptr
)
617 static unsigned char breakpoint
[] =
618 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
619 *lenptr
= sizeof (breakpoint
);
627 ia64_read_pc (ptid_t ptid
)
629 CORE_ADDR psr_value
= read_register_pid (IA64_PSR_REGNUM
, ptid
);
630 CORE_ADDR pc_value
= read_register_pid (IA64_IP_REGNUM
, ptid
);
631 int slot_num
= (psr_value
>> 41) & 3;
633 return pc_value
| (slot_num
* SLOT_MULTIPLIER
);
637 ia64_write_pc (CORE_ADDR new_pc
, ptid_t ptid
)
639 int slot_num
= (int) (new_pc
& 0xf) / SLOT_MULTIPLIER
;
640 CORE_ADDR psr_value
= read_register_pid (IA64_PSR_REGNUM
, ptid
);
641 psr_value
&= ~(3LL << 41);
642 psr_value
|= (CORE_ADDR
)(slot_num
& 0x3) << 41;
646 write_register_pid (IA64_PSR_REGNUM
, psr_value
, ptid
);
647 write_register_pid (IA64_IP_REGNUM
, new_pc
, ptid
);
650 #define IS_NaT_COLLECTION_ADDR(addr) ((((addr) >> 3) & 0x3f) == 0x3f)
652 /* Returns the address of the slot that's NSLOTS slots away from
653 the address ADDR. NSLOTS may be positive or negative. */
655 rse_address_add(CORE_ADDR addr
, int nslots
)
658 int mandatory_nat_slots
= nslots
/ 63;
659 int direction
= nslots
< 0 ? -1 : 1;
661 new_addr
= addr
+ 8 * (nslots
+ mandatory_nat_slots
);
663 if ((new_addr
>> 9) != ((addr
+ 8 * 64 * mandatory_nat_slots
) >> 9))
664 new_addr
+= 8 * direction
;
666 if (IS_NaT_COLLECTION_ADDR(new_addr
))
667 new_addr
+= 8 * direction
;
672 /* The IA-64 frame chain is a bit odd. We won't always have a frame
673 pointer, so we use the SP value as the FP for the purpose of
674 creating a frame. There is sometimes a register (not fixed) which
675 is used as a frame pointer. When this register exists, it is not
676 especially hard to determine which one is being used. It isn't
677 even really hard to compute the frame chain, but it can be
678 computationally expensive. So, instead of making life difficult
679 (and slow), we pick a more convenient representation of the frame
680 chain, knowing that we'll have to make some small adjustments in
681 other places. (E.g, note that read_fp() is actually read_sp() in
682 ia64_gdbarch_init() below.)
684 Okay, so what is the frame chain exactly? It'll be the SP value
685 at the time that the function in question was entered.
687 Note that this *should* actually the frame pointer for the current
688 function! But as I note above, if we were to attempt to find the
689 address of the beginning of the previous frame, we'd waste a lot
690 of cycles for no good reason. So instead, we simply choose to
691 represent the frame chain as the end of the previous frame instead
695 ia64_frame_chain (struct frame_info
*frame
)
697 if ((get_frame_type (frame
) == SIGTRAMP_FRAME
))
698 return read_sigcontext_register (frame
, sp_regnum
);
699 else if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame
),
700 get_frame_base (frame
),
701 get_frame_base (frame
)))
702 return get_frame_base (frame
);
705 DEPRECATED_FRAME_INIT_SAVED_REGS (frame
);
706 if (get_frame_saved_regs (frame
)[IA64_VFP_REGNUM
])
707 return read_memory_integer (get_frame_saved_regs (frame
)[IA64_VFP_REGNUM
], 8);
709 return (get_frame_base (frame
)
710 + get_frame_extra_info (frame
)->mem_stack_frame_size
);
715 ia64_frame_saved_pc (struct frame_info
*frame
)
717 if ((get_frame_type (frame
) == SIGTRAMP_FRAME
))
718 return read_sigcontext_register (frame
, pc_regnum
);
719 else if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame
),
720 get_frame_base (frame
),
721 get_frame_base (frame
)))
722 return deprecated_read_register_dummy (get_frame_pc (frame
),
723 get_frame_base (frame
), pc_regnum
);
726 DEPRECATED_FRAME_INIT_SAVED_REGS (frame
);
728 if (get_frame_saved_regs (frame
)[IA64_VRAP_REGNUM
])
729 return read_memory_integer (get_frame_saved_regs (frame
)[IA64_VRAP_REGNUM
], 8);
730 else if (get_next_frame (frame
)
731 && (get_frame_type (get_next_frame (frame
)) == SIGTRAMP_FRAME
))
732 return read_sigcontext_register (get_next_frame (frame
), IA64_BR0_REGNUM
);
733 else /* either frameless, or not far enough along in the prologue... */
734 return ia64_saved_pc_after_call (frame
);
738 /* Limit the number of skipped non-prologue instructions since examining
739 of the prologue is expensive. */
740 static int max_skip_non_prologue_insns
= 10;
742 /* Given PC representing the starting address of a function, and
743 LIM_PC which is the (sloppy) limit to which to scan when looking
744 for a prologue, attempt to further refine this limit by using
745 the line data in the symbol table. If successful, a better guess
746 on where the prologue ends is returned, otherwise the previous
747 value of lim_pc is returned. TRUST_LIMIT is a pointer to a flag
748 which will be set to indicate whether the returned limit may be
749 used with no further scanning in the event that the function is
753 refine_prologue_limit (CORE_ADDR pc
, CORE_ADDR lim_pc
, int *trust_limit
)
755 struct symtab_and_line prologue_sal
;
756 CORE_ADDR start_pc
= pc
;
758 /* Start off not trusting the limit. */
761 prologue_sal
= find_pc_line (pc
, 0);
762 if (prologue_sal
.line
!= 0)
765 CORE_ADDR addr
= prologue_sal
.end
;
767 /* Handle the case in which compiler's optimizer/scheduler
768 has moved instructions into the prologue. We scan ahead
769 in the function looking for address ranges whose corresponding
770 line number is less than or equal to the first one that we
771 found for the function. (It can be less than when the
772 scheduler puts a body instruction before the first prologue
774 for (i
= 2 * max_skip_non_prologue_insns
;
775 i
> 0 && (lim_pc
== 0 || addr
< lim_pc
);
778 struct symtab_and_line sal
;
780 sal
= find_pc_line (addr
, 0);
783 if (sal
.line
<= prologue_sal
.line
784 && sal
.symtab
== prologue_sal
.symtab
)
791 if (lim_pc
== 0 || prologue_sal
.end
< lim_pc
)
793 lim_pc
= prologue_sal
.end
;
794 if (start_pc
== get_pc_function_start (lim_pc
))
801 #define isScratch(_regnum_) ((_regnum_) == 2 || (_regnum_) == 3 \
802 || (8 <= (_regnum_) && (_regnum_) <= 11) \
803 || (14 <= (_regnum_) && (_regnum_) <= 31))
804 #define imm9(_instr_) \
805 ( ((((_instr_) & 0x01000000000LL) ? -1 : 0) << 8) \
806 | (((_instr_) & 0x00008000000LL) >> 20) \
807 | (((_instr_) & 0x00000001fc0LL) >> 6))
810 examine_prologue (CORE_ADDR pc
, CORE_ADDR lim_pc
, struct frame_info
*frame
)
813 CORE_ADDR last_prologue_pc
= pc
;
816 int do_fsr_stuff
= 0;
821 int unat_save_reg
= 0;
823 int mem_stack_frame_size
= 0;
825 CORE_ADDR spill_addr
= 0;
830 memset (instores
, 0, sizeof instores
);
831 memset (infpstores
, 0, sizeof infpstores
);
833 if (frame
&& !get_frame_saved_regs (frame
))
835 frame_saved_regs_zalloc (frame
);
841 && get_frame_extra_info (frame
)->after_prologue
!= 0
842 && get_frame_extra_info (frame
)->after_prologue
<= lim_pc
)
843 return get_frame_extra_info (frame
)->after_prologue
;
845 lim_pc
= refine_prologue_limit (pc
, lim_pc
, &trust_limit
);
847 /* Must start with an alloc instruction */
848 next_pc
= fetch_instruction (pc
, &it
, &instr
);
849 if (pc
< lim_pc
&& next_pc
850 && it
== M
&& ((instr
& 0x1ee0000003fLL
) == 0x02c00000000LL
))
853 int sor
= (int) ((instr
& 0x00078000000LL
) >> 27);
854 int sol
= (int) ((instr
& 0x00007f00000LL
) >> 20);
855 int sof
= (int) ((instr
& 0x000000fe000LL
) >> 13);
856 /* Okay, so sor, sol, and sof aren't used right now; but perhaps
857 we could compare against the size given to us via the cfm as
858 either a sanity check or possibly to see if the frame has been
859 changed by a later alloc instruction... */
860 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
862 last_prologue_pc
= next_pc
;
867 pc
= lim_pc
; /* Frameless: We're done early. */
869 last_prologue_pc
= lim_pc
;
872 /* Loop, looking for prologue instructions, keeping track of
873 where preserved registers were spilled. */
876 next_pc
= fetch_instruction (pc
, &it
, &instr
);
880 if ((it
== B
&& ((instr
& 0x1e1f800003f) != 0x04000000000))
881 || ((instr
& 0x3fLL
) != 0LL))
883 /* Exit loop upon hitting a non-nop branch instruction
884 or a predicated instruction. */
887 else if (it
== I
&& ((instr
& 0x1eff8000000LL
) == 0x00188000000LL
))
890 int b2
= (int) ((instr
& 0x0000000e000LL
) >> 13);
891 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
892 int qp
= (int) (instr
& 0x0000000003f);
894 if (qp
== 0 && b2
== 0 && rN
>= 32 && ret_reg
== 0)
897 last_prologue_pc
= next_pc
;
900 else if ((it
== I
|| it
== M
)
901 && ((instr
& 0x1ee00000000LL
) == 0x10800000000LL
))
903 /* adds rN = imm14, rM (or mov rN, rM when imm14 is 0) */
904 int imm
= (int) ((((instr
& 0x01000000000LL
) ? -1 : 0) << 13)
905 | ((instr
& 0x001f8000000LL
) >> 20)
906 | ((instr
& 0x000000fe000LL
) >> 13));
907 int rM
= (int) ((instr
& 0x00007f00000LL
) >> 20);
908 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
909 int qp
= (int) (instr
& 0x0000000003fLL
);
911 if (qp
== 0 && rN
>= 32 && imm
== 0 && rM
== 12 && fp_reg
== 0)
915 last_prologue_pc
= next_pc
;
917 else if (qp
== 0 && rN
== 12 && rM
== 12)
919 /* adds r12, -mem_stack_frame_size, r12 */
920 mem_stack_frame_size
-= imm
;
921 last_prologue_pc
= next_pc
;
923 else if (qp
== 0 && rN
== 2
924 && ((rM
== fp_reg
&& fp_reg
!= 0) || rM
== 12))
926 /* adds r2, spilloffset, rFramePointer
928 adds r2, spilloffset, r12
930 Get ready for stf.spill or st8.spill instructions.
931 The address to start spilling at is loaded into r2.
932 FIXME: Why r2? That's what gcc currently uses; it
933 could well be different for other compilers. */
935 /* Hmm... whether or not this will work will depend on
936 where the pc is. If it's still early in the prologue
937 this'll be wrong. FIXME */
938 spill_addr
= (frame
? get_frame_base (frame
) : 0)
939 + (rM
== 12 ? 0 : mem_stack_frame_size
)
942 last_prologue_pc
= next_pc
;
946 && ( ((instr
& 0x1efc0000000LL
) == 0x0eec0000000LL
)
947 || ((instr
& 0x1ffc8000000LL
) == 0x0cec0000000LL
) ))
949 /* stf.spill [rN] = fM, imm9
951 stf.spill [rN] = fM */
953 int imm
= imm9(instr
);
954 int rN
= (int) ((instr
& 0x00007f00000LL
) >> 20);
955 int fM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
956 int qp
= (int) (instr
& 0x0000000003fLL
);
957 if (qp
== 0 && rN
== spill_reg
&& spill_addr
!= 0
958 && ((2 <= fM
&& fM
<= 5) || (16 <= fM
&& fM
<= 31)))
961 get_frame_saved_regs (frame
)[IA64_FR0_REGNUM
+ fM
] = spill_addr
;
963 if ((instr
& 0x1efc0000000) == 0x0eec0000000)
966 spill_addr
= 0; /* last one; must be done */
967 last_prologue_pc
= next_pc
;
970 else if ((it
== M
&& ((instr
& 0x1eff8000000LL
) == 0x02110000000LL
))
971 || (it
== I
&& ((instr
& 0x1eff8000000LL
) == 0x00050000000LL
)) )
977 int arM
= (int) ((instr
& 0x00007f00000LL
) >> 20);
978 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
979 int qp
= (int) (instr
& 0x0000000003fLL
);
980 if (qp
== 0 && isScratch (rN
) && arM
== 36 /* ar.unat */)
982 /* We have something like "mov.m r3 = ar.unat". Remember the
983 r3 (or whatever) and watch for a store of this register... */
985 last_prologue_pc
= next_pc
;
988 else if (it
== I
&& ((instr
& 0x1eff8000000LL
) == 0x00198000000LL
))
991 int rN
= (int) ((instr
& 0x00000001fc0LL
) >> 6);
992 int qp
= (int) (instr
& 0x0000000003fLL
);
993 if (qp
== 0 && isScratch (rN
))
996 last_prologue_pc
= next_pc
;
1000 && ( ((instr
& 0x1ffc8000000LL
) == 0x08cc0000000LL
)
1001 || ((instr
& 0x1efc0000000LL
) == 0x0acc0000000LL
)))
1005 st8 [rN] = rM, imm9 */
1006 int rN
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1007 int rM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1008 int qp
= (int) (instr
& 0x0000000003fLL
);
1009 if (qp
== 0 && rN
== spill_reg
&& spill_addr
!= 0
1010 && (rM
== unat_save_reg
|| rM
== pr_save_reg
))
1012 /* We've found a spill of either the UNAT register or the PR
1013 register. (Well, not exactly; what we've actually found is
1014 a spill of the register that UNAT or PR was moved to).
1015 Record that fact and move on... */
1016 if (rM
== unat_save_reg
)
1018 /* Track UNAT register */
1020 get_frame_saved_regs (frame
)[IA64_UNAT_REGNUM
] = spill_addr
;
1025 /* Track PR register */
1027 get_frame_saved_regs (frame
)[IA64_PR_REGNUM
] = spill_addr
;
1030 if ((instr
& 0x1efc0000000LL
) == 0x0acc0000000LL
)
1031 /* st8 [rN] = rM, imm9 */
1032 spill_addr
+= imm9(instr
);
1034 spill_addr
= 0; /* must be done spilling */
1035 last_prologue_pc
= next_pc
;
1037 else if (qp
== 0 && 32 <= rM
&& rM
< 40 && !instores
[rM
-32])
1039 /* Allow up to one store of each input register. */
1040 instores
[rM
-32] = 1;
1041 last_prologue_pc
= next_pc
;
1044 else if (it
== M
&& ((instr
& 0x1ff08000000LL
) == 0x08c00000000LL
))
1051 Note that the st8 case is handled in the clause above.
1053 Advance over stores of input registers. One store per input
1054 register is permitted. */
1055 int rM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1056 int qp
= (int) (instr
& 0x0000000003fLL
);
1057 if (qp
== 0 && 32 <= rM
&& rM
< 40 && !instores
[rM
-32])
1059 instores
[rM
-32] = 1;
1060 last_prologue_pc
= next_pc
;
1063 else if (it
== M
&& ((instr
& 0x1ff88000000LL
) == 0x0cc80000000LL
))
1070 Advance over stores of floating point input registers. Again
1071 one store per register is permitted */
1072 int fM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1073 int qp
= (int) (instr
& 0x0000000003fLL
);
1074 if (qp
== 0 && 8 <= fM
&& fM
< 16 && !infpstores
[fM
- 8])
1076 infpstores
[fM
-8] = 1;
1077 last_prologue_pc
= next_pc
;
1081 && ( ((instr
& 0x1ffc8000000LL
) == 0x08ec0000000LL
)
1082 || ((instr
& 0x1efc0000000LL
) == 0x0aec0000000LL
)))
1084 /* st8.spill [rN] = rM
1086 st8.spill [rN] = rM, imm9 */
1087 int rN
= (int) ((instr
& 0x00007f00000LL
) >> 20);
1088 int rM
= (int) ((instr
& 0x000000fe000LL
) >> 13);
1089 int qp
= (int) (instr
& 0x0000000003fLL
);
1090 if (qp
== 0 && rN
== spill_reg
&& 4 <= rM
&& rM
<= 7)
1092 /* We've found a spill of one of the preserved general purpose
1093 regs. Record the spill address and advance the spill
1094 register if appropriate. */
1096 get_frame_saved_regs (frame
)[IA64_GR0_REGNUM
+ rM
] = spill_addr
;
1097 if ((instr
& 0x1efc0000000LL
) == 0x0aec0000000LL
)
1098 /* st8.spill [rN] = rM, imm9 */
1099 spill_addr
+= imm9(instr
);
1101 spill_addr
= 0; /* Done spilling */
1102 last_prologue_pc
= next_pc
;
1114 /* Extract the size of the rotating portion of the stack
1115 frame and the register rename base from the current
1117 sor
= ((get_frame_extra_info (frame
)->cfm
>> 14) & 0xf) * 8;
1118 rrb_gr
= (get_frame_extra_info (frame
)->cfm
>> 18) & 0x7f;
1120 for (i
= 0, addr
= get_frame_extra_info (frame
)->bsp
;
1121 i
< get_frame_extra_info (frame
)->sof
;
1124 if (IS_NaT_COLLECTION_ADDR (addr
))
1129 get_frame_saved_regs (frame
)[IA64_GR32_REGNUM
+ ((i
+ (sor
- rrb_gr
)) % sor
)]
1132 get_frame_saved_regs (frame
)[IA64_GR32_REGNUM
+ i
] = addr
;
1134 if (i
+32 == cfm_reg
)
1135 get_frame_saved_regs (frame
)[IA64_CFM_REGNUM
] = addr
;
1136 if (i
+32 == ret_reg
)
1137 get_frame_saved_regs (frame
)[IA64_VRAP_REGNUM
] = addr
;
1139 get_frame_saved_regs (frame
)[IA64_VFP_REGNUM
] = addr
;
1143 if (frame
&& get_frame_extra_info (frame
))
1145 get_frame_extra_info (frame
)->after_prologue
= last_prologue_pc
;
1146 get_frame_extra_info (frame
)->mem_stack_frame_size
= mem_stack_frame_size
;
1147 get_frame_extra_info (frame
)->fp_reg
= fp_reg
;
1150 return last_prologue_pc
;
1154 ia64_skip_prologue (CORE_ADDR pc
)
1156 return examine_prologue (pc
, pc
+1024, 0);
1160 ia64_frame_init_saved_regs (struct frame_info
*frame
)
1162 if (get_frame_saved_regs (frame
))
1165 if ((get_frame_type (frame
) == SIGTRAMP_FRAME
) && SIGCONTEXT_REGISTER_ADDRESS
)
1169 frame_saved_regs_zalloc (frame
);
1171 get_frame_saved_regs (frame
)[IA64_VRAP_REGNUM
] =
1172 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame
), IA64_IP_REGNUM
);
1173 get_frame_saved_regs (frame
)[IA64_CFM_REGNUM
] =
1174 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame
), IA64_CFM_REGNUM
);
1175 get_frame_saved_regs (frame
)[IA64_PSR_REGNUM
] =
1176 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame
), IA64_PSR_REGNUM
);
1178 get_frame_saved_regs (frame
)[IA64_BSP_REGNUM
] =
1179 SIGCONTEXT_REGISTER_ADDRESS (frame
->frame
, IA64_BSP_REGNUM
);
1181 get_frame_saved_regs (frame
)[IA64_RNAT_REGNUM
] =
1182 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame
), IA64_RNAT_REGNUM
);
1183 get_frame_saved_regs (frame
)[IA64_CCV_REGNUM
] =
1184 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame
), IA64_CCV_REGNUM
);
1185 get_frame_saved_regs (frame
)[IA64_UNAT_REGNUM
] =
1186 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame
), IA64_UNAT_REGNUM
);
1187 get_frame_saved_regs (frame
)[IA64_FPSR_REGNUM
] =
1188 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame
), IA64_FPSR_REGNUM
);
1189 get_frame_saved_regs (frame
)[IA64_PFS_REGNUM
] =
1190 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame
), IA64_PFS_REGNUM
);
1191 get_frame_saved_regs (frame
)[IA64_LC_REGNUM
] =
1192 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame
), IA64_LC_REGNUM
);
1193 for (regno
= IA64_GR1_REGNUM
; regno
<= IA64_GR31_REGNUM
; regno
++)
1194 if (regno
!= sp_regnum
)
1195 get_frame_saved_regs (frame
)[regno
] =
1196 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame
), regno
);
1197 for (regno
= IA64_BR0_REGNUM
; regno
<= IA64_BR7_REGNUM
; regno
++)
1198 get_frame_saved_regs (frame
)[regno
] =
1199 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame
), regno
);
1200 for (regno
= IA64_FR2_REGNUM
; regno
<= IA64_BR7_REGNUM
; regno
++)
1201 get_frame_saved_regs (frame
)[regno
] =
1202 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame
), regno
);
1206 CORE_ADDR func_start
;
1208 func_start
= get_frame_func (frame
);
1209 examine_prologue (func_start
, get_frame_pc (frame
), frame
);
1214 ia64_get_saved_register (char *raw_buffer
,
1217 struct frame_info
*frame
,
1219 enum lval_type
*lval
)
1223 if (!target_has_registers
)
1224 error ("No registers.");
1226 if (optimized
!= NULL
)
1235 is_dummy_frame
= DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame
),
1236 get_frame_base (frame
),
1237 get_frame_base (frame
));
1239 if (regnum
== SP_REGNUM
&& get_next_frame (frame
))
1241 /* Handle SP values for all frames but the topmost. */
1242 store_address (raw_buffer
, REGISTER_RAW_SIZE (regnum
),
1243 get_frame_base (frame
));
1245 else if (regnum
== IA64_BSP_REGNUM
)
1247 store_address (raw_buffer
, REGISTER_RAW_SIZE (regnum
),
1248 get_frame_extra_info (frame
)->bsp
);
1250 else if (regnum
== IA64_VFP_REGNUM
)
1252 /* If the function in question uses an automatic register (r32-r127)
1253 for the frame pointer, it'll be found by ia64_find_saved_register()
1254 above. If the function lacks one of these frame pointers, we can
1255 still provide a value since we know the size of the frame */
1256 CORE_ADDR vfp
= (get_frame_base (frame
)
1257 + get_frame_extra_info (frame
)->mem_stack_frame_size
);
1258 store_address (raw_buffer
, REGISTER_RAW_SIZE (IA64_VFP_REGNUM
), vfp
);
1260 else if (IA64_PR0_REGNUM
<= regnum
&& regnum
<= IA64_PR63_REGNUM
)
1262 char *pr_raw_buffer
= alloca (MAX_REGISTER_RAW_SIZE
);
1264 enum lval_type pr_lval
;
1267 ia64_get_saved_register (pr_raw_buffer
, &pr_optim
, &pr_addr
,
1268 frame
, IA64_PR_REGNUM
, &pr_lval
);
1269 if (IA64_PR16_REGNUM
<= regnum
&& regnum
<= IA64_PR63_REGNUM
)
1271 /* Fetch predicate register rename base from current frame
1272 marker for this frame. */
1273 int rrb_pr
= (get_frame_extra_info (frame
)->cfm
>> 32) & 0x3f;
1275 /* Adjust the register number to account for register rotation. */
1276 regnum
= IA64_PR16_REGNUM
1277 + ((regnum
- IA64_PR16_REGNUM
) + rrb_pr
) % 48;
1279 prN_val
= extract_bit_field ((unsigned char *) pr_raw_buffer
,
1280 regnum
- IA64_PR0_REGNUM
, 1);
1281 store_unsigned_integer (raw_buffer
, REGISTER_RAW_SIZE (regnum
), prN_val
);
1283 else if (IA64_NAT0_REGNUM
<= regnum
&& regnum
<= IA64_NAT31_REGNUM
)
1285 char *unat_raw_buffer
= alloca (MAX_REGISTER_RAW_SIZE
);
1287 enum lval_type unat_lval
;
1288 CORE_ADDR unat_addr
;
1290 ia64_get_saved_register (unat_raw_buffer
, &unat_optim
, &unat_addr
,
1291 frame
, IA64_UNAT_REGNUM
, &unat_lval
);
1292 unatN_val
= extract_bit_field ((unsigned char *) unat_raw_buffer
,
1293 regnum
- IA64_NAT0_REGNUM
, 1);
1294 store_unsigned_integer (raw_buffer
, REGISTER_RAW_SIZE (regnum
),
1297 else if (IA64_NAT32_REGNUM
<= regnum
&& regnum
<= IA64_NAT127_REGNUM
)
1300 /* Find address of general register corresponding to nat bit we're
1302 CORE_ADDR gr_addr
= 0;
1304 if (!is_dummy_frame
)
1306 DEPRECATED_FRAME_INIT_SAVED_REGS (frame
);
1307 gr_addr
= get_frame_saved_regs (frame
)[ regnum
- IA64_NAT0_REGNUM
1312 /* Compute address of nat collection bits */
1313 CORE_ADDR nat_addr
= gr_addr
| 0x1f8;
1314 CORE_ADDR bsp
= read_register (IA64_BSP_REGNUM
);
1315 CORE_ADDR nat_collection
;
1317 /* If our nat collection address is bigger than bsp, we have to get
1318 the nat collection from rnat. Otherwise, we fetch the nat
1319 collection from the computed address. */
1320 if (nat_addr
>= bsp
)
1321 nat_collection
= read_register (IA64_RNAT_REGNUM
);
1323 nat_collection
= read_memory_integer (nat_addr
, 8);
1324 nat_bit
= (gr_addr
>> 3) & 0x3f;
1325 natval
= (nat_collection
>> nat_bit
) & 1;
1327 store_unsigned_integer (raw_buffer
, REGISTER_RAW_SIZE (regnum
), natval
);
1329 else if (regnum
== IA64_IP_REGNUM
)
1332 if (get_next_frame (frame
))
1334 /* FIXME: Set *addrp, *lval when possible. */
1335 pc
= ia64_frame_saved_pc (get_next_frame (frame
));
1341 store_address (raw_buffer
, REGISTER_RAW_SIZE (IA64_IP_REGNUM
), pc
);
1343 else if (IA64_GR32_REGNUM
<= regnum
&& regnum
<= IA64_GR127_REGNUM
)
1346 if (!is_dummy_frame
)
1348 DEPRECATED_FRAME_INIT_SAVED_REGS (frame
);
1349 addr
= get_frame_saved_regs (frame
)[regnum
];
1355 *lval
= lval_memory
;
1358 read_memory (addr
, raw_buffer
, REGISTER_RAW_SIZE (regnum
));
1362 /* r32 - r127 must be fetchable via memory. If they aren't,
1363 then the register is unavailable */
1364 memset (raw_buffer
, 0, REGISTER_RAW_SIZE (regnum
));
1369 if (IA64_FR32_REGNUM
<= regnum
&& regnum
<= IA64_FR127_REGNUM
)
1371 /* Fetch floating point register rename base from current
1372 frame marker for this frame. */
1373 int rrb_fr
= (get_frame_extra_info (frame
)->cfm
>> 25) & 0x7f;
1375 /* Adjust the floating point register number to account for
1376 register rotation. */
1377 regnum
= IA64_FR32_REGNUM
1378 + ((regnum
- IA64_FR32_REGNUM
) + rrb_fr
) % 96;
1381 deprecated_generic_get_saved_register (raw_buffer
, optimized
, addrp
,
1382 frame
, regnum
, lval
);
1386 /* Should we use EXTRACT_STRUCT_VALUE_ADDRESS instead of
1387 EXTRACT_RETURN_VALUE? GCC_P is true if compiled with gcc
1388 and TYPE is the type (which is known to be struct, union or array). */
1390 ia64_use_struct_convention (int gcc_p
, struct type
*type
)
1392 struct type
*float_elt_type
;
1394 /* HFAs are structures (or arrays) consisting entirely of floating
1395 point values of the same length. Up to 8 of these are returned
1396 in registers. Don't use the struct convention when this is the
1398 float_elt_type
= is_float_or_hfa_type (type
);
1399 if (float_elt_type
!= NULL
1400 && TYPE_LENGTH (type
) / TYPE_LENGTH (float_elt_type
) <= 8)
1403 /* Other structs of length 32 or less are returned in r8-r11.
1404 Don't use the struct convention for those either. */
1405 return TYPE_LENGTH (type
) > 32;
1409 ia64_extract_return_value (struct type
*type
, char *regbuf
, char *valbuf
)
1411 struct type
*float_elt_type
;
1413 float_elt_type
= is_float_or_hfa_type (type
);
1414 if (float_elt_type
!= NULL
)
1417 int regnum
= IA64_FR8_REGNUM
;
1418 int n
= TYPE_LENGTH (type
) / TYPE_LENGTH (float_elt_type
);
1422 ia64_register_convert_to_virtual (regnum
, float_elt_type
,
1423 ®buf
[REGISTER_BYTE (regnum
)], valbuf
+ offset
);
1424 offset
+= TYPE_LENGTH (float_elt_type
);
1429 memcpy (valbuf
, ®buf
[REGISTER_BYTE (IA64_GR8_REGNUM
)],
1430 TYPE_LENGTH (type
));
1433 /* FIXME: Turn this into a stack of some sort. Unfortunately, something
1434 like this is necessary though since the IA-64 calling conventions specify
1435 that r8 is not preserved. */
1436 static CORE_ADDR struct_return_address
;
1439 ia64_extract_struct_value_address (char *regbuf
)
1441 /* FIXME: See above. */
1442 return struct_return_address
;
1446 ia64_store_struct_return (CORE_ADDR addr
, CORE_ADDR sp
)
1448 /* FIXME: See above. */
1449 /* Note that most of the work was done in ia64_push_arguments() */
1450 struct_return_address
= addr
;
1454 ia64_frameless_function_invocation (struct frame_info
*frame
)
1456 DEPRECATED_FRAME_INIT_SAVED_REGS (frame
);
1457 return (get_frame_extra_info (frame
)->mem_stack_frame_size
== 0);
1461 ia64_saved_pc_after_call (struct frame_info
*frame
)
1463 return read_register (IA64_BR0_REGNUM
);
1467 ia64_frame_args_address (struct frame_info
*frame
)
1469 /* frame->frame points at the SP for this frame; But we want the start
1470 of the frame, not the end. Calling frame chain will get his for us. */
1471 return ia64_frame_chain (frame
);
1475 ia64_frame_locals_address (struct frame_info
*frame
)
1477 /* frame->frame points at the SP for this frame; But we want the start
1478 of the frame, not the end. Calling frame chain will get his for us. */
1479 return ia64_frame_chain (frame
);
1483 ia64_init_extra_frame_info (int fromleaf
, struct frame_info
*frame
)
1486 int next_frame_is_call_dummy
= ((get_next_frame (frame
) != NULL
)
1487 && DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (get_next_frame (frame
)),
1488 get_frame_base (get_next_frame (frame
)),
1489 get_frame_base (get_next_frame (frame
))));
1491 frame_extra_info_zalloc (frame
, sizeof (struct frame_extra_info
));
1493 if (get_next_frame (frame
) == 0)
1495 bsp
= read_register (IA64_BSP_REGNUM
);
1496 cfm
= read_register (IA64_CFM_REGNUM
);
1499 else if ((get_frame_type (get_next_frame (frame
)) == SIGTRAMP_FRAME
))
1501 bsp
= read_sigcontext_register (get_next_frame (frame
), IA64_BSP_REGNUM
);
1502 cfm
= read_sigcontext_register (get_next_frame (frame
), IA64_CFM_REGNUM
);
1504 else if (next_frame_is_call_dummy
)
1506 bsp
= deprecated_read_register_dummy (get_frame_pc (get_next_frame (frame
)),
1507 get_frame_base (get_next_frame (frame
)),
1509 cfm
= deprecated_read_register_dummy (get_frame_pc (get_next_frame (frame
)),
1510 get_frame_base (get_next_frame (frame
)),
1515 struct frame_info
*frn
= get_next_frame (frame
);
1517 DEPRECATED_FRAME_INIT_SAVED_REGS (frn
);
1519 if (get_frame_saved_regs (frn
)[IA64_CFM_REGNUM
] != 0)
1520 cfm
= read_memory_integer (get_frame_saved_regs (frn
)[IA64_CFM_REGNUM
], 8);
1521 else if (get_next_frame (frn
) && (get_frame_type (get_next_frame (frn
)) == SIGTRAMP_FRAME
))
1522 cfm
= read_sigcontext_register (get_next_frame (frn
), IA64_PFS_REGNUM
);
1523 else if (get_next_frame (frn
)
1524 && DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (get_next_frame (frn
)),
1525 get_frame_base (get_next_frame (frn
)),
1526 get_frame_base (get_next_frame (frn
))))
1527 cfm
= deprecated_read_register_dummy (get_frame_pc (get_next_frame (frn
)),
1528 get_frame_base (get_next_frame (frn
)),
1531 cfm
= read_register (IA64_PFS_REGNUM
);
1533 bsp
= get_frame_extra_info (frn
)->bsp
;
1535 get_frame_extra_info (frame
)->cfm
= cfm
;
1536 get_frame_extra_info (frame
)->sof
= cfm
& 0x7f;
1537 get_frame_extra_info (frame
)->sol
= (cfm
>> 7) & 0x7f;
1538 if (get_next_frame (frame
) == 0
1539 || (get_frame_type (get_next_frame (frame
)) == SIGTRAMP_FRAME
)
1540 || next_frame_is_call_dummy
)
1541 get_frame_extra_info (frame
)->bsp
=
1542 rse_address_add (bsp
, -get_frame_extra_info (frame
)->sof
);
1544 get_frame_extra_info (frame
)->bsp
=
1545 rse_address_add (bsp
, -get_frame_extra_info (frame
)->sol
);
1547 get_frame_extra_info (frame
)->after_prologue
= 0;
1548 get_frame_extra_info (frame
)->mem_stack_frame_size
= -1; /* Not yet determined */
1549 get_frame_extra_info (frame
)->fp_reg
= 0;
1553 is_float_or_hfa_type_recurse (struct type
*t
, struct type
**etp
)
1555 switch (TYPE_CODE (t
))
1559 return TYPE_LENGTH (*etp
) == TYPE_LENGTH (t
);
1566 case TYPE_CODE_ARRAY
:
1568 is_float_or_hfa_type_recurse (check_typedef (TYPE_TARGET_TYPE (t
)),
1571 case TYPE_CODE_STRUCT
:
1575 for (i
= 0; i
< TYPE_NFIELDS (t
); i
++)
1576 if (!is_float_or_hfa_type_recurse
1577 (check_typedef (TYPE_FIELD_TYPE (t
, i
)), etp
))
1588 /* Determine if the given type is one of the floating point types or
1589 and HFA (which is a struct, array, or combination thereof whose
1590 bottom-most elements are all of the same floating point type.) */
1592 static struct type
*
1593 is_float_or_hfa_type (struct type
*t
)
1595 struct type
*et
= 0;
1597 return is_float_or_hfa_type_recurse (t
, &et
) ? et
: 0;
1601 /* Return 1 if the alignment of T is such that the next even slot
1602 should be used. Return 0, if the next available slot should
1603 be used. (See section 8.5.1 of the IA-64 Software Conventions
1604 and Runtime manual.) */
1607 slot_alignment_is_next_even (struct type
*t
)
1609 switch (TYPE_CODE (t
))
1613 if (TYPE_LENGTH (t
) > 8)
1617 case TYPE_CODE_ARRAY
:
1619 slot_alignment_is_next_even (check_typedef (TYPE_TARGET_TYPE (t
)));
1620 case TYPE_CODE_STRUCT
:
1624 for (i
= 0; i
< TYPE_NFIELDS (t
); i
++)
1625 if (slot_alignment_is_next_even
1626 (check_typedef (TYPE_FIELD_TYPE (t
, i
))))
1635 /* Attempt to find (and return) the global pointer for the given
1638 This is a rather nasty bit of code searchs for the .dynamic section
1639 in the objfile corresponding to the pc of the function we're trying
1640 to call. Once it finds the addresses at which the .dynamic section
1641 lives in the child process, it scans the Elf64_Dyn entries for a
1642 DT_PLTGOT tag. If it finds one of these, the corresponding
1643 d_un.d_ptr value is the global pointer. */
1646 generic_elf_find_global_pointer (CORE_ADDR faddr
)
1648 struct obj_section
*faddr_sect
;
1650 faddr_sect
= find_pc_section (faddr
);
1651 if (faddr_sect
!= NULL
)
1653 struct obj_section
*osect
;
1655 ALL_OBJFILE_OSECTIONS (faddr_sect
->objfile
, osect
)
1657 if (strcmp (osect
->the_bfd_section
->name
, ".dynamic") == 0)
1661 if (osect
< faddr_sect
->objfile
->sections_end
)
1666 while (addr
< osect
->endaddr
)
1672 status
= target_read_memory (addr
, buf
, sizeof (buf
));
1675 tag
= extract_signed_integer (buf
, sizeof (buf
));
1677 if (tag
== DT_PLTGOT
)
1679 CORE_ADDR global_pointer
;
1681 status
= target_read_memory (addr
+ 8, buf
, sizeof (buf
));
1684 global_pointer
= extract_address (buf
, sizeof (buf
));
1687 return global_pointer
;
1700 /* Given a function's address, attempt to find (and return) the
1701 corresponding (canonical) function descriptor. Return 0 if
1704 find_extant_func_descr (CORE_ADDR faddr
)
1706 struct obj_section
*faddr_sect
;
1708 /* Return early if faddr is already a function descriptor */
1709 faddr_sect
= find_pc_section (faddr
);
1710 if (faddr_sect
&& strcmp (faddr_sect
->the_bfd_section
->name
, ".opd") == 0)
1713 if (faddr_sect
!= NULL
)
1715 struct obj_section
*osect
;
1716 ALL_OBJFILE_OSECTIONS (faddr_sect
->objfile
, osect
)
1718 if (strcmp (osect
->the_bfd_section
->name
, ".opd") == 0)
1722 if (osect
< faddr_sect
->objfile
->sections_end
)
1727 while (addr
< osect
->endaddr
)
1733 status
= target_read_memory (addr
, buf
, sizeof (buf
));
1736 faddr2
= extract_signed_integer (buf
, sizeof (buf
));
1738 if (faddr
== faddr2
)
1748 /* Attempt to find a function descriptor corresponding to the
1749 given address. If none is found, construct one on the
1750 stack using the address at fdaptr */
1753 find_func_descr (CORE_ADDR faddr
, CORE_ADDR
*fdaptr
)
1757 fdesc
= find_extant_func_descr (faddr
);
1761 CORE_ADDR global_pointer
;
1767 global_pointer
= FIND_GLOBAL_POINTER (faddr
);
1769 if (global_pointer
== 0)
1770 global_pointer
= read_register (IA64_GR1_REGNUM
);
1772 store_address (buf
, 8, faddr
);
1773 store_address (buf
+ 8, 8, global_pointer
);
1775 write_memory (fdesc
, buf
, 16);
1782 ia64_push_arguments (int nargs
, struct value
**args
, CORE_ADDR sp
,
1783 int struct_return
, CORE_ADDR struct_addr
)
1789 int nslots
, rseslots
, memslots
, slotnum
, nfuncargs
;
1791 CORE_ADDR bsp
, cfm
, pfs
, new_bsp
, funcdescaddr
;
1795 /* Count the number of slots needed for the arguments */
1796 for (argno
= 0; argno
< nargs
; argno
++)
1799 type
= check_typedef (VALUE_TYPE (arg
));
1800 len
= TYPE_LENGTH (type
);
1802 if ((nslots
& 1) && slot_alignment_is_next_even (type
))
1805 if (TYPE_CODE (type
) == TYPE_CODE_FUNC
)
1808 nslots
+= (len
+ 7) / 8;
1811 /* Divvy up the slots between the RSE and the memory stack */
1812 rseslots
= (nslots
> 8) ? 8 : nslots
;
1813 memslots
= nslots
- rseslots
;
1815 /* Allocate a new RSE frame */
1816 cfm
= read_register (IA64_CFM_REGNUM
);
1818 bsp
= read_register (IA64_BSP_REGNUM
);
1819 bsp
= rse_address_add (bsp
, cfm
& 0x7f);
1820 new_bsp
= rse_address_add (bsp
, rseslots
);
1821 write_register (IA64_BSP_REGNUM
, new_bsp
);
1823 pfs
= read_register (IA64_PFS_REGNUM
);
1824 pfs
&= 0xc000000000000000LL
;
1825 pfs
|= (cfm
& 0xffffffffffffLL
);
1826 write_register (IA64_PFS_REGNUM
, pfs
);
1828 cfm
&= 0xc000000000000000LL
;
1830 write_register (IA64_CFM_REGNUM
, cfm
);
1832 /* We will attempt to find function descriptors in the .opd segment,
1833 but if we can't we'll construct them ourselves. That being the
1834 case, we'll need to reserve space on the stack for them. */
1835 funcdescaddr
= sp
- nfuncargs
* 16;
1836 funcdescaddr
&= ~0xfLL
;
1838 /* Adjust the stack pointer to it's new value. The calling conventions
1839 require us to have 16 bytes of scratch, plus whatever space is
1840 necessary for the memory slots and our function descriptors */
1841 sp
= sp
- 16 - (memslots
+ nfuncargs
) * 8;
1842 sp
&= ~0xfLL
; /* Maintain 16 byte alignment */
1844 /* Place the arguments where they belong. The arguments will be
1845 either placed in the RSE backing store or on the memory stack.
1846 In addition, floating point arguments or HFAs are placed in
1847 floating point registers. */
1849 floatreg
= IA64_FR8_REGNUM
;
1850 for (argno
= 0; argno
< nargs
; argno
++)
1852 struct type
*float_elt_type
;
1855 type
= check_typedef (VALUE_TYPE (arg
));
1856 len
= TYPE_LENGTH (type
);
1858 /* Special handling for function parameters */
1860 && TYPE_CODE (type
) == TYPE_CODE_PTR
1861 && TYPE_CODE (TYPE_TARGET_TYPE (type
)) == TYPE_CODE_FUNC
)
1865 store_address (val_buf
, 8,
1866 find_func_descr (extract_address (VALUE_CONTENTS (arg
), 8),
1868 if (slotnum
< rseslots
)
1869 write_memory (rse_address_add (bsp
, slotnum
), val_buf
, 8);
1871 write_memory (sp
+ 16 + 8 * (slotnum
- rseslots
), val_buf
, 8);
1878 /* Skip odd slot if necessary... */
1879 if ((slotnum
& 1) && slot_alignment_is_next_even (type
))
1887 memset (val_buf
, 0, 8);
1888 memcpy (val_buf
, VALUE_CONTENTS (arg
) + argoffset
, (len
> 8) ? 8 : len
);
1890 if (slotnum
< rseslots
)
1891 write_memory (rse_address_add (bsp
, slotnum
), val_buf
, 8);
1893 write_memory (sp
+ 16 + 8 * (slotnum
- rseslots
), val_buf
, 8);
1900 /* Handle floating point types (including HFAs) */
1901 float_elt_type
= is_float_or_hfa_type (type
);
1902 if (float_elt_type
!= NULL
)
1905 len
= TYPE_LENGTH (type
);
1906 while (len
> 0 && floatreg
< IA64_FR16_REGNUM
)
1908 ia64_register_convert_to_raw (
1911 VALUE_CONTENTS (arg
) + argoffset
,
1912 &deprecated_registers
[REGISTER_BYTE (floatreg
)]);
1914 argoffset
+= TYPE_LENGTH (float_elt_type
);
1915 len
-= TYPE_LENGTH (float_elt_type
);
1920 /* Store the struct return value in r8 if necessary. */
1923 store_address (&deprecated_registers
[REGISTER_BYTE (IA64_GR8_REGNUM
)],
1924 REGISTER_RAW_SIZE (IA64_GR8_REGNUM
),
1928 /* Sync gdb's idea of what the registers are with the target. */
1929 target_store_registers (-1);
1931 /* FIXME: This doesn't belong here! Instead, SAVE_DUMMY_FRAME_TOS needs
1932 to be defined to call generic_save_dummy_frame_tos(). But at the
1933 time of this writing, SAVE_DUMMY_FRAME_TOS wasn't gdbarch'd, so
1934 I chose to put this call here instead of using the old mechanisms.
1935 Once SAVE_DUMMY_FRAME_TOS is gdbarch'd, all we need to do is add the
1938 set_gdbarch_save_dummy_frame_tos (gdbarch, generic_save_dummy_frame_tos);
1940 to ia64_gdbarch_init() and remove the line below. */
1941 generic_save_dummy_frame_tos (sp
);
1947 ia64_push_return_address (CORE_ADDR pc
, CORE_ADDR sp
)
1949 CORE_ADDR global_pointer
= FIND_GLOBAL_POINTER (pc
);
1951 if (global_pointer
!= 0)
1952 write_register (IA64_GR1_REGNUM
, global_pointer
);
1954 write_register (IA64_BR0_REGNUM
, CALL_DUMMY_ADDRESS ());
1959 ia64_store_return_value (struct type
*type
, char *valbuf
)
1961 if (TYPE_CODE (type
) == TYPE_CODE_FLT
)
1963 ia64_register_convert_to_raw (type
, IA64_FR8_REGNUM
, valbuf
,
1964 &deprecated_registers
[REGISTER_BYTE (IA64_FR8_REGNUM
)]);
1965 target_store_registers (IA64_FR8_REGNUM
);
1968 deprecated_write_register_bytes (REGISTER_BYTE (IA64_GR8_REGNUM
),
1969 valbuf
, TYPE_LENGTH (type
));
1973 ia64_pop_frame (void)
1975 generic_pop_current_frame (ia64_pop_frame_regular
);
1979 ia64_pop_frame_regular (struct frame_info
*frame
)
1982 CORE_ADDR bsp
, cfm
, pfs
;
1984 DEPRECATED_FRAME_INIT_SAVED_REGS (frame
);
1986 for (regno
= 0; regno
< ia64_num_regs
; regno
++)
1988 if (get_frame_saved_regs (frame
)[regno
]
1989 && (!(IA64_GR32_REGNUM
<= regno
&& regno
<= IA64_GR127_REGNUM
))
1990 && regno
!= pc_regnum
1991 && regno
!= sp_regnum
1992 && regno
!= IA64_PFS_REGNUM
1993 && regno
!= IA64_CFM_REGNUM
1994 && regno
!= IA64_BSP_REGNUM
1995 && regno
!= IA64_BSPSTORE_REGNUM
)
1997 write_register (regno
,
1998 read_memory_integer (get_frame_saved_regs (frame
)[regno
],
1999 REGISTER_RAW_SIZE (regno
)));
2003 write_register (sp_regnum
, DEPRECATED_FRAME_CHAIN (frame
));
2004 write_pc (DEPRECATED_FRAME_SAVED_PC (frame
));
2006 cfm
= read_register (IA64_CFM_REGNUM
);
2008 if (get_frame_saved_regs (frame
)[IA64_PFS_REGNUM
])
2010 pfs
= read_memory_integer (get_frame_saved_regs (frame
)[IA64_PFS_REGNUM
],
2011 REGISTER_RAW_SIZE (IA64_PFS_REGNUM
));
2014 pfs
= read_register (IA64_PFS_REGNUM
);
2016 /* Compute the new bsp by *adding* the difference between the
2017 size of the frame and the size of the locals (both wrt the
2018 frame that we're going back to). This seems kind of strange,
2019 especially since it seems like we ought to be subtracting the
2020 size of the locals... and we should; but the Linux kernel
2021 wants bsp to be set at the end of all used registers. It's
2022 likely that this code will need to be revised to accomodate
2023 other operating systems. */
2024 bsp
= rse_address_add (get_frame_extra_info (frame
)->bsp
,
2025 (pfs
& 0x7f) - ((pfs
>> 7) & 0x7f));
2026 write_register (IA64_BSP_REGNUM
, bsp
);
2028 /* FIXME: What becomes of the epilog count in the PFS? */
2029 cfm
= (cfm
& ~0xffffffffffffLL
) | (pfs
& 0xffffffffffffLL
);
2030 write_register (IA64_CFM_REGNUM
, cfm
);
2032 flush_cached_frames ();
2036 ia64_remote_translate_xfer_address (CORE_ADDR memaddr
, int nr_bytes
,
2037 CORE_ADDR
*targ_addr
, int *targ_len
)
2039 *targ_addr
= memaddr
;
2040 *targ_len
= nr_bytes
;
2044 process_note_abi_tag_sections (bfd
*abfd
, asection
*sect
, void *obj
)
2046 int *os_ident_ptr
= obj
;
2048 unsigned int sectsize
;
2050 name
= bfd_get_section_name (abfd
, sect
);
2051 sectsize
= bfd_section_size (abfd
, sect
);
2052 if (strcmp (name
, ".note.ABI-tag") == 0 && sectsize
> 0)
2054 unsigned int name_length
, data_length
, note_type
;
2055 char *note
= alloca (sectsize
);
2057 bfd_get_section_contents (abfd
, sect
, note
,
2058 (file_ptr
) 0, (bfd_size_type
) sectsize
);
2060 name_length
= bfd_h_get_32 (abfd
, note
);
2061 data_length
= bfd_h_get_32 (abfd
, note
+ 4);
2062 note_type
= bfd_h_get_32 (abfd
, note
+ 8);
2064 if (name_length
== 4 && data_length
== 16 && note_type
== 1
2065 && strcmp (note
+ 12, "GNU") == 0)
2067 int os_number
= bfd_h_get_32 (abfd
, note
+ 16);
2069 /* The case numbers are from abi-tags in glibc */
2073 *os_ident_ptr
= ELFOSABI_LINUX
;
2076 *os_ident_ptr
= ELFOSABI_HURD
;
2079 *os_ident_ptr
= ELFOSABI_SOLARIS
;
2082 internal_error (__FILE__
, __LINE__
,
2083 "process_note_abi_sections: unknown OS number %d", os_number
);
2090 static struct gdbarch
*
2091 ia64_gdbarch_init (struct gdbarch_info info
, struct gdbarch_list
*arches
)
2093 struct gdbarch
*gdbarch
;
2094 struct gdbarch_tdep
*tdep
;
2097 if (info
.abfd
!= NULL
2098 && bfd_get_flavour (info
.abfd
) == bfd_target_elf_flavour
)
2100 os_ident
= elf_elfheader (info
.abfd
)->e_ident
[EI_OSABI
];
2102 /* If os_ident is 0, it is not necessarily the case that we're
2103 on a SYSV system. (ELFOSABI_NONE is defined to be 0.)
2104 GNU/Linux uses a note section to record OS/ABI info, but
2105 leaves e_ident[EI_OSABI] zero. So we have to check for note
2109 bfd_map_over_sections (info
.abfd
,
2110 process_note_abi_tag_sections
,
2117 for (arches
= gdbarch_list_lookup_by_info (arches
, &info
);
2119 arches
= gdbarch_list_lookup_by_info (arches
->next
, &info
))
2121 tdep
= gdbarch_tdep (arches
->gdbarch
);
2122 if (tdep
&&tdep
->os_ident
== os_ident
)
2123 return arches
->gdbarch
;
2126 tdep
= xmalloc (sizeof (struct gdbarch_tdep
));
2127 gdbarch
= gdbarch_alloc (&info
, tdep
);
2128 tdep
->os_ident
= os_ident
;
2130 /* NOTE: cagney/2002-12-06: This can be deleted when this arch is
2131 ready to unwind the PC first (see frame.c:get_prev_frame()). */
2132 set_gdbarch_deprecated_init_frame_pc (gdbarch
, init_frame_pc_default
);
2134 /* Set the method of obtaining the sigcontext addresses at which
2135 registers are saved. The method of checking to see if
2136 native_find_global_pointer is nonzero to indicate that we're
2137 on AIX is kind of hokey, but I can't think of a better way
2139 if (os_ident
== ELFOSABI_LINUX
)
2140 tdep
->sigcontext_register_address
= ia64_linux_sigcontext_register_address
;
2141 else if (native_find_global_pointer
!= 0)
2142 tdep
->sigcontext_register_address
= ia64_aix_sigcontext_register_address
;
2144 tdep
->sigcontext_register_address
= 0;
2146 /* We know that GNU/Linux won't have to resort to the
2147 native_find_global_pointer hackery. But that's the only one we
2148 know about so far, so if native_find_global_pointer is set to
2149 something non-zero, then use it. Otherwise fall back to using
2150 generic_elf_find_global_pointer. This arrangement should (in
2151 theory) allow us to cross debug GNU/Linux binaries from an AIX
2153 if (os_ident
== ELFOSABI_LINUX
)
2154 tdep
->find_global_pointer
= generic_elf_find_global_pointer
;
2155 else if (native_find_global_pointer
!= 0)
2156 tdep
->find_global_pointer
= native_find_global_pointer
;
2158 tdep
->find_global_pointer
= generic_elf_find_global_pointer
;
2160 set_gdbarch_short_bit (gdbarch
, 16);
2161 set_gdbarch_int_bit (gdbarch
, 32);
2162 set_gdbarch_long_bit (gdbarch
, 64);
2163 set_gdbarch_long_long_bit (gdbarch
, 64);
2164 set_gdbarch_float_bit (gdbarch
, 32);
2165 set_gdbarch_double_bit (gdbarch
, 64);
2166 set_gdbarch_long_double_bit (gdbarch
, 64);
2167 set_gdbarch_ptr_bit (gdbarch
, 64);
2169 set_gdbarch_num_regs (gdbarch
, ia64_num_regs
);
2170 set_gdbarch_sp_regnum (gdbarch
, sp_regnum
);
2171 set_gdbarch_fp_regnum (gdbarch
, fp_regnum
);
2172 set_gdbarch_pc_regnum (gdbarch
, pc_regnum
);
2173 set_gdbarch_fp0_regnum (gdbarch
, IA64_FR0_REGNUM
);
2175 set_gdbarch_register_name (gdbarch
, ia64_register_name
);
2176 set_gdbarch_register_size (gdbarch
, 8);
2177 set_gdbarch_register_bytes (gdbarch
, ia64_num_regs
* 8 + 128*8);
2178 set_gdbarch_register_byte (gdbarch
, ia64_register_byte
);
2179 set_gdbarch_register_raw_size (gdbarch
, ia64_register_raw_size
);
2180 set_gdbarch_deprecated_max_register_raw_size (gdbarch
, 16);
2181 set_gdbarch_register_virtual_size (gdbarch
, ia64_register_virtual_size
);
2182 set_gdbarch_deprecated_max_register_virtual_size (gdbarch
, 16);
2183 set_gdbarch_register_virtual_type (gdbarch
, ia64_register_virtual_type
);
2185 set_gdbarch_skip_prologue (gdbarch
, ia64_skip_prologue
);
2187 set_gdbarch_frame_num_args (gdbarch
, frame_num_args_unknown
);
2188 set_gdbarch_frameless_function_invocation (gdbarch
, ia64_frameless_function_invocation
);
2190 set_gdbarch_saved_pc_after_call (gdbarch
, ia64_saved_pc_after_call
);
2192 set_gdbarch_deprecated_frame_chain (gdbarch
, ia64_frame_chain
);
2193 set_gdbarch_deprecated_frame_saved_pc (gdbarch
, ia64_frame_saved_pc
);
2195 set_gdbarch_deprecated_frame_init_saved_regs (gdbarch
, ia64_frame_init_saved_regs
);
2196 set_gdbarch_deprecated_get_saved_register (gdbarch
, ia64_get_saved_register
);
2198 set_gdbarch_register_convertible (gdbarch
, ia64_register_convertible
);
2199 set_gdbarch_register_convert_to_virtual (gdbarch
, ia64_register_convert_to_virtual
);
2200 set_gdbarch_register_convert_to_raw (gdbarch
, ia64_register_convert_to_raw
);
2202 set_gdbarch_use_struct_convention (gdbarch
, ia64_use_struct_convention
);
2203 set_gdbarch_deprecated_extract_return_value (gdbarch
, ia64_extract_return_value
);
2205 set_gdbarch_deprecated_store_struct_return (gdbarch
, ia64_store_struct_return
);
2206 set_gdbarch_deprecated_store_return_value (gdbarch
, ia64_store_return_value
);
2207 set_gdbarch_deprecated_extract_struct_value_address (gdbarch
, ia64_extract_struct_value_address
);
2209 set_gdbarch_memory_insert_breakpoint (gdbarch
, ia64_memory_insert_breakpoint
);
2210 set_gdbarch_memory_remove_breakpoint (gdbarch
, ia64_memory_remove_breakpoint
);
2211 set_gdbarch_breakpoint_from_pc (gdbarch
, ia64_breakpoint_from_pc
);
2212 set_gdbarch_read_pc (gdbarch
, ia64_read_pc
);
2213 set_gdbarch_write_pc (gdbarch
, ia64_write_pc
);
2215 /* Settings for calling functions in the inferior. */
2216 set_gdbarch_deprecated_push_arguments (gdbarch
, ia64_push_arguments
);
2217 set_gdbarch_deprecated_push_return_address (gdbarch
, ia64_push_return_address
);
2218 set_gdbarch_deprecated_pop_frame (gdbarch
, ia64_pop_frame
);
2220 set_gdbarch_call_dummy_words (gdbarch
, ia64_call_dummy_words
);
2221 set_gdbarch_sizeof_call_dummy_words (gdbarch
, sizeof (ia64_call_dummy_words
));
2222 set_gdbarch_deprecated_init_extra_frame_info (gdbarch
, ia64_init_extra_frame_info
);
2223 set_gdbarch_frame_args_address (gdbarch
, ia64_frame_args_address
);
2224 set_gdbarch_frame_locals_address (gdbarch
, ia64_frame_locals_address
);
2226 /* We won't necessarily have a frame pointer and even if we do,
2227 it winds up being extraordinarly messy when attempting to find
2228 the frame chain. So for the purposes of creating frames (which
2229 is all read_fp() is used for), simply use the stack pointer value
2231 set_gdbarch_read_fp (gdbarch
, generic_target_read_sp
);
2233 /* Settings that should be unnecessary. */
2234 set_gdbarch_inner_than (gdbarch
, core_addr_lessthan
);
2236 set_gdbarch_read_sp (gdbarch
, generic_target_read_sp
);
2237 set_gdbarch_deprecated_dummy_write_sp (gdbarch
, generic_target_write_sp
);
2239 set_gdbarch_decr_pc_after_break (gdbarch
, 0);
2240 set_gdbarch_function_start_offset (gdbarch
, 0);
2241 set_gdbarch_frame_args_skip (gdbarch
, 0);
2243 set_gdbarch_remote_translate_xfer_address (
2244 gdbarch
, ia64_remote_translate_xfer_address
);
2250 _initialize_ia64_tdep (void)
2252 register_gdbarch_init (bfd_arch_ia64
, ia64_gdbarch_init
);
2254 tm_print_insn
= print_insn_ia64
;
2255 tm_print_insn_info
.bytes_per_line
= SLOT_MULTIPLIER
;