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