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