OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.1/] [gdb/] [ia64-tdep.c] - Blame information for rev 612

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.