Add IA64_MAX_FP_REGISTER_SIZE
[external/binutils.git] / gdb / ia64-tdep.c
1 /* Target-dependent code for the IA-64 for GDB, the GNU debugger.
2
3    Copyright (C) 1999-2017 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 3 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, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include "inferior.h"
22 #include "gdbcore.h"
23 #include "arch-utils.h"
24 #include "floatformat.h"
25 #include "gdbtypes.h"
26 #include "regcache.h"
27 #include "reggroups.h"
28 #include "frame.h"
29 #include "frame-base.h"
30 #include "frame-unwind.h"
31 #include "doublest.h"
32 #include "value.h"
33 #include "objfiles.h"
34 #include "elf/common.h"         /* for DT_PLTGOT value */
35 #include "elf-bfd.h"
36 #include "dis-asm.h"
37 #include "infcall.h"
38 #include "osabi.h"
39 #include "ia64-tdep.h"
40 #include "cp-abi.h"
41
42 #ifdef HAVE_LIBUNWIND_IA64_H
43 #include "elf/ia64.h"           /* for PT_IA_64_UNWIND value */
44 #include "ia64-libunwind-tdep.h"
45
46 /* Note: KERNEL_START is supposed to be an address which is not going
47          to ever contain any valid unwind info.  For ia64 linux, the choice
48          of 0xc000000000000000 is fairly safe since that's uncached space.
49  
50          We use KERNEL_START as follows: after obtaining the kernel's
51          unwind table via getunwind(), we project its unwind data into
52          address-range KERNEL_START-(KERNEL_START+ktab_size) and then
53          when ia64_access_mem() sees a memory access to this
54          address-range, we redirect it to ktab instead.
55
56          None of this hackery is needed with a modern kernel/libcs
57          which uses the kernel virtual DSO to provide access to the
58          kernel's unwind info.  In that case, ktab_size remains 0 and
59          hence the value of KERNEL_START doesn't matter.  */
60
61 #define KERNEL_START 0xc000000000000000ULL
62
63 static size_t ktab_size = 0;
64 struct ia64_table_entry
65   {
66     uint64_t start_offset;
67     uint64_t end_offset;
68     uint64_t info_offset;
69   };
70
71 static struct ia64_table_entry *ktab = NULL;
72
73 #endif
74
75 /* An enumeration of the different IA-64 instruction types.  */
76
77 typedef enum instruction_type
78 {
79   A,                    /* Integer ALU ;    I-unit or M-unit */
80   I,                    /* Non-ALU integer; I-unit */
81   M,                    /* Memory ;         M-unit */
82   F,                    /* Floating-point ; F-unit */
83   B,                    /* Branch ;         B-unit */
84   L,                    /* Extended (L+X) ; I-unit */
85   X,                    /* Extended (L+X) ; I-unit */
86   undefined             /* undefined or reserved */
87 } instruction_type;
88
89 /* We represent IA-64 PC addresses as the value of the instruction
90    pointer or'd with some bit combination in the low nibble which
91    represents the slot number in the bundle addressed by the
92    instruction pointer.  The problem is that the Linux kernel
93    multiplies its slot numbers (for exceptions) by one while the
94    disassembler multiplies its slot numbers by 6.  In addition, I've
95    heard it said that the simulator uses 1 as the multiplier.
96    
97    I've fixed the disassembler so that the bytes_per_line field will
98    be the slot multiplier.  If bytes_per_line comes in as zero, it
99    is set to six (which is how it was set up initially). -- objdump
100    displays pretty disassembly dumps with this value.  For our purposes,
101    we'll set bytes_per_line to SLOT_MULTIPLIER. This is okay since we
102    never want to also display the raw bytes the way objdump does.  */
103
104 #define SLOT_MULTIPLIER 1
105
106 /* Length in bytes of an instruction bundle.  */
107
108 #define BUNDLE_LEN 16
109
110 /* See the saved memory layout comment for ia64_memory_insert_breakpoint.  */
111
112 #if BREAKPOINT_MAX < BUNDLE_LEN - 2
113 # error "BREAKPOINT_MAX < BUNDLE_LEN - 2"
114 #endif
115
116 static gdbarch_init_ftype ia64_gdbarch_init;
117
118 static gdbarch_register_name_ftype ia64_register_name;
119 static gdbarch_register_type_ftype ia64_register_type;
120 static gdbarch_breakpoint_from_pc_ftype ia64_breakpoint_from_pc;
121 static gdbarch_skip_prologue_ftype ia64_skip_prologue;
122 static struct type *is_float_or_hfa_type (struct type *t);
123 static CORE_ADDR ia64_find_global_pointer (struct gdbarch *gdbarch,
124                                            CORE_ADDR faddr);
125
126 #define NUM_IA64_RAW_REGS 462
127
128 /* Big enough to hold a FP register in bytes.  */
129 #define IA64_FP_REGISTER_SIZE 16
130
131 static int sp_regnum = IA64_GR12_REGNUM;
132
133 /* NOTE: we treat the register stack registers r32-r127 as
134    pseudo-registers because they may not be accessible via the ptrace
135    register get/set interfaces.  */
136
137 enum pseudo_regs { FIRST_PSEUDO_REGNUM = NUM_IA64_RAW_REGS,
138                    VBOF_REGNUM = IA64_NAT127_REGNUM + 1, V32_REGNUM, 
139                    V127_REGNUM = V32_REGNUM + 95, 
140                    VP0_REGNUM, VP16_REGNUM = VP0_REGNUM + 16,
141                    VP63_REGNUM = VP0_REGNUM + 63, LAST_PSEUDO_REGNUM };
142
143 /* Array of register names; There should be ia64_num_regs strings in
144    the initializer.  */
145
146 static const char *ia64_register_names[] =
147 { "r0",   "r1",   "r2",   "r3",   "r4",   "r5",   "r6",   "r7",
148   "r8",   "r9",   "r10",  "r11",  "r12",  "r13",  "r14",  "r15",
149   "r16",  "r17",  "r18",  "r19",  "r20",  "r21",  "r22",  "r23",
150   "r24",  "r25",  "r26",  "r27",  "r28",  "r29",  "r30",  "r31",
151   "",     "",     "",     "",     "",     "",     "",     "",
152   "",     "",     "",     "",     "",     "",     "",     "",
153   "",     "",     "",     "",     "",     "",     "",     "",
154   "",     "",     "",     "",     "",     "",     "",     "",
155   "",     "",     "",     "",     "",     "",     "",     "",
156   "",     "",     "",     "",     "",     "",     "",     "",
157   "",     "",     "",     "",     "",     "",     "",     "",
158   "",     "",     "",     "",     "",     "",     "",     "",
159   "",     "",     "",     "",     "",     "",     "",     "",
160   "",     "",     "",     "",     "",     "",     "",     "",
161   "",     "",     "",     "",     "",     "",     "",     "",
162   "",     "",     "",     "",     "",     "",     "",     "",
163
164   "f0",   "f1",   "f2",   "f3",   "f4",   "f5",   "f6",   "f7",
165   "f8",   "f9",   "f10",  "f11",  "f12",  "f13",  "f14",  "f15",
166   "f16",  "f17",  "f18",  "f19",  "f20",  "f21",  "f22",  "f23",
167   "f24",  "f25",  "f26",  "f27",  "f28",  "f29",  "f30",  "f31",
168   "f32",  "f33",  "f34",  "f35",  "f36",  "f37",  "f38",  "f39",
169   "f40",  "f41",  "f42",  "f43",  "f44",  "f45",  "f46",  "f47",
170   "f48",  "f49",  "f50",  "f51",  "f52",  "f53",  "f54",  "f55",
171   "f56",  "f57",  "f58",  "f59",  "f60",  "f61",  "f62",  "f63",
172   "f64",  "f65",  "f66",  "f67",  "f68",  "f69",  "f70",  "f71",
173   "f72",  "f73",  "f74",  "f75",  "f76",  "f77",  "f78",  "f79",
174   "f80",  "f81",  "f82",  "f83",  "f84",  "f85",  "f86",  "f87",
175   "f88",  "f89",  "f90",  "f91",  "f92",  "f93",  "f94",  "f95",
176   "f96",  "f97",  "f98",  "f99",  "f100", "f101", "f102", "f103",
177   "f104", "f105", "f106", "f107", "f108", "f109", "f110", "f111",
178   "f112", "f113", "f114", "f115", "f116", "f117", "f118", "f119",
179   "f120", "f121", "f122", "f123", "f124", "f125", "f126", "f127",
180
181   "",     "",     "",     "",     "",     "",     "",     "",
182   "",     "",     "",     "",     "",     "",     "",     "",
183   "",     "",     "",     "",     "",     "",     "",     "",
184   "",     "",     "",     "",     "",     "",     "",     "",
185   "",     "",     "",     "",     "",     "",     "",     "",
186   "",     "",     "",     "",     "",     "",     "",     "",
187   "",     "",     "",     "",     "",     "",     "",     "",
188   "",     "",     "",     "",     "",     "",     "",     "",
189
190   "b0",   "b1",   "b2",   "b3",   "b4",   "b5",   "b6",   "b7",
191
192   "vfp", "vrap",
193
194   "pr", "ip", "psr", "cfm",
195
196   "kr0",   "kr1",   "kr2",   "kr3",   "kr4",   "kr5",   "kr6",   "kr7",
197   "", "", "", "", "", "", "", "",
198   "rsc", "bsp", "bspstore", "rnat",
199   "", "fcr", "", "",
200   "eflag", "csd", "ssd", "cflg", "fsr", "fir", "fdr",  "",
201   "ccv", "", "", "", "unat", "", "", "",
202   "fpsr", "", "", "", "itc",
203   "", "", "", "", "", "", "", "", "", "",
204   "", "", "", "", "", "", "", "", "",
205   "pfs", "lc", "ec",
206   "", "", "", "", "", "", "", "", "", "",
207   "", "", "", "", "", "", "", "", "", "",
208   "", "", "", "", "", "", "", "", "", "",
209   "", "", "", "", "", "", "", "", "", "",
210   "", "", "", "", "", "", "", "", "", "",
211   "", "", "", "", "", "", "", "", "", "",
212   "",
213   "nat0",  "nat1",  "nat2",  "nat3",  "nat4",  "nat5",  "nat6",  "nat7",
214   "nat8",  "nat9",  "nat10", "nat11", "nat12", "nat13", "nat14", "nat15",
215   "nat16", "nat17", "nat18", "nat19", "nat20", "nat21", "nat22", "nat23",
216   "nat24", "nat25", "nat26", "nat27", "nat28", "nat29", "nat30", "nat31",
217   "nat32", "nat33", "nat34", "nat35", "nat36", "nat37", "nat38", "nat39",
218   "nat40", "nat41", "nat42", "nat43", "nat44", "nat45", "nat46", "nat47",
219   "nat48", "nat49", "nat50", "nat51", "nat52", "nat53", "nat54", "nat55",
220   "nat56", "nat57", "nat58", "nat59", "nat60", "nat61", "nat62", "nat63",
221   "nat64", "nat65", "nat66", "nat67", "nat68", "nat69", "nat70", "nat71",
222   "nat72", "nat73", "nat74", "nat75", "nat76", "nat77", "nat78", "nat79",
223   "nat80", "nat81", "nat82", "nat83", "nat84", "nat85", "nat86", "nat87",
224   "nat88", "nat89", "nat90", "nat91", "nat92", "nat93", "nat94", "nat95",
225   "nat96", "nat97", "nat98", "nat99", "nat100","nat101","nat102","nat103",
226   "nat104","nat105","nat106","nat107","nat108","nat109","nat110","nat111",
227   "nat112","nat113","nat114","nat115","nat116","nat117","nat118","nat119",
228   "nat120","nat121","nat122","nat123","nat124","nat125","nat126","nat127",
229
230   "bof",
231   
232   "r32",  "r33",  "r34",  "r35",  "r36",  "r37",  "r38",  "r39",   
233   "r40",  "r41",  "r42",  "r43",  "r44",  "r45",  "r46",  "r47",
234   "r48",  "r49",  "r50",  "r51",  "r52",  "r53",  "r54",  "r55",
235   "r56",  "r57",  "r58",  "r59",  "r60",  "r61",  "r62",  "r63",
236   "r64",  "r65",  "r66",  "r67",  "r68",  "r69",  "r70",  "r71",
237   "r72",  "r73",  "r74",  "r75",  "r76",  "r77",  "r78",  "r79",
238   "r80",  "r81",  "r82",  "r83",  "r84",  "r85",  "r86",  "r87",
239   "r88",  "r89",  "r90",  "r91",  "r92",  "r93",  "r94",  "r95",
240   "r96",  "r97",  "r98",  "r99",  "r100", "r101", "r102", "r103",
241   "r104", "r105", "r106", "r107", "r108", "r109", "r110", "r111",
242   "r112", "r113", "r114", "r115", "r116", "r117", "r118", "r119",
243   "r120", "r121", "r122", "r123", "r124", "r125", "r126", "r127",
244
245   "p0",   "p1",   "p2",   "p3",   "p4",   "p5",   "p6",   "p7",
246   "p8",   "p9",   "p10",  "p11",  "p12",  "p13",  "p14",  "p15",
247   "p16",  "p17",  "p18",  "p19",  "p20",  "p21",  "p22",  "p23",
248   "p24",  "p25",  "p26",  "p27",  "p28",  "p29",  "p30",  "p31",
249   "p32",  "p33",  "p34",  "p35",  "p36",  "p37",  "p38",  "p39",
250   "p40",  "p41",  "p42",  "p43",  "p44",  "p45",  "p46",  "p47",
251   "p48",  "p49",  "p50",  "p51",  "p52",  "p53",  "p54",  "p55",
252   "p56",  "p57",  "p58",  "p59",  "p60",  "p61",  "p62",  "p63",
253 };
254
255 struct ia64_frame_cache
256 {
257   CORE_ADDR base;       /* frame pointer base for frame */
258   CORE_ADDR pc;         /* function start pc for frame */
259   CORE_ADDR saved_sp;   /* stack pointer for frame */
260   CORE_ADDR bsp;        /* points at r32 for the current frame */
261   CORE_ADDR cfm;        /* cfm value for current frame */
262   CORE_ADDR prev_cfm;   /* cfm value for previous frame */
263   int   frameless;
264   int   sof;            /* Size of frame  (decoded from cfm value).  */
265   int   sol;            /* Size of locals (decoded from cfm value).  */
266   int   sor;            /* Number of rotating registers (decoded from
267                            cfm value).  */
268   CORE_ADDR after_prologue;
269   /* Address of first instruction after the last
270      prologue instruction;  Note that there may
271      be instructions from the function's body
272      intermingled with the prologue.  */
273   int mem_stack_frame_size;
274   /* Size of the memory stack frame (may be zero),
275      or -1 if it has not been determined yet.  */
276   int   fp_reg;         /* Register number (if any) used a frame pointer
277                            for this frame.  0 if no register is being used
278                            as the frame pointer.  */
279   
280   /* Saved registers.  */
281   CORE_ADDR saved_regs[NUM_IA64_RAW_REGS];
282
283 };
284
285 static int
286 floatformat_valid (const struct floatformat *fmt, const void *from)
287 {
288   return 1;
289 }
290
291 static const struct floatformat floatformat_ia64_ext_little =
292 {
293   floatformat_little, 82, 0, 1, 17, 65535, 0x1ffff, 18, 64,
294   floatformat_intbit_yes, "floatformat_ia64_ext_little", floatformat_valid, NULL
295 };
296
297 static const struct floatformat floatformat_ia64_ext_big =
298 {
299   floatformat_big, 82, 46, 47, 17, 65535, 0x1ffff, 64, 64,
300   floatformat_intbit_yes, "floatformat_ia64_ext_big", floatformat_valid
301 };
302
303 static const struct floatformat *floatformats_ia64_ext[2] =
304 {
305   &floatformat_ia64_ext_big,
306   &floatformat_ia64_ext_little
307 };
308
309 static struct type *
310 ia64_ext_type (struct gdbarch *gdbarch)
311 {
312   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
313
314   if (!tdep->ia64_ext_type)
315     tdep->ia64_ext_type
316       = arch_float_type (gdbarch, 128, "builtin_type_ia64_ext",
317                          floatformats_ia64_ext);
318
319   return tdep->ia64_ext_type;
320 }
321
322 static int
323 ia64_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
324                           struct reggroup *group)
325 {
326   int vector_p;
327   int float_p;
328   int raw_p;
329   if (group == all_reggroup)
330     return 1;
331   vector_p = TYPE_VECTOR (register_type (gdbarch, regnum));
332   float_p = TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT;
333   raw_p = regnum < NUM_IA64_RAW_REGS;
334   if (group == float_reggroup)
335     return float_p;
336   if (group == vector_reggroup)
337     return vector_p;
338   if (group == general_reggroup)
339     return (!vector_p && !float_p);
340   if (group == save_reggroup || group == restore_reggroup)
341     return raw_p; 
342   return 0;
343 }
344
345 static const char *
346 ia64_register_name (struct gdbarch *gdbarch, int reg)
347 {
348   return ia64_register_names[reg];
349 }
350
351 struct type *
352 ia64_register_type (struct gdbarch *arch, int reg)
353 {
354   if (reg >= IA64_FR0_REGNUM && reg <= IA64_FR127_REGNUM)
355     return ia64_ext_type (arch);
356   else
357     return builtin_type (arch)->builtin_long;
358 }
359
360 static int
361 ia64_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
362 {
363   if (reg >= IA64_GR32_REGNUM && reg <= IA64_GR127_REGNUM)
364     return V32_REGNUM + (reg - IA64_GR32_REGNUM);
365   return reg;
366 }
367
368
369 /* Extract ``len'' bits from an instruction bundle starting at
370    bit ``from''.  */
371
372 static long long
373 extract_bit_field (const gdb_byte *bundle, int from, int len)
374 {
375   long long result = 0LL;
376   int to = from + len;
377   int from_byte = from / 8;
378   int to_byte = to / 8;
379   unsigned char *b = (unsigned char *) bundle;
380   unsigned char c;
381   int lshift;
382   int i;
383
384   c = b[from_byte];
385   if (from_byte == to_byte)
386     c = ((unsigned char) (c << (8 - to % 8))) >> (8 - to % 8);
387   result = c >> (from % 8);
388   lshift = 8 - (from % 8);
389
390   for (i = from_byte+1; i < to_byte; i++)
391     {
392       result |= ((long long) b[i]) << lshift;
393       lshift += 8;
394     }
395
396   if (from_byte < to_byte && (to % 8 != 0))
397     {
398       c = b[to_byte];
399       c = ((unsigned char) (c << (8 - to % 8))) >> (8 - to % 8);
400       result |= ((long long) c) << lshift;
401     }
402
403   return result;
404 }
405
406 /* Replace the specified bits in an instruction bundle.  */
407
408 static void
409 replace_bit_field (gdb_byte *bundle, long long val, int from, int len)
410 {
411   int to = from + len;
412   int from_byte = from / 8;
413   int to_byte = to / 8;
414   unsigned char *b = (unsigned char *) bundle;
415   unsigned char c;
416
417   if (from_byte == to_byte)
418     {
419       unsigned char left, right;
420       c = b[from_byte];
421       left = (c >> (to % 8)) << (to % 8);
422       right = ((unsigned char) (c << (8 - from % 8))) >> (8 - from % 8);
423       c = (unsigned char) (val & 0xff);
424       c = (unsigned char) (c << (from % 8 + 8 - to % 8)) >> (8 - to % 8);
425       c |= right | left;
426       b[from_byte] = c;
427     }
428   else
429     {
430       int i;
431       c = b[from_byte];
432       c = ((unsigned char) (c << (8 - from % 8))) >> (8 - from % 8);
433       c = c | (val << (from % 8));
434       b[from_byte] = c;
435       val >>= 8 - from % 8;
436
437       for (i = from_byte+1; i < to_byte; i++)
438         {
439           c = val & 0xff;
440           val >>= 8;
441           b[i] = c;
442         }
443
444       if (to % 8 != 0)
445         {
446           unsigned char cv = (unsigned char) val;
447           c = b[to_byte];
448           c = c >> (to % 8) << (to % 8);
449           c |= ((unsigned char) (cv << (8 - to % 8))) >> (8 - to % 8);
450           b[to_byte] = c;
451         }
452     }
453 }
454
455 /* Return the contents of slot N (for N = 0, 1, or 2) in
456    and instruction bundle.  */
457
458 static long long
459 slotN_contents (gdb_byte *bundle, int slotnum)
460 {
461   return extract_bit_field (bundle, 5+41*slotnum, 41);
462 }
463
464 /* Store an instruction in an instruction bundle.  */
465
466 static void
467 replace_slotN_contents (gdb_byte *bundle, long long instr, int slotnum)
468 {
469   replace_bit_field (bundle, instr, 5+41*slotnum, 41);
470 }
471
472 static const enum instruction_type template_encoding_table[32][3] =
473 {
474   { M, I, I },                          /* 00 */
475   { M, I, I },                          /* 01 */
476   { M, I, I },                          /* 02 */
477   { M, I, I },                          /* 03 */
478   { M, L, X },                          /* 04 */
479   { M, L, X },                          /* 05 */
480   { undefined, undefined, undefined },  /* 06 */
481   { undefined, undefined, undefined },  /* 07 */
482   { M, M, I },                          /* 08 */
483   { M, M, I },                          /* 09 */
484   { M, M, I },                          /* 0A */
485   { M, M, I },                          /* 0B */
486   { M, F, I },                          /* 0C */
487   { M, F, I },                          /* 0D */
488   { M, M, F },                          /* 0E */
489   { M, M, F },                          /* 0F */
490   { M, I, B },                          /* 10 */
491   { M, I, B },                          /* 11 */
492   { M, B, B },                          /* 12 */
493   { M, B, B },                          /* 13 */
494   { undefined, undefined, undefined },  /* 14 */
495   { undefined, undefined, undefined },  /* 15 */
496   { B, B, B },                          /* 16 */
497   { B, B, B },                          /* 17 */
498   { M, M, B },                          /* 18 */
499   { M, M, B },                          /* 19 */
500   { undefined, undefined, undefined },  /* 1A */
501   { undefined, undefined, undefined },  /* 1B */
502   { M, F, B },                          /* 1C */
503   { M, F, B },                          /* 1D */
504   { undefined, undefined, undefined },  /* 1E */
505   { undefined, undefined, undefined },  /* 1F */
506 };
507
508 /* Fetch and (partially) decode an instruction at ADDR and return the
509    address of the next instruction to fetch.  */
510
511 static CORE_ADDR
512 fetch_instruction (CORE_ADDR addr, instruction_type *it, long long *instr)
513 {
514   gdb_byte bundle[BUNDLE_LEN];
515   int slotnum = (int) (addr & 0x0f) / SLOT_MULTIPLIER;
516   long long templ;
517   int val;
518
519   /* Warn about slot numbers greater than 2.  We used to generate
520      an error here on the assumption that the user entered an invalid
521      address.  But, sometimes GDB itself requests an invalid address.
522      This can (easily) happen when execution stops in a function for
523      which there are no symbols.  The prologue scanner will attempt to
524      find the beginning of the function - if the nearest symbol
525      happens to not be aligned on a bundle boundary (16 bytes), the
526      resulting starting address will cause GDB to think that the slot
527      number is too large.
528
529      So we warn about it and set the slot number to zero.  It is
530      not necessarily a fatal condition, particularly if debugging
531      at the assembly language level.  */
532   if (slotnum > 2)
533     {
534       warning (_("Can't fetch instructions for slot numbers greater than 2.\n"
535                "Using slot 0 instead"));
536       slotnum = 0;
537     }
538
539   addr &= ~0x0f;
540
541   val = target_read_memory (addr, bundle, BUNDLE_LEN);
542
543   if (val != 0)
544     return 0;
545
546   *instr = slotN_contents (bundle, slotnum);
547   templ = extract_bit_field (bundle, 0, 5);
548   *it = template_encoding_table[(int)templ][slotnum];
549
550   if (slotnum == 2 || (slotnum == 1 && *it == L))
551     addr += 16;
552   else
553     addr += (slotnum + 1) * SLOT_MULTIPLIER;
554
555   return addr;
556 }
557
558 /* There are 5 different break instructions (break.i, break.b,
559    break.m, break.f, and break.x), but they all have the same
560    encoding.  (The five bit template in the low five bits of the
561    instruction bundle distinguishes one from another.)
562    
563    The runtime architecture manual specifies that break instructions
564    used for debugging purposes must have the upper two bits of the 21
565    bit immediate set to a 0 and a 1 respectively.  A breakpoint
566    instruction encodes the most significant bit of its 21 bit
567    immediate at bit 36 of the 41 bit instruction.  The penultimate msb
568    is at bit 25 which leads to the pattern below.  
569    
570    Originally, I had this set up to do, e.g, a "break.i 0x80000"  But
571    it turns out that 0x80000 was used as the syscall break in the early
572    simulators.  So I changed the pattern slightly to do "break.i 0x080001"
573    instead.  But that didn't work either (I later found out that this
574    pattern was used by the simulator that I was using.)  So I ended up
575    using the pattern seen below.
576
577    SHADOW_CONTENTS has byte-based addressing (PLACED_ADDRESS and SHADOW_LEN)
578    while we need bit-based addressing as the instructions length is 41 bits and
579    we must not modify/corrupt the adjacent slots in the same bundle.
580    Fortunately we may store larger memory incl. the adjacent bits with the
581    original memory content (not the possibly already stored breakpoints there).
582    We need to be careful in ia64_memory_remove_breakpoint to always restore
583    only the specific bits of this instruction ignoring any adjacent stored
584    bits.
585
586    We use the original addressing with the low nibble in the range <0..2> which
587    gets incorrectly interpreted by generic non-ia64 breakpoint_restore_shadows
588    as the direct byte offset of SHADOW_CONTENTS.  We store whole BUNDLE_LEN
589    bytes just without these two possibly skipped bytes to not to exceed to the
590    next bundle.
591
592    If we would like to store the whole bundle to SHADOW_CONTENTS we would have
593    to store already the base address (`address & ~0x0f') into PLACED_ADDRESS.
594    In such case there is no other place where to store
595    SLOTNUM (`adress & 0x0f', value in the range <0..2>).  We need to know
596    SLOTNUM in ia64_memory_remove_breakpoint.
597
598    There is one special case where we need to be extra careful:
599    L-X instructions, which are instructions that occupy 2 slots
600    (The L part is always in slot 1, and the X part is always in
601    slot 2).  We must refuse to insert breakpoints for an address
602    that points at slot 2 of a bundle where an L-X instruction is
603    present, since there is logically no instruction at that address.
604    However, to make things more interesting, the opcode of L-X
605    instructions is located in slot 2.  This means that, to insert
606    a breakpoint at an address that points to slot 1, we actually
607    need to write the breakpoint in slot 2!  Slot 1 is actually
608    the extended operand, so writing the breakpoint there would not
609    have the desired effect.  Another side-effect of this issue
610    is that we need to make sure that the shadow contents buffer
611    does save byte 15 of our instruction bundle (this is the tail
612    end of slot 2, which wouldn't be saved if we were to insert
613    the breakpoint in slot 1).
614    
615    ia64 16-byte bundle layout:
616    | 5 bits | slot 0 with 41 bits | slot 1 with 41 bits | slot 2 with 41 bits |
617    
618    The current addressing used by the code below:
619    original PC   placed_address   placed_size             required    covered
620                                   == bp_tgt->shadow_len   reqd \subset covered
621    0xABCDE0      0xABCDE0         0x10                    <0x0...0x5> <0x0..0xF>
622    0xABCDE1      0xABCDE1         0xF                     <0x5...0xA> <0x1..0xF>
623    0xABCDE2      0xABCDE2         0xE                     <0xA...0xF> <0x2..0xF>
624
625    L-X instructions are treated a little specially, as explained above:
626    0xABCDE1      0xABCDE1         0xF                     <0xA...0xF> <0x1..0xF>
627
628    `objdump -d' and some other tools show a bit unjustified offsets:
629    original PC   byte where starts the instruction   objdump offset
630    0xABCDE0      0xABCDE0                            0xABCDE0
631    0xABCDE1      0xABCDE5                            0xABCDE6
632    0xABCDE2      0xABCDEA                            0xABCDEC
633    */
634
635 #define IA64_BREAKPOINT 0x00003333300LL
636
637 static int
638 ia64_memory_insert_breakpoint (struct gdbarch *gdbarch,
639                                struct bp_target_info *bp_tgt)
640 {
641   CORE_ADDR addr = bp_tgt->placed_address = bp_tgt->reqstd_address;
642   gdb_byte bundle[BUNDLE_LEN];
643   int slotnum = (int) (addr & 0x0f) / SLOT_MULTIPLIER, shadow_slotnum;
644   long long instr_breakpoint;
645   int val;
646   int templ;
647   struct cleanup *cleanup;
648
649   if (slotnum > 2)
650     error (_("Can't insert breakpoint for slot numbers greater than 2."));
651
652   addr &= ~0x0f;
653
654   /* Enable the automatic memory restoration from breakpoints while
655      we read our instruction bundle for the purpose of SHADOW_CONTENTS.
656      Otherwise, we could possibly store into the shadow parts of the adjacent
657      placed breakpoints.  It is due to our SHADOW_CONTENTS overlapping the real
658      breakpoint instruction bits region.  */
659   cleanup = make_show_memory_breakpoints_cleanup (0);
660   val = target_read_memory (addr, bundle, BUNDLE_LEN);
661   if (val != 0)
662     {
663       do_cleanups (cleanup);
664       return val;
665     }
666
667   /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
668      for addressing the SHADOW_CONTENTS placement.  */
669   shadow_slotnum = slotnum;
670
671   /* Always cover the last byte of the bundle in case we are inserting
672      a breakpoint on an L-X instruction.  */
673   bp_tgt->shadow_len = BUNDLE_LEN - shadow_slotnum;
674
675   templ = extract_bit_field (bundle, 0, 5);
676   if (template_encoding_table[templ][slotnum] == X)
677     {
678       /* X unit types can only be used in slot 2, and are actually
679          part of a 2-slot L-X instruction.  We cannot break at this
680          address, as this is the second half of an instruction that
681          lives in slot 1 of that bundle.  */
682       gdb_assert (slotnum == 2);
683       error (_("Can't insert breakpoint for non-existing slot X"));
684     }
685   if (template_encoding_table[templ][slotnum] == L)
686     {
687       /* L unit types can only be used in slot 1.  But the associated
688          opcode for that instruction is in slot 2, so bump the slot number
689          accordingly.  */
690       gdb_assert (slotnum == 1);
691       slotnum = 2;
692     }
693
694   /* Store the whole bundle, except for the initial skipped bytes by the slot
695      number interpreted as bytes offset in PLACED_ADDRESS.  */
696   memcpy (bp_tgt->shadow_contents, bundle + shadow_slotnum,
697           bp_tgt->shadow_len);
698
699   /* Re-read the same bundle as above except that, this time, read it in order
700      to compute the new bundle inside which we will be inserting the
701      breakpoint.  Therefore, disable the automatic memory restoration from
702      breakpoints while we read our instruction bundle.  Otherwise, the general
703      restoration mechanism kicks in and we would possibly remove parts of the
704      adjacent placed breakpoints.  It is due to our SHADOW_CONTENTS overlapping
705      the real breakpoint instruction bits region.  */
706   make_show_memory_breakpoints_cleanup (1);
707   val = target_read_memory (addr, bundle, BUNDLE_LEN);
708   if (val != 0)
709     {
710       do_cleanups (cleanup);
711       return val;
712     }
713
714   /* Breakpoints already present in the code will get deteacted and not get
715      reinserted by bp_loc_is_permanent.  Multiple breakpoints at the same
716      location cannot induce the internal error as they are optimized into
717      a single instance by update_global_location_list.  */
718   instr_breakpoint = slotN_contents (bundle, slotnum);
719   if (instr_breakpoint == IA64_BREAKPOINT)
720     internal_error (__FILE__, __LINE__,
721                     _("Address %s already contains a breakpoint."),
722                     paddress (gdbarch, bp_tgt->placed_address));
723   replace_slotN_contents (bundle, IA64_BREAKPOINT, slotnum);
724
725   val = target_write_memory (addr + shadow_slotnum, bundle + shadow_slotnum,
726                              bp_tgt->shadow_len);
727
728   do_cleanups (cleanup);
729   return val;
730 }
731
732 static int
733 ia64_memory_remove_breakpoint (struct gdbarch *gdbarch,
734                                struct bp_target_info *bp_tgt)
735 {
736   CORE_ADDR addr = bp_tgt->placed_address;
737   gdb_byte bundle_mem[BUNDLE_LEN], bundle_saved[BUNDLE_LEN];
738   int slotnum = (addr & 0x0f) / SLOT_MULTIPLIER, shadow_slotnum;
739   long long instr_breakpoint, instr_saved;
740   int val;
741   int templ;
742   struct cleanup *cleanup;
743
744   addr &= ~0x0f;
745
746   /* Disable the automatic memory restoration from breakpoints while
747      we read our instruction bundle.  Otherwise, the general restoration
748      mechanism kicks in and we would possibly remove parts of the adjacent
749      placed breakpoints.  It is due to our SHADOW_CONTENTS overlapping the real
750      breakpoint instruction bits region.  */
751   cleanup = make_show_memory_breakpoints_cleanup (1);
752   val = target_read_memory (addr, bundle_mem, BUNDLE_LEN);
753   if (val != 0)
754     {
755       do_cleanups (cleanup);
756       return val;
757     }
758
759   /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
760      for addressing the SHADOW_CONTENTS placement.  */
761   shadow_slotnum = slotnum;
762
763   templ = extract_bit_field (bundle_mem, 0, 5);
764   if (template_encoding_table[templ][slotnum] == X)
765     {
766       /* X unit types can only be used in slot 2, and are actually
767          part of a 2-slot L-X instruction.  We refuse to insert
768          breakpoints at this address, so there should be no reason
769          for us attempting to remove one there, except if the program's
770          code somehow got modified in memory.  */
771       gdb_assert (slotnum == 2);
772       warning (_("Cannot remove breakpoint at address %s from non-existing "
773                  "X-type slot, memory has changed underneath"),
774                paddress (gdbarch, bp_tgt->placed_address));
775       do_cleanups (cleanup);
776       return -1;
777     }
778   if (template_encoding_table[templ][slotnum] == L)
779     {
780       /* L unit types can only be used in slot 1.  But the breakpoint
781          was actually saved using slot 2, so update the slot number
782          accordingly.  */
783       gdb_assert (slotnum == 1);
784       slotnum = 2;
785     }
786
787   gdb_assert (bp_tgt->shadow_len == BUNDLE_LEN - shadow_slotnum);
788
789   instr_breakpoint = slotN_contents (bundle_mem, slotnum);
790   if (instr_breakpoint != IA64_BREAKPOINT)
791     {
792       warning (_("Cannot remove breakpoint at address %s, "
793                  "no break instruction at such address."),
794                paddress (gdbarch, bp_tgt->placed_address));
795       do_cleanups (cleanup);
796       return -1;
797     }
798
799   /* Extract the original saved instruction from SLOTNUM normalizing its
800      bit-shift for INSTR_SAVED.  */
801   memcpy (bundle_saved, bundle_mem, BUNDLE_LEN);
802   memcpy (bundle_saved + shadow_slotnum, bp_tgt->shadow_contents,
803           bp_tgt->shadow_len);
804   instr_saved = slotN_contents (bundle_saved, slotnum);
805
806   /* In BUNDLE_MEM, be careful to modify only the bits belonging to SLOTNUM
807      and not any of the other ones that are stored in SHADOW_CONTENTS.  */
808   replace_slotN_contents (bundle_mem, instr_saved, slotnum);
809   val = target_write_raw_memory (addr, bundle_mem, BUNDLE_LEN);
810
811   do_cleanups (cleanup);
812   return val;
813 }
814
815 /* Implement the breakpoint_kind_from_pc gdbarch method.  */
816
817 static int
818 ia64_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
819 {
820   /* A place holder of gdbarch method breakpoint_kind_from_pc.   */
821   return 0;
822 }
823
824 /* As gdbarch_breakpoint_from_pc ranges have byte granularity and ia64
825    instruction slots ranges are bit-granular (41 bits) we have to provide an
826    extended range as described for ia64_memory_insert_breakpoint.  We also take
827    care of preserving the `break' instruction 21-bit (or 62-bit) parameter to
828    make a match for permanent breakpoints.  */
829
830 static const gdb_byte *
831 ia64_breakpoint_from_pc (struct gdbarch *gdbarch,
832                          CORE_ADDR *pcptr, int *lenptr)
833 {
834   CORE_ADDR addr = *pcptr;
835   static gdb_byte bundle[BUNDLE_LEN];
836   int slotnum = (int) (*pcptr & 0x0f) / SLOT_MULTIPLIER, shadow_slotnum;
837   long long instr_fetched;
838   int val;
839   int templ;
840   struct cleanup *cleanup;
841
842   if (slotnum > 2)
843     error (_("Can't insert breakpoint for slot numbers greater than 2."));
844
845   addr &= ~0x0f;
846
847   /* Enable the automatic memory restoration from breakpoints while
848      we read our instruction bundle to match bp_loc_is_permanent.  */
849   cleanup = make_show_memory_breakpoints_cleanup (0);
850   val = target_read_memory (addr, bundle, BUNDLE_LEN);
851   do_cleanups (cleanup);
852
853   /* The memory might be unreachable.  This can happen, for instance,
854      when the user inserts a breakpoint at an invalid address.  */
855   if (val != 0)
856     return NULL;
857
858   /* SHADOW_SLOTNUM saves the original slot number as expected by the caller
859      for addressing the SHADOW_CONTENTS placement.  */
860   shadow_slotnum = slotnum;
861
862   /* Cover always the last byte of the bundle for the L-X slot case.  */
863   *lenptr = BUNDLE_LEN - shadow_slotnum;
864
865   /* Check for L type instruction in slot 1, if present then bump up the slot
866      number to the slot 2.  */
867   templ = extract_bit_field (bundle, 0, 5);
868   if (template_encoding_table[templ][slotnum] == X)
869     {
870       gdb_assert (slotnum == 2);
871       error (_("Can't insert breakpoint for non-existing slot X"));
872     }
873   if (template_encoding_table[templ][slotnum] == L)
874     {
875       gdb_assert (slotnum == 1);
876       slotnum = 2;
877     }
878
879   /* A break instruction has its all its opcode bits cleared except for
880      the parameter value.  For L+X slot pair we are at the X slot (slot 2) so
881      we should not touch the L slot - the upper 41 bits of the parameter.  */
882   instr_fetched = slotN_contents (bundle, slotnum);
883   instr_fetched &= 0x1003ffffc0LL;
884   replace_slotN_contents (bundle, instr_fetched, slotnum);
885
886   return bundle + shadow_slotnum;
887 }
888
889 static CORE_ADDR
890 ia64_read_pc (struct regcache *regcache)
891 {
892   ULONGEST psr_value, pc_value;
893   int slot_num;
894
895   regcache_cooked_read_unsigned (regcache, IA64_PSR_REGNUM, &psr_value);
896   regcache_cooked_read_unsigned (regcache, IA64_IP_REGNUM, &pc_value);
897   slot_num = (psr_value >> 41) & 3;
898
899   return pc_value | (slot_num * SLOT_MULTIPLIER);
900 }
901
902 void
903 ia64_write_pc (struct regcache *regcache, CORE_ADDR new_pc)
904 {
905   int slot_num = (int) (new_pc & 0xf) / SLOT_MULTIPLIER;
906   ULONGEST psr_value;
907
908   regcache_cooked_read_unsigned (regcache, IA64_PSR_REGNUM, &psr_value);
909   psr_value &= ~(3LL << 41);
910   psr_value |= (ULONGEST)(slot_num & 0x3) << 41;
911
912   new_pc &= ~0xfLL;
913
914   regcache_cooked_write_unsigned (regcache, IA64_PSR_REGNUM, psr_value);
915   regcache_cooked_write_unsigned (regcache, IA64_IP_REGNUM, new_pc);
916 }
917
918 #define IS_NaT_COLLECTION_ADDR(addr) ((((addr) >> 3) & 0x3f) == 0x3f)
919
920 /* Returns the address of the slot that's NSLOTS slots away from
921    the address ADDR.  NSLOTS may be positive or negative.  */
922 static CORE_ADDR
923 rse_address_add(CORE_ADDR addr, int nslots)
924 {
925   CORE_ADDR new_addr;
926   int mandatory_nat_slots = nslots / 63;
927   int direction = nslots < 0 ? -1 : 1;
928
929   new_addr = addr + 8 * (nslots + mandatory_nat_slots);
930
931   if ((new_addr >> 9)  != ((addr + 8 * 64 * mandatory_nat_slots) >> 9))
932     new_addr += 8 * direction;
933
934   if (IS_NaT_COLLECTION_ADDR(new_addr))
935     new_addr += 8 * direction;
936
937   return new_addr;
938 }
939
940 static enum register_status
941 ia64_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache,
942                            int regnum, gdb_byte *buf)
943 {
944   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
945   enum register_status status;
946
947   if (regnum >= V32_REGNUM && regnum <= V127_REGNUM)
948     {
949 #ifdef HAVE_LIBUNWIND_IA64_H
950       /* First try and use the libunwind special reg accessor,
951          otherwise fallback to standard logic.  */
952       if (!libunwind_is_initialized ()
953           || libunwind_get_reg_special (gdbarch, regcache, regnum, buf) != 0)
954 #endif
955         {
956           /* The fallback position is to assume that r32-r127 are
957              found sequentially in memory starting at $bof.  This
958              isn't always true, but without libunwind, this is the
959              best we can do.  */
960           enum register_status status;
961           ULONGEST cfm;
962           ULONGEST bsp;
963           CORE_ADDR reg;
964
965           status = regcache_cooked_read_unsigned (regcache,
966                                                   IA64_BSP_REGNUM, &bsp);
967           if (status != REG_VALID)
968             return status;
969
970           status = regcache_cooked_read_unsigned (regcache,
971                                                   IA64_CFM_REGNUM, &cfm);
972           if (status != REG_VALID)
973             return status;
974
975           /* The bsp points at the end of the register frame so we
976              subtract the size of frame from it to get start of
977              register frame.  */
978           bsp = rse_address_add (bsp, -(cfm & 0x7f));
979           
980           if ((cfm & 0x7f) > regnum - V32_REGNUM) 
981             {
982               ULONGEST reg_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
983               reg = read_memory_integer ((CORE_ADDR)reg_addr, 8, byte_order);
984               store_unsigned_integer (buf, register_size (gdbarch, regnum),
985                                       byte_order, reg);
986             }
987           else
988             store_unsigned_integer (buf, register_size (gdbarch, regnum),
989                                     byte_order, 0);
990         }
991     }
992   else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT31_REGNUM)
993     {
994       ULONGEST unatN_val;
995       ULONGEST unat;
996       status = regcache_cooked_read_unsigned (regcache, IA64_UNAT_REGNUM, &unat);
997       if (status != REG_VALID)
998         return status;
999       unatN_val = (unat & (1LL << (regnum - IA64_NAT0_REGNUM))) != 0;
1000       store_unsigned_integer (buf, register_size (gdbarch, regnum),
1001                               byte_order, unatN_val);
1002     }
1003   else if (IA64_NAT32_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
1004     {
1005       ULONGEST natN_val = 0;
1006       ULONGEST bsp;
1007       ULONGEST cfm;
1008       CORE_ADDR gr_addr = 0;
1009       status = regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
1010       if (status != REG_VALID)
1011         return status;
1012       status = regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1013       if (status != REG_VALID)
1014         return status;
1015
1016       /* The bsp points at the end of the register frame so we
1017          subtract the size of frame from it to get start of register frame.  */
1018       bsp = rse_address_add (bsp, -(cfm & 0x7f));
1019  
1020       if ((cfm & 0x7f) > regnum - V32_REGNUM) 
1021         gr_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
1022       
1023       if (gr_addr != 0)
1024         {
1025           /* Compute address of nat collection bits.  */
1026           CORE_ADDR nat_addr = gr_addr | 0x1f8;
1027           CORE_ADDR nat_collection;
1028           int nat_bit;
1029           /* If our nat collection address is bigger than bsp, we have to get
1030              the nat collection from rnat.  Otherwise, we fetch the nat
1031              collection from the computed address.  */
1032           if (nat_addr >= bsp)
1033             regcache_cooked_read_unsigned (regcache, IA64_RNAT_REGNUM,
1034                                            &nat_collection);
1035           else
1036             nat_collection = read_memory_integer (nat_addr, 8, byte_order);
1037           nat_bit = (gr_addr >> 3) & 0x3f;
1038           natN_val = (nat_collection >> nat_bit) & 1;
1039         }
1040       
1041       store_unsigned_integer (buf, register_size (gdbarch, regnum),
1042                               byte_order, natN_val);
1043     }
1044   else if (regnum == VBOF_REGNUM)
1045     {
1046       /* A virtual register frame start is provided for user convenience.
1047          It can be calculated as the bsp - sof (sizeof frame).  */
1048       ULONGEST bsp, vbsp;
1049       ULONGEST cfm;
1050       status = regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
1051       if (status != REG_VALID)
1052         return status;
1053       status = regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1054       if (status != REG_VALID)
1055         return status;
1056
1057       /* The bsp points at the end of the register frame so we
1058          subtract the size of frame from it to get beginning of frame.  */
1059       vbsp = rse_address_add (bsp, -(cfm & 0x7f));
1060       store_unsigned_integer (buf, register_size (gdbarch, regnum),
1061                               byte_order, vbsp);
1062     }
1063   else if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
1064     {
1065       ULONGEST pr;
1066       ULONGEST cfm;
1067       ULONGEST prN_val;
1068       status = regcache_cooked_read_unsigned (regcache, IA64_PR_REGNUM, &pr);
1069       if (status != REG_VALID)
1070         return status;
1071       status = regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1072       if (status != REG_VALID)
1073         return status;
1074
1075       if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
1076         {
1077           /* Fetch predicate register rename base from current frame
1078              marker for this frame.  */
1079           int rrb_pr = (cfm >> 32) & 0x3f;
1080
1081           /* Adjust the register number to account for register rotation.  */
1082           regnum = VP16_REGNUM 
1083                  + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
1084         }
1085       prN_val = (pr & (1LL << (regnum - VP0_REGNUM))) != 0;
1086       store_unsigned_integer (buf, register_size (gdbarch, regnum),
1087                               byte_order, prN_val);
1088     }
1089   else
1090     memset (buf, 0, register_size (gdbarch, regnum));
1091
1092   return REG_VALID;
1093 }
1094
1095 static void
1096 ia64_pseudo_register_write (struct gdbarch *gdbarch, struct regcache *regcache,
1097                             int regnum, const gdb_byte *buf)
1098 {
1099   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1100
1101   if (regnum >= V32_REGNUM && regnum <= V127_REGNUM)
1102     {
1103       ULONGEST bsp;
1104       ULONGEST cfm;
1105       regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
1106       regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1107
1108       bsp = rse_address_add (bsp, -(cfm & 0x7f));
1109  
1110       if ((cfm & 0x7f) > regnum - V32_REGNUM) 
1111         {
1112           ULONGEST reg_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
1113           write_memory (reg_addr, buf, 8);
1114         }
1115     }
1116   else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT31_REGNUM)
1117     {
1118       ULONGEST unatN_val, unat, unatN_mask;
1119       regcache_cooked_read_unsigned (regcache, IA64_UNAT_REGNUM, &unat);
1120       unatN_val = extract_unsigned_integer (buf, register_size (gdbarch,
1121                                                                 regnum),
1122                                             byte_order);
1123       unatN_mask = (1LL << (regnum - IA64_NAT0_REGNUM));
1124       if (unatN_val == 0)
1125         unat &= ~unatN_mask;
1126       else if (unatN_val == 1)
1127         unat |= unatN_mask;
1128       regcache_cooked_write_unsigned (regcache, IA64_UNAT_REGNUM, unat);
1129     }
1130   else if (IA64_NAT32_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
1131     {
1132       ULONGEST natN_val;
1133       ULONGEST bsp;
1134       ULONGEST cfm;
1135       CORE_ADDR gr_addr = 0;
1136       regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
1137       regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1138
1139       /* The bsp points at the end of the register frame so we
1140          subtract the size of frame from it to get start of register frame.  */
1141       bsp = rse_address_add (bsp, -(cfm & 0x7f));
1142  
1143       if ((cfm & 0x7f) > regnum - V32_REGNUM) 
1144         gr_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
1145       
1146       natN_val = extract_unsigned_integer (buf, register_size (gdbarch,
1147                                                                regnum),
1148                                            byte_order);
1149
1150       if (gr_addr != 0 && (natN_val == 0 || natN_val == 1))
1151         {
1152           /* Compute address of nat collection bits.  */
1153           CORE_ADDR nat_addr = gr_addr | 0x1f8;
1154           CORE_ADDR nat_collection;
1155           int natN_bit = (gr_addr >> 3) & 0x3f;
1156           ULONGEST natN_mask = (1LL << natN_bit);
1157           /* If our nat collection address is bigger than bsp, we have to get
1158              the nat collection from rnat.  Otherwise, we fetch the nat
1159              collection from the computed address.  */
1160           if (nat_addr >= bsp)
1161             {
1162               regcache_cooked_read_unsigned (regcache,
1163                                              IA64_RNAT_REGNUM,
1164                                              &nat_collection);
1165               if (natN_val)
1166                 nat_collection |= natN_mask;
1167               else
1168                 nat_collection &= ~natN_mask;
1169               regcache_cooked_write_unsigned (regcache, IA64_RNAT_REGNUM,
1170                                               nat_collection);
1171             }
1172           else
1173             {
1174               gdb_byte nat_buf[8];
1175               nat_collection = read_memory_integer (nat_addr, 8, byte_order);
1176               if (natN_val)
1177                 nat_collection |= natN_mask;
1178               else
1179                 nat_collection &= ~natN_mask;
1180               store_unsigned_integer (nat_buf, register_size (gdbarch, regnum),
1181                                       byte_order, nat_collection);
1182               write_memory (nat_addr, nat_buf, 8);
1183             }
1184         }
1185     }
1186   else if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
1187     {
1188       ULONGEST pr;
1189       ULONGEST cfm;
1190       ULONGEST prN_val;
1191       ULONGEST prN_mask;
1192
1193       regcache_cooked_read_unsigned (regcache, IA64_PR_REGNUM, &pr);
1194       regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
1195
1196       if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
1197         {
1198           /* Fetch predicate register rename base from current frame
1199              marker for this frame.  */
1200           int rrb_pr = (cfm >> 32) & 0x3f;
1201
1202           /* Adjust the register number to account for register rotation.  */
1203           regnum = VP16_REGNUM 
1204                  + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
1205         }
1206       prN_val = extract_unsigned_integer (buf, register_size (gdbarch, regnum),
1207                                           byte_order);
1208       prN_mask = (1LL << (regnum - VP0_REGNUM));
1209       if (prN_val == 0)
1210         pr &= ~prN_mask;
1211       else if (prN_val == 1)
1212         pr |= prN_mask;
1213       regcache_cooked_write_unsigned (regcache, IA64_PR_REGNUM, pr);
1214     }
1215 }
1216
1217 /* The ia64 needs to convert between various ieee floating-point formats
1218    and the special ia64 floating point register format.  */
1219
1220 static int
1221 ia64_convert_register_p (struct gdbarch *gdbarch, int regno, struct type *type)
1222 {
1223   return (regno >= IA64_FR0_REGNUM && regno <= IA64_FR127_REGNUM
1224           && TYPE_CODE (type) == TYPE_CODE_FLT
1225           && type != ia64_ext_type (gdbarch));
1226 }
1227
1228 static int
1229 ia64_register_to_value (struct frame_info *frame, int regnum,
1230                         struct type *valtype, gdb_byte *out,
1231                         int *optimizedp, int *unavailablep)
1232 {
1233   struct gdbarch *gdbarch = get_frame_arch (frame);
1234   gdb_byte in[IA64_FP_REGISTER_SIZE];
1235
1236   /* Convert to TYPE.  */
1237   if (!get_frame_register_bytes (frame, regnum, 0,
1238                                  register_size (gdbarch, regnum),
1239                                  in, optimizedp, unavailablep))
1240     return 0;
1241
1242   convert_typed_floating (in, ia64_ext_type (gdbarch), out, valtype);
1243   *optimizedp = *unavailablep = 0;
1244   return 1;
1245 }
1246
1247 static void
1248 ia64_value_to_register (struct frame_info *frame, int regnum,
1249                          struct type *valtype, const gdb_byte *in)
1250 {
1251   struct gdbarch *gdbarch = get_frame_arch (frame);
1252   gdb_byte out[IA64_FP_REGISTER_SIZE];
1253   convert_typed_floating (in, valtype, out, ia64_ext_type (gdbarch));
1254   put_frame_register (frame, regnum, out);
1255 }
1256
1257
1258 /* Limit the number of skipped non-prologue instructions since examining
1259    of the prologue is expensive.  */
1260 static int max_skip_non_prologue_insns = 40;
1261
1262 /* Given PC representing the starting address of a function, and
1263    LIM_PC which is the (sloppy) limit to which to scan when looking
1264    for a prologue, attempt to further refine this limit by using
1265    the line data in the symbol table.  If successful, a better guess
1266    on where the prologue ends is returned, otherwise the previous
1267    value of lim_pc is returned.  TRUST_LIMIT is a pointer to a flag
1268    which will be set to indicate whether the returned limit may be
1269    used with no further scanning in the event that the function is
1270    frameless.  */
1271
1272 /* FIXME: cagney/2004-02-14: This function and logic have largely been
1273    superseded by skip_prologue_using_sal.  */
1274
1275 static CORE_ADDR
1276 refine_prologue_limit (CORE_ADDR pc, CORE_ADDR lim_pc, int *trust_limit)
1277 {
1278   struct symtab_and_line prologue_sal;
1279   CORE_ADDR start_pc = pc;
1280   CORE_ADDR end_pc;
1281
1282   /* The prologue can not possibly go past the function end itself,
1283      so we can already adjust LIM_PC accordingly.  */
1284   if (find_pc_partial_function (pc, NULL, NULL, &end_pc) && end_pc < lim_pc)
1285     lim_pc = end_pc;
1286
1287   /* Start off not trusting the limit.  */
1288   *trust_limit = 0;
1289
1290   prologue_sal = find_pc_line (pc, 0);
1291   if (prologue_sal.line != 0)
1292     {
1293       int i;
1294       CORE_ADDR addr = prologue_sal.end;
1295
1296       /* Handle the case in which compiler's optimizer/scheduler
1297          has moved instructions into the prologue.  We scan ahead
1298          in the function looking for address ranges whose corresponding
1299          line number is less than or equal to the first one that we
1300          found for the function.  (It can be less than when the
1301          scheduler puts a body instruction before the first prologue
1302          instruction.)  */
1303       for (i = 2 * max_skip_non_prologue_insns; 
1304            i > 0 && (lim_pc == 0 || addr < lim_pc);
1305            i--)
1306         {
1307           struct symtab_and_line sal;
1308
1309           sal = find_pc_line (addr, 0);
1310           if (sal.line == 0)
1311             break;
1312           if (sal.line <= prologue_sal.line 
1313               && sal.symtab == prologue_sal.symtab)
1314             {
1315               prologue_sal = sal;
1316             }
1317           addr = sal.end;
1318         }
1319
1320       if (lim_pc == 0 || prologue_sal.end < lim_pc)
1321         {
1322           lim_pc = prologue_sal.end;
1323           if (start_pc == get_pc_function_start (lim_pc))
1324             *trust_limit = 1;
1325         }
1326     }
1327   return lim_pc;
1328 }
1329
1330 #define isScratch(_regnum_) ((_regnum_) == 2 || (_regnum_) == 3 \
1331   || (8 <= (_regnum_) && (_regnum_) <= 11) \
1332   || (14 <= (_regnum_) && (_regnum_) <= 31))
1333 #define imm9(_instr_) \
1334   ( ((((_instr_) & 0x01000000000LL) ? -1 : 0) << 8) \
1335    | (((_instr_) & 0x00008000000LL) >> 20) \
1336    | (((_instr_) & 0x00000001fc0LL) >> 6))
1337
1338 /* Allocate and initialize a frame cache.  */
1339
1340 static struct ia64_frame_cache *
1341 ia64_alloc_frame_cache (void)
1342 {
1343   struct ia64_frame_cache *cache;
1344   int i;
1345
1346   cache = FRAME_OBSTACK_ZALLOC (struct ia64_frame_cache);
1347
1348   /* Base address.  */
1349   cache->base = 0;
1350   cache->pc = 0;
1351   cache->cfm = 0;
1352   cache->prev_cfm = 0;
1353   cache->sof = 0;
1354   cache->sol = 0;
1355   cache->sor = 0;
1356   cache->bsp = 0;
1357   cache->fp_reg = 0;
1358   cache->frameless = 1;
1359
1360   for (i = 0; i < NUM_IA64_RAW_REGS; i++)
1361     cache->saved_regs[i] = 0;
1362
1363   return cache;
1364 }
1365
1366 static CORE_ADDR
1367 examine_prologue (CORE_ADDR pc, CORE_ADDR lim_pc,
1368                   struct frame_info *this_frame,
1369                   struct ia64_frame_cache *cache)
1370 {
1371   CORE_ADDR next_pc;
1372   CORE_ADDR last_prologue_pc = pc;
1373   instruction_type it;
1374   long long instr;
1375   int cfm_reg  = 0;
1376   int ret_reg  = 0;
1377   int fp_reg   = 0;
1378   int unat_save_reg = 0;
1379   int pr_save_reg = 0;
1380   int mem_stack_frame_size = 0;
1381   int spill_reg   = 0;
1382   CORE_ADDR spill_addr = 0;
1383   char instores[8];
1384   char infpstores[8];
1385   char reg_contents[256];
1386   int trust_limit;
1387   int frameless = 1;
1388   int i;
1389   CORE_ADDR addr;
1390   gdb_byte buf[8];
1391   CORE_ADDR bof, sor, sol, sof, cfm, rrb_gr;
1392
1393   memset (instores, 0, sizeof instores);
1394   memset (infpstores, 0, sizeof infpstores);
1395   memset (reg_contents, 0, sizeof reg_contents);
1396
1397   if (cache->after_prologue != 0
1398       && cache->after_prologue <= lim_pc)
1399     return cache->after_prologue;
1400
1401   lim_pc = refine_prologue_limit (pc, lim_pc, &trust_limit);
1402   next_pc = fetch_instruction (pc, &it, &instr);
1403
1404   /* We want to check if we have a recognizable function start before we
1405      look ahead for a prologue.  */
1406   if (pc < lim_pc && next_pc 
1407       && it == M && ((instr & 0x1ee0000003fLL) == 0x02c00000000LL))
1408     {
1409       /* alloc - start of a regular function.  */
1410       int sol = (int) ((instr & 0x00007f00000LL) >> 20);
1411       int sof = (int) ((instr & 0x000000fe000LL) >> 13);
1412       int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1413
1414       /* Verify that the current cfm matches what we think is the
1415          function start.  If we have somehow jumped within a function,
1416          we do not want to interpret the prologue and calculate the
1417          addresses of various registers such as the return address.
1418          We will instead treat the frame as frameless.  */
1419       if (!this_frame ||
1420           (sof == (cache->cfm & 0x7f) &&
1421            sol == ((cache->cfm >> 7) & 0x7f)))
1422         frameless = 0;
1423
1424       cfm_reg = rN;
1425       last_prologue_pc = next_pc;
1426       pc = next_pc;
1427     }
1428   else
1429     {
1430       /* Look for a leaf routine.  */
1431       if (pc < lim_pc && next_pc
1432           && (it == I || it == M) 
1433           && ((instr & 0x1ee00000000LL) == 0x10800000000LL))
1434         {
1435           /* adds rN = imm14, rM   (or mov rN, rM  when imm14 is 0) */
1436           int imm = (int) ((((instr & 0x01000000000LL) ? -1 : 0) << 13) 
1437                            | ((instr & 0x001f8000000LL) >> 20)
1438                            | ((instr & 0x000000fe000LL) >> 13));
1439           int rM = (int) ((instr & 0x00007f00000LL) >> 20);
1440           int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1441           int qp = (int) (instr & 0x0000000003fLL);
1442           if (qp == 0 && rN == 2 && imm == 0 && rM == 12 && fp_reg == 0)
1443             {
1444               /* mov r2, r12 - beginning of leaf routine.  */
1445               fp_reg = rN;
1446               last_prologue_pc = next_pc;
1447             }
1448         } 
1449
1450       /* If we don't recognize a regular function or leaf routine, we are
1451          done.  */
1452       if (!fp_reg)
1453         {
1454           pc = lim_pc;  
1455           if (trust_limit)
1456             last_prologue_pc = lim_pc;
1457         }
1458     }
1459
1460   /* Loop, looking for prologue instructions, keeping track of
1461      where preserved registers were spilled.  */
1462   while (pc < lim_pc)
1463     {
1464       next_pc = fetch_instruction (pc, &it, &instr);
1465       if (next_pc == 0)
1466         break;
1467
1468       if (it == B && ((instr & 0x1e1f800003fLL) != 0x04000000000LL))
1469         {
1470           /* Exit loop upon hitting a non-nop branch instruction.  */ 
1471           if (trust_limit)
1472             lim_pc = pc;
1473           break;
1474         }
1475       else if (((instr & 0x3fLL) != 0LL) && 
1476                (frameless || ret_reg != 0))
1477         {
1478           /* Exit loop upon hitting a predicated instruction if
1479              we already have the return register or if we are frameless.  */ 
1480           if (trust_limit)
1481             lim_pc = pc;
1482           break;
1483         }
1484       else if (it == I && ((instr & 0x1eff8000000LL) == 0x00188000000LL))
1485         {
1486           /* Move from BR */
1487           int b2 = (int) ((instr & 0x0000000e000LL) >> 13);
1488           int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1489           int qp = (int) (instr & 0x0000000003f);
1490
1491           if (qp == 0 && b2 == 0 && rN >= 32 && ret_reg == 0)
1492             {
1493               ret_reg = rN;
1494               last_prologue_pc = next_pc;
1495             }
1496         }
1497       else if ((it == I || it == M) 
1498           && ((instr & 0x1ee00000000LL) == 0x10800000000LL))
1499         {
1500           /* adds rN = imm14, rM   (or mov rN, rM  when imm14 is 0) */
1501           int imm = (int) ((((instr & 0x01000000000LL) ? -1 : 0) << 13) 
1502                            | ((instr & 0x001f8000000LL) >> 20)
1503                            | ((instr & 0x000000fe000LL) >> 13));
1504           int rM = (int) ((instr & 0x00007f00000LL) >> 20);
1505           int rN = (int) ((instr & 0x00000001fc0LL) >> 6);
1506           int qp = (int) (instr & 0x0000000003fLL);
1507
1508           if (qp == 0 && rN >= 32 && imm == 0 && rM == 12 && fp_reg == 0)
1509             {
1510               /* mov rN, r12 */
1511               fp_reg = rN;
1512               last_prologue_pc = next_pc;
1513             }
1514           else if (qp == 0 && rN == 12 && rM == 12)
1515             {
1516               /* adds r12, -mem_stack_frame_size, r12 */
1517               mem_stack_frame_size -= imm;
1518               last_prologue_pc = next_pc;
1519             }
1520           else if (qp == 0 && rN == 2 
1521                 && ((rM == fp_reg && fp_reg != 0) || rM == 12))
1522             {
1523               CORE_ADDR saved_sp = 0;
1524               /* adds r2, spilloffset, rFramePointer 
1525                    or
1526                  adds r2, spilloffset, r12
1527
1528                  Get ready for stf.spill or st8.spill instructions.
1529                  The address to start spilling at is loaded into r2.
1530                  FIXME:  Why r2?  That's what gcc currently uses; it
1531                  could well be different for other compilers.  */
1532
1533               /* Hmm...  whether or not this will work will depend on
1534                  where the pc is.  If it's still early in the prologue
1535                  this'll be wrong.  FIXME */
1536               if (this_frame)
1537                 {
1538                   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1539                   saved_sp = get_frame_register_unsigned (this_frame,
1540                                                           sp_regnum);
1541                 }
1542               spill_addr  = saved_sp
1543                           + (rM == 12 ? 0 : mem_stack_frame_size) 
1544                           + imm;
1545               spill_reg   = rN;
1546               last_prologue_pc = next_pc;
1547             }
1548           else if (qp == 0 && rM >= 32 && rM < 40 && !instores[rM-32] && 
1549                    rN < 256 && imm == 0)
1550             {
1551               /* mov rN, rM where rM is an input register.  */
1552               reg_contents[rN] = rM;
1553               last_prologue_pc = next_pc;
1554             }
1555           else if (frameless && qp == 0 && rN == fp_reg && imm == 0 && 
1556                    rM == 2)
1557             {
1558               /* mov r12, r2 */
1559               last_prologue_pc = next_pc;
1560               break;
1561             }
1562         }
1563       else if (it == M 
1564             && (   ((instr & 0x1efc0000000LL) == 0x0eec0000000LL)
1565                 || ((instr & 0x1ffc8000000LL) == 0x0cec0000000LL) ))
1566         {
1567           /* stf.spill [rN] = fM, imm9
1568              or
1569              stf.spill [rN] = fM  */
1570
1571           int imm = imm9(instr);
1572           int rN = (int) ((instr & 0x00007f00000LL) >> 20);
1573           int fM = (int) ((instr & 0x000000fe000LL) >> 13);
1574           int qp = (int) (instr & 0x0000000003fLL);
1575           if (qp == 0 && rN == spill_reg && spill_addr != 0
1576               && ((2 <= fM && fM <= 5) || (16 <= fM && fM <= 31)))
1577             {
1578               cache->saved_regs[IA64_FR0_REGNUM + fM] = spill_addr;
1579
1580               if ((instr & 0x1efc0000000LL) == 0x0eec0000000LL)
1581                 spill_addr += imm;
1582               else
1583                 spill_addr = 0;         /* last one; must be done.  */
1584               last_prologue_pc = next_pc;
1585             }
1586         }
1587       else if ((it == M && ((instr & 0x1eff8000000LL) == 0x02110000000LL))
1588             || (it == I && ((instr & 0x1eff8000000LL) == 0x00050000000LL)) )
1589         {
1590           /* mov.m rN = arM   
1591                or 
1592              mov.i rN = arM */
1593
1594           int arM = (int) ((instr & 0x00007f00000LL) >> 20);
1595           int rN  = (int) ((instr & 0x00000001fc0LL) >> 6);
1596           int qp  = (int) (instr & 0x0000000003fLL);
1597           if (qp == 0 && isScratch (rN) && arM == 36 /* ar.unat */)
1598             {
1599               /* We have something like "mov.m r3 = ar.unat".  Remember the
1600                  r3 (or whatever) and watch for a store of this register...  */
1601               unat_save_reg = rN;
1602               last_prologue_pc = next_pc;
1603             }
1604         }
1605       else if (it == I && ((instr & 0x1eff8000000LL) == 0x00198000000LL))
1606         {
1607           /* mov rN = pr */
1608           int rN  = (int) ((instr & 0x00000001fc0LL) >> 6);
1609           int qp  = (int) (instr & 0x0000000003fLL);
1610           if (qp == 0 && isScratch (rN))
1611             {
1612               pr_save_reg = rN;
1613               last_prologue_pc = next_pc;
1614             }
1615         }
1616       else if (it == M 
1617             && (   ((instr & 0x1ffc8000000LL) == 0x08cc0000000LL)
1618                 || ((instr & 0x1efc0000000LL) == 0x0acc0000000LL)))
1619         {
1620           /* st8 [rN] = rM 
1621               or
1622              st8 [rN] = rM, imm9 */
1623           int rN = (int) ((instr & 0x00007f00000LL) >> 20);
1624           int rM = (int) ((instr & 0x000000fe000LL) >> 13);
1625           int qp = (int) (instr & 0x0000000003fLL);
1626           int indirect = rM < 256 ? reg_contents[rM] : 0;
1627           if (qp == 0 && rN == spill_reg && spill_addr != 0
1628               && (rM == unat_save_reg || rM == pr_save_reg))
1629             {
1630               /* We've found a spill of either the UNAT register or the PR
1631                  register.  (Well, not exactly; what we've actually found is
1632                  a spill of the register that UNAT or PR was moved to).
1633                  Record that fact and move on...  */
1634               if (rM == unat_save_reg)
1635                 {
1636                   /* Track UNAT register.  */
1637                   cache->saved_regs[IA64_UNAT_REGNUM] = spill_addr;
1638                   unat_save_reg = 0;
1639                 }
1640               else
1641                 {
1642                   /* Track PR register.  */
1643                   cache->saved_regs[IA64_PR_REGNUM] = spill_addr;
1644                   pr_save_reg = 0;
1645                 }
1646               if ((instr & 0x1efc0000000LL) == 0x0acc0000000LL)
1647                 /* st8 [rN] = rM, imm9 */
1648                 spill_addr += imm9(instr);
1649               else
1650                 spill_addr = 0;         /* Must be done spilling.  */
1651               last_prologue_pc = next_pc;
1652             }
1653           else if (qp == 0 && 32 <= rM && rM < 40 && !instores[rM-32])
1654             {
1655               /* Allow up to one store of each input register.  */
1656               instores[rM-32] = 1;
1657               last_prologue_pc = next_pc;
1658             }
1659           else if (qp == 0 && 32 <= indirect && indirect < 40 && 
1660                    !instores[indirect-32])
1661             {
1662               /* Allow an indirect store of an input register.  */
1663               instores[indirect-32] = 1;
1664               last_prologue_pc = next_pc;
1665             }
1666         }
1667       else if (it == M && ((instr & 0x1ff08000000LL) == 0x08c00000000LL))
1668         {
1669           /* One of
1670                st1 [rN] = rM
1671                st2 [rN] = rM
1672                st4 [rN] = rM
1673                st8 [rN] = rM
1674              Note that the st8 case is handled in the clause above.
1675              
1676              Advance over stores of input registers.  One store per input
1677              register is permitted.  */
1678           int rM = (int) ((instr & 0x000000fe000LL) >> 13);
1679           int qp = (int) (instr & 0x0000000003fLL);
1680           int indirect = rM < 256 ? reg_contents[rM] : 0;
1681           if (qp == 0 && 32 <= rM && rM < 40 && !instores[rM-32])
1682             {
1683               instores[rM-32] = 1;
1684               last_prologue_pc = next_pc;
1685             }
1686           else if (qp == 0 && 32 <= indirect && indirect < 40 && 
1687                    !instores[indirect-32])
1688             {
1689               /* Allow an indirect store of an input register.  */
1690               instores[indirect-32] = 1;
1691               last_prologue_pc = next_pc;
1692             }
1693         }
1694       else if (it == M && ((instr & 0x1ff88000000LL) == 0x0cc80000000LL))
1695         {
1696           /* Either
1697                stfs [rN] = fM
1698              or
1699                stfd [rN] = fM
1700
1701              Advance over stores of floating point input registers.  Again
1702              one store per register is permitted.  */
1703           int fM = (int) ((instr & 0x000000fe000LL) >> 13);
1704           int qp = (int) (instr & 0x0000000003fLL);
1705           if (qp == 0 && 8 <= fM && fM < 16 && !infpstores[fM - 8])
1706             {
1707               infpstores[fM-8] = 1;
1708               last_prologue_pc = next_pc;
1709             }
1710         }
1711       else if (it == M
1712             && (   ((instr & 0x1ffc8000000LL) == 0x08ec0000000LL)
1713                 || ((instr & 0x1efc0000000LL) == 0x0aec0000000LL)))
1714         {
1715           /* st8.spill [rN] = rM
1716                or
1717              st8.spill [rN] = rM, imm9 */
1718           int rN = (int) ((instr & 0x00007f00000LL) >> 20);
1719           int rM = (int) ((instr & 0x000000fe000LL) >> 13);
1720           int qp = (int) (instr & 0x0000000003fLL);
1721           if (qp == 0 && rN == spill_reg && 4 <= rM && rM <= 7)
1722             {
1723               /* We've found a spill of one of the preserved general purpose
1724                  regs.  Record the spill address and advance the spill
1725                  register if appropriate.  */
1726               cache->saved_regs[IA64_GR0_REGNUM + rM] = spill_addr;
1727               if ((instr & 0x1efc0000000LL) == 0x0aec0000000LL)
1728                 /* st8.spill [rN] = rM, imm9 */
1729                 spill_addr += imm9(instr);
1730               else
1731                 spill_addr = 0;         /* Done spilling.  */
1732               last_prologue_pc = next_pc;
1733             }
1734         }
1735
1736       pc = next_pc;
1737     }
1738
1739   /* If not frameless and we aren't called by skip_prologue, then we need
1740      to calculate registers for the previous frame which will be needed
1741      later.  */
1742
1743   if (!frameless && this_frame)
1744     {
1745       struct gdbarch *gdbarch = get_frame_arch (this_frame);
1746       enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1747
1748       /* Extract the size of the rotating portion of the stack
1749          frame and the register rename base from the current
1750          frame marker.  */
1751       cfm = cache->cfm;
1752       sor = cache->sor;
1753       sof = cache->sof;
1754       sol = cache->sol;
1755       rrb_gr = (cfm >> 18) & 0x7f;
1756
1757       /* Find the bof (beginning of frame).  */
1758       bof = rse_address_add (cache->bsp, -sof);
1759       
1760       for (i = 0, addr = bof;
1761            i < sof;
1762            i++, addr += 8)
1763         {
1764           if (IS_NaT_COLLECTION_ADDR (addr))
1765             {
1766               addr += 8;
1767             }
1768           if (i+32 == cfm_reg)
1769             cache->saved_regs[IA64_CFM_REGNUM] = addr;
1770           if (i+32 == ret_reg)
1771             cache->saved_regs[IA64_VRAP_REGNUM] = addr;
1772           if (i+32 == fp_reg)
1773             cache->saved_regs[IA64_VFP_REGNUM] = addr;
1774         }
1775
1776       /* For the previous argument registers we require the previous bof.
1777          If we can't find the previous cfm, then we can do nothing.  */
1778       cfm = 0;
1779       if (cache->saved_regs[IA64_CFM_REGNUM] != 0)
1780         {
1781           cfm = read_memory_integer (cache->saved_regs[IA64_CFM_REGNUM],
1782                                      8, byte_order);
1783         }
1784       else if (cfm_reg != 0)
1785         {
1786           get_frame_register (this_frame, cfm_reg, buf);
1787           cfm = extract_unsigned_integer (buf, 8, byte_order);
1788         }
1789       cache->prev_cfm = cfm;
1790       
1791       if (cfm != 0)
1792         {
1793           sor = ((cfm >> 14) & 0xf) * 8;
1794           sof = (cfm & 0x7f);
1795           sol = (cfm >> 7) & 0x7f;
1796           rrb_gr = (cfm >> 18) & 0x7f;
1797
1798           /* The previous bof only requires subtraction of the sol (size of
1799              locals) due to the overlap between output and input of
1800              subsequent frames.  */
1801           bof = rse_address_add (bof, -sol);
1802           
1803           for (i = 0, addr = bof;
1804                i < sof;
1805                i++, addr += 8)
1806             {
1807               if (IS_NaT_COLLECTION_ADDR (addr))
1808                 {
1809                   addr += 8;
1810                 }
1811               if (i < sor)
1812                 cache->saved_regs[IA64_GR32_REGNUM
1813                                   + ((i + (sor - rrb_gr)) % sor)] 
1814                   = addr;
1815               else
1816                 cache->saved_regs[IA64_GR32_REGNUM + i] = addr;
1817             }
1818           
1819         }
1820     }
1821       
1822   /* Try and trust the lim_pc value whenever possible.  */
1823   if (trust_limit && lim_pc >= last_prologue_pc)
1824     last_prologue_pc = lim_pc;
1825
1826   cache->frameless = frameless;
1827   cache->after_prologue = last_prologue_pc;
1828   cache->mem_stack_frame_size = mem_stack_frame_size;
1829   cache->fp_reg = fp_reg;
1830
1831   return last_prologue_pc;
1832 }
1833
1834 CORE_ADDR
1835 ia64_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1836 {
1837   struct ia64_frame_cache cache;
1838   cache.base = 0;
1839   cache.after_prologue = 0;
1840   cache.cfm = 0;
1841   cache.bsp = 0;
1842
1843   /* Call examine_prologue with - as third argument since we don't
1844      have a next frame pointer to send.  */
1845   return examine_prologue (pc, pc+1024, 0, &cache);
1846 }
1847
1848
1849 /* Normal frames.  */
1850
1851 static struct ia64_frame_cache *
1852 ia64_frame_cache (struct frame_info *this_frame, void **this_cache)
1853 {
1854   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1855   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1856   struct ia64_frame_cache *cache;
1857   gdb_byte buf[8];
1858   CORE_ADDR cfm;
1859
1860   if (*this_cache)
1861     return (struct ia64_frame_cache *) *this_cache;
1862
1863   cache = ia64_alloc_frame_cache ();
1864   *this_cache = cache;
1865
1866   get_frame_register (this_frame, sp_regnum, buf);
1867   cache->saved_sp = extract_unsigned_integer (buf, 8, byte_order);
1868
1869   /* We always want the bsp to point to the end of frame.
1870      This way, we can always get the beginning of frame (bof)
1871      by subtracting frame size.  */
1872   get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
1873   cache->bsp = extract_unsigned_integer (buf, 8, byte_order);
1874   
1875   get_frame_register (this_frame, IA64_PSR_REGNUM, buf);
1876
1877   get_frame_register (this_frame, IA64_CFM_REGNUM, buf);
1878   cfm = extract_unsigned_integer (buf, 8, byte_order);
1879
1880   cache->sof = (cfm & 0x7f);
1881   cache->sol = (cfm >> 7) & 0x7f;
1882   cache->sor = ((cfm >> 14) & 0xf) * 8;
1883
1884   cache->cfm = cfm;
1885
1886   cache->pc = get_frame_func (this_frame);
1887
1888   if (cache->pc != 0)
1889     examine_prologue (cache->pc, get_frame_pc (this_frame), this_frame, cache);
1890   
1891   cache->base = cache->saved_sp + cache->mem_stack_frame_size;
1892
1893   return cache;
1894 }
1895
1896 static void
1897 ia64_frame_this_id (struct frame_info *this_frame, void **this_cache,
1898                     struct frame_id *this_id)
1899 {
1900   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1901   struct ia64_frame_cache *cache =
1902     ia64_frame_cache (this_frame, this_cache);
1903
1904   /* If outermost frame, mark with null frame id.  */
1905   if (cache->base != 0)
1906     (*this_id) = frame_id_build_special (cache->base, cache->pc, cache->bsp);
1907   if (gdbarch_debug >= 1)
1908     fprintf_unfiltered (gdb_stdlog,
1909                         "regular frame id: code %s, stack %s, "
1910                         "special %s, this_frame %s\n",
1911                         paddress (gdbarch, this_id->code_addr),
1912                         paddress (gdbarch, this_id->stack_addr),
1913                         paddress (gdbarch, cache->bsp),
1914                         host_address_to_string (this_frame));
1915 }
1916
1917 static struct value *
1918 ia64_frame_prev_register (struct frame_info *this_frame, void **this_cache,
1919                           int regnum)
1920 {
1921   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1922   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1923   struct ia64_frame_cache *cache = ia64_frame_cache (this_frame, this_cache);
1924   gdb_byte buf[8];
1925
1926   gdb_assert (regnum >= 0);
1927
1928   if (!target_has_registers)
1929     error (_("No registers."));
1930
1931   if (regnum == gdbarch_sp_regnum (gdbarch))
1932     return frame_unwind_got_constant (this_frame, regnum, cache->base);
1933
1934   else if (regnum == IA64_BSP_REGNUM)
1935     {
1936       struct value *val;
1937       CORE_ADDR prev_cfm, bsp, prev_bsp;
1938
1939       /* We want to calculate the previous bsp as the end of the previous
1940          register stack frame.  This corresponds to what the hardware bsp
1941          register will be if we pop the frame back which is why we might
1942          have been called.  We know the beginning of the current frame is
1943          cache->bsp - cache->sof.  This value in the previous frame points
1944          to the start of the output registers.  We can calculate the end of
1945          that frame by adding the size of output:
1946             (sof (size of frame) - sol (size of locals)).  */
1947       val = ia64_frame_prev_register (this_frame, this_cache, IA64_CFM_REGNUM);
1948       prev_cfm = extract_unsigned_integer (value_contents_all (val),
1949                                            8, byte_order);
1950       bsp = rse_address_add (cache->bsp, -(cache->sof));
1951       prev_bsp =
1952         rse_address_add (bsp, (prev_cfm & 0x7f) - ((prev_cfm >> 7) & 0x7f));
1953
1954       return frame_unwind_got_constant (this_frame, regnum, prev_bsp);
1955     }
1956
1957   else if (regnum == IA64_CFM_REGNUM)
1958     {
1959       CORE_ADDR addr = cache->saved_regs[IA64_CFM_REGNUM];
1960       
1961       if (addr != 0)
1962         return frame_unwind_got_memory (this_frame, regnum, addr);
1963
1964       if (cache->prev_cfm)
1965         return frame_unwind_got_constant (this_frame, regnum, cache->prev_cfm);
1966
1967       if (cache->frameless)
1968         return frame_unwind_got_register (this_frame, IA64_PFS_REGNUM,
1969                                           IA64_PFS_REGNUM);
1970       return frame_unwind_got_register (this_frame, regnum, 0);
1971     }
1972
1973   else if (regnum == IA64_VFP_REGNUM)
1974     {
1975       /* If the function in question uses an automatic register (r32-r127)
1976          for the frame pointer, it'll be found by ia64_find_saved_register()
1977          above.  If the function lacks one of these frame pointers, we can
1978          still provide a value since we know the size of the frame.  */
1979       return frame_unwind_got_constant (this_frame, regnum, cache->base);
1980     }
1981
1982   else if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
1983     {
1984       struct value *pr_val;
1985       ULONGEST prN;
1986       
1987       pr_val = ia64_frame_prev_register (this_frame, this_cache,
1988                                          IA64_PR_REGNUM);
1989       if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
1990         {
1991           /* Fetch predicate register rename base from current frame
1992              marker for this frame.  */
1993           int rrb_pr = (cache->cfm >> 32) & 0x3f;
1994
1995           /* Adjust the register number to account for register rotation.  */
1996           regnum = VP16_REGNUM + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
1997         }
1998       prN = extract_bit_field (value_contents_all (pr_val),
1999                                regnum - VP0_REGNUM, 1);
2000       return frame_unwind_got_constant (this_frame, regnum, prN);
2001     }
2002
2003   else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT31_REGNUM)
2004     {
2005       struct value *unat_val;
2006       ULONGEST unatN;
2007       unat_val = ia64_frame_prev_register (this_frame, this_cache,
2008                                            IA64_UNAT_REGNUM);
2009       unatN = extract_bit_field (value_contents_all (unat_val),
2010                                  regnum - IA64_NAT0_REGNUM, 1);
2011       return frame_unwind_got_constant (this_frame, regnum, unatN);
2012     }
2013
2014   else if (IA64_NAT32_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
2015     {
2016       int natval = 0;
2017       /* Find address of general register corresponding to nat bit we're
2018          interested in.  */
2019       CORE_ADDR gr_addr;
2020
2021       gr_addr = cache->saved_regs[regnum - IA64_NAT0_REGNUM + IA64_GR0_REGNUM];
2022
2023       if (gr_addr != 0)
2024         {
2025           /* Compute address of nat collection bits.  */
2026           CORE_ADDR nat_addr = gr_addr | 0x1f8;
2027           CORE_ADDR bsp;
2028           CORE_ADDR nat_collection;
2029           int nat_bit;
2030
2031           /* If our nat collection address is bigger than bsp, we have to get
2032              the nat collection from rnat.  Otherwise, we fetch the nat
2033              collection from the computed address.  */
2034           get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
2035           bsp = extract_unsigned_integer (buf, 8, byte_order);
2036           if (nat_addr >= bsp)
2037             {
2038               get_frame_register (this_frame, IA64_RNAT_REGNUM, buf);
2039               nat_collection = extract_unsigned_integer (buf, 8, byte_order);
2040             }
2041           else
2042             nat_collection = read_memory_integer (nat_addr, 8, byte_order);
2043           nat_bit = (gr_addr >> 3) & 0x3f;
2044           natval = (nat_collection >> nat_bit) & 1;
2045         }
2046
2047       return frame_unwind_got_constant (this_frame, regnum, natval);
2048     }
2049
2050   else if (regnum == IA64_IP_REGNUM)
2051     {
2052       CORE_ADDR pc = 0;
2053       CORE_ADDR addr = cache->saved_regs[IA64_VRAP_REGNUM];
2054
2055       if (addr != 0)
2056         {
2057           read_memory (addr, buf, register_size (gdbarch, IA64_IP_REGNUM));
2058           pc = extract_unsigned_integer (buf, 8, byte_order);
2059         }
2060       else if (cache->frameless)
2061         {
2062           get_frame_register (this_frame, IA64_BR0_REGNUM, buf);
2063           pc = extract_unsigned_integer (buf, 8, byte_order);
2064         }
2065       pc &= ~0xf;
2066       return frame_unwind_got_constant (this_frame, regnum, pc);
2067     }
2068
2069   else if (regnum == IA64_PSR_REGNUM)
2070     {
2071       /* We don't know how to get the complete previous PSR, but we need it
2072          for the slot information when we unwind the pc (pc is formed of IP
2073          register plus slot information from PSR).  To get the previous
2074          slot information, we mask it off the return address.  */
2075       ULONGEST slot_num = 0;
2076       CORE_ADDR pc = 0;
2077       CORE_ADDR psr = 0;
2078       CORE_ADDR addr = cache->saved_regs[IA64_VRAP_REGNUM];
2079
2080       get_frame_register (this_frame, IA64_PSR_REGNUM, buf);
2081       psr = extract_unsigned_integer (buf, 8, byte_order);
2082
2083       if (addr != 0)
2084         {
2085           read_memory (addr, buf, register_size (gdbarch, IA64_IP_REGNUM));
2086           pc = extract_unsigned_integer (buf, 8, byte_order);
2087         }
2088       else if (cache->frameless)
2089         {
2090           get_frame_register (this_frame, IA64_BR0_REGNUM, buf);
2091           pc = extract_unsigned_integer (buf, 8, byte_order);
2092         }
2093       psr &= ~(3LL << 41);
2094       slot_num = pc & 0x3LL;
2095       psr |= (CORE_ADDR)slot_num << 41;
2096       return frame_unwind_got_constant (this_frame, regnum, psr);
2097     }
2098
2099   else if (regnum == IA64_BR0_REGNUM)
2100     {
2101       CORE_ADDR addr = cache->saved_regs[IA64_BR0_REGNUM];
2102
2103       if (addr != 0)
2104         return frame_unwind_got_memory (this_frame, regnum, addr);
2105
2106       return frame_unwind_got_constant (this_frame, regnum, 0);
2107     }
2108
2109   else if ((regnum >= IA64_GR32_REGNUM && regnum <= IA64_GR127_REGNUM)
2110            || (regnum >= V32_REGNUM && regnum <= V127_REGNUM))
2111     {
2112       CORE_ADDR addr = 0;
2113
2114       if (regnum >= V32_REGNUM)
2115         regnum = IA64_GR32_REGNUM + (regnum - V32_REGNUM);
2116       addr = cache->saved_regs[regnum];
2117       if (addr != 0)
2118         return frame_unwind_got_memory (this_frame, regnum, addr);
2119
2120       if (cache->frameless)
2121         {
2122           struct value *reg_val;
2123           CORE_ADDR prev_cfm, prev_bsp, prev_bof;
2124
2125           /* FIXME: brobecker/2008-05-01: Doesn't this seem redundant
2126              with the same code above?  */
2127           if (regnum >= V32_REGNUM)
2128             regnum = IA64_GR32_REGNUM + (regnum - V32_REGNUM);
2129           reg_val = ia64_frame_prev_register (this_frame, this_cache,
2130                                               IA64_CFM_REGNUM);
2131           prev_cfm = extract_unsigned_integer (value_contents_all (reg_val),
2132                                                8, byte_order);
2133           reg_val = ia64_frame_prev_register (this_frame, this_cache,
2134                                               IA64_BSP_REGNUM);
2135           prev_bsp = extract_unsigned_integer (value_contents_all (reg_val),
2136                                                8, byte_order);
2137           prev_bof = rse_address_add (prev_bsp, -(prev_cfm & 0x7f));
2138
2139           addr = rse_address_add (prev_bof, (regnum - IA64_GR32_REGNUM));
2140           return frame_unwind_got_memory (this_frame, regnum, addr);
2141         }
2142       
2143       return frame_unwind_got_constant (this_frame, regnum, 0);
2144     }
2145
2146   else /* All other registers.  */
2147     {
2148       CORE_ADDR addr = 0;
2149
2150       if (IA64_FR32_REGNUM <= regnum && regnum <= IA64_FR127_REGNUM)
2151         {
2152           /* Fetch floating point register rename base from current
2153              frame marker for this frame.  */
2154           int rrb_fr = (cache->cfm >> 25) & 0x7f;
2155
2156           /* Adjust the floating point register number to account for
2157              register rotation.  */
2158           regnum = IA64_FR32_REGNUM
2159                  + ((regnum - IA64_FR32_REGNUM) + rrb_fr) % 96;
2160         }
2161
2162       /* If we have stored a memory address, access the register.  */
2163       addr = cache->saved_regs[regnum];
2164       if (addr != 0)
2165         return frame_unwind_got_memory (this_frame, regnum, addr);
2166       /* Otherwise, punt and get the current value of the register.  */
2167       else 
2168         return frame_unwind_got_register (this_frame, regnum, regnum);
2169     }
2170 }
2171  
2172 static const struct frame_unwind ia64_frame_unwind =
2173 {
2174   NORMAL_FRAME,
2175   default_frame_unwind_stop_reason,
2176   &ia64_frame_this_id,
2177   &ia64_frame_prev_register,
2178   NULL,
2179   default_frame_sniffer
2180 };
2181
2182 /* Signal trampolines.  */
2183
2184 static void
2185 ia64_sigtramp_frame_init_saved_regs (struct frame_info *this_frame,
2186                                      struct ia64_frame_cache *cache)
2187 {
2188   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2189   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2190
2191   if (tdep->sigcontext_register_address)
2192     {
2193       int regno;
2194
2195       cache->saved_regs[IA64_VRAP_REGNUM]
2196         = tdep->sigcontext_register_address (gdbarch, cache->base,
2197                                              IA64_IP_REGNUM);
2198       cache->saved_regs[IA64_CFM_REGNUM]
2199         = tdep->sigcontext_register_address (gdbarch, cache->base,
2200                                              IA64_CFM_REGNUM);
2201       cache->saved_regs[IA64_PSR_REGNUM]
2202         = tdep->sigcontext_register_address (gdbarch, cache->base,
2203                                              IA64_PSR_REGNUM);
2204       cache->saved_regs[IA64_BSP_REGNUM]
2205         = tdep->sigcontext_register_address (gdbarch, cache->base,
2206                                              IA64_BSP_REGNUM);
2207       cache->saved_regs[IA64_RNAT_REGNUM]
2208         = tdep->sigcontext_register_address (gdbarch, cache->base,
2209                                              IA64_RNAT_REGNUM);
2210       cache->saved_regs[IA64_CCV_REGNUM]
2211         = tdep->sigcontext_register_address (gdbarch, cache->base,
2212                                              IA64_CCV_REGNUM);
2213       cache->saved_regs[IA64_UNAT_REGNUM]
2214         = tdep->sigcontext_register_address (gdbarch, cache->base,
2215                                              IA64_UNAT_REGNUM);
2216       cache->saved_regs[IA64_FPSR_REGNUM]
2217         = tdep->sigcontext_register_address (gdbarch, cache->base,
2218                                              IA64_FPSR_REGNUM);
2219       cache->saved_regs[IA64_PFS_REGNUM]
2220         = tdep->sigcontext_register_address (gdbarch, cache->base,
2221                                              IA64_PFS_REGNUM);
2222       cache->saved_regs[IA64_LC_REGNUM]
2223         = tdep->sigcontext_register_address (gdbarch, cache->base,
2224                                              IA64_LC_REGNUM);
2225
2226       for (regno = IA64_GR1_REGNUM; regno <= IA64_GR31_REGNUM; regno++)
2227         cache->saved_regs[regno] =
2228           tdep->sigcontext_register_address (gdbarch, cache->base, regno);
2229       for (regno = IA64_BR0_REGNUM; regno <= IA64_BR7_REGNUM; regno++)
2230         cache->saved_regs[regno] =
2231           tdep->sigcontext_register_address (gdbarch, cache->base, regno);
2232       for (regno = IA64_FR2_REGNUM; regno <= IA64_FR31_REGNUM; regno++)
2233         cache->saved_regs[regno] =
2234           tdep->sigcontext_register_address (gdbarch, cache->base, regno);
2235     }
2236 }
2237
2238 static struct ia64_frame_cache *
2239 ia64_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
2240 {
2241   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2242   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2243   struct ia64_frame_cache *cache;
2244   gdb_byte buf[8];
2245
2246   if (*this_cache)
2247     return (struct ia64_frame_cache *) *this_cache;
2248
2249   cache = ia64_alloc_frame_cache ();
2250
2251   get_frame_register (this_frame, sp_regnum, buf);
2252   /* Note that frame size is hard-coded below.  We cannot calculate it
2253      via prologue examination.  */
2254   cache->base = extract_unsigned_integer (buf, 8, byte_order) + 16;
2255
2256   get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
2257   cache->bsp = extract_unsigned_integer (buf, 8, byte_order);
2258
2259   get_frame_register (this_frame, IA64_CFM_REGNUM, buf);
2260   cache->cfm = extract_unsigned_integer (buf, 8, byte_order);
2261   cache->sof = cache->cfm & 0x7f;
2262
2263   ia64_sigtramp_frame_init_saved_regs (this_frame, cache);
2264
2265   *this_cache = cache;
2266   return cache;
2267 }
2268
2269 static void
2270 ia64_sigtramp_frame_this_id (struct frame_info *this_frame,
2271                              void **this_cache, struct frame_id *this_id)
2272 {
2273   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2274   struct ia64_frame_cache *cache =
2275     ia64_sigtramp_frame_cache (this_frame, this_cache);
2276
2277   (*this_id) = frame_id_build_special (cache->base,
2278                                        get_frame_pc (this_frame),
2279                                        cache->bsp);
2280   if (gdbarch_debug >= 1)
2281     fprintf_unfiltered (gdb_stdlog,
2282                         "sigtramp frame id: code %s, stack %s, "
2283                         "special %s, this_frame %s\n",
2284                         paddress (gdbarch, this_id->code_addr),
2285                         paddress (gdbarch, this_id->stack_addr),
2286                         paddress (gdbarch, cache->bsp),
2287                         host_address_to_string (this_frame));
2288 }
2289
2290 static struct value *
2291 ia64_sigtramp_frame_prev_register (struct frame_info *this_frame,
2292                                    void **this_cache, int regnum)
2293 {
2294   struct ia64_frame_cache *cache =
2295     ia64_sigtramp_frame_cache (this_frame, this_cache);
2296
2297   gdb_assert (regnum >= 0);
2298
2299   if (!target_has_registers)
2300     error (_("No registers."));
2301
2302   if (regnum == IA64_IP_REGNUM)
2303     {
2304       CORE_ADDR pc = 0;
2305       CORE_ADDR addr = cache->saved_regs[IA64_VRAP_REGNUM];
2306
2307       if (addr != 0)
2308         {
2309           struct gdbarch *gdbarch = get_frame_arch (this_frame);
2310           enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2311           pc = read_memory_unsigned_integer (addr, 8, byte_order);
2312         }
2313       pc &= ~0xf;
2314       return frame_unwind_got_constant (this_frame, regnum, pc);
2315     }
2316
2317   else if ((regnum >= IA64_GR32_REGNUM && regnum <= IA64_GR127_REGNUM)
2318            || (regnum >= V32_REGNUM && regnum <= V127_REGNUM))
2319     {
2320       CORE_ADDR addr = 0;
2321
2322       if (regnum >= V32_REGNUM)
2323         regnum = IA64_GR32_REGNUM + (regnum - V32_REGNUM);
2324       addr = cache->saved_regs[regnum];
2325       if (addr != 0)
2326         return frame_unwind_got_memory (this_frame, regnum, addr);
2327
2328       return frame_unwind_got_constant (this_frame, regnum, 0);
2329     }
2330
2331   else  /* All other registers not listed above.  */
2332     {
2333       CORE_ADDR addr = cache->saved_regs[regnum];
2334
2335       if (addr != 0)
2336         return frame_unwind_got_memory (this_frame, regnum, addr);
2337
2338       return frame_unwind_got_constant (this_frame, regnum, 0);
2339     }
2340 }
2341
2342 static int
2343 ia64_sigtramp_frame_sniffer (const struct frame_unwind *self,
2344                              struct frame_info *this_frame,
2345                              void **this_cache)
2346 {
2347   struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
2348   if (tdep->pc_in_sigtramp)
2349     {
2350       CORE_ADDR pc = get_frame_pc (this_frame);
2351
2352       if (tdep->pc_in_sigtramp (pc))
2353         return 1;
2354     }
2355
2356   return 0;
2357 }
2358
2359 static const struct frame_unwind ia64_sigtramp_frame_unwind =
2360 {
2361   SIGTRAMP_FRAME,
2362   default_frame_unwind_stop_reason,
2363   ia64_sigtramp_frame_this_id,
2364   ia64_sigtramp_frame_prev_register,
2365   NULL,
2366   ia64_sigtramp_frame_sniffer
2367 };
2368
2369 \f
2370
2371 static CORE_ADDR
2372 ia64_frame_base_address (struct frame_info *this_frame, void **this_cache)
2373 {
2374   struct ia64_frame_cache *cache = ia64_frame_cache (this_frame, this_cache);
2375
2376   return cache->base;
2377 }
2378
2379 static const struct frame_base ia64_frame_base =
2380 {
2381   &ia64_frame_unwind,
2382   ia64_frame_base_address,
2383   ia64_frame_base_address,
2384   ia64_frame_base_address
2385 };
2386
2387 #ifdef HAVE_LIBUNWIND_IA64_H
2388
2389 struct ia64_unwind_table_entry
2390   {
2391     unw_word_t start_offset;
2392     unw_word_t end_offset;
2393     unw_word_t info_offset;
2394   };
2395
2396 static __inline__ uint64_t
2397 ia64_rse_slot_num (uint64_t addr)
2398 {
2399   return (addr >> 3) & 0x3f;
2400 }
2401
2402 /* Skip over a designated number of registers in the backing
2403    store, remembering every 64th position is for NAT.  */
2404 static __inline__ uint64_t
2405 ia64_rse_skip_regs (uint64_t addr, long num_regs)
2406 {
2407   long delta = ia64_rse_slot_num(addr) + num_regs;
2408
2409   if (num_regs < 0)
2410     delta -= 0x3e;
2411   return addr + ((num_regs + delta/0x3f) << 3);
2412 }
2413   
2414 /* Gdb ia64-libunwind-tdep callback function to convert from an ia64 gdb
2415    register number to a libunwind register number.  */
2416 static int
2417 ia64_gdb2uw_regnum (int regnum)
2418 {
2419   if (regnum == sp_regnum)
2420     return UNW_IA64_SP;
2421   else if (regnum == IA64_BSP_REGNUM)
2422     return UNW_IA64_BSP;
2423   else if ((unsigned) (regnum - IA64_GR0_REGNUM) < 128)
2424     return UNW_IA64_GR + (regnum - IA64_GR0_REGNUM);
2425   else if ((unsigned) (regnum - V32_REGNUM) < 95)
2426     return UNW_IA64_GR + 32 + (regnum - V32_REGNUM);
2427   else if ((unsigned) (regnum - IA64_FR0_REGNUM) < 128)
2428     return UNW_IA64_FR + (regnum - IA64_FR0_REGNUM);
2429   else if ((unsigned) (regnum - IA64_PR0_REGNUM) < 64)
2430     return -1;
2431   else if ((unsigned) (regnum - IA64_BR0_REGNUM) < 8)
2432     return UNW_IA64_BR + (regnum - IA64_BR0_REGNUM);
2433   else if (regnum == IA64_PR_REGNUM)
2434     return UNW_IA64_PR;
2435   else if (regnum == IA64_IP_REGNUM)
2436     return UNW_REG_IP;
2437   else if (regnum == IA64_CFM_REGNUM)
2438     return UNW_IA64_CFM;
2439   else if ((unsigned) (regnum - IA64_AR0_REGNUM) < 128)
2440     return UNW_IA64_AR + (regnum - IA64_AR0_REGNUM);
2441   else if ((unsigned) (regnum - IA64_NAT0_REGNUM) < 128)
2442     return UNW_IA64_NAT + (regnum - IA64_NAT0_REGNUM);
2443   else
2444     return -1;
2445 }
2446   
2447 /* Gdb ia64-libunwind-tdep callback function to convert from a libunwind
2448    register number to a ia64 gdb register number.  */
2449 static int
2450 ia64_uw2gdb_regnum (int uw_regnum)
2451 {
2452   if (uw_regnum == UNW_IA64_SP)
2453     return sp_regnum;
2454   else if (uw_regnum == UNW_IA64_BSP)
2455     return IA64_BSP_REGNUM;
2456   else if ((unsigned) (uw_regnum - UNW_IA64_GR) < 32)
2457     return IA64_GR0_REGNUM + (uw_regnum - UNW_IA64_GR);
2458   else if ((unsigned) (uw_regnum - UNW_IA64_GR) < 128)
2459     return V32_REGNUM + (uw_regnum - (IA64_GR0_REGNUM + 32));
2460   else if ((unsigned) (uw_regnum - UNW_IA64_FR) < 128)
2461     return IA64_FR0_REGNUM + (uw_regnum - UNW_IA64_FR);
2462   else if ((unsigned) (uw_regnum - UNW_IA64_BR) < 8)
2463     return IA64_BR0_REGNUM + (uw_regnum - UNW_IA64_BR);
2464   else if (uw_regnum == UNW_IA64_PR)
2465     return IA64_PR_REGNUM;
2466   else if (uw_regnum == UNW_REG_IP)
2467     return IA64_IP_REGNUM;
2468   else if (uw_regnum == UNW_IA64_CFM)
2469     return IA64_CFM_REGNUM;
2470   else if ((unsigned) (uw_regnum - UNW_IA64_AR) < 128)
2471     return IA64_AR0_REGNUM + (uw_regnum - UNW_IA64_AR);
2472   else if ((unsigned) (uw_regnum - UNW_IA64_NAT) < 128)
2473     return IA64_NAT0_REGNUM + (uw_regnum - UNW_IA64_NAT);
2474   else
2475     return -1;
2476 }
2477
2478 /* Gdb ia64-libunwind-tdep callback function to reveal if register is
2479    a float register or not.  */
2480 static int
2481 ia64_is_fpreg (int uw_regnum)
2482 {
2483   return unw_is_fpreg (uw_regnum);
2484 }
2485
2486 /* Libunwind callback accessor function for general registers.  */
2487 static int
2488 ia64_access_reg (unw_addr_space_t as, unw_regnum_t uw_regnum, unw_word_t *val, 
2489                  int write, void *arg)
2490 {
2491   int regnum = ia64_uw2gdb_regnum (uw_regnum);
2492   unw_word_t bsp, sof, cfm, psr, ip;
2493   struct frame_info *this_frame = (struct frame_info *) arg;
2494   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2495   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2496   long new_sof, old_sof;
2497   
2498   /* We never call any libunwind routines that need to write registers.  */
2499   gdb_assert (!write);
2500
2501   switch (uw_regnum)
2502     {
2503       case UNW_REG_IP:
2504         /* Libunwind expects to see the pc value which means the slot number
2505            from the psr must be merged with the ip word address.  */
2506         ip = get_frame_register_unsigned (this_frame, IA64_IP_REGNUM);
2507         psr = get_frame_register_unsigned (this_frame, IA64_PSR_REGNUM);
2508         *val = ip | ((psr >> 41) & 0x3);
2509         break;
2510  
2511       case UNW_IA64_AR_BSP:
2512         /* Libunwind expects to see the beginning of the current
2513            register frame so we must account for the fact that
2514            ptrace() will return a value for bsp that points *after*
2515            the current register frame.  */
2516         bsp = get_frame_register_unsigned (this_frame, IA64_BSP_REGNUM);
2517         cfm = get_frame_register_unsigned (this_frame, IA64_CFM_REGNUM);
2518         sof = gdbarch_tdep (gdbarch)->size_of_register_frame (this_frame, cfm);
2519         *val = ia64_rse_skip_regs (bsp, -sof);
2520         break;
2521
2522       case UNW_IA64_AR_BSPSTORE:
2523         /* Libunwind wants bspstore to be after the current register frame.
2524            This is what ptrace() and gdb treats as the regular bsp value.  */
2525         *val = get_frame_register_unsigned (this_frame, IA64_BSP_REGNUM);
2526         break;
2527
2528       default:
2529         /* For all other registers, just unwind the value directly.  */
2530         *val = get_frame_register_unsigned (this_frame, regnum);
2531         break;
2532     }
2533       
2534   if (gdbarch_debug >= 1)
2535     fprintf_unfiltered (gdb_stdlog, 
2536                         "  access_reg: from cache: %4s=%s\n",
2537                         (((unsigned) regnum <= IA64_NAT127_REGNUM)
2538                         ? ia64_register_names[regnum] : "r??"), 
2539                         paddress (gdbarch, *val));
2540   return 0;
2541 }
2542
2543 /* Libunwind callback accessor function for floating-point registers.  */
2544 static int
2545 ia64_access_fpreg (unw_addr_space_t as, unw_regnum_t uw_regnum,
2546                    unw_fpreg_t *val, int write, void *arg)
2547 {
2548   int regnum = ia64_uw2gdb_regnum (uw_regnum);
2549   struct frame_info *this_frame = (struct frame_info *) arg;
2550   
2551   /* We never call any libunwind routines that need to write registers.  */
2552   gdb_assert (!write);
2553
2554   get_frame_register (this_frame, regnum, (gdb_byte *) val);
2555
2556   return 0;
2557 }
2558
2559 /* Libunwind callback accessor function for top-level rse registers.  */
2560 static int
2561 ia64_access_rse_reg (unw_addr_space_t as, unw_regnum_t uw_regnum,
2562                      unw_word_t *val, int write, void *arg)
2563 {
2564   int regnum = ia64_uw2gdb_regnum (uw_regnum);
2565   unw_word_t bsp, sof, cfm, psr, ip;
2566   struct regcache *regcache = (struct regcache *) arg;
2567   struct gdbarch *gdbarch = get_regcache_arch (regcache);
2568   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2569   long new_sof, old_sof;
2570   
2571   /* We never call any libunwind routines that need to write registers.  */
2572   gdb_assert (!write);
2573
2574   switch (uw_regnum)
2575     {
2576       case UNW_REG_IP:
2577         /* Libunwind expects to see the pc value which means the slot number
2578            from the psr must be merged with the ip word address.  */
2579         regcache_cooked_read_unsigned (regcache, IA64_IP_REGNUM, &ip);
2580         regcache_cooked_read_unsigned (regcache, IA64_PSR_REGNUM, &psr);
2581         *val = ip | ((psr >> 41) & 0x3);
2582         break;
2583           
2584       case UNW_IA64_AR_BSP:
2585         /* Libunwind expects to see the beginning of the current
2586            register frame so we must account for the fact that
2587            ptrace() will return a value for bsp that points *after*
2588            the current register frame.  */
2589         regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
2590         regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
2591         sof = (cfm & 0x7f);
2592         *val = ia64_rse_skip_regs (bsp, -sof);
2593         break;
2594           
2595       case UNW_IA64_AR_BSPSTORE:
2596         /* Libunwind wants bspstore to be after the current register frame.
2597            This is what ptrace() and gdb treats as the regular bsp value.  */
2598         regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, val);
2599         break;
2600
2601       default:
2602         /* For all other registers, just unwind the value directly.  */
2603         regcache_cooked_read_unsigned (regcache, regnum, val);
2604         break;
2605     }
2606       
2607   if (gdbarch_debug >= 1)
2608     fprintf_unfiltered (gdb_stdlog, 
2609                         "  access_rse_reg: from cache: %4s=%s\n",
2610                         (((unsigned) regnum <= IA64_NAT127_REGNUM)
2611                          ? ia64_register_names[regnum] : "r??"), 
2612                         paddress (gdbarch, *val));
2613
2614   return 0;
2615 }
2616
2617 /* Libunwind callback accessor function for top-level fp registers.  */
2618 static int
2619 ia64_access_rse_fpreg (unw_addr_space_t as, unw_regnum_t uw_regnum,
2620                        unw_fpreg_t *val, int write, void *arg)
2621 {
2622   int regnum = ia64_uw2gdb_regnum (uw_regnum);
2623   struct regcache *regcache = (struct regcache *) arg;
2624   
2625   /* We never call any libunwind routines that need to write registers.  */
2626   gdb_assert (!write);
2627
2628   regcache_cooked_read (regcache, regnum, (gdb_byte *) val);
2629
2630   return 0;
2631 }
2632
2633 /* Libunwind callback accessor function for accessing memory.  */
2634 static int
2635 ia64_access_mem (unw_addr_space_t as,
2636                  unw_word_t addr, unw_word_t *val,
2637                  int write, void *arg)
2638 {
2639   if (addr - KERNEL_START < ktab_size)
2640     {
2641       unw_word_t *laddr = (unw_word_t*) ((char *) ktab
2642                           + (addr - KERNEL_START));
2643                 
2644       if (write)
2645         *laddr = *val; 
2646       else 
2647         *val = *laddr;
2648       return 0;
2649     }
2650
2651   /* XXX do we need to normalize byte-order here?  */
2652   if (write)
2653     return target_write_memory (addr, (gdb_byte *) val, sizeof (unw_word_t));
2654   else
2655     return target_read_memory (addr, (gdb_byte *) val, sizeof (unw_word_t));
2656 }
2657
2658 /* Call low-level function to access the kernel unwind table.  */
2659 static LONGEST
2660 getunwind_table (gdb_byte **buf_p)
2661 {
2662   LONGEST x;
2663
2664   /* FIXME drow/2005-09-10: This code used to call
2665      ia64_linux_xfer_unwind_table directly to fetch the unwind table
2666      for the currently running ia64-linux kernel.  That data should
2667      come from the core file and be accessed via the auxv vector; if
2668      we want to preserve fall back to the running kernel's table, then
2669      we should find a way to override the corefile layer's
2670      xfer_partial method.  */
2671
2672   x = target_read_alloc (&current_target, TARGET_OBJECT_UNWIND_TABLE,
2673                          NULL, buf_p);
2674
2675   return x;
2676 }
2677
2678 /* Get the kernel unwind table.  */                              
2679 static int
2680 get_kernel_table (unw_word_t ip, unw_dyn_info_t *di)
2681 {
2682   static struct ia64_table_entry *etab;
2683
2684   if (!ktab) 
2685     {
2686       gdb_byte *ktab_buf;
2687       LONGEST size;
2688
2689       size = getunwind_table (&ktab_buf);
2690       if (size <= 0)
2691         return -UNW_ENOINFO;
2692
2693       ktab = (struct ia64_table_entry *) ktab_buf;
2694       ktab_size = size;
2695
2696       for (etab = ktab; etab->start_offset; ++etab)
2697         etab->info_offset += KERNEL_START;
2698     }
2699   
2700   if (ip < ktab[0].start_offset || ip >= etab[-1].end_offset)
2701     return -UNW_ENOINFO;
2702   
2703   di->format = UNW_INFO_FORMAT_TABLE;
2704   di->gp = 0;
2705   di->start_ip = ktab[0].start_offset;
2706   di->end_ip = etab[-1].end_offset;
2707   di->u.ti.name_ptr = (unw_word_t) "<kernel>";
2708   di->u.ti.segbase = 0;
2709   di->u.ti.table_len = ((char *) etab - (char *) ktab) / sizeof (unw_word_t);
2710   di->u.ti.table_data = (unw_word_t *) ktab;
2711   
2712   if (gdbarch_debug >= 1)
2713     fprintf_unfiltered (gdb_stdlog, "get_kernel_table: found table `%s': "
2714                         "segbase=%s, length=%s, gp=%s\n",
2715                         (char *) di->u.ti.name_ptr, 
2716                         hex_string (di->u.ti.segbase),
2717                         pulongest (di->u.ti.table_len), 
2718                         hex_string (di->gp));
2719   return 0;
2720 }
2721
2722 /* Find the unwind table entry for a specified address.  */
2723 static int
2724 ia64_find_unwind_table (struct objfile *objfile, unw_word_t ip,
2725                         unw_dyn_info_t *dip, void **buf)
2726 {
2727   Elf_Internal_Phdr *phdr, *p_text = NULL, *p_unwind = NULL;
2728   Elf_Internal_Ehdr *ehdr;
2729   unw_word_t segbase = 0;
2730   CORE_ADDR load_base;
2731   bfd *bfd;
2732   int i;
2733
2734   bfd = objfile->obfd;
2735   
2736   ehdr = elf_tdata (bfd)->elf_header;
2737   phdr = elf_tdata (bfd)->phdr;
2738
2739   load_base = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
2740
2741   for (i = 0; i < ehdr->e_phnum; ++i)
2742     {
2743       switch (phdr[i].p_type)
2744         {
2745         case PT_LOAD:
2746           if ((unw_word_t) (ip - load_base - phdr[i].p_vaddr)
2747               < phdr[i].p_memsz)
2748             p_text = phdr + i;
2749           break;
2750
2751         case PT_IA_64_UNWIND:
2752           p_unwind = phdr + i;
2753           break;
2754
2755         default:
2756           break;
2757         }
2758     }
2759
2760   if (!p_text || !p_unwind)
2761     return -UNW_ENOINFO;
2762
2763   /* Verify that the segment that contains the IP also contains
2764      the static unwind table.  If not, we may be in the Linux kernel's
2765      DSO gate page in which case the unwind table is another segment.
2766      Otherwise, we are dealing with runtime-generated code, for which we 
2767      have no info here.  */
2768   segbase = p_text->p_vaddr + load_base;
2769
2770   if ((p_unwind->p_vaddr - p_text->p_vaddr) >= p_text->p_memsz)
2771     {
2772       int ok = 0;
2773       for (i = 0; i < ehdr->e_phnum; ++i)
2774         {
2775           if (phdr[i].p_type == PT_LOAD
2776               && (p_unwind->p_vaddr - phdr[i].p_vaddr) < phdr[i].p_memsz)
2777             {
2778               ok = 1;
2779               /* Get the segbase from the section containing the
2780                  libunwind table.  */
2781               segbase = phdr[i].p_vaddr + load_base;
2782             }
2783         }
2784       if (!ok)
2785         return -UNW_ENOINFO;
2786     }
2787
2788   dip->start_ip = p_text->p_vaddr + load_base;
2789   dip->end_ip = dip->start_ip + p_text->p_memsz;
2790   dip->gp = ia64_find_global_pointer (get_objfile_arch (objfile), ip);
2791   dip->format = UNW_INFO_FORMAT_REMOTE_TABLE;
2792   dip->u.rti.name_ptr = (unw_word_t) bfd_get_filename (bfd);
2793   dip->u.rti.segbase = segbase;
2794   dip->u.rti.table_len = p_unwind->p_memsz / sizeof (unw_word_t);
2795   dip->u.rti.table_data = p_unwind->p_vaddr + load_base;
2796
2797   return 0;
2798 }
2799
2800 /* Libunwind callback accessor function to acquire procedure unwind-info.  */
2801 static int
2802 ia64_find_proc_info_x (unw_addr_space_t as, unw_word_t ip, unw_proc_info_t *pi,
2803                        int need_unwind_info, void *arg)
2804 {
2805   struct obj_section *sec = find_pc_section (ip);
2806   unw_dyn_info_t di;
2807   int ret;
2808   void *buf = NULL;
2809
2810   if (!sec)
2811     {
2812       /* XXX This only works if the host and the target architecture are
2813          both ia64 and if the have (more or less) the same kernel
2814          version.  */
2815       if (get_kernel_table (ip, &di) < 0)
2816         return -UNW_ENOINFO;
2817
2818       if (gdbarch_debug >= 1)
2819         fprintf_unfiltered (gdb_stdlog, "ia64_find_proc_info_x: %s -> "
2820                             "(name=`%s',segbase=%s,start=%s,end=%s,gp=%s,"
2821                             "length=%s,data=%s)\n",
2822                             hex_string (ip), (char *)di.u.ti.name_ptr,
2823                             hex_string (di.u.ti.segbase),
2824                             hex_string (di.start_ip), hex_string (di.end_ip),
2825                             hex_string (di.gp),
2826                             pulongest (di.u.ti.table_len), 
2827                             hex_string ((CORE_ADDR)di.u.ti.table_data));
2828     }
2829   else
2830     {
2831       ret = ia64_find_unwind_table (sec->objfile, ip, &di, &buf);
2832       if (ret < 0)
2833         return ret;
2834
2835       if (gdbarch_debug >= 1)
2836         fprintf_unfiltered (gdb_stdlog, "ia64_find_proc_info_x: %s -> "
2837                             "(name=`%s',segbase=%s,start=%s,end=%s,gp=%s,"
2838                             "length=%s,data=%s)\n",
2839                             hex_string (ip), (char *)di.u.rti.name_ptr,
2840                             hex_string (di.u.rti.segbase),
2841                             hex_string (di.start_ip), hex_string (di.end_ip),
2842                             hex_string (di.gp),
2843                             pulongest (di.u.rti.table_len), 
2844                             hex_string (di.u.rti.table_data));
2845     }
2846
2847   ret = libunwind_search_unwind_table (&as, ip, &di, pi, need_unwind_info,
2848                                        arg);
2849
2850   /* We no longer need the dyn info storage so free it.  */
2851   xfree (buf);
2852
2853   return ret;
2854 }
2855
2856 /* Libunwind callback accessor function for cleanup.  */
2857 static void
2858 ia64_put_unwind_info (unw_addr_space_t as,
2859                       unw_proc_info_t *pip, void *arg)
2860 {
2861   /* Nothing required for now.  */
2862 }
2863
2864 /* Libunwind callback accessor function to get head of the dynamic 
2865    unwind-info registration list.  */ 
2866 static int
2867 ia64_get_dyn_info_list (unw_addr_space_t as,
2868                         unw_word_t *dilap, void *arg)
2869 {
2870   struct obj_section *text_sec;
2871   struct objfile *objfile;
2872   unw_word_t ip, addr;
2873   unw_dyn_info_t di;
2874   int ret;
2875
2876   if (!libunwind_is_initialized ())
2877     return -UNW_ENOINFO;
2878
2879   for (objfile = object_files; objfile; objfile = objfile->next)
2880     {
2881       void *buf = NULL;
2882
2883       text_sec = objfile->sections + SECT_OFF_TEXT (objfile);
2884       ip = obj_section_addr (text_sec);
2885       ret = ia64_find_unwind_table (objfile, ip, &di, &buf);
2886       if (ret >= 0)
2887         {
2888           addr = libunwind_find_dyn_list (as, &di, arg);
2889           /* We no longer need the dyn info storage so free it.  */
2890           xfree (buf);
2891
2892           if (addr)
2893             {
2894               if (gdbarch_debug >= 1)
2895                 fprintf_unfiltered (gdb_stdlog,
2896                                     "dynamic unwind table in objfile %s "
2897                                     "at %s (gp=%s)\n",
2898                                     bfd_get_filename (objfile->obfd),
2899                                     hex_string (addr), hex_string (di.gp));
2900               *dilap = addr;
2901               return 0;
2902             }
2903         }
2904     }
2905   return -UNW_ENOINFO;
2906 }
2907
2908
2909 /* Frame interface functions for libunwind.  */
2910
2911 static void
2912 ia64_libunwind_frame_this_id (struct frame_info *this_frame, void **this_cache,
2913                               struct frame_id *this_id)
2914 {
2915   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2916   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2917   struct frame_id id = outer_frame_id;
2918   gdb_byte buf[8];
2919   CORE_ADDR bsp;
2920
2921   libunwind_frame_this_id (this_frame, this_cache, &id);
2922   if (frame_id_eq (id, outer_frame_id))
2923     {
2924       (*this_id) = outer_frame_id;
2925       return;
2926     }
2927
2928   /* We must add the bsp as the special address for frame comparison 
2929      purposes.  */
2930   get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
2931   bsp = extract_unsigned_integer (buf, 8, byte_order);
2932
2933   (*this_id) = frame_id_build_special (id.stack_addr, id.code_addr, bsp);
2934
2935   if (gdbarch_debug >= 1)
2936     fprintf_unfiltered (gdb_stdlog,
2937                         "libunwind frame id: code %s, stack %s, "
2938                         "special %s, this_frame %s\n",
2939                         paddress (gdbarch, id.code_addr),
2940                         paddress (gdbarch, id.stack_addr),
2941                         paddress (gdbarch, bsp),
2942                         host_address_to_string (this_frame));
2943 }
2944
2945 static struct value *
2946 ia64_libunwind_frame_prev_register (struct frame_info *this_frame,
2947                                     void **this_cache, int regnum)
2948 {
2949   int reg = regnum;
2950   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2951   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2952   struct value *val;
2953
2954   if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
2955     reg = IA64_PR_REGNUM;
2956   else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
2957     reg = IA64_UNAT_REGNUM;
2958
2959   /* Let libunwind do most of the work.  */
2960   val = libunwind_frame_prev_register (this_frame, this_cache, reg);
2961
2962   if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
2963     {
2964       ULONGEST prN_val;
2965
2966       if (VP16_REGNUM <= regnum && regnum <= VP63_REGNUM)
2967         {
2968           int rrb_pr = 0;
2969           ULONGEST cfm;
2970
2971           /* Fetch predicate register rename base from current frame
2972              marker for this frame.  */
2973           cfm = get_frame_register_unsigned (this_frame, IA64_CFM_REGNUM);
2974           rrb_pr = (cfm >> 32) & 0x3f;
2975           
2976           /* Adjust the register number to account for register rotation.  */
2977           regnum = VP16_REGNUM + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
2978         }
2979       prN_val = extract_bit_field (value_contents_all (val),
2980                                    regnum - VP0_REGNUM, 1);
2981       return frame_unwind_got_constant (this_frame, regnum, prN_val);
2982     }
2983
2984   else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
2985     {
2986       ULONGEST unatN_val;
2987
2988       unatN_val = extract_bit_field (value_contents_all (val),
2989                                      regnum - IA64_NAT0_REGNUM, 1);
2990       return frame_unwind_got_constant (this_frame, regnum, unatN_val);
2991     }
2992
2993   else if (regnum == IA64_BSP_REGNUM)
2994     {
2995       struct value *cfm_val;
2996       CORE_ADDR prev_bsp, prev_cfm;
2997
2998       /* We want to calculate the previous bsp as the end of the previous
2999          register stack frame.  This corresponds to what the hardware bsp
3000          register will be if we pop the frame back which is why we might
3001          have been called.  We know that libunwind will pass us back the
3002          beginning of the current frame so we should just add sof to it.  */
3003       prev_bsp = extract_unsigned_integer (value_contents_all (val),
3004                                            8, byte_order);
3005       cfm_val = libunwind_frame_prev_register (this_frame, this_cache,
3006                                                IA64_CFM_REGNUM);
3007       prev_cfm = extract_unsigned_integer (value_contents_all (cfm_val),
3008                                            8, byte_order);
3009       prev_bsp = rse_address_add (prev_bsp, (prev_cfm & 0x7f));
3010
3011       return frame_unwind_got_constant (this_frame, regnum, prev_bsp);
3012     }
3013   else
3014     return val;
3015 }
3016
3017 static int
3018 ia64_libunwind_frame_sniffer (const struct frame_unwind *self,
3019                               struct frame_info *this_frame,
3020                               void **this_cache)
3021 {
3022   if (libunwind_is_initialized ()
3023       && libunwind_frame_sniffer (self, this_frame, this_cache))
3024     return 1;
3025
3026   return 0;
3027 }
3028
3029 static const struct frame_unwind ia64_libunwind_frame_unwind =
3030 {
3031   NORMAL_FRAME,
3032   default_frame_unwind_stop_reason,
3033   ia64_libunwind_frame_this_id,
3034   ia64_libunwind_frame_prev_register,
3035   NULL,
3036   ia64_libunwind_frame_sniffer,
3037   libunwind_frame_dealloc_cache
3038 };
3039
3040 static void
3041 ia64_libunwind_sigtramp_frame_this_id (struct frame_info *this_frame,
3042                                        void **this_cache,
3043                                        struct frame_id *this_id)
3044 {
3045   struct gdbarch *gdbarch = get_frame_arch (this_frame);
3046   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3047   gdb_byte buf[8];
3048   CORE_ADDR bsp;
3049   struct frame_id id = outer_frame_id;
3050   CORE_ADDR prev_ip;
3051
3052   libunwind_frame_this_id (this_frame, this_cache, &id);
3053   if (frame_id_eq (id, outer_frame_id))
3054     {
3055       (*this_id) = outer_frame_id;
3056       return;
3057     }
3058
3059   /* We must add the bsp as the special address for frame comparison 
3060      purposes.  */
3061   get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
3062   bsp = extract_unsigned_integer (buf, 8, byte_order);
3063
3064   /* For a sigtramp frame, we don't make the check for previous ip being 0.  */
3065   (*this_id) = frame_id_build_special (id.stack_addr, id.code_addr, bsp);
3066
3067   if (gdbarch_debug >= 1)
3068     fprintf_unfiltered (gdb_stdlog,
3069                         "libunwind sigtramp frame id: code %s, "
3070                         "stack %s, special %s, this_frame %s\n",
3071                         paddress (gdbarch, id.code_addr),
3072                         paddress (gdbarch, id.stack_addr),
3073                         paddress (gdbarch, bsp),
3074                         host_address_to_string (this_frame));
3075 }
3076
3077 static struct value *
3078 ia64_libunwind_sigtramp_frame_prev_register (struct frame_info *this_frame,
3079                                              void **this_cache, int regnum)
3080 {
3081   struct gdbarch *gdbarch = get_frame_arch (this_frame);
3082   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3083   struct value *prev_ip_val;
3084   CORE_ADDR prev_ip;
3085
3086   /* If the previous frame pc value is 0, then we want to use the SIGCONTEXT
3087      method of getting previous registers.  */
3088   prev_ip_val = libunwind_frame_prev_register (this_frame, this_cache,
3089                                                IA64_IP_REGNUM);
3090   prev_ip = extract_unsigned_integer (value_contents_all (prev_ip_val),
3091                                       8, byte_order);
3092
3093   if (prev_ip == 0)
3094     {
3095       void *tmp_cache = NULL;
3096       return ia64_sigtramp_frame_prev_register (this_frame, &tmp_cache,
3097                                                 regnum);
3098     }
3099   else
3100     return ia64_libunwind_frame_prev_register (this_frame, this_cache, regnum);
3101 }
3102
3103 static int
3104 ia64_libunwind_sigtramp_frame_sniffer (const struct frame_unwind *self,
3105                                        struct frame_info *this_frame,
3106                                        void **this_cache)
3107 {
3108   if (libunwind_is_initialized ())
3109     {
3110       if (libunwind_sigtramp_frame_sniffer (self, this_frame, this_cache))
3111         return 1;
3112       return 0;
3113     }
3114   else
3115     return ia64_sigtramp_frame_sniffer (self, this_frame, this_cache);
3116 }
3117
3118 static const struct frame_unwind ia64_libunwind_sigtramp_frame_unwind =
3119 {
3120   SIGTRAMP_FRAME,
3121   default_frame_unwind_stop_reason,
3122   ia64_libunwind_sigtramp_frame_this_id,
3123   ia64_libunwind_sigtramp_frame_prev_register,
3124   NULL,
3125   ia64_libunwind_sigtramp_frame_sniffer
3126 };
3127
3128 /* Set of libunwind callback acccessor functions.  */
3129 unw_accessors_t ia64_unw_accessors =
3130 {
3131   ia64_find_proc_info_x,
3132   ia64_put_unwind_info,
3133   ia64_get_dyn_info_list,
3134   ia64_access_mem,
3135   ia64_access_reg,
3136   ia64_access_fpreg,
3137   /* resume */
3138   /* get_proc_name */
3139 };
3140
3141 /* Set of special libunwind callback acccessor functions specific for accessing
3142    the rse registers.  At the top of the stack, we want libunwind to figure out
3143    how to read r32 - r127.  Though usually they are found sequentially in
3144    memory starting from $bof, this is not always true.  */
3145 unw_accessors_t ia64_unw_rse_accessors =
3146 {
3147   ia64_find_proc_info_x,
3148   ia64_put_unwind_info,
3149   ia64_get_dyn_info_list,
3150   ia64_access_mem,
3151   ia64_access_rse_reg,
3152   ia64_access_rse_fpreg,
3153   /* resume */
3154   /* get_proc_name */
3155 };
3156
3157 /* Set of ia64-libunwind-tdep gdb callbacks and data for generic
3158    ia64-libunwind-tdep code to use.  */
3159 struct libunwind_descr ia64_libunwind_descr =
3160 {
3161   ia64_gdb2uw_regnum, 
3162   ia64_uw2gdb_regnum, 
3163   ia64_is_fpreg, 
3164   &ia64_unw_accessors,
3165   &ia64_unw_rse_accessors,
3166 };
3167
3168 #endif /* HAVE_LIBUNWIND_IA64_H  */
3169
3170 static int
3171 ia64_use_struct_convention (struct type *type)
3172 {
3173   struct type *float_elt_type;
3174
3175   /* Don't use the struct convention for anything but structure,
3176      union, or array types.  */
3177   if (!(TYPE_CODE (type) == TYPE_CODE_STRUCT
3178         || TYPE_CODE (type) == TYPE_CODE_UNION
3179         || TYPE_CODE (type) == TYPE_CODE_ARRAY))
3180     return 0;
3181
3182   /* HFAs are structures (or arrays) consisting entirely of floating
3183      point values of the same length.  Up to 8 of these are returned
3184      in registers.  Don't use the struct convention when this is the
3185      case.  */
3186   float_elt_type = is_float_or_hfa_type (type);
3187   if (float_elt_type != NULL
3188       && TYPE_LENGTH (type) / TYPE_LENGTH (float_elt_type) <= 8)
3189     return 0;
3190
3191   /* Other structs of length 32 or less are returned in r8-r11.
3192      Don't use the struct convention for those either.  */
3193   return TYPE_LENGTH (type) > 32;
3194 }
3195
3196 /* Return non-zero if TYPE is a structure or union type.  */
3197
3198 static int
3199 ia64_struct_type_p (const struct type *type)
3200 {
3201   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
3202           || TYPE_CODE (type) == TYPE_CODE_UNION);
3203 }
3204
3205 static void
3206 ia64_extract_return_value (struct type *type, struct regcache *regcache,
3207                            gdb_byte *valbuf)
3208 {
3209   struct gdbarch *gdbarch = get_regcache_arch (regcache);
3210   struct type *float_elt_type;
3211
3212   float_elt_type = is_float_or_hfa_type (type);
3213   if (float_elt_type != NULL)
3214     {
3215       gdb_byte from[IA64_FP_REGISTER_SIZE];
3216       int offset = 0;
3217       int regnum = IA64_FR8_REGNUM;
3218       int n = TYPE_LENGTH (type) / TYPE_LENGTH (float_elt_type);
3219
3220       while (n-- > 0)
3221         {
3222           regcache_cooked_read (regcache, regnum, from);
3223           convert_typed_floating (from, ia64_ext_type (gdbarch),
3224                                   (char *)valbuf + offset, float_elt_type);
3225           offset += TYPE_LENGTH (float_elt_type);
3226           regnum++;
3227         }
3228     }
3229   else if (!ia64_struct_type_p (type) && TYPE_LENGTH (type) < 8)
3230     {
3231       /* This is an integral value, and its size is less than 8 bytes.
3232          These values are LSB-aligned, so extract the relevant bytes,
3233          and copy them into VALBUF.  */
3234       /* brobecker/2005-12-30: Actually, all integral values are LSB aligned,
3235          so I suppose we should also add handling here for integral values
3236          whose size is greater than 8.  But I wasn't able to create such
3237          a type, neither in C nor in Ada, so not worrying about these yet.  */
3238       enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3239       ULONGEST val;
3240
3241       regcache_cooked_read_unsigned (regcache, IA64_GR8_REGNUM, &val);
3242       store_unsigned_integer (valbuf, TYPE_LENGTH (type), byte_order, val);
3243     }
3244   else
3245     {
3246       ULONGEST val;
3247       int offset = 0;
3248       int regnum = IA64_GR8_REGNUM;
3249       int reglen = TYPE_LENGTH (register_type (gdbarch, IA64_GR8_REGNUM));
3250       int n = TYPE_LENGTH (type) / reglen;
3251       int m = TYPE_LENGTH (type) % reglen;
3252
3253       while (n-- > 0)
3254         {
3255           ULONGEST val;
3256           regcache_cooked_read_unsigned (regcache, regnum, &val);
3257           memcpy ((char *)valbuf + offset, &val, reglen);
3258           offset += reglen;
3259           regnum++;
3260         }
3261
3262       if (m)
3263         {
3264           regcache_cooked_read_unsigned (regcache, regnum, &val);
3265           memcpy ((char *)valbuf + offset, &val, m);
3266         }
3267     }
3268 }
3269
3270 static void
3271 ia64_store_return_value (struct type *type, struct regcache *regcache, 
3272                          const gdb_byte *valbuf)
3273 {
3274   struct gdbarch *gdbarch = get_regcache_arch (regcache);
3275   struct type *float_elt_type;
3276
3277   float_elt_type = is_float_or_hfa_type (type);
3278   if (float_elt_type != NULL)
3279     {
3280       gdb_byte to[IA64_FP_REGISTER_SIZE];
3281       int offset = 0;
3282       int regnum = IA64_FR8_REGNUM;
3283       int n = TYPE_LENGTH (type) / TYPE_LENGTH (float_elt_type);
3284
3285       while (n-- > 0)
3286         {
3287           convert_typed_floating ((char *)valbuf + offset, float_elt_type,
3288                                   to, ia64_ext_type (gdbarch));
3289           regcache_cooked_write (regcache, regnum, to);
3290           offset += TYPE_LENGTH (float_elt_type);
3291           regnum++;
3292         }
3293     }
3294   else
3295     {
3296       ULONGEST val;
3297       int offset = 0;
3298       int regnum = IA64_GR8_REGNUM;
3299       int reglen = TYPE_LENGTH (register_type (gdbarch, IA64_GR8_REGNUM));
3300       int n = TYPE_LENGTH (type) / reglen;
3301       int m = TYPE_LENGTH (type) % reglen;
3302
3303       while (n-- > 0)
3304         {
3305           ULONGEST val;
3306           memcpy (&val, (char *)valbuf + offset, reglen);
3307           regcache_cooked_write_unsigned (regcache, regnum, val);
3308           offset += reglen;
3309           regnum++;
3310         }
3311
3312       if (m)
3313         {
3314           memcpy (&val, (char *)valbuf + offset, m);
3315           regcache_cooked_write_unsigned (regcache, regnum, val);
3316         }
3317     }
3318 }
3319   
3320 static enum return_value_convention
3321 ia64_return_value (struct gdbarch *gdbarch, struct value *function,
3322                    struct type *valtype, struct regcache *regcache,
3323                    gdb_byte *readbuf, const gdb_byte *writebuf)
3324 {
3325   int struct_return = ia64_use_struct_convention (valtype);
3326
3327   if (writebuf != NULL)
3328     {
3329       gdb_assert (!struct_return);
3330       ia64_store_return_value (valtype, regcache, writebuf);
3331     }
3332
3333   if (readbuf != NULL)
3334     {
3335       gdb_assert (!struct_return);
3336       ia64_extract_return_value (valtype, regcache, readbuf);
3337     }
3338
3339   if (struct_return)
3340     return RETURN_VALUE_STRUCT_CONVENTION;
3341   else
3342     return RETURN_VALUE_REGISTER_CONVENTION;
3343 }
3344
3345 static int
3346 is_float_or_hfa_type_recurse (struct type *t, struct type **etp)
3347 {
3348   switch (TYPE_CODE (t))
3349     {
3350     case TYPE_CODE_FLT:
3351       if (*etp)
3352         return TYPE_LENGTH (*etp) == TYPE_LENGTH (t);
3353       else
3354         {
3355           *etp = t;
3356           return 1;
3357         }
3358       break;
3359     case TYPE_CODE_ARRAY:
3360       return
3361         is_float_or_hfa_type_recurse (check_typedef (TYPE_TARGET_TYPE (t)),
3362                                       etp);
3363       break;
3364     case TYPE_CODE_STRUCT:
3365       {
3366         int i;
3367
3368         for (i = 0; i < TYPE_NFIELDS (t); i++)
3369           if (!is_float_or_hfa_type_recurse
3370               (check_typedef (TYPE_FIELD_TYPE (t, i)), etp))
3371             return 0;
3372         return 1;
3373       }
3374       break;
3375     default:
3376       return 0;
3377       break;
3378     }
3379 }
3380
3381 /* Determine if the given type is one of the floating point types or
3382    and HFA (which is a struct, array, or combination thereof whose
3383    bottom-most elements are all of the same floating point type).  */
3384
3385 static struct type *
3386 is_float_or_hfa_type (struct type *t)
3387 {
3388   struct type *et = 0;
3389
3390   return is_float_or_hfa_type_recurse (t, &et) ? et : 0;
3391 }
3392
3393
3394 /* Return 1 if the alignment of T is such that the next even slot
3395    should be used.  Return 0, if the next available slot should
3396    be used.  (See section 8.5.1 of the IA-64 Software Conventions
3397    and Runtime manual).  */
3398
3399 static int
3400 slot_alignment_is_next_even (struct type *t)
3401 {
3402   switch (TYPE_CODE (t))
3403     {
3404     case TYPE_CODE_INT:
3405     case TYPE_CODE_FLT:
3406       if (TYPE_LENGTH (t) > 8)
3407         return 1;
3408       else
3409         return 0;
3410     case TYPE_CODE_ARRAY:
3411       return
3412         slot_alignment_is_next_even (check_typedef (TYPE_TARGET_TYPE (t)));
3413     case TYPE_CODE_STRUCT:
3414       {
3415         int i;
3416
3417         for (i = 0; i < TYPE_NFIELDS (t); i++)
3418           if (slot_alignment_is_next_even
3419               (check_typedef (TYPE_FIELD_TYPE (t, i))))
3420             return 1;
3421         return 0;
3422       }
3423     default:
3424       return 0;
3425     }
3426 }
3427
3428 /* Attempt to find (and return) the global pointer for the given
3429    function.
3430
3431    This is a rather nasty bit of code searchs for the .dynamic section
3432    in the objfile corresponding to the pc of the function we're trying
3433    to call.  Once it finds the addresses at which the .dynamic section
3434    lives in the child process, it scans the Elf64_Dyn entries for a
3435    DT_PLTGOT tag.  If it finds one of these, the corresponding
3436    d_un.d_ptr value is the global pointer.  */
3437
3438 static CORE_ADDR
3439 ia64_find_global_pointer_from_dynamic_section (struct gdbarch *gdbarch,
3440                                                CORE_ADDR faddr)
3441 {
3442   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3443   struct obj_section *faddr_sect;
3444      
3445   faddr_sect = find_pc_section (faddr);
3446   if (faddr_sect != NULL)
3447     {
3448       struct obj_section *osect;
3449
3450       ALL_OBJFILE_OSECTIONS (faddr_sect->objfile, osect)
3451         {
3452           if (strcmp (osect->the_bfd_section->name, ".dynamic") == 0)
3453             break;
3454         }
3455
3456       if (osect < faddr_sect->objfile->sections_end)
3457         {
3458           CORE_ADDR addr, endaddr;
3459
3460           addr = obj_section_addr (osect);
3461           endaddr = obj_section_endaddr (osect);
3462
3463           while (addr < endaddr)
3464             {
3465               int status;
3466               LONGEST tag;
3467               gdb_byte buf[8];
3468
3469               status = target_read_memory (addr, buf, sizeof (buf));
3470               if (status != 0)
3471                 break;
3472               tag = extract_signed_integer (buf, sizeof (buf), byte_order);
3473
3474               if (tag == DT_PLTGOT)
3475                 {
3476                   CORE_ADDR global_pointer;
3477
3478                   status = target_read_memory (addr + 8, buf, sizeof (buf));
3479                   if (status != 0)
3480                     break;
3481                   global_pointer = extract_unsigned_integer (buf, sizeof (buf),
3482                                                              byte_order);
3483
3484                   /* The payoff...  */
3485                   return global_pointer;
3486                 }
3487
3488               if (tag == DT_NULL)
3489                 break;
3490
3491               addr += 16;
3492             }
3493         }
3494     }
3495   return 0;
3496 }
3497
3498 /* Attempt to find (and return) the global pointer for the given
3499    function.  We first try the find_global_pointer_from_solib routine
3500    from the gdbarch tdep vector, if provided.  And if that does not
3501    work, then we try ia64_find_global_pointer_from_dynamic_section.  */
3502
3503 static CORE_ADDR
3504 ia64_find_global_pointer (struct gdbarch *gdbarch, CORE_ADDR faddr)
3505 {
3506   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3507   CORE_ADDR addr = 0;
3508
3509   if (tdep->find_global_pointer_from_solib)
3510     addr = tdep->find_global_pointer_from_solib (gdbarch, faddr);
3511   if (addr == 0)
3512     addr = ia64_find_global_pointer_from_dynamic_section (gdbarch, faddr);
3513   return addr;
3514 }
3515
3516 /* Given a function's address, attempt to find (and return) the
3517    corresponding (canonical) function descriptor.  Return 0 if
3518    not found.  */
3519 static CORE_ADDR
3520 find_extant_func_descr (struct gdbarch *gdbarch, CORE_ADDR faddr)
3521 {
3522   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3523   struct obj_section *faddr_sect;
3524
3525   /* Return early if faddr is already a function descriptor.  */
3526   faddr_sect = find_pc_section (faddr);
3527   if (faddr_sect && strcmp (faddr_sect->the_bfd_section->name, ".opd") == 0)
3528     return faddr;
3529
3530   if (faddr_sect != NULL)
3531     {
3532       struct obj_section *osect;
3533       ALL_OBJFILE_OSECTIONS (faddr_sect->objfile, osect)
3534         {
3535           if (strcmp (osect->the_bfd_section->name, ".opd") == 0)
3536             break;
3537         }
3538
3539       if (osect < faddr_sect->objfile->sections_end)
3540         {
3541           CORE_ADDR addr, endaddr;
3542
3543           addr = obj_section_addr (osect);
3544           endaddr = obj_section_endaddr (osect);
3545
3546           while (addr < endaddr)
3547             {
3548               int status;
3549               LONGEST faddr2;
3550               gdb_byte buf[8];
3551
3552               status = target_read_memory (addr, buf, sizeof (buf));
3553               if (status != 0)
3554                 break;
3555               faddr2 = extract_signed_integer (buf, sizeof (buf), byte_order);
3556
3557               if (faddr == faddr2)
3558                 return addr;
3559
3560               addr += 16;
3561             }
3562         }
3563     }
3564   return 0;
3565 }
3566
3567 /* Attempt to find a function descriptor corresponding to the
3568    given address.  If none is found, construct one on the
3569    stack using the address at fdaptr.  */
3570
3571 static CORE_ADDR
3572 find_func_descr (struct regcache *regcache, CORE_ADDR faddr, CORE_ADDR *fdaptr)
3573 {
3574   struct gdbarch *gdbarch = get_regcache_arch (regcache);
3575   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3576   CORE_ADDR fdesc;
3577
3578   fdesc = find_extant_func_descr (gdbarch, faddr);
3579
3580   if (fdesc == 0)
3581     {
3582       ULONGEST global_pointer;
3583       gdb_byte buf[16];
3584
3585       fdesc = *fdaptr;
3586       *fdaptr += 16;
3587
3588       global_pointer = ia64_find_global_pointer (gdbarch, faddr);
3589
3590       if (global_pointer == 0)
3591         regcache_cooked_read_unsigned (regcache,
3592                                        IA64_GR1_REGNUM, &global_pointer);
3593
3594       store_unsigned_integer (buf, 8, byte_order, faddr);
3595       store_unsigned_integer (buf + 8, 8, byte_order, global_pointer);
3596
3597       write_memory (fdesc, buf, 16);
3598     }
3599
3600   return fdesc; 
3601 }
3602
3603 /* Use the following routine when printing out function pointers
3604    so the user can see the function address rather than just the
3605    function descriptor.  */
3606 static CORE_ADDR
3607 ia64_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr,
3608                                  struct target_ops *targ)
3609 {
3610   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3611   struct obj_section *s;
3612   gdb_byte buf[8];
3613
3614   s = find_pc_section (addr);
3615
3616   /* check if ADDR points to a function descriptor.  */
3617   if (s && strcmp (s->the_bfd_section->name, ".opd") == 0)
3618     return read_memory_unsigned_integer (addr, 8, byte_order);
3619
3620   /* Normally, functions live inside a section that is executable.
3621      So, if ADDR points to a non-executable section, then treat it
3622      as a function descriptor and return the target address iff
3623      the target address itself points to a section that is executable.
3624      Check first the memory of the whole length of 8 bytes is readable.  */
3625   if (s && (s->the_bfd_section->flags & SEC_CODE) == 0
3626       && target_read_memory (addr, buf, 8) == 0)
3627     {
3628       CORE_ADDR pc = extract_unsigned_integer (buf, 8, byte_order);
3629       struct obj_section *pc_section = find_pc_section (pc);
3630
3631       if (pc_section && (pc_section->the_bfd_section->flags & SEC_CODE))
3632         return pc;
3633     }
3634
3635   /* There are also descriptors embedded in vtables.  */
3636   if (s)
3637     {
3638       struct bound_minimal_symbol minsym;
3639
3640       minsym = lookup_minimal_symbol_by_pc (addr);
3641
3642       if (minsym.minsym
3643           && is_vtable_name (MSYMBOL_LINKAGE_NAME (minsym.minsym)))
3644         return read_memory_unsigned_integer (addr, 8, byte_order);
3645     }
3646
3647   return addr;
3648 }
3649
3650 static CORE_ADDR
3651 ia64_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
3652 {
3653   return sp & ~0xfLL;
3654 }
3655
3656 /* The default "allocate_new_rse_frame" ia64_infcall_ops routine for ia64.  */
3657
3658 static void
3659 ia64_allocate_new_rse_frame (struct regcache *regcache, ULONGEST bsp, int sof)
3660 {
3661   ULONGEST cfm, pfs, new_bsp;
3662
3663   regcache_cooked_read_unsigned (regcache, IA64_CFM_REGNUM, &cfm);
3664
3665   new_bsp = rse_address_add (bsp, sof);
3666   regcache_cooked_write_unsigned (regcache, IA64_BSP_REGNUM, new_bsp);
3667
3668   regcache_cooked_read_unsigned (regcache, IA64_PFS_REGNUM, &pfs);
3669   pfs &= 0xc000000000000000LL;
3670   pfs |= (cfm & 0xffffffffffffLL);
3671   regcache_cooked_write_unsigned (regcache, IA64_PFS_REGNUM, pfs);
3672
3673   cfm &= 0xc000000000000000LL;
3674   cfm |= sof;
3675   regcache_cooked_write_unsigned (regcache, IA64_CFM_REGNUM, cfm);
3676 }
3677
3678 /* The default "store_argument_in_slot" ia64_infcall_ops routine for
3679    ia64.  */
3680
3681 static void
3682 ia64_store_argument_in_slot (struct regcache *regcache, CORE_ADDR bsp,
3683                              int slotnum, gdb_byte *buf)
3684 {
3685   write_memory (rse_address_add (bsp, slotnum), buf, 8);
3686 }
3687
3688 /* The default "set_function_addr" ia64_infcall_ops routine for ia64.  */
3689
3690 static void
3691 ia64_set_function_addr (struct regcache *regcache, CORE_ADDR func_addr)
3692 {
3693   /* Nothing needed.  */
3694 }
3695
3696 static CORE_ADDR
3697 ia64_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
3698                       struct regcache *regcache, CORE_ADDR bp_addr,
3699                       int nargs, struct value **args, CORE_ADDR sp,
3700                       int struct_return, CORE_ADDR struct_addr)
3701 {
3702   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
3703   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3704   int argno;
3705   struct value *arg;
3706   struct type *type;
3707   int len, argoffset;
3708   int nslots, rseslots, memslots, slotnum, nfuncargs;
3709   int floatreg;
3710   ULONGEST bsp;
3711   CORE_ADDR funcdescaddr, global_pointer;
3712   CORE_ADDR func_addr = find_function_addr (function, NULL);
3713
3714   nslots = 0;
3715   nfuncargs = 0;
3716   /* Count the number of slots needed for the arguments.  */
3717   for (argno = 0; argno < nargs; argno++)
3718     {
3719       arg = args[argno];
3720       type = check_typedef (value_type (arg));
3721       len = TYPE_LENGTH (type);
3722
3723       if ((nslots & 1) && slot_alignment_is_next_even (type))
3724         nslots++;
3725
3726       if (TYPE_CODE (type) == TYPE_CODE_FUNC)
3727         nfuncargs++;
3728
3729       nslots += (len + 7) / 8;
3730     }
3731
3732   /* Divvy up the slots between the RSE and the memory stack.  */
3733   rseslots = (nslots > 8) ? 8 : nslots;
3734   memslots = nslots - rseslots;
3735
3736   /* Allocate a new RSE frame.  */
3737   regcache_cooked_read_unsigned (regcache, IA64_BSP_REGNUM, &bsp);
3738   tdep->infcall_ops.allocate_new_rse_frame (regcache, bsp, rseslots);
3739   
3740   /* We will attempt to find function descriptors in the .opd segment,
3741      but if we can't we'll construct them ourselves.  That being the
3742      case, we'll need to reserve space on the stack for them.  */
3743   funcdescaddr = sp - nfuncargs * 16;
3744   funcdescaddr &= ~0xfLL;
3745
3746   /* Adjust the stack pointer to it's new value.  The calling conventions
3747      require us to have 16 bytes of scratch, plus whatever space is
3748      necessary for the memory slots and our function descriptors.  */
3749   sp = sp - 16 - (memslots + nfuncargs) * 8;
3750   sp &= ~0xfLL;                         /* Maintain 16 byte alignment.  */
3751
3752   /* Place the arguments where they belong.  The arguments will be
3753      either placed in the RSE backing store or on the memory stack.
3754      In addition, floating point arguments or HFAs are placed in
3755      floating point registers.  */
3756   slotnum = 0;
3757   floatreg = IA64_FR8_REGNUM;
3758   for (argno = 0; argno < nargs; argno++)
3759     {
3760       struct type *float_elt_type;
3761
3762       arg = args[argno];
3763       type = check_typedef (value_type (arg));
3764       len = TYPE_LENGTH (type);
3765
3766       /* Special handling for function parameters.  */
3767       if (len == 8 
3768           && TYPE_CODE (type) == TYPE_CODE_PTR 
3769           && TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_FUNC)
3770         {
3771           gdb_byte val_buf[8];
3772           ULONGEST faddr = extract_unsigned_integer (value_contents (arg),
3773                                                      8, byte_order);
3774           store_unsigned_integer (val_buf, 8, byte_order,
3775                                   find_func_descr (regcache, faddr,
3776                                                    &funcdescaddr));
3777           if (slotnum < rseslots)
3778             tdep->infcall_ops.store_argument_in_slot (regcache, bsp,
3779                                                       slotnum, val_buf);
3780           else
3781             write_memory (sp + 16 + 8 * (slotnum - rseslots), val_buf, 8);
3782           slotnum++;
3783           continue;
3784         }
3785
3786       /* Normal slots.  */
3787
3788       /* Skip odd slot if necessary...  */
3789       if ((slotnum & 1) && slot_alignment_is_next_even (type))
3790         slotnum++;
3791
3792       argoffset = 0;
3793       while (len > 0)
3794         {
3795           gdb_byte val_buf[8];
3796
3797           memset (val_buf, 0, 8);
3798           if (!ia64_struct_type_p (type) && len < 8)
3799             {
3800               /* Integral types are LSB-aligned, so we have to be careful
3801                  to insert the argument on the correct side of the buffer.
3802                  This is why we use store_unsigned_integer.  */
3803               store_unsigned_integer
3804                 (val_buf, 8, byte_order,
3805                  extract_unsigned_integer (value_contents (arg), len,
3806                                            byte_order));
3807             }
3808           else
3809             {
3810               /* This is either an 8bit integral type, or an aggregate.
3811                  For 8bit integral type, there is no problem, we just
3812                  copy the value over.
3813
3814                  For aggregates, the only potentially tricky portion
3815                  is to write the last one if it is less than 8 bytes.
3816                  In this case, the data is Byte0-aligned.  Happy news,
3817                  this means that we don't need to differentiate the
3818                  handling of 8byte blocks and less-than-8bytes blocks.  */
3819               memcpy (val_buf, value_contents (arg) + argoffset,
3820                       (len > 8) ? 8 : len);
3821             }
3822
3823           if (slotnum < rseslots)
3824             tdep->infcall_ops.store_argument_in_slot (regcache, bsp,
3825                                                       slotnum, val_buf);
3826           else
3827             write_memory (sp + 16 + 8 * (slotnum - rseslots), val_buf, 8);
3828
3829           argoffset += 8;
3830           len -= 8;
3831           slotnum++;
3832         }
3833
3834       /* Handle floating point types (including HFAs).  */
3835       float_elt_type = is_float_or_hfa_type (type);
3836       if (float_elt_type != NULL)
3837         {
3838           argoffset = 0;
3839           len = TYPE_LENGTH (type);
3840           while (len > 0 && floatreg < IA64_FR16_REGNUM)
3841             {
3842               gdb_byte to[IA64_FP_REGISTER_SIZE];
3843               convert_typed_floating (value_contents (arg) + argoffset,
3844                                       float_elt_type, to,
3845                                       ia64_ext_type (gdbarch));
3846               regcache_cooked_write (regcache, floatreg, to);
3847               floatreg++;
3848               argoffset += TYPE_LENGTH (float_elt_type);
3849               len -= TYPE_LENGTH (float_elt_type);
3850             }
3851         }
3852     }
3853
3854   /* Store the struct return value in r8 if necessary.  */
3855   if (struct_return)
3856     {
3857       regcache_cooked_write_unsigned (regcache, IA64_GR8_REGNUM,
3858                                       (ULONGEST) struct_addr);
3859     }
3860
3861   global_pointer = ia64_find_global_pointer (gdbarch, func_addr);
3862
3863   if (global_pointer != 0)
3864     regcache_cooked_write_unsigned (regcache, IA64_GR1_REGNUM, global_pointer);
3865
3866   /* The following is not necessary on HP-UX, because we're using
3867      a dummy code sequence pushed on the stack to make the call, and
3868      this sequence doesn't need b0 to be set in order for our dummy
3869      breakpoint to be hit.  Nonetheless, this doesn't interfere, and
3870      it's needed for other OSes, so we do this unconditionaly.  */
3871   regcache_cooked_write_unsigned (regcache, IA64_BR0_REGNUM, bp_addr);
3872
3873   regcache_cooked_write_unsigned (regcache, sp_regnum, sp);
3874
3875   tdep->infcall_ops.set_function_addr (regcache, func_addr);
3876
3877   return sp;
3878 }
3879
3880 static const struct ia64_infcall_ops ia64_infcall_ops =
3881 {
3882   ia64_allocate_new_rse_frame,
3883   ia64_store_argument_in_slot,
3884   ia64_set_function_addr
3885 };
3886
3887 static struct frame_id
3888 ia64_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
3889 {
3890   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3891   gdb_byte buf[8];
3892   CORE_ADDR sp, bsp;
3893
3894   get_frame_register (this_frame, sp_regnum, buf);
3895   sp = extract_unsigned_integer (buf, 8, byte_order);
3896
3897   get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
3898   bsp = extract_unsigned_integer (buf, 8, byte_order);
3899
3900   if (gdbarch_debug >= 1)
3901     fprintf_unfiltered (gdb_stdlog,
3902                         "dummy frame id: code %s, stack %s, special %s\n",
3903                         paddress (gdbarch, get_frame_pc (this_frame)),
3904                         paddress (gdbarch, sp), paddress (gdbarch, bsp));
3905
3906   return frame_id_build_special (sp, get_frame_pc (this_frame), bsp);
3907 }
3908
3909 static CORE_ADDR 
3910 ia64_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
3911 {
3912   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
3913   gdb_byte buf[8];
3914   CORE_ADDR ip, psr, pc;
3915
3916   frame_unwind_register (next_frame, IA64_IP_REGNUM, buf);
3917   ip = extract_unsigned_integer (buf, 8, byte_order);
3918   frame_unwind_register (next_frame, IA64_PSR_REGNUM, buf);
3919   psr = extract_unsigned_integer (buf, 8, byte_order);
3920  
3921   pc = (ip & ~0xf) | ((psr >> 41) & 3);
3922   return pc;
3923 }
3924
3925 static int
3926 ia64_print_insn (bfd_vma memaddr, struct disassemble_info *info)
3927 {
3928   info->bytes_per_line = SLOT_MULTIPLIER;
3929   return print_insn_ia64 (memaddr, info);
3930 }
3931
3932 /* The default "size_of_register_frame" gdbarch_tdep routine for ia64.  */
3933
3934 static int
3935 ia64_size_of_register_frame (struct frame_info *this_frame, ULONGEST cfm)
3936 {
3937   return (cfm & 0x7f);
3938 }
3939
3940 static struct gdbarch *
3941 ia64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
3942 {
3943   struct gdbarch *gdbarch;
3944   struct gdbarch_tdep *tdep;
3945
3946   /* If there is already a candidate, use it.  */
3947   arches = gdbarch_list_lookup_by_info (arches, &info);
3948   if (arches != NULL)
3949     return arches->gdbarch;
3950
3951   tdep = XCNEW (struct gdbarch_tdep);
3952   gdbarch = gdbarch_alloc (&info, tdep);
3953
3954   tdep->size_of_register_frame = ia64_size_of_register_frame;
3955
3956   /* According to the ia64 specs, instructions that store long double
3957      floats in memory use a long-double format different than that
3958      used in the floating registers.  The memory format matches the
3959      x86 extended float format which is 80 bits.  An OS may choose to
3960      use this format (e.g. GNU/Linux) or choose to use a different
3961      format for storing long doubles (e.g. HPUX).  In the latter case,
3962      the setting of the format may be moved/overridden in an
3963      OS-specific tdep file.  */
3964   set_gdbarch_long_double_format (gdbarch, floatformats_i387_ext);
3965
3966   set_gdbarch_short_bit (gdbarch, 16);
3967   set_gdbarch_int_bit (gdbarch, 32);
3968   set_gdbarch_long_bit (gdbarch, 64);
3969   set_gdbarch_long_long_bit (gdbarch, 64);
3970   set_gdbarch_float_bit (gdbarch, 32);
3971   set_gdbarch_double_bit (gdbarch, 64);
3972   set_gdbarch_long_double_bit (gdbarch, 128);
3973   set_gdbarch_ptr_bit (gdbarch, 64);
3974
3975   set_gdbarch_num_regs (gdbarch, NUM_IA64_RAW_REGS);
3976   set_gdbarch_num_pseudo_regs (gdbarch,
3977                                LAST_PSEUDO_REGNUM - FIRST_PSEUDO_REGNUM);
3978   set_gdbarch_sp_regnum (gdbarch, sp_regnum);
3979   set_gdbarch_fp0_regnum (gdbarch, IA64_FR0_REGNUM);
3980
3981   set_gdbarch_register_name (gdbarch, ia64_register_name);
3982   set_gdbarch_register_type (gdbarch, ia64_register_type);
3983
3984   set_gdbarch_pseudo_register_read (gdbarch, ia64_pseudo_register_read);
3985   set_gdbarch_pseudo_register_write (gdbarch, ia64_pseudo_register_write);
3986   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, ia64_dwarf_reg_to_regnum);
3987   set_gdbarch_register_reggroup_p (gdbarch, ia64_register_reggroup_p);
3988   set_gdbarch_convert_register_p (gdbarch, ia64_convert_register_p);
3989   set_gdbarch_register_to_value (gdbarch, ia64_register_to_value);
3990   set_gdbarch_value_to_register (gdbarch, ia64_value_to_register);
3991
3992   set_gdbarch_skip_prologue (gdbarch, ia64_skip_prologue);
3993
3994   set_gdbarch_return_value (gdbarch, ia64_return_value);
3995
3996   set_gdbarch_memory_insert_breakpoint (gdbarch,
3997                                         ia64_memory_insert_breakpoint);
3998   set_gdbarch_memory_remove_breakpoint (gdbarch,
3999                                         ia64_memory_remove_breakpoint);
4000   set_gdbarch_breakpoint_from_pc (gdbarch, ia64_breakpoint_from_pc);
4001   set_gdbarch_breakpoint_kind_from_pc (gdbarch, ia64_breakpoint_kind_from_pc);
4002   set_gdbarch_read_pc (gdbarch, ia64_read_pc);
4003   set_gdbarch_write_pc (gdbarch, ia64_write_pc);
4004
4005   /* Settings for calling functions in the inferior.  */
4006   set_gdbarch_push_dummy_call (gdbarch, ia64_push_dummy_call);
4007   tdep->infcall_ops = ia64_infcall_ops;
4008   set_gdbarch_frame_align (gdbarch, ia64_frame_align);
4009   set_gdbarch_dummy_id (gdbarch, ia64_dummy_id);
4010
4011   set_gdbarch_unwind_pc (gdbarch, ia64_unwind_pc);
4012 #ifdef HAVE_LIBUNWIND_IA64_H
4013   frame_unwind_append_unwinder (gdbarch,
4014                                 &ia64_libunwind_sigtramp_frame_unwind);
4015   frame_unwind_append_unwinder (gdbarch, &ia64_libunwind_frame_unwind);
4016   frame_unwind_append_unwinder (gdbarch, &ia64_sigtramp_frame_unwind);
4017   libunwind_frame_set_descr (gdbarch, &ia64_libunwind_descr);
4018 #else
4019   frame_unwind_append_unwinder (gdbarch, &ia64_sigtramp_frame_unwind);
4020 #endif
4021   frame_unwind_append_unwinder (gdbarch, &ia64_frame_unwind);
4022   frame_base_set_default (gdbarch, &ia64_frame_base);
4023
4024   /* Settings that should be unnecessary.  */
4025   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
4026
4027   set_gdbarch_print_insn (gdbarch, ia64_print_insn);
4028   set_gdbarch_convert_from_func_ptr_addr (gdbarch,
4029                                           ia64_convert_from_func_ptr_addr);
4030
4031   /* The virtual table contains 16-byte descriptors, not pointers to
4032      descriptors.  */
4033   set_gdbarch_vtable_function_descriptors (gdbarch, 1);
4034
4035   /* Hook in ABI-specific overrides, if they have been registered.  */
4036   gdbarch_init_osabi (info, gdbarch);
4037
4038   return gdbarch;
4039 }
4040
4041 extern initialize_file_ftype _initialize_ia64_tdep; /* -Wmissing-prototypes */
4042
4043 void
4044 _initialize_ia64_tdep (void)
4045 {
4046   gdbarch_register (bfd_arch_ia64, ia64_gdbarch_init, NULL);
4047 }