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