2e8efdef4bd8e51e39aaa850384909e1a09d1225
[deliverable/binutils-gdb.git] / gdb / ia64-tdep.c
1 /* Target-dependent code for the IA-64 for GDB, the GNU debugger.
2
3 Copyright 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
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.
11
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.
16
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. */
21
22 #include "defs.h"
23 #include "inferior.h"
24 #include "symfile.h" /* for entry_point_address */
25 #include "gdbcore.h"
26 #include "arch-utils.h"
27 #include "floatformat.h"
28 #include "regcache.h"
29 #include "doublest.h"
30 #include "value.h"
31
32 #include "objfiles.h"
33 #include "elf/common.h" /* for DT_PLTGOT value */
34 #include "elf-bfd.h"
35
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.
40
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. */
44
45 CORE_ADDR (*native_find_global_pointer) (CORE_ADDR) = 0;
46
47 /* An enumeration of the different IA-64 instruction types. */
48
49 typedef enum instruction_type
50 {
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 */
59 } instruction_type;
60
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.
68
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. */
75
76 #define SLOT_MULTIPLIER 1
77
78 /* Length in bytes of an instruction bundle */
79
80 #define BUNDLE_LEN 16
81
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);
85
86 static gdbarch_init_ftype ia64_gdbarch_init;
87
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_store_struct_return_ftype ia64_store_struct_return;
100 static gdbarch_push_arguments_ftype ia64_push_arguments;
101 static gdbarch_push_return_address_ftype ia64_push_return_address;
102 static gdbarch_saved_pc_after_call_ftype ia64_saved_pc_after_call;
103 static void ia64_pop_frame_regular (struct frame_info *frame);
104 static struct type *is_float_or_hfa_type (struct type *t);
105
106 static int ia64_num_regs = 590;
107
108 static int pc_regnum = IA64_IP_REGNUM;
109 static int sp_regnum = IA64_GR12_REGNUM;
110 static int fp_regnum = IA64_VFP_REGNUM;
111 static int lr_regnum = IA64_VRAP_REGNUM;
112
113 static LONGEST ia64_call_dummy_words[] = {0};
114
115 /* Array of register names; There should be ia64_num_regs strings in
116 the initializer. */
117
118 static char *ia64_register_names[] =
119 { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
120 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
121 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
122 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
123 "r32", "r33", "r34", "r35", "r36", "r37", "r38", "r39",
124 "r40", "r41", "r42", "r43", "r44", "r45", "r46", "r47",
125 "r48", "r49", "r50", "r51", "r52", "r53", "r54", "r55",
126 "r56", "r57", "r58", "r59", "r60", "r61", "r62", "r63",
127 "r64", "r65", "r66", "r67", "r68", "r69", "r70", "r71",
128 "r72", "r73", "r74", "r75", "r76", "r77", "r78", "r79",
129 "r80", "r81", "r82", "r83", "r84", "r85", "r86", "r87",
130 "r88", "r89", "r90", "r91", "r92", "r93", "r94", "r95",
131 "r96", "r97", "r98", "r99", "r100", "r101", "r102", "r103",
132 "r104", "r105", "r106", "r107", "r108", "r109", "r110", "r111",
133 "r112", "r113", "r114", "r115", "r116", "r117", "r118", "r119",
134 "r120", "r121", "r122", "r123", "r124", "r125", "r126", "r127",
135
136 "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7",
137 "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15",
138 "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23",
139 "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31",
140 "f32", "f33", "f34", "f35", "f36", "f37", "f38", "f39",
141 "f40", "f41", "f42", "f43", "f44", "f45", "f46", "f47",
142 "f48", "f49", "f50", "f51", "f52", "f53", "f54", "f55",
143 "f56", "f57", "f58", "f59", "f60", "f61", "f62", "f63",
144 "f64", "f65", "f66", "f67", "f68", "f69", "f70", "f71",
145 "f72", "f73", "f74", "f75", "f76", "f77", "f78", "f79",
146 "f80", "f81", "f82", "f83", "f84", "f85", "f86", "f87",
147 "f88", "f89", "f90", "f91", "f92", "f93", "f94", "f95",
148 "f96", "f97", "f98", "f99", "f100", "f101", "f102", "f103",
149 "f104", "f105", "f106", "f107", "f108", "f109", "f110", "f111",
150 "f112", "f113", "f114", "f115", "f116", "f117", "f118", "f119",
151 "f120", "f121", "f122", "f123", "f124", "f125", "f126", "f127",
152
153 "p0", "p1", "p2", "p3", "p4", "p5", "p6", "p7",
154 "p8", "p9", "p10", "p11", "p12", "p13", "p14", "p15",
155 "p16", "p17", "p18", "p19", "p20", "p21", "p22", "p23",
156 "p24", "p25", "p26", "p27", "p28", "p29", "p30", "p31",
157 "p32", "p33", "p34", "p35", "p36", "p37", "p38", "p39",
158 "p40", "p41", "p42", "p43", "p44", "p45", "p46", "p47",
159 "p48", "p49", "p50", "p51", "p52", "p53", "p54", "p55",
160 "p56", "p57", "p58", "p59", "p60", "p61", "p62", "p63",
161
162 "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7",
163
164 "vfp", "vrap",
165
166 "pr", "ip", "psr", "cfm",
167
168 "kr0", "kr1", "kr2", "kr3", "kr4", "kr5", "kr6", "kr7",
169 "", "", "", "", "", "", "", "",
170 "rsc", "bsp", "bspstore", "rnat",
171 "", "fcr", "", "",
172 "eflag", "csd", "ssd", "cflg", "fsr", "fir", "fdr", "",
173 "ccv", "", "", "", "unat", "", "", "",
174 "fpsr", "", "", "", "itc",
175 "", "", "", "", "", "", "", "", "", "",
176 "", "", "", "", "", "", "", "", "",
177 "pfs", "lc", "ec",
178 "", "", "", "", "", "", "", "", "", "",
179 "", "", "", "", "", "", "", "", "", "",
180 "", "", "", "", "", "", "", "", "", "",
181 "", "", "", "", "", "", "", "", "", "",
182 "", "", "", "", "", "", "", "", "", "",
183 "", "", "", "", "", "", "", "", "", "",
184 "",
185 "nat0", "nat1", "nat2", "nat3", "nat4", "nat5", "nat6", "nat7",
186 "nat8", "nat9", "nat10", "nat11", "nat12", "nat13", "nat14", "nat15",
187 "nat16", "nat17", "nat18", "nat19", "nat20", "nat21", "nat22", "nat23",
188 "nat24", "nat25", "nat26", "nat27", "nat28", "nat29", "nat30", "nat31",
189 "nat32", "nat33", "nat34", "nat35", "nat36", "nat37", "nat38", "nat39",
190 "nat40", "nat41", "nat42", "nat43", "nat44", "nat45", "nat46", "nat47",
191 "nat48", "nat49", "nat50", "nat51", "nat52", "nat53", "nat54", "nat55",
192 "nat56", "nat57", "nat58", "nat59", "nat60", "nat61", "nat62", "nat63",
193 "nat64", "nat65", "nat66", "nat67", "nat68", "nat69", "nat70", "nat71",
194 "nat72", "nat73", "nat74", "nat75", "nat76", "nat77", "nat78", "nat79",
195 "nat80", "nat81", "nat82", "nat83", "nat84", "nat85", "nat86", "nat87",
196 "nat88", "nat89", "nat90", "nat91", "nat92", "nat93", "nat94", "nat95",
197 "nat96", "nat97", "nat98", "nat99", "nat100","nat101","nat102","nat103",
198 "nat104","nat105","nat106","nat107","nat108","nat109","nat110","nat111",
199 "nat112","nat113","nat114","nat115","nat116","nat117","nat118","nat119",
200 "nat120","nat121","nat122","nat123","nat124","nat125","nat126","nat127",
201 };
202
203 struct frame_extra_info
204 {
205 CORE_ADDR bsp; /* points at r32 for the current frame */
206 CORE_ADDR cfm; /* cfm value for current frame */
207 int sof; /* Size of frame (decoded from cfm value) */
208 int sol; /* Size of locals (decoded from cfm value) */
209 CORE_ADDR after_prologue;
210 /* Address of first instruction after the last
211 prologue instruction; Note that there may
212 be instructions from the function's body
213 intermingled with the prologue. */
214 int mem_stack_frame_size;
215 /* Size of the memory stack frame (may be zero),
216 or -1 if it has not been determined yet. */
217 int fp_reg; /* Register number (if any) used a frame pointer
218 for this frame. 0 if no register is being used
219 as the frame pointer. */
220 };
221
222 struct gdbarch_tdep
223 {
224 int os_ident; /* From the ELF header, one of the ELFOSABI_
225 constants: ELFOSABI_LINUX, ELFOSABI_AIX,
226 etc. */
227 CORE_ADDR (*sigcontext_register_address) (CORE_ADDR, int);
228 /* OS specific function which, given a frame address
229 and register number, returns the offset to the
230 given register from the start of the frame. */
231 CORE_ADDR (*find_global_pointer) (CORE_ADDR);
232 };
233
234 #define SIGCONTEXT_REGISTER_ADDRESS \
235 (gdbarch_tdep (current_gdbarch)->sigcontext_register_address)
236 #define FIND_GLOBAL_POINTER \
237 (gdbarch_tdep (current_gdbarch)->find_global_pointer)
238
239 static const char *
240 ia64_register_name (int reg)
241 {
242 return ia64_register_names[reg];
243 }
244
245 int
246 ia64_register_raw_size (int reg)
247 {
248 return (IA64_FR0_REGNUM <= reg && reg <= IA64_FR127_REGNUM) ? 16 : 8;
249 }
250
251 int
252 ia64_register_virtual_size (int reg)
253 {
254 return (IA64_FR0_REGNUM <= reg && reg <= IA64_FR127_REGNUM) ? 16 : 8;
255 }
256
257 /* Return true iff register N's virtual format is different from
258 its raw format. */
259 int
260 ia64_register_convertible (int nr)
261 {
262 return (IA64_FR0_REGNUM <= nr && nr <= IA64_FR127_REGNUM);
263 }
264
265 const struct floatformat floatformat_ia64_ext =
266 {
267 floatformat_little, 82, 0, 1, 17, 65535, 0x1ffff, 18, 64,
268 floatformat_intbit_yes
269 };
270
271 void
272 ia64_register_convert_to_virtual (int regnum, struct type *type,
273 char *from, char *to)
274 {
275 if (regnum >= IA64_FR0_REGNUM && regnum <= IA64_FR127_REGNUM)
276 {
277 DOUBLEST val;
278 floatformat_to_doublest (&floatformat_ia64_ext, from, &val);
279 store_floating(to, TYPE_LENGTH(type), val);
280 }
281 else
282 error("ia64_register_convert_to_virtual called with non floating point register number");
283 }
284
285 void
286 ia64_register_convert_to_raw (struct type *type, int regnum,
287 char *from, char *to)
288 {
289 if (regnum >= IA64_FR0_REGNUM && regnum <= IA64_FR127_REGNUM)
290 {
291 DOUBLEST val = extract_floating (from, TYPE_LENGTH(type));
292 floatformat_from_doublest (&floatformat_ia64_ext, &val, to);
293 }
294 else
295 error("ia64_register_convert_to_raw called with non floating point register number");
296 }
297
298 struct type *
299 ia64_register_virtual_type (int reg)
300 {
301 if (reg >= IA64_FR0_REGNUM && reg <= IA64_FR127_REGNUM)
302 return builtin_type_long_double;
303 else
304 return builtin_type_long;
305 }
306
307 int
308 ia64_register_byte (int reg)
309 {
310 return (8 * reg) +
311 (reg <= IA64_FR0_REGNUM ? 0 : 8 * ((reg > IA64_FR127_REGNUM) ? 128 : reg - IA64_FR0_REGNUM));
312 }
313
314 /* Read the given register from a sigcontext structure in the
315 specified frame. */
316
317 static CORE_ADDR
318 read_sigcontext_register (struct frame_info *frame, int regnum)
319 {
320 CORE_ADDR regaddr;
321
322 if (frame == NULL)
323 internal_error (__FILE__, __LINE__,
324 "read_sigcontext_register: NULL frame");
325 if (!(get_frame_type (frame) == SIGTRAMP_FRAME))
326 internal_error (__FILE__, __LINE__,
327 "read_sigcontext_register: frame not a signal trampoline");
328 if (SIGCONTEXT_REGISTER_ADDRESS == 0)
329 internal_error (__FILE__, __LINE__,
330 "read_sigcontext_register: SIGCONTEXT_REGISTER_ADDRESS is 0");
331
332 regaddr = SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame), regnum);
333 if (regaddr)
334 return read_memory_integer (regaddr, REGISTER_RAW_SIZE (regnum));
335 else
336 internal_error (__FILE__, __LINE__,
337 "read_sigcontext_register: Register %d not in struct sigcontext", regnum);
338 }
339
340 /* Extract ``len'' bits from an instruction bundle starting at
341 bit ``from''. */
342
343 static long long
344 extract_bit_field (char *bundle, int from, int len)
345 {
346 long long result = 0LL;
347 int to = from + len;
348 int from_byte = from / 8;
349 int to_byte = to / 8;
350 unsigned char *b = (unsigned char *) bundle;
351 unsigned char c;
352 int lshift;
353 int i;
354
355 c = b[from_byte];
356 if (from_byte == to_byte)
357 c = ((unsigned char) (c << (8 - to % 8))) >> (8 - to % 8);
358 result = c >> (from % 8);
359 lshift = 8 - (from % 8);
360
361 for (i = from_byte+1; i < to_byte; i++)
362 {
363 result |= ((long long) b[i]) << lshift;
364 lshift += 8;
365 }
366
367 if (from_byte < to_byte && (to % 8 != 0))
368 {
369 c = b[to_byte];
370 c = ((unsigned char) (c << (8 - to % 8))) >> (8 - to % 8);
371 result |= ((long long) c) << lshift;
372 }
373
374 return result;
375 }
376
377 /* Replace the specified bits in an instruction bundle */
378
379 static void
380 replace_bit_field (char *bundle, long long val, int from, int len)
381 {
382 int to = from + len;
383 int from_byte = from / 8;
384 int to_byte = to / 8;
385 unsigned char *b = (unsigned char *) bundle;
386 unsigned char c;
387
388 if (from_byte == to_byte)
389 {
390 unsigned char left, right;
391 c = b[from_byte];
392 left = (c >> (to % 8)) << (to % 8);
393 right = ((unsigned char) (c << (8 - from % 8))) >> (8 - from % 8);
394 c = (unsigned char) (val & 0xff);
395 c = (unsigned char) (c << (from % 8 + 8 - to % 8)) >> (8 - to % 8);
396 c |= right | left;
397 b[from_byte] = c;
398 }
399 else
400 {
401 int i;
402 c = b[from_byte];
403 c = ((unsigned char) (c << (8 - from % 8))) >> (8 - from % 8);
404 c = c | (val << (from % 8));
405 b[from_byte] = c;
406 val >>= 8 - from % 8;
407
408 for (i = from_byte+1; i < to_byte; i++)
409 {
410 c = val & 0xff;
411 val >>= 8;
412 b[i] = c;
413 }
414
415 if (to % 8 != 0)
416 {
417 unsigned char cv = (unsigned char) val;
418 c = b[to_byte];
419 c = c >> (to % 8) << (to % 8);
420 c |= ((unsigned char) (cv << (8 - to % 8))) >> (8 - to % 8);
421 b[to_byte] = c;
422 }
423 }
424 }
425
426 /* Return the contents of slot N (for N = 0, 1, or 2) in
427 and instruction bundle */
428
429 static long long
430 slotN_contents (char *bundle, int slotnum)
431 {
432 return extract_bit_field (bundle, 5+41*slotnum, 41);
433 }
434
435 /* Store an instruction in an instruction bundle */
436
437 static void
438 replace_slotN_contents (char *bundle, long long instr, int slotnum)
439 {
440 replace_bit_field (bundle, instr, 5+41*slotnum, 41);
441 }
442
443 static enum instruction_type template_encoding_table[32][3] =
444 {
445 { M, I, I }, /* 00 */
446 { M, I, I }, /* 01 */
447 { M, I, I }, /* 02 */
448 { M, I, I }, /* 03 */
449 { M, L, X }, /* 04 */
450 { M, L, X }, /* 05 */
451 { undefined, undefined, undefined }, /* 06 */
452 { undefined, undefined, undefined }, /* 07 */
453 { M, M, I }, /* 08 */
454 { M, M, I }, /* 09 */
455 { M, M, I }, /* 0A */
456 { M, M, I }, /* 0B */
457 { M, F, I }, /* 0C */
458 { M, F, I }, /* 0D */
459 { M, M, F }, /* 0E */
460 { M, M, F }, /* 0F */
461 { M, I, B }, /* 10 */
462 { M, I, B }, /* 11 */
463 { M, B, B }, /* 12 */
464 { M, B, B }, /* 13 */
465 { undefined, undefined, undefined }, /* 14 */
466 { undefined, undefined, undefined }, /* 15 */
467 { B, B, B }, /* 16 */
468 { B, B, B }, /* 17 */
469 { M, M, B }, /* 18 */
470 { M, M, B }, /* 19 */
471 { undefined, undefined, undefined }, /* 1A */
472 { undefined, undefined, undefined }, /* 1B */
473 { M, F, B }, /* 1C */
474 { M, F, B }, /* 1D */
475 { undefined, undefined, undefined }, /* 1E */
476 { undefined, undefined, undefined }, /* 1F */
477 };
478
479 /* Fetch and (partially) decode an instruction at ADDR and return the
480 address of the next instruction to fetch. */
481
482 static CORE_ADDR
483 fetch_instruction (CORE_ADDR addr, instruction_type *it, long long *instr)
484 {
485 char bundle[BUNDLE_LEN];
486 int slotnum = (int) (addr & 0x0f) / SLOT_MULTIPLIER;
487 long long template;
488 int val;
489
490 /* Warn about slot numbers greater than 2. We used to generate
491 an error here on the assumption that the user entered an invalid
492 address. But, sometimes GDB itself requests an invalid address.
493 This can (easily) happen when execution stops in a function for
494 which there are no symbols. The prologue scanner will attempt to
495 find the beginning of the function - if the nearest symbol
496 happens to not be aligned on a bundle boundary (16 bytes), the
497 resulting starting address will cause GDB to think that the slot
498 number is too large.
499
500 So we warn about it and set the slot number to zero. It is
501 not necessarily a fatal condition, particularly if debugging
502 at the assembly language level. */
503 if (slotnum > 2)
504 {
505 warning ("Can't fetch instructions for slot numbers greater than 2.\n"
506 "Using slot 0 instead");
507 slotnum = 0;
508 }
509
510 addr &= ~0x0f;
511
512 val = target_read_memory (addr, bundle, BUNDLE_LEN);
513
514 if (val != 0)
515 return 0;
516
517 *instr = slotN_contents (bundle, slotnum);
518 template = extract_bit_field (bundle, 0, 5);
519 *it = template_encoding_table[(int)template][slotnum];
520
521 if (slotnum == 2 || (slotnum == 1 && *it == L))
522 addr += 16;
523 else
524 addr += (slotnum + 1) * SLOT_MULTIPLIER;
525
526 return addr;
527 }
528
529 /* There are 5 different break instructions (break.i, break.b,
530 break.m, break.f, and break.x), but they all have the same
531 encoding. (The five bit template in the low five bits of the
532 instruction bundle distinguishes one from another.)
533
534 The runtime architecture manual specifies that break instructions
535 used for debugging purposes must have the upper two bits of the 21
536 bit immediate set to a 0 and a 1 respectively. A breakpoint
537 instruction encodes the most significant bit of its 21 bit
538 immediate at bit 36 of the 41 bit instruction. The penultimate msb
539 is at bit 25 which leads to the pattern below.
540
541 Originally, I had this set up to do, e.g, a "break.i 0x80000" But
542 it turns out that 0x80000 was used as the syscall break in the early
543 simulators. So I changed the pattern slightly to do "break.i 0x080001"
544 instead. But that didn't work either (I later found out that this
545 pattern was used by the simulator that I was using.) So I ended up
546 using the pattern seen below. */
547
548 #if 0
549 #define BREAKPOINT 0x00002000040LL
550 #endif
551 #define BREAKPOINT 0x00003333300LL
552
553 static int
554 ia64_memory_insert_breakpoint (CORE_ADDR addr, char *contents_cache)
555 {
556 char bundle[BUNDLE_LEN];
557 int slotnum = (int) (addr & 0x0f) / SLOT_MULTIPLIER;
558 long long instr;
559 int val;
560 int template;
561
562 if (slotnum > 2)
563 error("Can't insert breakpoint for slot numbers greater than 2.");
564
565 addr &= ~0x0f;
566
567 val = target_read_memory (addr, bundle, BUNDLE_LEN);
568
569 /* Check for L type instruction in 2nd slot, if present then
570 bump up the slot number to the 3rd slot */
571 template = extract_bit_field (bundle, 0, 5);
572 if (slotnum == 1 && template_encoding_table[template][1] == L)
573 {
574 slotnum = 2;
575 }
576
577 instr = slotN_contents (bundle, slotnum);
578 memcpy(contents_cache, &instr, sizeof(instr));
579 replace_slotN_contents (bundle, BREAKPOINT, slotnum);
580 if (val == 0)
581 target_write_memory (addr, bundle, BUNDLE_LEN);
582
583 return val;
584 }
585
586 static int
587 ia64_memory_remove_breakpoint (CORE_ADDR addr, char *contents_cache)
588 {
589 char bundle[BUNDLE_LEN];
590 int slotnum = (addr & 0x0f) / SLOT_MULTIPLIER;
591 long long instr;
592 int val;
593 int template;
594
595 addr &= ~0x0f;
596
597 val = target_read_memory (addr, bundle, BUNDLE_LEN);
598
599 /* Check for L type instruction in 2nd slot, if present then
600 bump up the slot number to the 3rd slot */
601 template = extract_bit_field (bundle, 0, 5);
602 if (slotnum == 1 && template_encoding_table[template][1] == L)
603 {
604 slotnum = 2;
605 }
606
607 memcpy (&instr, contents_cache, sizeof instr);
608 replace_slotN_contents (bundle, instr, slotnum);
609 if (val == 0)
610 target_write_memory (addr, bundle, BUNDLE_LEN);
611
612 return val;
613 }
614
615 /* We don't really want to use this, but remote.c needs to call it in order
616 to figure out if Z-packets are supported or not. Oh, well. */
617 const unsigned char *
618 ia64_breakpoint_from_pc (CORE_ADDR *pcptr, int *lenptr)
619 {
620 static unsigned char breakpoint[] =
621 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
622 *lenptr = sizeof (breakpoint);
623 #if 0
624 *pcptr &= ~0x0f;
625 #endif
626 return breakpoint;
627 }
628
629 CORE_ADDR
630 ia64_read_pc (ptid_t ptid)
631 {
632 CORE_ADDR psr_value = read_register_pid (IA64_PSR_REGNUM, ptid);
633 CORE_ADDR pc_value = read_register_pid (IA64_IP_REGNUM, ptid);
634 int slot_num = (psr_value >> 41) & 3;
635
636 return pc_value | (slot_num * SLOT_MULTIPLIER);
637 }
638
639 void
640 ia64_write_pc (CORE_ADDR new_pc, ptid_t ptid)
641 {
642 int slot_num = (int) (new_pc & 0xf) / SLOT_MULTIPLIER;
643 CORE_ADDR psr_value = read_register_pid (IA64_PSR_REGNUM, ptid);
644 psr_value &= ~(3LL << 41);
645 psr_value |= (CORE_ADDR)(slot_num & 0x3) << 41;
646
647 new_pc &= ~0xfLL;
648
649 write_register_pid (IA64_PSR_REGNUM, psr_value, ptid);
650 write_register_pid (IA64_IP_REGNUM, new_pc, ptid);
651 }
652
653 #define IS_NaT_COLLECTION_ADDR(addr) ((((addr) >> 3) & 0x3f) == 0x3f)
654
655 /* Returns the address of the slot that's NSLOTS slots away from
656 the address ADDR. NSLOTS may be positive or negative. */
657 static CORE_ADDR
658 rse_address_add(CORE_ADDR addr, int nslots)
659 {
660 CORE_ADDR new_addr;
661 int mandatory_nat_slots = nslots / 63;
662 int direction = nslots < 0 ? -1 : 1;
663
664 new_addr = addr + 8 * (nslots + mandatory_nat_slots);
665
666 if ((new_addr >> 9) != ((addr + 8 * 64 * mandatory_nat_slots) >> 9))
667 new_addr += 8 * direction;
668
669 if (IS_NaT_COLLECTION_ADDR(new_addr))
670 new_addr += 8 * direction;
671
672 return new_addr;
673 }
674
675 /* The IA-64 frame chain is a bit odd. We won't always have a frame
676 pointer, so we use the SP value as the FP for the purpose of
677 creating a frame. There is sometimes a register (not fixed) which
678 is used as a frame pointer. When this register exists, it is not
679 especially hard to determine which one is being used. It isn't
680 even really hard to compute the frame chain, but it can be
681 computationally expensive. So, instead of making life difficult
682 (and slow), we pick a more convenient representation of the frame
683 chain, knowing that we'll have to make some small adjustments in
684 other places. (E.g, note that read_fp() is actually read_sp() in
685 ia64_gdbarch_init() below.)
686
687 Okay, so what is the frame chain exactly? It'll be the SP value
688 at the time that the function in question was entered.
689
690 Note that this *should* actually the frame pointer for the current
691 function! But as I note above, if we were to attempt to find the
692 address of the beginning of the previous frame, we'd waste a lot
693 of cycles for no good reason. So instead, we simply choose to
694 represent the frame chain as the end of the previous frame instead
695 of the beginning. */
696
697 CORE_ADDR
698 ia64_frame_chain (struct frame_info *frame)
699 {
700 if ((get_frame_type (frame) == SIGTRAMP_FRAME))
701 return read_sigcontext_register (frame, sp_regnum);
702 else if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame),
703 get_frame_base (frame),
704 get_frame_base (frame)))
705 return get_frame_base (frame);
706 else
707 {
708 DEPRECATED_FRAME_INIT_SAVED_REGS (frame);
709 if (get_frame_saved_regs (frame)[IA64_VFP_REGNUM])
710 return read_memory_integer (get_frame_saved_regs (frame)[IA64_VFP_REGNUM], 8);
711 else
712 return (get_frame_base (frame)
713 + get_frame_extra_info (frame)->mem_stack_frame_size);
714 }
715 }
716
717 CORE_ADDR
718 ia64_frame_saved_pc (struct frame_info *frame)
719 {
720 if ((get_frame_type (frame) == SIGTRAMP_FRAME))
721 return read_sigcontext_register (frame, pc_regnum);
722 else if (DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame),
723 get_frame_base (frame),
724 get_frame_base (frame)))
725 return deprecated_read_register_dummy (get_frame_pc (frame),
726 get_frame_base (frame), pc_regnum);
727 else
728 {
729 DEPRECATED_FRAME_INIT_SAVED_REGS (frame);
730
731 if (get_frame_saved_regs (frame)[IA64_VRAP_REGNUM])
732 return read_memory_integer (get_frame_saved_regs (frame)[IA64_VRAP_REGNUM], 8);
733 else if (get_next_frame (frame)
734 && (get_frame_type (get_next_frame (frame)) == SIGTRAMP_FRAME))
735 return read_sigcontext_register (get_next_frame (frame), IA64_BR0_REGNUM);
736 else /* either frameless, or not far enough along in the prologue... */
737 return ia64_saved_pc_after_call (frame);
738 }
739 }
740
741 /* Limit the number of skipped non-prologue instructions since examining
742 of the prologue is expensive. */
743 static int max_skip_non_prologue_insns = 10;
744
745 /* Given PC representing the starting address of a function, and
746 LIM_PC which is the (sloppy) limit to which to scan when looking
747 for a prologue, attempt to further refine this limit by using
748 the line data in the symbol table. If successful, a better guess
749 on where the prologue ends is returned, otherwise the previous
750 value of lim_pc is returned. TRUST_LIMIT is a pointer to a flag
751 which will be set to indicate whether the returned limit may be
752 used with no further scanning in the event that the function is
753 frameless. */
754
755 static CORE_ADDR
756 refine_prologue_limit (CORE_ADDR pc, CORE_ADDR lim_pc, int *trust_limit)
757 {
758 struct symtab_and_line prologue_sal;
759 CORE_ADDR start_pc = pc;
760
761 /* Start off not trusting the limit. */
762 *trust_limit = 0;
763
764 prologue_sal = find_pc_line (pc, 0);
765 if (prologue_sal.line != 0)
766 {
767 int i;
768 CORE_ADDR addr = prologue_sal.end;
769
770 /* Handle the case in which compiler's optimizer/scheduler
771 has moved instructions into the prologue. We scan ahead
772 in the function looking for address ranges whose corresponding
773 line number is less than or equal to the first one that we
774 found for the function. (It can be less than when the
775 scheduler puts a body instruction before the first prologue
776 instruction.) */
777 for (i = 2 * max_skip_non_prologue_insns;
778 i > 0 && (lim_pc == 0 || addr < lim_pc);
779 i--)
780 {
781 struct symtab_and_line sal;
782
783 sal = find_pc_line (addr, 0);
784 if (sal.line == 0)
785 break;
786 if (sal.line <= prologue_sal.line
787 && sal.symtab == prologue_sal.symtab)
788 {
789 prologue_sal = sal;
790 }
791 addr = sal.end;
792 }
793
794 if (lim_pc == 0 || prologue_sal.end < lim_pc)
795 {
796 lim_pc = prologue_sal.end;
797 if (start_pc == get_pc_function_start (lim_pc))
798 *trust_limit = 1;
799 }
800 }
801 return lim_pc;
802 }
803
804 #define isScratch(_regnum_) ((_regnum_) == 2 || (_regnum_) == 3 \
805 || (8 <= (_regnum_) && (_regnum_) <= 11) \
806 || (14 <= (_regnum_) && (_regnum_) <= 31))
807 #define imm9(_instr_) \
808 ( ((((_instr_) & 0x01000000000LL) ? -1 : 0) << 8) \
809 | (((_instr_) & 0x00008000000LL) >> 20) \
810 | (((_instr_) & 0x00000001fc0LL) >> 6))
811
812 static CORE_ADDR
813 examine_prologue (CORE_ADDR pc, CORE_ADDR lim_pc, struct frame_info *frame)
814 {
815 CORE_ADDR next_pc;
816 CORE_ADDR last_prologue_pc = pc;
817 instruction_type it;
818 long long instr;
819 int do_fsr_stuff = 0;
820
821 int cfm_reg = 0;
822 int ret_reg = 0;
823 int fp_reg = 0;
824 int unat_save_reg = 0;
825 int pr_save_reg = 0;
826 int mem_stack_frame_size = 0;
827 int spill_reg = 0;
828 CORE_ADDR spill_addr = 0;
829 char instores[8];
830 char infpstores[8];
831 int trust_limit;
832
833 memset (instores, 0, sizeof instores);
834 memset (infpstores, 0, sizeof infpstores);
835
836 if (frame && !get_frame_saved_regs (frame))
837 {
838 frame_saved_regs_zalloc (frame);
839 do_fsr_stuff = 1;
840 }
841
842 if (frame
843 && !do_fsr_stuff
844 && get_frame_extra_info (frame)->after_prologue != 0
845 && get_frame_extra_info (frame)->after_prologue <= lim_pc)
846 return get_frame_extra_info (frame)->after_prologue;
847
848 lim_pc = refine_prologue_limit (pc, lim_pc, &trust_limit);
849
850 /* Must start with an alloc instruction */
851 next_pc = fetch_instruction (pc, &it, &instr);
852 if (pc < lim_pc && next_pc
853 && it == M && ((instr & 0x1ee0000003fLL) == 0x02c00000000LL))
854 {
855 /* alloc */
856 int sor = (int) ((instr & 0x00078000000LL) >> 27);
857 int sol = (int) ((instr & 0x00007f00000LL) >> 20);
858 int sof = (int) ((instr & 0x000000fe000LL) >> 13);
859 /* Okay, so sor, sol, and sof aren't used right now; but perhaps
860 we could compare against the size given to us via the cfm as
861 either a sanity check or possibly to see if the frame has been
862 changed by a later alloc instruction... */
863 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
864 cfm_reg = rN;
865 last_prologue_pc = next_pc;
866 pc = next_pc;
867 }
868 else
869 {
870 pc = lim_pc; /* Frameless: We're done early. */
871 if (trust_limit)
872 last_prologue_pc = lim_pc;
873 }
874
875 /* Loop, looking for prologue instructions, keeping track of
876 where preserved registers were spilled. */
877 while (pc < lim_pc)
878 {
879 next_pc = fetch_instruction (pc, &it, &instr);
880 if (next_pc == 0)
881 break;
882
883 if ((it == B && ((instr & 0x1e1f800003f) != 0x04000000000))
884 || ((instr & 0x3fLL) != 0LL))
885 {
886 /* Exit loop upon hitting a non-nop branch instruction
887 or a predicated instruction. */
888 break;
889 }
890 else if (it == I && ((instr & 0x1eff8000000LL) == 0x00188000000LL))
891 {
892 /* Move from BR */
893 int b2 = (int) ((instr & 0x0000000e000LL) >> 13);
894 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
895 int qp = (int) (instr & 0x0000000003f);
896
897 if (qp == 0 && b2 == 0 && rN >= 32 && ret_reg == 0)
898 {
899 ret_reg = rN;
900 last_prologue_pc = next_pc;
901 }
902 }
903 else if ((it == I || it == M)
904 && ((instr & 0x1ee00000000LL) == 0x10800000000LL))
905 {
906 /* adds rN = imm14, rM (or mov rN, rM when imm14 is 0) */
907 int imm = (int) ((((instr & 0x01000000000LL) ? -1 : 0) << 13)
908 | ((instr & 0x001f8000000LL) >> 20)
909 | ((instr & 0x000000fe000LL) >> 13));
910 int rM = (int) ((instr & 0x00007f00000LL) >> 20);
911 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
912 int qp = (int) (instr & 0x0000000003fLL);
913
914 if (qp == 0 && rN >= 32 && imm == 0 && rM == 12 && fp_reg == 0)
915 {
916 /* mov rN, r12 */
917 fp_reg = rN;
918 last_prologue_pc = next_pc;
919 }
920 else if (qp == 0 && rN == 12 && rM == 12)
921 {
922 /* adds r12, -mem_stack_frame_size, r12 */
923 mem_stack_frame_size -= imm;
924 last_prologue_pc = next_pc;
925 }
926 else if (qp == 0 && rN == 2
927 && ((rM == fp_reg && fp_reg != 0) || rM == 12))
928 {
929 /* adds r2, spilloffset, rFramePointer
930 or
931 adds r2, spilloffset, r12
932
933 Get ready for stf.spill or st8.spill instructions.
934 The address to start spilling at is loaded into r2.
935 FIXME: Why r2? That's what gcc currently uses; it
936 could well be different for other compilers. */
937
938 /* Hmm... whether or not this will work will depend on
939 where the pc is. If it's still early in the prologue
940 this'll be wrong. FIXME */
941 spill_addr = (frame ? get_frame_base (frame) : 0)
942 + (rM == 12 ? 0 : mem_stack_frame_size)
943 + imm;
944 spill_reg = rN;
945 last_prologue_pc = next_pc;
946 }
947 }
948 else if (it == M
949 && ( ((instr & 0x1efc0000000LL) == 0x0eec0000000LL)
950 || ((instr & 0x1ffc8000000LL) == 0x0cec0000000LL) ))
951 {
952 /* stf.spill [rN] = fM, imm9
953 or
954 stf.spill [rN] = fM */
955
956 int imm = imm9(instr);
957 int rN = (int) ((instr & 0x00007f00000LL) >> 20);
958 int fM = (int) ((instr & 0x000000fe000LL) >> 13);
959 int qp = (int) (instr & 0x0000000003fLL);
960 if (qp == 0 && rN == spill_reg && spill_addr != 0
961 && ((2 <= fM && fM <= 5) || (16 <= fM && fM <= 31)))
962 {
963 if (do_fsr_stuff)
964 get_frame_saved_regs (frame)[IA64_FR0_REGNUM + fM] = spill_addr;
965
966 if ((instr & 0x1efc0000000) == 0x0eec0000000)
967 spill_addr += imm;
968 else
969 spill_addr = 0; /* last one; must be done */
970 last_prologue_pc = next_pc;
971 }
972 }
973 else if ((it == M && ((instr & 0x1eff8000000LL) == 0x02110000000LL))
974 || (it == I && ((instr & 0x1eff8000000LL) == 0x00050000000LL)) )
975 {
976 /* mov.m rN = arM
977 or
978 mov.i rN = arM */
979
980 int arM = (int) ((instr & 0x00007f00000LL) >> 20);
981 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
982 int qp = (int) (instr & 0x0000000003fLL);
983 if (qp == 0 && isScratch (rN) && arM == 36 /* ar.unat */)
984 {
985 /* We have something like "mov.m r3 = ar.unat". Remember the
986 r3 (or whatever) and watch for a store of this register... */
987 unat_save_reg = rN;
988 last_prologue_pc = next_pc;
989 }
990 }
991 else if (it == I && ((instr & 0x1eff8000000LL) == 0x00198000000LL))
992 {
993 /* mov rN = pr */
994 int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
995 int qp = (int) (instr & 0x0000000003fLL);
996 if (qp == 0 && isScratch (rN))
997 {
998 pr_save_reg = rN;
999 last_prologue_pc = next_pc;
1000 }
1001 }
1002 else if (it == M
1003 && ( ((instr & 0x1ffc8000000LL) == 0x08cc0000000LL)
1004 || ((instr & 0x1efc0000000LL) == 0x0acc0000000LL)))
1005 {
1006 /* st8 [rN] = rM
1007 or
1008 st8 [rN] = rM, imm9 */
1009 int rN = (int) ((instr & 0x00007f00000LL) >> 20);
1010 int rM = (int) ((instr & 0x000000fe000LL) >> 13);
1011 int qp = (int) (instr & 0x0000000003fLL);
1012 if (qp == 0 && rN == spill_reg && spill_addr != 0
1013 && (rM == unat_save_reg || rM == pr_save_reg))
1014 {
1015 /* We've found a spill of either the UNAT register or the PR
1016 register. (Well, not exactly; what we've actually found is
1017 a spill of the register that UNAT or PR was moved to).
1018 Record that fact and move on... */
1019 if (rM == unat_save_reg)
1020 {
1021 /* Track UNAT register */
1022 if (do_fsr_stuff)
1023 get_frame_saved_regs (frame)[IA64_UNAT_REGNUM] = spill_addr;
1024 unat_save_reg = 0;
1025 }
1026 else
1027 {
1028 /* Track PR register */
1029 if (do_fsr_stuff)
1030 get_frame_saved_regs (frame)[IA64_PR_REGNUM] = spill_addr;
1031 pr_save_reg = 0;
1032 }
1033 if ((instr & 0x1efc0000000LL) == 0x0acc0000000LL)
1034 /* st8 [rN] = rM, imm9 */
1035 spill_addr += imm9(instr);
1036 else
1037 spill_addr = 0; /* must be done spilling */
1038 last_prologue_pc = next_pc;
1039 }
1040 else if (qp == 0 && 32 <= rM && rM < 40 && !instores[rM-32])
1041 {
1042 /* Allow up to one store of each input register. */
1043 instores[rM-32] = 1;
1044 last_prologue_pc = next_pc;
1045 }
1046 }
1047 else if (it == M && ((instr & 0x1ff08000000LL) == 0x08c00000000LL))
1048 {
1049 /* One of
1050 st1 [rN] = rM
1051 st2 [rN] = rM
1052 st4 [rN] = rM
1053 st8 [rN] = rM
1054 Note that the st8 case is handled in the clause above.
1055
1056 Advance over stores of input registers. One store per input
1057 register is permitted. */
1058 int rM = (int) ((instr & 0x000000fe000LL) >> 13);
1059 int qp = (int) (instr & 0x0000000003fLL);
1060 if (qp == 0 && 32 <= rM && rM < 40 && !instores[rM-32])
1061 {
1062 instores[rM-32] = 1;
1063 last_prologue_pc = next_pc;
1064 }
1065 }
1066 else if (it == M && ((instr & 0x1ff88000000LL) == 0x0cc80000000LL))
1067 {
1068 /* Either
1069 stfs [rN] = fM
1070 or
1071 stfd [rN] = fM
1072
1073 Advance over stores of floating point input registers. Again
1074 one store per register is permitted */
1075 int fM = (int) ((instr & 0x000000fe000LL) >> 13);
1076 int qp = (int) (instr & 0x0000000003fLL);
1077 if (qp == 0 && 8 <= fM && fM < 16 && !infpstores[fM - 8])
1078 {
1079 infpstores[fM-8] = 1;
1080 last_prologue_pc = next_pc;
1081 }
1082 }
1083 else if (it == M
1084 && ( ((instr & 0x1ffc8000000LL) == 0x08ec0000000LL)
1085 || ((instr & 0x1efc0000000LL) == 0x0aec0000000LL)))
1086 {
1087 /* st8.spill [rN] = rM
1088 or
1089 st8.spill [rN] = rM, imm9 */
1090 int rN = (int) ((instr & 0x00007f00000LL) >> 20);
1091 int rM = (int) ((instr & 0x000000fe000LL) >> 13);
1092 int qp = (int) (instr & 0x0000000003fLL);
1093 if (qp == 0 && rN == spill_reg && 4 <= rM && rM <= 7)
1094 {
1095 /* We've found a spill of one of the preserved general purpose
1096 regs. Record the spill address and advance the spill
1097 register if appropriate. */
1098 if (do_fsr_stuff)
1099 get_frame_saved_regs (frame)[IA64_GR0_REGNUM + rM] = spill_addr;
1100 if ((instr & 0x1efc0000000LL) == 0x0aec0000000LL)
1101 /* st8.spill [rN] = rM, imm9 */
1102 spill_addr += imm9(instr);
1103 else
1104 spill_addr = 0; /* Done spilling */
1105 last_prologue_pc = next_pc;
1106 }
1107 }
1108
1109 pc = next_pc;
1110 }
1111
1112 if (do_fsr_stuff) {
1113 int i;
1114 CORE_ADDR addr;
1115 int sor, rrb_gr;
1116
1117 /* Extract the size of the rotating portion of the stack
1118 frame and the register rename base from the current
1119 frame marker. */
1120 sor = ((get_frame_extra_info (frame)->cfm >> 14) & 0xf) * 8;
1121 rrb_gr = (get_frame_extra_info (frame)->cfm >> 18) & 0x7f;
1122
1123 for (i = 0, addr = get_frame_extra_info (frame)->bsp;
1124 i < get_frame_extra_info (frame)->sof;
1125 i++, addr += 8)
1126 {
1127 if (IS_NaT_COLLECTION_ADDR (addr))
1128 {
1129 addr += 8;
1130 }
1131 if (i < sor)
1132 get_frame_saved_regs (frame)[IA64_GR32_REGNUM + ((i + (sor - rrb_gr)) % sor)]
1133 = addr;
1134 else
1135 get_frame_saved_regs (frame)[IA64_GR32_REGNUM + i] = addr;
1136
1137 if (i+32 == cfm_reg)
1138 get_frame_saved_regs (frame)[IA64_CFM_REGNUM] = addr;
1139 if (i+32 == ret_reg)
1140 get_frame_saved_regs (frame)[IA64_VRAP_REGNUM] = addr;
1141 if (i+32 == fp_reg)
1142 get_frame_saved_regs (frame)[IA64_VFP_REGNUM] = addr;
1143 }
1144 }
1145
1146 if (frame && get_frame_extra_info (frame))
1147 {
1148 get_frame_extra_info (frame)->after_prologue = last_prologue_pc;
1149 get_frame_extra_info (frame)->mem_stack_frame_size = mem_stack_frame_size;
1150 get_frame_extra_info (frame)->fp_reg = fp_reg;
1151 }
1152
1153 return last_prologue_pc;
1154 }
1155
1156 CORE_ADDR
1157 ia64_skip_prologue (CORE_ADDR pc)
1158 {
1159 return examine_prologue (pc, pc+1024, 0);
1160 }
1161
1162 void
1163 ia64_frame_init_saved_regs (struct frame_info *frame)
1164 {
1165 if (get_frame_saved_regs (frame))
1166 return;
1167
1168 if ((get_frame_type (frame) == SIGTRAMP_FRAME) && SIGCONTEXT_REGISTER_ADDRESS)
1169 {
1170 int regno;
1171
1172 frame_saved_regs_zalloc (frame);
1173
1174 get_frame_saved_regs (frame)[IA64_VRAP_REGNUM] =
1175 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame), IA64_IP_REGNUM);
1176 get_frame_saved_regs (frame)[IA64_CFM_REGNUM] =
1177 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame), IA64_CFM_REGNUM);
1178 get_frame_saved_regs (frame)[IA64_PSR_REGNUM] =
1179 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame), IA64_PSR_REGNUM);
1180 #if 0
1181 get_frame_saved_regs (frame)[IA64_BSP_REGNUM] =
1182 SIGCONTEXT_REGISTER_ADDRESS (frame->frame, IA64_BSP_REGNUM);
1183 #endif
1184 get_frame_saved_regs (frame)[IA64_RNAT_REGNUM] =
1185 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame), IA64_RNAT_REGNUM);
1186 get_frame_saved_regs (frame)[IA64_CCV_REGNUM] =
1187 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame), IA64_CCV_REGNUM);
1188 get_frame_saved_regs (frame)[IA64_UNAT_REGNUM] =
1189 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame), IA64_UNAT_REGNUM);
1190 get_frame_saved_regs (frame)[IA64_FPSR_REGNUM] =
1191 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame), IA64_FPSR_REGNUM);
1192 get_frame_saved_regs (frame)[IA64_PFS_REGNUM] =
1193 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame), IA64_PFS_REGNUM);
1194 get_frame_saved_regs (frame)[IA64_LC_REGNUM] =
1195 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame), IA64_LC_REGNUM);
1196 for (regno = IA64_GR1_REGNUM; regno <= IA64_GR31_REGNUM; regno++)
1197 if (regno != sp_regnum)
1198 get_frame_saved_regs (frame)[regno] =
1199 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame), regno);
1200 for (regno = IA64_BR0_REGNUM; regno <= IA64_BR7_REGNUM; regno++)
1201 get_frame_saved_regs (frame)[regno] =
1202 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame), regno);
1203 for (regno = IA64_FR2_REGNUM; regno <= IA64_BR7_REGNUM; regno++)
1204 get_frame_saved_regs (frame)[regno] =
1205 SIGCONTEXT_REGISTER_ADDRESS (get_frame_base (frame), regno);
1206 }
1207 else
1208 {
1209 CORE_ADDR func_start;
1210
1211 func_start = get_pc_function_start (get_frame_pc (frame));
1212 examine_prologue (func_start, get_frame_pc (frame), frame);
1213 }
1214 }
1215
1216 void
1217 ia64_get_saved_register (char *raw_buffer,
1218 int *optimized,
1219 CORE_ADDR *addrp,
1220 struct frame_info *frame,
1221 int regnum,
1222 enum lval_type *lval)
1223 {
1224 int is_dummy_frame;
1225
1226 if (!target_has_registers)
1227 error ("No registers.");
1228
1229 if (optimized != NULL)
1230 *optimized = 0;
1231
1232 if (addrp != NULL)
1233 *addrp = 0;
1234
1235 if (lval != NULL)
1236 *lval = not_lval;
1237
1238 is_dummy_frame = DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (frame),
1239 get_frame_base (frame),
1240 get_frame_base (frame));
1241
1242 if (regnum == SP_REGNUM && get_next_frame (frame))
1243 {
1244 /* Handle SP values for all frames but the topmost. */
1245 store_address (raw_buffer, REGISTER_RAW_SIZE (regnum),
1246 get_frame_base (frame));
1247 }
1248 else if (regnum == IA64_BSP_REGNUM)
1249 {
1250 store_address (raw_buffer, REGISTER_RAW_SIZE (regnum),
1251 get_frame_extra_info (frame)->bsp);
1252 }
1253 else if (regnum == IA64_VFP_REGNUM)
1254 {
1255 /* If the function in question uses an automatic register (r32-r127)
1256 for the frame pointer, it'll be found by ia64_find_saved_register()
1257 above. If the function lacks one of these frame pointers, we can
1258 still provide a value since we know the size of the frame */
1259 CORE_ADDR vfp = (get_frame_base (frame)
1260 + get_frame_extra_info (frame)->mem_stack_frame_size);
1261 store_address (raw_buffer, REGISTER_RAW_SIZE (IA64_VFP_REGNUM), vfp);
1262 }
1263 else if (IA64_PR0_REGNUM <= regnum && regnum <= IA64_PR63_REGNUM)
1264 {
1265 char *pr_raw_buffer = alloca (MAX_REGISTER_RAW_SIZE);
1266 int pr_optim;
1267 enum lval_type pr_lval;
1268 CORE_ADDR pr_addr;
1269 int prN_val;
1270 ia64_get_saved_register (pr_raw_buffer, &pr_optim, &pr_addr,
1271 frame, IA64_PR_REGNUM, &pr_lval);
1272 if (IA64_PR16_REGNUM <= regnum && regnum <= IA64_PR63_REGNUM)
1273 {
1274 /* Fetch predicate register rename base from current frame
1275 marker for this frame. */
1276 int rrb_pr = (get_frame_extra_info (frame)->cfm >> 32) & 0x3f;
1277
1278 /* Adjust the register number to account for register rotation. */
1279 regnum = IA64_PR16_REGNUM
1280 + ((regnum - IA64_PR16_REGNUM) + rrb_pr) % 48;
1281 }
1282 prN_val = extract_bit_field ((unsigned char *) pr_raw_buffer,
1283 regnum - IA64_PR0_REGNUM, 1);
1284 store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum), prN_val);
1285 }
1286 else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT31_REGNUM)
1287 {
1288 char *unat_raw_buffer = alloca (MAX_REGISTER_RAW_SIZE);
1289 int unat_optim;
1290 enum lval_type unat_lval;
1291 CORE_ADDR unat_addr;
1292 int unatN_val;
1293 ia64_get_saved_register (unat_raw_buffer, &unat_optim, &unat_addr,
1294 frame, IA64_UNAT_REGNUM, &unat_lval);
1295 unatN_val = extract_bit_field ((unsigned char *) unat_raw_buffer,
1296 regnum - IA64_NAT0_REGNUM, 1);
1297 store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum),
1298 unatN_val);
1299 }
1300 else if (IA64_NAT32_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
1301 {
1302 int natval = 0;
1303 /* Find address of general register corresponding to nat bit we're
1304 interested in. */
1305 CORE_ADDR gr_addr = 0;
1306
1307 if (!is_dummy_frame)
1308 {
1309 DEPRECATED_FRAME_INIT_SAVED_REGS (frame);
1310 gr_addr = get_frame_saved_regs (frame)[ regnum - IA64_NAT0_REGNUM
1311 + IA64_GR0_REGNUM];
1312 }
1313 if (gr_addr)
1314 {
1315 /* Compute address of nat collection bits */
1316 CORE_ADDR nat_addr = gr_addr | 0x1f8;
1317 CORE_ADDR bsp = read_register (IA64_BSP_REGNUM);
1318 CORE_ADDR nat_collection;
1319 int nat_bit;
1320 /* If our nat collection address is bigger than bsp, we have to get
1321 the nat collection from rnat. Otherwise, we fetch the nat
1322 collection from the computed address. */
1323 if (nat_addr >= bsp)
1324 nat_collection = read_register (IA64_RNAT_REGNUM);
1325 else
1326 nat_collection = read_memory_integer (nat_addr, 8);
1327 nat_bit = (gr_addr >> 3) & 0x3f;
1328 natval = (nat_collection >> nat_bit) & 1;
1329 }
1330 store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum), natval);
1331 }
1332 else if (regnum == IA64_IP_REGNUM)
1333 {
1334 CORE_ADDR pc;
1335 if (get_next_frame (frame))
1336 {
1337 /* FIXME: Set *addrp, *lval when possible. */
1338 pc = ia64_frame_saved_pc (get_next_frame (frame));
1339 }
1340 else
1341 {
1342 pc = read_pc ();
1343 }
1344 store_address (raw_buffer, REGISTER_RAW_SIZE (IA64_IP_REGNUM), pc);
1345 }
1346 else if (IA64_GR32_REGNUM <= regnum && regnum <= IA64_GR127_REGNUM)
1347 {
1348 CORE_ADDR addr = 0;
1349 if (!is_dummy_frame)
1350 {
1351 DEPRECATED_FRAME_INIT_SAVED_REGS (frame);
1352 addr = get_frame_saved_regs (frame)[regnum];
1353 }
1354
1355 if (addr != 0)
1356 {
1357 if (lval != NULL)
1358 *lval = lval_memory;
1359 if (addrp != NULL)
1360 *addrp = addr;
1361 read_memory (addr, raw_buffer, REGISTER_RAW_SIZE (regnum));
1362 }
1363 else
1364 {
1365 /* r32 - r127 must be fetchable via memory. If they aren't,
1366 then the register is unavailable */
1367 memset (raw_buffer, 0, REGISTER_RAW_SIZE (regnum));
1368 }
1369 }
1370 else
1371 {
1372 if (IA64_FR32_REGNUM <= regnum && regnum <= IA64_FR127_REGNUM)
1373 {
1374 /* Fetch floating point register rename base from current
1375 frame marker for this frame. */
1376 int rrb_fr = (get_frame_extra_info (frame)->cfm >> 25) & 0x7f;
1377
1378 /* Adjust the floating point register number to account for
1379 register rotation. */
1380 regnum = IA64_FR32_REGNUM
1381 + ((regnum - IA64_FR32_REGNUM) + rrb_fr) % 96;
1382 }
1383
1384 deprecated_generic_get_saved_register (raw_buffer, optimized, addrp,
1385 frame, regnum, lval);
1386 }
1387 }
1388
1389 /* Should we use EXTRACT_STRUCT_VALUE_ADDRESS instead of
1390 EXTRACT_RETURN_VALUE? GCC_P is true if compiled with gcc
1391 and TYPE is the type (which is known to be struct, union or array). */
1392 int
1393 ia64_use_struct_convention (int gcc_p, struct type *type)
1394 {
1395 struct type *float_elt_type;
1396
1397 /* HFAs are structures (or arrays) consisting entirely of floating
1398 point values of the same length. Up to 8 of these are returned
1399 in registers. Don't use the struct convention when this is the
1400 case. */
1401 float_elt_type = is_float_or_hfa_type (type);
1402 if (float_elt_type != NULL
1403 && TYPE_LENGTH (type) / TYPE_LENGTH (float_elt_type) <= 8)
1404 return 0;
1405
1406 /* Other structs of length 32 or less are returned in r8-r11.
1407 Don't use the struct convention for those either. */
1408 return TYPE_LENGTH (type) > 32;
1409 }
1410
1411 void
1412 ia64_extract_return_value (struct type *type, char *regbuf, char *valbuf)
1413 {
1414 struct type *float_elt_type;
1415
1416 float_elt_type = is_float_or_hfa_type (type);
1417 if (float_elt_type != NULL)
1418 {
1419 int offset = 0;
1420 int regnum = IA64_FR8_REGNUM;
1421 int n = TYPE_LENGTH (type) / TYPE_LENGTH (float_elt_type);
1422
1423 while (n-- > 0)
1424 {
1425 ia64_register_convert_to_virtual (regnum, float_elt_type,
1426 &regbuf[REGISTER_BYTE (regnum)], valbuf + offset);
1427 offset += TYPE_LENGTH (float_elt_type);
1428 regnum++;
1429 }
1430 }
1431 else
1432 memcpy (valbuf, &regbuf[REGISTER_BYTE (IA64_GR8_REGNUM)],
1433 TYPE_LENGTH (type));
1434 }
1435
1436 /* FIXME: Turn this into a stack of some sort. Unfortunately, something
1437 like this is necessary though since the IA-64 calling conventions specify
1438 that r8 is not preserved. */
1439 static CORE_ADDR struct_return_address;
1440
1441 CORE_ADDR
1442 ia64_extract_struct_value_address (char *regbuf)
1443 {
1444 /* FIXME: See above. */
1445 return struct_return_address;
1446 }
1447
1448 void
1449 ia64_store_struct_return (CORE_ADDR addr, CORE_ADDR sp)
1450 {
1451 /* FIXME: See above. */
1452 /* Note that most of the work was done in ia64_push_arguments() */
1453 struct_return_address = addr;
1454 }
1455
1456 int
1457 ia64_frameless_function_invocation (struct frame_info *frame)
1458 {
1459 DEPRECATED_FRAME_INIT_SAVED_REGS (frame);
1460 return (get_frame_extra_info (frame)->mem_stack_frame_size == 0);
1461 }
1462
1463 CORE_ADDR
1464 ia64_saved_pc_after_call (struct frame_info *frame)
1465 {
1466 return read_register (IA64_BR0_REGNUM);
1467 }
1468
1469 CORE_ADDR
1470 ia64_frame_args_address (struct frame_info *frame)
1471 {
1472 /* frame->frame points at the SP for this frame; But we want the start
1473 of the frame, not the end. Calling frame chain will get his for us. */
1474 return ia64_frame_chain (frame);
1475 }
1476
1477 CORE_ADDR
1478 ia64_frame_locals_address (struct frame_info *frame)
1479 {
1480 /* frame->frame points at the SP for this frame; But we want the start
1481 of the frame, not the end. Calling frame chain will get his for us. */
1482 return ia64_frame_chain (frame);
1483 }
1484
1485 void
1486 ia64_init_extra_frame_info (int fromleaf, struct frame_info *frame)
1487 {
1488 CORE_ADDR bsp, cfm;
1489 int next_frame_is_call_dummy = ((get_next_frame (frame) != NULL)
1490 && DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (get_next_frame (frame)),
1491 get_frame_base (get_next_frame (frame)),
1492 get_frame_base (get_next_frame (frame))));
1493
1494 frame_extra_info_zalloc (frame, sizeof (struct frame_extra_info));
1495
1496 if (get_next_frame (frame) == 0)
1497 {
1498 bsp = read_register (IA64_BSP_REGNUM);
1499 cfm = read_register (IA64_CFM_REGNUM);
1500
1501 }
1502 else if ((get_frame_type (get_next_frame (frame)) == SIGTRAMP_FRAME))
1503 {
1504 bsp = read_sigcontext_register (get_next_frame (frame), IA64_BSP_REGNUM);
1505 cfm = read_sigcontext_register (get_next_frame (frame), IA64_CFM_REGNUM);
1506 }
1507 else if (next_frame_is_call_dummy)
1508 {
1509 bsp = deprecated_read_register_dummy (get_frame_pc (get_next_frame (frame)),
1510 get_frame_base (get_next_frame (frame)),
1511 IA64_BSP_REGNUM);
1512 cfm = deprecated_read_register_dummy (get_frame_pc (get_next_frame (frame)),
1513 get_frame_base (get_next_frame (frame)),
1514 IA64_CFM_REGNUM);
1515 }
1516 else
1517 {
1518 struct frame_info *frn = get_next_frame (frame);
1519
1520 DEPRECATED_FRAME_INIT_SAVED_REGS (frn);
1521
1522 if (get_frame_saved_regs (frn)[IA64_CFM_REGNUM] != 0)
1523 cfm = read_memory_integer (get_frame_saved_regs (frn)[IA64_CFM_REGNUM], 8);
1524 else if (get_next_frame (frn) && (get_frame_type (get_next_frame (frn)) == SIGTRAMP_FRAME))
1525 cfm = read_sigcontext_register (get_next_frame (frn), IA64_PFS_REGNUM);
1526 else if (get_next_frame (frn)
1527 && DEPRECATED_PC_IN_CALL_DUMMY (get_frame_pc (get_next_frame (frn)),
1528 get_frame_base (get_next_frame (frn)),
1529 get_frame_base (get_next_frame (frn))))
1530 cfm = deprecated_read_register_dummy (get_frame_pc (get_next_frame (frn)),
1531 get_frame_base (get_next_frame (frn)),
1532 IA64_PFS_REGNUM);
1533 else
1534 cfm = read_register (IA64_PFS_REGNUM);
1535
1536 bsp = get_frame_extra_info (frn)->bsp;
1537 }
1538 get_frame_extra_info (frame)->cfm = cfm;
1539 get_frame_extra_info (frame)->sof = cfm & 0x7f;
1540 get_frame_extra_info (frame)->sol = (cfm >> 7) & 0x7f;
1541 if (get_next_frame (frame) == 0
1542 || (get_frame_type (get_next_frame (frame)) == SIGTRAMP_FRAME)
1543 || next_frame_is_call_dummy)
1544 get_frame_extra_info (frame)->bsp =
1545 rse_address_add (bsp, -get_frame_extra_info (frame)->sof);
1546 else
1547 get_frame_extra_info (frame)->bsp =
1548 rse_address_add (bsp, -get_frame_extra_info (frame)->sol);
1549
1550 get_frame_extra_info (frame)->after_prologue = 0;
1551 get_frame_extra_info (frame)->mem_stack_frame_size = -1; /* Not yet determined */
1552 get_frame_extra_info (frame)->fp_reg = 0;
1553 }
1554
1555 static int
1556 is_float_or_hfa_type_recurse (struct type *t, struct type **etp)
1557 {
1558 switch (TYPE_CODE (t))
1559 {
1560 case TYPE_CODE_FLT:
1561 if (*etp)
1562 return TYPE_LENGTH (*etp) == TYPE_LENGTH (t);
1563 else
1564 {
1565 *etp = t;
1566 return 1;
1567 }
1568 break;
1569 case TYPE_CODE_ARRAY:
1570 return
1571 is_float_or_hfa_type_recurse (check_typedef (TYPE_TARGET_TYPE (t)),
1572 etp);
1573 break;
1574 case TYPE_CODE_STRUCT:
1575 {
1576 int i;
1577
1578 for (i = 0; i < TYPE_NFIELDS (t); i++)
1579 if (!is_float_or_hfa_type_recurse
1580 (check_typedef (TYPE_FIELD_TYPE (t, i)), etp))
1581 return 0;
1582 return 1;
1583 }
1584 break;
1585 default:
1586 return 0;
1587 break;
1588 }
1589 }
1590
1591 /* Determine if the given type is one of the floating point types or
1592 and HFA (which is a struct, array, or combination thereof whose
1593 bottom-most elements are all of the same floating point type.) */
1594
1595 static struct type *
1596 is_float_or_hfa_type (struct type *t)
1597 {
1598 struct type *et = 0;
1599
1600 return is_float_or_hfa_type_recurse (t, &et) ? et : 0;
1601 }
1602
1603
1604 /* Return 1 if the alignment of T is such that the next even slot
1605 should be used. Return 0, if the next available slot should
1606 be used. (See section 8.5.1 of the IA-64 Software Conventions
1607 and Runtime manual.) */
1608
1609 static int
1610 slot_alignment_is_next_even (struct type *t)
1611 {
1612 switch (TYPE_CODE (t))
1613 {
1614 case TYPE_CODE_INT:
1615 case TYPE_CODE_FLT:
1616 if (TYPE_LENGTH (t) > 8)
1617 return 1;
1618 else
1619 return 0;
1620 case TYPE_CODE_ARRAY:
1621 return
1622 slot_alignment_is_next_even (check_typedef (TYPE_TARGET_TYPE (t)));
1623 case TYPE_CODE_STRUCT:
1624 {
1625 int i;
1626
1627 for (i = 0; i < TYPE_NFIELDS (t); i++)
1628 if (slot_alignment_is_next_even
1629 (check_typedef (TYPE_FIELD_TYPE (t, i))))
1630 return 1;
1631 return 0;
1632 }
1633 default:
1634 return 0;
1635 }
1636 }
1637
1638 /* Attempt to find (and return) the global pointer for the given
1639 function.
1640
1641 This is a rather nasty bit of code searchs for the .dynamic section
1642 in the objfile corresponding to the pc of the function we're trying
1643 to call. Once it finds the addresses at which the .dynamic section
1644 lives in the child process, it scans the Elf64_Dyn entries for a
1645 DT_PLTGOT tag. If it finds one of these, the corresponding
1646 d_un.d_ptr value is the global pointer. */
1647
1648 static CORE_ADDR
1649 generic_elf_find_global_pointer (CORE_ADDR faddr)
1650 {
1651 struct obj_section *faddr_sect;
1652
1653 faddr_sect = find_pc_section (faddr);
1654 if (faddr_sect != NULL)
1655 {
1656 struct obj_section *osect;
1657
1658 ALL_OBJFILE_OSECTIONS (faddr_sect->objfile, osect)
1659 {
1660 if (strcmp (osect->the_bfd_section->name, ".dynamic") == 0)
1661 break;
1662 }
1663
1664 if (osect < faddr_sect->objfile->sections_end)
1665 {
1666 CORE_ADDR addr;
1667
1668 addr = osect->addr;
1669 while (addr < osect->endaddr)
1670 {
1671 int status;
1672 LONGEST tag;
1673 char buf[8];
1674
1675 status = target_read_memory (addr, buf, sizeof (buf));
1676 if (status != 0)
1677 break;
1678 tag = extract_signed_integer (buf, sizeof (buf));
1679
1680 if (tag == DT_PLTGOT)
1681 {
1682 CORE_ADDR global_pointer;
1683
1684 status = target_read_memory (addr + 8, buf, sizeof (buf));
1685 if (status != 0)
1686 break;
1687 global_pointer = extract_address (buf, sizeof (buf));
1688
1689 /* The payoff... */
1690 return global_pointer;
1691 }
1692
1693 if (tag == DT_NULL)
1694 break;
1695
1696 addr += 16;
1697 }
1698 }
1699 }
1700 return 0;
1701 }
1702
1703 /* Given a function's address, attempt to find (and return) the
1704 corresponding (canonical) function descriptor. Return 0 if
1705 not found. */
1706 static CORE_ADDR
1707 find_extant_func_descr (CORE_ADDR faddr)
1708 {
1709 struct obj_section *faddr_sect;
1710
1711 /* Return early if faddr is already a function descriptor */
1712 faddr_sect = find_pc_section (faddr);
1713 if (faddr_sect && strcmp (faddr_sect->the_bfd_section->name, ".opd") == 0)
1714 return faddr;
1715
1716 if (faddr_sect != NULL)
1717 {
1718 struct obj_section *osect;
1719 ALL_OBJFILE_OSECTIONS (faddr_sect->objfile, osect)
1720 {
1721 if (strcmp (osect->the_bfd_section->name, ".opd") == 0)
1722 break;
1723 }
1724
1725 if (osect < faddr_sect->objfile->sections_end)
1726 {
1727 CORE_ADDR addr;
1728
1729 addr = osect->addr;
1730 while (addr < osect->endaddr)
1731 {
1732 int status;
1733 LONGEST faddr2;
1734 char buf[8];
1735
1736 status = target_read_memory (addr, buf, sizeof (buf));
1737 if (status != 0)
1738 break;
1739 faddr2 = extract_signed_integer (buf, sizeof (buf));
1740
1741 if (faddr == faddr2)
1742 return addr;
1743
1744 addr += 16;
1745 }
1746 }
1747 }
1748 return 0;
1749 }
1750
1751 /* Attempt to find a function descriptor corresponding to the
1752 given address. If none is found, construct one on the
1753 stack using the address at fdaptr */
1754
1755 static CORE_ADDR
1756 find_func_descr (CORE_ADDR faddr, CORE_ADDR *fdaptr)
1757 {
1758 CORE_ADDR fdesc;
1759
1760 fdesc = find_extant_func_descr (faddr);
1761
1762 if (fdesc == 0)
1763 {
1764 CORE_ADDR global_pointer;
1765 char buf[16];
1766
1767 fdesc = *fdaptr;
1768 *fdaptr += 16;
1769
1770 global_pointer = FIND_GLOBAL_POINTER (faddr);
1771
1772 if (global_pointer == 0)
1773 global_pointer = read_register (IA64_GR1_REGNUM);
1774
1775 store_address (buf, 8, faddr);
1776 store_address (buf + 8, 8, global_pointer);
1777
1778 write_memory (fdesc, buf, 16);
1779 }
1780
1781 return fdesc;
1782 }
1783
1784 CORE_ADDR
1785 ia64_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
1786 int struct_return, CORE_ADDR struct_addr)
1787 {
1788 int argno;
1789 struct value *arg;
1790 struct type *type;
1791 int len, argoffset;
1792 int nslots, rseslots, memslots, slotnum, nfuncargs;
1793 int floatreg;
1794 CORE_ADDR bsp, cfm, pfs, new_bsp, funcdescaddr;
1795
1796 nslots = 0;
1797 nfuncargs = 0;
1798 /* Count the number of slots needed for the arguments */
1799 for (argno = 0; argno < nargs; argno++)
1800 {
1801 arg = args[argno];
1802 type = check_typedef (VALUE_TYPE (arg));
1803 len = TYPE_LENGTH (type);
1804
1805 if ((nslots & 1) && slot_alignment_is_next_even (type))
1806 nslots++;
1807
1808 if (TYPE_CODE (type) == TYPE_CODE_FUNC)
1809 nfuncargs++;
1810
1811 nslots += (len + 7) / 8;
1812 }
1813
1814 /* Divvy up the slots between the RSE and the memory stack */
1815 rseslots = (nslots > 8) ? 8 : nslots;
1816 memslots = nslots - rseslots;
1817
1818 /* Allocate a new RSE frame */
1819 cfm = read_register (IA64_CFM_REGNUM);
1820
1821 bsp = read_register (IA64_BSP_REGNUM);
1822 bsp = rse_address_add (bsp, cfm & 0x7f);
1823 new_bsp = rse_address_add (bsp, rseslots);
1824 write_register (IA64_BSP_REGNUM, new_bsp);
1825
1826 pfs = read_register (IA64_PFS_REGNUM);
1827 pfs &= 0xc000000000000000LL;
1828 pfs |= (cfm & 0xffffffffffffLL);
1829 write_register (IA64_PFS_REGNUM, pfs);
1830
1831 cfm &= 0xc000000000000000LL;
1832 cfm |= rseslots;
1833 write_register (IA64_CFM_REGNUM, cfm);
1834
1835 /* We will attempt to find function descriptors in the .opd segment,
1836 but if we can't we'll construct them ourselves. That being the
1837 case, we'll need to reserve space on the stack for them. */
1838 funcdescaddr = sp - nfuncargs * 16;
1839 funcdescaddr &= ~0xfLL;
1840
1841 /* Adjust the stack pointer to it's new value. The calling conventions
1842 require us to have 16 bytes of scratch, plus whatever space is
1843 necessary for the memory slots and our function descriptors */
1844 sp = sp - 16 - (memslots + nfuncargs) * 8;
1845 sp &= ~0xfLL; /* Maintain 16 byte alignment */
1846
1847 /* Place the arguments where they belong. The arguments will be
1848 either placed in the RSE backing store or on the memory stack.
1849 In addition, floating point arguments or HFAs are placed in
1850 floating point registers. */
1851 slotnum = 0;
1852 floatreg = IA64_FR8_REGNUM;
1853 for (argno = 0; argno < nargs; argno++)
1854 {
1855 struct type *float_elt_type;
1856
1857 arg = args[argno];
1858 type = check_typedef (VALUE_TYPE (arg));
1859 len = TYPE_LENGTH (type);
1860
1861 /* Special handling for function parameters */
1862 if (len == 8
1863 && TYPE_CODE (type) == TYPE_CODE_PTR
1864 && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC)
1865 {
1866 char val_buf[8];
1867
1868 store_address (val_buf, 8,
1869 find_func_descr (extract_address (VALUE_CONTENTS (arg), 8),
1870 &funcdescaddr));
1871 if (slotnum < rseslots)
1872 write_memory (rse_address_add (bsp, slotnum), val_buf, 8);
1873 else
1874 write_memory (sp + 16 + 8 * (slotnum - rseslots), val_buf, 8);
1875 slotnum++;
1876 continue;
1877 }
1878
1879 /* Normal slots */
1880
1881 /* Skip odd slot if necessary... */
1882 if ((slotnum & 1) && slot_alignment_is_next_even (type))
1883 slotnum++;
1884
1885 argoffset = 0;
1886 while (len > 0)
1887 {
1888 char val_buf[8];
1889
1890 memset (val_buf, 0, 8);
1891 memcpy (val_buf, VALUE_CONTENTS (arg) + argoffset, (len > 8) ? 8 : len);
1892
1893 if (slotnum < rseslots)
1894 write_memory (rse_address_add (bsp, slotnum), val_buf, 8);
1895 else
1896 write_memory (sp + 16 + 8 * (slotnum - rseslots), val_buf, 8);
1897
1898 argoffset += 8;
1899 len -= 8;
1900 slotnum++;
1901 }
1902
1903 /* Handle floating point types (including HFAs) */
1904 float_elt_type = is_float_or_hfa_type (type);
1905 if (float_elt_type != NULL)
1906 {
1907 argoffset = 0;
1908 len = TYPE_LENGTH (type);
1909 while (len > 0 && floatreg < IA64_FR16_REGNUM)
1910 {
1911 ia64_register_convert_to_raw (
1912 float_elt_type,
1913 floatreg,
1914 VALUE_CONTENTS (arg) + argoffset,
1915 &deprecated_registers[REGISTER_BYTE (floatreg)]);
1916 floatreg++;
1917 argoffset += TYPE_LENGTH (float_elt_type);
1918 len -= TYPE_LENGTH (float_elt_type);
1919 }
1920 }
1921 }
1922
1923 /* Store the struct return value in r8 if necessary. */
1924 if (struct_return)
1925 {
1926 store_address (&deprecated_registers[REGISTER_BYTE (IA64_GR8_REGNUM)],
1927 REGISTER_RAW_SIZE (IA64_GR8_REGNUM),
1928 struct_addr);
1929 }
1930
1931 /* Sync gdb's idea of what the registers are with the target. */
1932 target_store_registers (-1);
1933
1934 /* FIXME: This doesn't belong here! Instead, SAVE_DUMMY_FRAME_TOS needs
1935 to be defined to call generic_save_dummy_frame_tos(). But at the
1936 time of this writing, SAVE_DUMMY_FRAME_TOS wasn't gdbarch'd, so
1937 I chose to put this call here instead of using the old mechanisms.
1938 Once SAVE_DUMMY_FRAME_TOS is gdbarch'd, all we need to do is add the
1939 line
1940
1941 set_gdbarch_save_dummy_frame_tos (gdbarch, generic_save_dummy_frame_tos);
1942
1943 to ia64_gdbarch_init() and remove the line below. */
1944 generic_save_dummy_frame_tos (sp);
1945
1946 return sp;
1947 }
1948
1949 CORE_ADDR
1950 ia64_push_return_address (CORE_ADDR pc, CORE_ADDR sp)
1951 {
1952 CORE_ADDR global_pointer = FIND_GLOBAL_POINTER (pc);
1953
1954 if (global_pointer != 0)
1955 write_register (IA64_GR1_REGNUM, global_pointer);
1956
1957 write_register (IA64_BR0_REGNUM, CALL_DUMMY_ADDRESS ());
1958 return sp;
1959 }
1960
1961 void
1962 ia64_store_return_value (struct type *type, char *valbuf)
1963 {
1964 if (TYPE_CODE (type) == TYPE_CODE_FLT)
1965 {
1966 ia64_register_convert_to_raw (type, IA64_FR8_REGNUM, valbuf,
1967 &deprecated_registers[REGISTER_BYTE (IA64_FR8_REGNUM)]);
1968 target_store_registers (IA64_FR8_REGNUM);
1969 }
1970 else
1971 deprecated_write_register_bytes (REGISTER_BYTE (IA64_GR8_REGNUM),
1972 valbuf, TYPE_LENGTH (type));
1973 }
1974
1975 void
1976 ia64_pop_frame (void)
1977 {
1978 generic_pop_current_frame (ia64_pop_frame_regular);
1979 }
1980
1981 static void
1982 ia64_pop_frame_regular (struct frame_info *frame)
1983 {
1984 int regno;
1985 CORE_ADDR bsp, cfm, pfs;
1986
1987 DEPRECATED_FRAME_INIT_SAVED_REGS (frame);
1988
1989 for (regno = 0; regno < ia64_num_regs; regno++)
1990 {
1991 if (get_frame_saved_regs (frame)[regno]
1992 && (!(IA64_GR32_REGNUM <= regno && regno <= IA64_GR127_REGNUM))
1993 && regno != pc_regnum
1994 && regno != sp_regnum
1995 && regno != IA64_PFS_REGNUM
1996 && regno != IA64_CFM_REGNUM
1997 && regno != IA64_BSP_REGNUM
1998 && regno != IA64_BSPSTORE_REGNUM)
1999 {
2000 write_register (regno,
2001 read_memory_integer (get_frame_saved_regs (frame)[regno],
2002 REGISTER_RAW_SIZE (regno)));
2003 }
2004 }
2005
2006 write_register (sp_regnum, DEPRECATED_FRAME_CHAIN (frame));
2007 write_pc (DEPRECATED_FRAME_SAVED_PC (frame));
2008
2009 cfm = read_register (IA64_CFM_REGNUM);
2010
2011 if (get_frame_saved_regs (frame)[IA64_PFS_REGNUM])
2012 {
2013 pfs = read_memory_integer (get_frame_saved_regs (frame)[IA64_PFS_REGNUM],
2014 REGISTER_RAW_SIZE (IA64_PFS_REGNUM));
2015 }
2016 else
2017 pfs = read_register (IA64_PFS_REGNUM);
2018
2019 /* Compute the new bsp by *adding* the difference between the
2020 size of the frame and the size of the locals (both wrt the
2021 frame that we're going back to). This seems kind of strange,
2022 especially since it seems like we ought to be subtracting the
2023 size of the locals... and we should; but the Linux kernel
2024 wants bsp to be set at the end of all used registers. It's
2025 likely that this code will need to be revised to accomodate
2026 other operating systems. */
2027 bsp = rse_address_add (get_frame_extra_info (frame)->bsp,
2028 (pfs & 0x7f) - ((pfs >> 7) & 0x7f));
2029 write_register (IA64_BSP_REGNUM, bsp);
2030
2031 /* FIXME: What becomes of the epilog count in the PFS? */
2032 cfm = (cfm & ~0xffffffffffffLL) | (pfs & 0xffffffffffffLL);
2033 write_register (IA64_CFM_REGNUM, cfm);
2034
2035 flush_cached_frames ();
2036 }
2037
2038 static void
2039 ia64_remote_translate_xfer_address (CORE_ADDR memaddr, int nr_bytes,
2040 CORE_ADDR *targ_addr, int *targ_len)
2041 {
2042 *targ_addr = memaddr;
2043 *targ_len = nr_bytes;
2044 }
2045
2046 static void
2047 process_note_abi_tag_sections (bfd *abfd, asection *sect, void *obj)
2048 {
2049 int *os_ident_ptr = obj;
2050 const char *name;
2051 unsigned int sectsize;
2052
2053 name = bfd_get_section_name (abfd, sect);
2054 sectsize = bfd_section_size (abfd, sect);
2055 if (strcmp (name, ".note.ABI-tag") == 0 && sectsize > 0)
2056 {
2057 unsigned int name_length, data_length, note_type;
2058 char *note = alloca (sectsize);
2059
2060 bfd_get_section_contents (abfd, sect, note,
2061 (file_ptr) 0, (bfd_size_type) sectsize);
2062
2063 name_length = bfd_h_get_32 (abfd, note);
2064 data_length = bfd_h_get_32 (abfd, note + 4);
2065 note_type = bfd_h_get_32 (abfd, note + 8);
2066
2067 if (name_length == 4 && data_length == 16 && note_type == 1
2068 && strcmp (note + 12, "GNU") == 0)
2069 {
2070 int os_number = bfd_h_get_32 (abfd, note + 16);
2071
2072 /* The case numbers are from abi-tags in glibc */
2073 switch (os_number)
2074 {
2075 case 0 :
2076 *os_ident_ptr = ELFOSABI_LINUX;
2077 break;
2078 case 1 :
2079 *os_ident_ptr = ELFOSABI_HURD;
2080 break;
2081 case 2 :
2082 *os_ident_ptr = ELFOSABI_SOLARIS;
2083 break;
2084 default :
2085 internal_error (__FILE__, __LINE__,
2086 "process_note_abi_sections: unknown OS number %d", os_number);
2087 break;
2088 }
2089 }
2090 }
2091 }
2092
2093 static struct gdbarch *
2094 ia64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2095 {
2096 struct gdbarch *gdbarch;
2097 struct gdbarch_tdep *tdep;
2098 int os_ident;
2099
2100 if (info.abfd != NULL
2101 && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
2102 {
2103 os_ident = elf_elfheader (info.abfd)->e_ident[EI_OSABI];
2104
2105 /* If os_ident is 0, it is not necessarily the case that we're
2106 on a SYSV system. (ELFOSABI_NONE is defined to be 0.)
2107 GNU/Linux uses a note section to record OS/ABI info, but
2108 leaves e_ident[EI_OSABI] zero. So we have to check for note
2109 sections too. */
2110 if (os_ident == 0)
2111 {
2112 bfd_map_over_sections (info.abfd,
2113 process_note_abi_tag_sections,
2114 &os_ident);
2115 }
2116 }
2117 else
2118 os_ident = -1;
2119
2120 for (arches = gdbarch_list_lookup_by_info (arches, &info);
2121 arches != NULL;
2122 arches = gdbarch_list_lookup_by_info (arches->next, &info))
2123 {
2124 tdep = gdbarch_tdep (arches->gdbarch);
2125 if (tdep &&tdep->os_ident == os_ident)
2126 return arches->gdbarch;
2127 }
2128
2129 tdep = xmalloc (sizeof (struct gdbarch_tdep));
2130 gdbarch = gdbarch_alloc (&info, tdep);
2131 tdep->os_ident = os_ident;
2132
2133 /* NOTE: cagney/2002-12-06: This can be deleted when this arch is
2134 ready to unwind the PC first (see frame.c:get_prev_frame()). */
2135 set_gdbarch_deprecated_init_frame_pc (gdbarch, init_frame_pc_default);
2136
2137 /* Set the method of obtaining the sigcontext addresses at which
2138 registers are saved. The method of checking to see if
2139 native_find_global_pointer is nonzero to indicate that we're
2140 on AIX is kind of hokey, but I can't think of a better way
2141 to do it. */
2142 if (os_ident == ELFOSABI_LINUX)
2143 tdep->sigcontext_register_address = ia64_linux_sigcontext_register_address;
2144 else if (native_find_global_pointer != 0)
2145 tdep->sigcontext_register_address = ia64_aix_sigcontext_register_address;
2146 else
2147 tdep->sigcontext_register_address = 0;
2148
2149 /* We know that GNU/Linux won't have to resort to the
2150 native_find_global_pointer hackery. But that's the only one we
2151 know about so far, so if native_find_global_pointer is set to
2152 something non-zero, then use it. Otherwise fall back to using
2153 generic_elf_find_global_pointer. This arrangement should (in
2154 theory) allow us to cross debug GNU/Linux binaries from an AIX
2155 machine. */
2156 if (os_ident == ELFOSABI_LINUX)
2157 tdep->find_global_pointer = generic_elf_find_global_pointer;
2158 else if (native_find_global_pointer != 0)
2159 tdep->find_global_pointer = native_find_global_pointer;
2160 else
2161 tdep->find_global_pointer = generic_elf_find_global_pointer;
2162
2163 set_gdbarch_short_bit (gdbarch, 16);
2164 set_gdbarch_int_bit (gdbarch, 32);
2165 set_gdbarch_long_bit (gdbarch, 64);
2166 set_gdbarch_long_long_bit (gdbarch, 64);
2167 set_gdbarch_float_bit (gdbarch, 32);
2168 set_gdbarch_double_bit (gdbarch, 64);
2169 set_gdbarch_long_double_bit (gdbarch, 64);
2170 set_gdbarch_ptr_bit (gdbarch, 64);
2171
2172 set_gdbarch_num_regs (gdbarch, ia64_num_regs);
2173 set_gdbarch_sp_regnum (gdbarch, sp_regnum);
2174 set_gdbarch_fp_regnum (gdbarch, fp_regnum);
2175 set_gdbarch_pc_regnum (gdbarch, pc_regnum);
2176 set_gdbarch_fp0_regnum (gdbarch, IA64_FR0_REGNUM);
2177
2178 set_gdbarch_register_name (gdbarch, ia64_register_name);
2179 set_gdbarch_register_size (gdbarch, 8);
2180 set_gdbarch_register_bytes (gdbarch, ia64_num_regs * 8 + 128*8);
2181 set_gdbarch_register_byte (gdbarch, ia64_register_byte);
2182 set_gdbarch_register_raw_size (gdbarch, ia64_register_raw_size);
2183 set_gdbarch_deprecated_max_register_raw_size (gdbarch, 16);
2184 set_gdbarch_register_virtual_size (gdbarch, ia64_register_virtual_size);
2185 set_gdbarch_deprecated_max_register_virtual_size (gdbarch, 16);
2186 set_gdbarch_register_virtual_type (gdbarch, ia64_register_virtual_type);
2187
2188 set_gdbarch_skip_prologue (gdbarch, ia64_skip_prologue);
2189
2190 set_gdbarch_frame_num_args (gdbarch, frame_num_args_unknown);
2191 set_gdbarch_frameless_function_invocation (gdbarch, ia64_frameless_function_invocation);
2192
2193 set_gdbarch_saved_pc_after_call (gdbarch, ia64_saved_pc_after_call);
2194
2195 set_gdbarch_deprecated_frame_chain (gdbarch, ia64_frame_chain);
2196 set_gdbarch_deprecated_frame_saved_pc (gdbarch, ia64_frame_saved_pc);
2197
2198 set_gdbarch_deprecated_frame_init_saved_regs (gdbarch, ia64_frame_init_saved_regs);
2199 set_gdbarch_deprecated_get_saved_register (gdbarch, ia64_get_saved_register);
2200
2201 set_gdbarch_register_convertible (gdbarch, ia64_register_convertible);
2202 set_gdbarch_register_convert_to_virtual (gdbarch, ia64_register_convert_to_virtual);
2203 set_gdbarch_register_convert_to_raw (gdbarch, ia64_register_convert_to_raw);
2204
2205 set_gdbarch_use_struct_convention (gdbarch, ia64_use_struct_convention);
2206 set_gdbarch_deprecated_extract_return_value (gdbarch, ia64_extract_return_value);
2207
2208 set_gdbarch_store_struct_return (gdbarch, ia64_store_struct_return);
2209 set_gdbarch_deprecated_store_return_value (gdbarch, ia64_store_return_value);
2210 set_gdbarch_deprecated_extract_struct_value_address (gdbarch, ia64_extract_struct_value_address);
2211
2212 set_gdbarch_memory_insert_breakpoint (gdbarch, ia64_memory_insert_breakpoint);
2213 set_gdbarch_memory_remove_breakpoint (gdbarch, ia64_memory_remove_breakpoint);
2214 set_gdbarch_breakpoint_from_pc (gdbarch, ia64_breakpoint_from_pc);
2215 set_gdbarch_read_pc (gdbarch, ia64_read_pc);
2216 set_gdbarch_write_pc (gdbarch, ia64_write_pc);
2217
2218 /* Settings for calling functions in the inferior. */
2219 set_gdbarch_call_dummy_length (gdbarch, 0);
2220 set_gdbarch_push_arguments (gdbarch, ia64_push_arguments);
2221 set_gdbarch_push_return_address (gdbarch, ia64_push_return_address);
2222 set_gdbarch_deprecated_pop_frame (gdbarch, ia64_pop_frame);
2223
2224 set_gdbarch_call_dummy_p (gdbarch, 1);
2225 set_gdbarch_call_dummy_words (gdbarch, ia64_call_dummy_words);
2226 set_gdbarch_sizeof_call_dummy_words (gdbarch, sizeof (ia64_call_dummy_words));
2227 set_gdbarch_call_dummy_breakpoint_offset_p (gdbarch, 1);
2228 set_gdbarch_deprecated_init_extra_frame_info (gdbarch, ia64_init_extra_frame_info);
2229 set_gdbarch_frame_args_address (gdbarch, ia64_frame_args_address);
2230 set_gdbarch_frame_locals_address (gdbarch, ia64_frame_locals_address);
2231
2232 /* We won't necessarily have a frame pointer and even if we do,
2233 it winds up being extraordinarly messy when attempting to find
2234 the frame chain. So for the purposes of creating frames (which
2235 is all read_fp() is used for), simply use the stack pointer value
2236 instead. */
2237 set_gdbarch_read_fp (gdbarch, generic_target_read_sp);
2238
2239 /* Settings that should be unnecessary. */
2240 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
2241
2242 set_gdbarch_read_sp (gdbarch, generic_target_read_sp);
2243 set_gdbarch_write_sp (gdbarch, generic_target_write_sp);
2244
2245 set_gdbarch_call_dummy_address (gdbarch, entry_point_address);
2246 set_gdbarch_call_dummy_breakpoint_offset (gdbarch, 0);
2247 set_gdbarch_call_dummy_start_offset (gdbarch, 0);
2248 set_gdbarch_call_dummy_stack_adjust_p (gdbarch, 0);
2249 set_gdbarch_fix_call_dummy (gdbarch, generic_fix_call_dummy);
2250
2251 set_gdbarch_decr_pc_after_break (gdbarch, 0);
2252 set_gdbarch_function_start_offset (gdbarch, 0);
2253 set_gdbarch_frame_args_skip (gdbarch, 0);
2254
2255 set_gdbarch_remote_translate_xfer_address (
2256 gdbarch, ia64_remote_translate_xfer_address);
2257
2258 return gdbarch;
2259 }
2260
2261 void
2262 _initialize_ia64_tdep (void)
2263 {
2264 register_gdbarch_init (bfd_arch_ia64, ia64_gdbarch_init);
2265
2266 tm_print_insn = print_insn_ia64;
2267 tm_print_insn_info.bytes_per_line = SLOT_MULTIPLIER;
2268 }
This page took 0.082461 seconds and 4 git commands to generate.