OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-7.1/] [gdb/] [xtensa-tdep.c] - Blame information for rev 855

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

Line No. Rev Author Line
1 227 jeremybenn
/* Target-dependent code for the Xtensa port of GDB, the GNU debugger.
2
 
3
   Copyright (C) 2003, 2005, 2006, 2007, 2008, 2009, 2010
4
   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 "frame.h"
23
#include "solib-svr4.h"
24
#include "symtab.h"
25
#include "symfile.h"
26
#include "objfiles.h"
27
#include "gdbtypes.h"
28
#include "gdbcore.h"
29
#include "value.h"
30
#include "dis-asm.h"
31
#include "inferior.h"
32
#include "floatformat.h"
33
#include "regcache.h"
34
#include "reggroups.h"
35
#include "regset.h"
36
 
37
#include "dummy-frame.h"
38
#include "dwarf2.h"
39
#include "dwarf2-frame.h"
40
#include "dwarf2loc.h"
41
#include "frame.h"
42
#include "frame-base.h"
43
#include "frame-unwind.h"
44
 
45
#include "arch-utils.h"
46
#include "gdbarch.h"
47
#include "remote.h"
48
#include "serial.h"
49
 
50
#include "command.h"
51
#include "gdbcmd.h"
52
#include "gdb_assert.h"
53
 
54
#include "xtensa-isa.h"
55
#include "xtensa-tdep.h"
56
#include "xtensa-config.h"
57
 
58
 
59
static int xtensa_debug_level = 0;
60
 
61
#define DEBUGWARN(args...) \
62
  if (xtensa_debug_level > 0) \
63
    fprintf_unfiltered (gdb_stdlog, "(warn ) " args)
64
 
65
#define DEBUGINFO(args...) \
66
  if (xtensa_debug_level > 1) \
67
    fprintf_unfiltered (gdb_stdlog, "(info ) " args)
68
 
69
#define DEBUGTRACE(args...) \
70
  if (xtensa_debug_level > 2) \
71
    fprintf_unfiltered (gdb_stdlog, "(trace) " args)
72
 
73
#define DEBUGVERB(args...) \
74
  if (xtensa_debug_level > 3) \
75
    fprintf_unfiltered (gdb_stdlog, "(verb ) " args)
76
 
77
 
78
/* According to the ABI, the SP must be aligned to 16-byte boundaries.  */
79
#define SP_ALIGNMENT 16
80
 
81
 
82
/* On Windowed ABI, we use a6 through a11 for passing arguments
83
   to a function called by GDB because CALL4 is used.  */
84
#define ARGS_NUM_REGS           6
85
#define REGISTER_SIZE           4
86
 
87
 
88
/* Extract the call size from the return address or PS register.  */
89
#define PS_CALLINC_SHIFT        16
90
#define PS_CALLINC_MASK         0x00030000
91
#define CALLINC(ps)             (((ps) & PS_CALLINC_MASK) >> PS_CALLINC_SHIFT)
92
#define WINSIZE(ra)             (4 * (( (ra) >> 30) & 0x3))
93
 
94
/* ABI-independent macros.  */
95
#define ARG_NOF(gdbarch) \
96
  (gdbarch_tdep (gdbarch)->call_abi \
97
   == CallAbiCall0Only ? C0_NARGS : (ARGS_NUM_REGS))
98
#define ARG_1ST(gdbarch) \
99
  (gdbarch_tdep (gdbarch)->call_abi  == CallAbiCall0Only \
100
   ? (gdbarch_tdep (gdbarch)->a0_base + C0_ARGS) \
101
   : (gdbarch_tdep (gdbarch)->a0_base + 6))
102
 
103
/* XTENSA_IS_ENTRY tests whether the first byte of an instruction
104
   indicates that the instruction is an ENTRY instruction.  */
105
 
106
#define XTENSA_IS_ENTRY(gdbarch, op1) \
107
  ((gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG) \
108
   ? ((op1) == 0x6c) : ((op1) == 0x36))
109
 
110
#define XTENSA_ENTRY_LENGTH     3
111
 
112
/* windowing_enabled() returns true, if windowing is enabled.
113
   WOE must be set to 1; EXCM to 0.
114
   Note: We assume that EXCM is always 0 for XEA1.  */
115
 
116
#define PS_WOE                  (1<<18)
117
#define PS_EXC                  (1<<4)
118
 
119
/* Convert a live A-register number to the corresponding AR-register number.  */
120
static int
121
arreg_number (struct gdbarch *gdbarch, int a_regnum, ULONGEST wb)
122
{
123
  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
124
  int arreg;
125
 
126
  arreg = a_regnum - tdep->a0_base;
127
  arreg += (wb & ((tdep->num_aregs - 1) >> 2)) << WB_SHIFT;
128
  arreg &= tdep->num_aregs - 1;
129
 
130
  return arreg + tdep->ar_base;
131
}
132
 
133
/* Convert a live AR-register number to the corresponding A-register order
134
   number in a range [0..15].  Return -1, if AR_REGNUM is out of WB window.  */
135
static int
136
areg_number (struct gdbarch *gdbarch, int ar_regnum, unsigned int wb)
137
{
138
  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
139
  int areg;
140
 
141
  areg = ar_regnum - tdep->ar_base;
142
  if (areg < 0 || areg >= tdep->num_aregs)
143
    return -1;
144
  areg = (areg - wb * 4) & (tdep->num_aregs - 1);
145
  return (areg > 15) ? -1 : areg;
146
}
147
 
148
static inline int
149
windowing_enabled (CORE_ADDR ps)
150
{
151
  return ((ps & PS_EXC) == 0 && (ps & PS_WOE) != 0);
152
}
153
 
154
/* Return the window size of the previous call to the function from which we
155
   have just returned.
156
 
157
   This function is used to extract the return value after a called function
158
   has returned to the caller.  On Xtensa, the register that holds the return
159
   value (from the perspective of the caller) depends on what call
160
   instruction was used.  For now, we are assuming that the call instruction
161
   precedes the current address, so we simply analyze the call instruction.
162
   If we are in a dummy frame, we simply return 4 as we used a 'pseudo-call4'
163
   method to call the inferior function.  */
164
 
165
static int
166
extract_call_winsize (struct gdbarch *gdbarch, CORE_ADDR pc)
167
{
168
  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
169
  int winsize = 4;
170
  int insn;
171
  gdb_byte buf[4];
172
 
173
  DEBUGTRACE ("extract_call_winsize (pc = 0x%08x)\n", (int) pc);
174
 
175
  /* Read the previous instruction (should be a call[x]{4|8|12}.  */
176
  read_memory (pc-3, buf, 3);
177
  insn = extract_unsigned_integer (buf, 3, byte_order);
178
 
179
  /* Decode call instruction:
180
     Little Endian
181
       call{0,4,8,12}   OFFSET || {00,01,10,11} || 0101
182
       callx{0,4,8,12}  OFFSET || 11 || {00,01,10,11} || 0000
183
     Big Endian
184
       call{0,4,8,12}   0101 || {00,01,10,11} || OFFSET
185
       callx{0,4,8,12}  0000 || {00,01,10,11} || 11 || OFFSET.  */
186
 
187
  if (byte_order == BFD_ENDIAN_LITTLE)
188
    {
189
      if (((insn & 0xf) == 0x5) || ((insn & 0xcf) == 0xc0))
190
        winsize = (insn & 0x30) >> 2;   /* 0, 4, 8, 12.  */
191
    }
192
  else
193
    {
194
      if (((insn >> 20) == 0x5) || (((insn >> 16) & 0xf3) == 0x03))
195
        winsize = (insn >> 16) & 0xc;   /* 0, 4, 8, 12.  */
196
    }
197
  return winsize;
198
}
199
 
200
 
201
/* REGISTER INFORMATION */
202
 
203
/* Returns the name of a register.  */
204
static const char *
205
xtensa_register_name (struct gdbarch *gdbarch, int regnum)
206
{
207
  /* Return the name stored in the register map.  */
208
  if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch)
209
                              + gdbarch_num_pseudo_regs (gdbarch))
210
    return gdbarch_tdep (gdbarch)->regmap[regnum].name;
211
 
212
  internal_error (__FILE__, __LINE__, _("invalid register %d"), regnum);
213
  return 0;
214
}
215
 
216
/* Return the type of a register.  Create a new type, if necessary.  */
217
 
218
static struct type *
219
xtensa_register_type (struct gdbarch *gdbarch, int regnum)
220
{
221
  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
222
 
223
  /* Return signed integer for ARx and Ax registers.  */
224
  if ((regnum >= tdep->ar_base
225
       && regnum < tdep->ar_base + tdep->num_aregs)
226
      || (regnum >= tdep->a0_base
227
          && regnum < tdep->a0_base + 16))
228
    return builtin_type (gdbarch)->builtin_int;
229
 
230
  if (regnum == gdbarch_pc_regnum (gdbarch)
231
      || regnum == tdep->a0_base + 1)
232
    return builtin_type (gdbarch)->builtin_data_ptr;
233
 
234
  /* Return the stored type for all other registers.  */
235
  else if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch)
236
                                   + gdbarch_num_pseudo_regs (gdbarch))
237
    {
238
      xtensa_register_t* reg = &tdep->regmap[regnum];
239
 
240
      /* Set ctype for this register (only the first time).  */
241
 
242
      if (reg->ctype == 0)
243
        {
244
          struct ctype_cache *tp;
245
          int size = reg->byte_size;
246
 
247
          /* We always use the memory representation,
248
             even if the register width is smaller.  */
249
          switch (size)
250
            {
251
            case 1:
252
              reg->ctype = builtin_type (gdbarch)->builtin_uint8;
253
              break;
254
 
255
            case 2:
256
              reg->ctype = builtin_type (gdbarch)->builtin_uint16;
257
              break;
258
 
259
            case 4:
260
              reg->ctype = builtin_type (gdbarch)->builtin_uint32;
261
              break;
262
 
263
            case 8:
264
              reg->ctype = builtin_type (gdbarch)->builtin_uint64;
265
              break;
266
 
267
            case 16:
268
              reg->ctype = builtin_type (gdbarch)->builtin_uint128;
269
              break;
270
 
271
            default:
272
              for (tp = tdep->type_entries; tp != NULL; tp = tp->next)
273
                if (tp->size == size)
274
                  break;
275
 
276
              if (tp == NULL)
277
                {
278
                  char *name = xmalloc (16);
279
                  tp = xmalloc (sizeof (struct ctype_cache));
280
                  tp->next = tdep->type_entries;
281
                  tdep->type_entries = tp;
282
                  tp->size = size;
283
 
284
                  sprintf (name, "int%d", size * 8);
285
                  tp->virtual_type
286
                    = arch_integer_type (gdbarch, size * 8, 1, xstrdup (name));
287
                }
288
 
289
              reg->ctype = tp->virtual_type;
290
            }
291
        }
292
      return reg->ctype;
293
    }
294
 
295
  internal_error (__FILE__, __LINE__, _("invalid register number %d"), regnum);
296
  return 0;
297
}
298
 
299
 
300
/* Return the 'local' register number for stubs, dwarf2, etc.
301
   The debugging information enumerates registers starting from 0 for A0
302
   to n for An.  So, we only have to add the base number for A0.  */
303
 
304
static int
305
xtensa_reg_to_regnum (struct gdbarch *gdbarch, int regnum)
306
{
307
  int i;
308
 
309
  if (regnum >= 0 && regnum < 16)
310
    return gdbarch_tdep (gdbarch)->a0_base + regnum;
311
 
312
  for (i = 0;
313
       i < gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
314
       i++)
315
    if (regnum == gdbarch_tdep (gdbarch)->regmap[i].target_number)
316
      return i;
317
 
318
  internal_error (__FILE__, __LINE__,
319
                  _("invalid dwarf/stabs register number %d"), regnum);
320
  return 0;
321
}
322
 
323
 
324
/* Write the bits of a masked register to the various registers.
325
   Only the masked areas of these registers are modified; the other
326
   fields are untouched.  The size of masked registers is always less
327
   than or equal to 32 bits.  */
328
 
329
static void
330
xtensa_register_write_masked (struct regcache *regcache,
331
                              xtensa_register_t *reg, const gdb_byte *buffer)
332
{
333
  unsigned int value[(MAX_REGISTER_SIZE + 3) / 4];
334
  const xtensa_mask_t *mask = reg->mask;
335
 
336
  int shift = 0;         /* Shift for next mask (mod 32).  */
337
  int start, size;              /* Start bit and size of current mask.  */
338
 
339
  unsigned int *ptr = value;
340
  unsigned int regval, m, mem = 0;
341
 
342
  int bytesize = reg->byte_size;
343
  int bitsize = bytesize * 8;
344
  int i, r;
345
 
346
  DEBUGTRACE ("xtensa_register_write_masked ()\n");
347
 
348
  /* Copy the masked register to host byte-order.  */
349
  if (gdbarch_byte_order (get_regcache_arch (regcache)) == BFD_ENDIAN_BIG)
350
    for (i = 0; i < bytesize; i++)
351
      {
352
        mem >>= 8;
353
        mem |= (buffer[bytesize - i - 1] << 24);
354
        if ((i & 3) == 3)
355
          *ptr++ = mem;
356
      }
357
  else
358
    for (i = 0; i < bytesize; i++)
359
      {
360
        mem >>= 8;
361
        mem |= (buffer[i] << 24);
362
        if ((i & 3) == 3)
363
          *ptr++ = mem;
364
      }
365
 
366
  /* We might have to shift the final value:
367
     bytesize & 3 == 0 -> nothing to do, we use the full 32 bits,
368
     bytesize & 3 == x -> shift (4-x) * 8.  */
369
 
370
  *ptr = mem >> (((0 - bytesize) & 3) * 8);
371
  ptr = value;
372
  mem = *ptr;
373
 
374
  /* Write the bits to the masked areas of the other registers.  */
375
  for (i = 0; i < mask->count; i++)
376
    {
377
      start = mask->mask[i].bit_start;
378
      size = mask->mask[i].bit_size;
379
      regval = mem >> shift;
380
 
381
      if ((shift += size) > bitsize)
382
        error (_("size of all masks is larger than the register"));
383
 
384
      if (shift >= 32)
385
        {
386
          mem = *(++ptr);
387
          shift -= 32;
388
          bitsize -= 32;
389
 
390
          if (shift > 0)
391
            regval |= mem << (size - shift);
392
        }
393
 
394
      /* Make sure we have a valid register.  */
395
      r = mask->mask[i].reg_num;
396
      if (r >= 0 && size > 0)
397
        {
398
          /* Don't overwrite the unmasked areas.  */
399
          ULONGEST old_val;
400
          regcache_cooked_read_unsigned (regcache, r, &old_val);
401
          m = 0xffffffff >> (32 - size) << start;
402
          regval <<= start;
403
          regval = (regval & m) | (old_val & ~m);
404
          regcache_cooked_write_unsigned (regcache, r, regval);
405
        }
406
    }
407
}
408
 
409
 
410
/* Read a tie state or mapped registers.  Read the masked areas
411
   of the registers and assemble them into a single value.  */
412
 
413
static void
414
xtensa_register_read_masked (struct regcache *regcache,
415
                             xtensa_register_t *reg, gdb_byte *buffer)
416
{
417
  unsigned int value[(MAX_REGISTER_SIZE + 3) / 4];
418
  const xtensa_mask_t *mask = reg->mask;
419
 
420
  int shift = 0;
421
  int start, size;
422
 
423
  unsigned int *ptr = value;
424
  unsigned int regval, mem = 0;
425
 
426
  int bytesize = reg->byte_size;
427
  int bitsize = bytesize * 8;
428
  int i;
429
 
430
  DEBUGTRACE ("xtensa_register_read_masked (reg \"%s\", ...)\n",
431
              reg->name == 0 ? "" : reg->name);
432
 
433
  /* Assemble the register from the masked areas of other registers.  */
434
  for (i = 0; i < mask->count; i++)
435
    {
436
      int r = mask->mask[i].reg_num;
437
      if (r >= 0)
438
        {
439
          ULONGEST val;
440
          regcache_cooked_read_unsigned (regcache, r, &val);
441
          regval = (unsigned int) val;
442
        }
443
      else
444
        regval = 0;
445
 
446
      start = mask->mask[i].bit_start;
447
      size = mask->mask[i].bit_size;
448
 
449
      regval >>= start;
450
 
451
      if (size < 32)
452
        regval &= (0xffffffff >> (32 - size));
453
 
454
      mem |= regval << shift;
455
 
456
      if ((shift += size) > bitsize)
457
        error (_("size of all masks is larger than the register"));
458
 
459
      if (shift >= 32)
460
        {
461
          *ptr++ = mem;
462
          bitsize -= 32;
463
          shift -= 32;
464
 
465
          if (shift == 0)
466
            mem = 0;
467
          else
468
            mem = regval >> (size - shift);
469
        }
470
    }
471
 
472
  if (shift > 0)
473
    *ptr = mem;
474
 
475
  /* Copy value to target byte order.  */
476
  ptr = value;
477
  mem = *ptr;
478
 
479
  if (gdbarch_byte_order (get_regcache_arch (regcache)) == BFD_ENDIAN_BIG)
480
    for (i = 0; i < bytesize; i++)
481
      {
482
        if ((i & 3) == 0)
483
          mem = *ptr++;
484
        buffer[bytesize - i - 1] = mem & 0xff;
485
        mem >>= 8;
486
      }
487
  else
488
    for (i = 0; i < bytesize; i++)
489
      {
490
        if ((i & 3) == 0)
491
          mem = *ptr++;
492
        buffer[i] = mem & 0xff;
493
        mem >>= 8;
494
      }
495
}
496
 
497
 
498
/* Read pseudo registers.  */
499
 
500
static void
501
xtensa_pseudo_register_read (struct gdbarch *gdbarch,
502
                             struct regcache *regcache,
503
                             int regnum,
504
                             gdb_byte *buffer)
505
{
506
  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
507
 
508
  DEBUGTRACE ("xtensa_pseudo_register_read (... regnum = %d (%s) ...)\n",
509
              regnum, xtensa_register_name (gdbarch, regnum));
510
 
511
  if (regnum == gdbarch_num_regs (gdbarch)
512
                + gdbarch_num_pseudo_regs (gdbarch) - 1)
513
     regnum = gdbarch_tdep (gdbarch)->a0_base + 1;
514
 
515
  /* Read aliases a0..a15, if this is a Windowed ABI.  */
516
  if (gdbarch_tdep (gdbarch)->isa_use_windowed_registers
517
      && (regnum >= gdbarch_tdep (gdbarch)->a0_base)
518
      && (regnum <= gdbarch_tdep (gdbarch)->a0_base + 15))
519
    {
520
      gdb_byte *buf = (gdb_byte *) alloca (MAX_REGISTER_SIZE);
521
 
522
      regcache_raw_read (regcache, gdbarch_tdep (gdbarch)->wb_regnum, buf);
523
      regnum = arreg_number (gdbarch, regnum,
524
                             extract_unsigned_integer (buf, 4, byte_order));
525
    }
526
 
527
  /* We can always read non-pseudo registers.  */
528
  if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch))
529
    regcache_raw_read (regcache, regnum, buffer);
530
 
531
 
532
  /* We have to find out how to deal with priveleged registers.
533
     Let's treat them as pseudo-registers, but we cannot read/write them.  */
534
 
535
  else if (regnum < gdbarch_tdep (gdbarch)->a0_base)
536
    {
537
      buffer[0] = (gdb_byte)0;
538
      buffer[1] = (gdb_byte)0;
539
      buffer[2] = (gdb_byte)0;
540
      buffer[3] = (gdb_byte)0;
541
    }
542
  /* Pseudo registers.  */
543
  else if (regnum >= 0
544
            && regnum < gdbarch_num_regs (gdbarch)
545
                        + gdbarch_num_pseudo_regs (gdbarch))
546
    {
547
      xtensa_register_t *reg = &gdbarch_tdep (gdbarch)->regmap[regnum];
548
      xtensa_register_type_t type = reg->type;
549
      int flags = gdbarch_tdep (gdbarch)->target_flags;
550
 
551
      /* We cannot read Unknown or Unmapped registers.  */
552
      if (type == xtRegisterTypeUnmapped || type == xtRegisterTypeUnknown)
553
        {
554
          if ((flags & xtTargetFlagsNonVisibleRegs) == 0)
555
            {
556
              warning (_("cannot read register %s"),
557
                       xtensa_register_name (gdbarch, regnum));
558
              return;
559
            }
560
        }
561
 
562
      /* Some targets cannot read TIE register files.  */
563
      else if (type == xtRegisterTypeTieRegfile)
564
        {
565
          /* Use 'fetch' to get register?  */
566
          if (flags & xtTargetFlagsUseFetchStore)
567
            {
568
              warning (_("cannot read register"));
569
              return;
570
            }
571
 
572
          /* On some targets (esp. simulators), we can always read the reg.  */
573
          else if ((flags & xtTargetFlagsNonVisibleRegs) == 0)
574
            {
575
              warning (_("cannot read register"));
576
              return;
577
            }
578
        }
579
 
580
      /* We can always read mapped registers.  */
581
      else if (type == xtRegisterTypeMapped || type == xtRegisterTypeTieState)
582
        {
583
          xtensa_register_read_masked (regcache, reg, buffer);
584
          return;
585
        }
586
 
587
      /* Assume that we can read the register.  */
588
      regcache_raw_read (regcache, regnum, buffer);
589
    }
590
  else
591
    internal_error (__FILE__, __LINE__,
592
                    _("invalid register number %d"), regnum);
593
}
594
 
595
 
596
/* Write pseudo registers.  */
597
 
598
static void
599
xtensa_pseudo_register_write (struct gdbarch *gdbarch,
600
                              struct regcache *regcache,
601
                              int regnum,
602
                              const gdb_byte *buffer)
603
{
604
  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
605
 
606
  DEBUGTRACE ("xtensa_pseudo_register_write (... regnum = %d (%s) ...)\n",
607
              regnum, xtensa_register_name (gdbarch, regnum));
608
 
609
  if (regnum == gdbarch_num_regs (gdbarch)
610
                + gdbarch_num_pseudo_regs (gdbarch) -1)
611
     regnum = gdbarch_tdep (gdbarch)->a0_base + 1;
612
 
613
  /* Renumber register, if aliase a0..a15 on Windowed ABI.  */
614
  if (gdbarch_tdep (gdbarch)->isa_use_windowed_registers
615
      && (regnum >= gdbarch_tdep (gdbarch)->a0_base)
616
      && (regnum <= gdbarch_tdep (gdbarch)->a0_base + 15))
617
    {
618
      gdb_byte *buf = (gdb_byte *) alloca (MAX_REGISTER_SIZE);
619
      unsigned int wb;
620
 
621
      regcache_raw_read (regcache,
622
                         gdbarch_tdep (gdbarch)->wb_regnum, buf);
623
      regnum = arreg_number (gdbarch, regnum,
624
                             extract_unsigned_integer (buf, 4, byte_order));
625
    }
626
 
627
  /* We can always write 'core' registers.
628
     Note: We might have converted Ax->ARy.  */
629
  if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch))
630
    regcache_raw_write (regcache, regnum, buffer);
631
 
632
  /* We have to find out how to deal with priveleged registers.
633
     Let's treat them as pseudo-registers, but we cannot read/write them.  */
634
 
635
  else if (regnum < gdbarch_tdep (gdbarch)->a0_base)
636
    {
637
      return;
638
    }
639
  /* Pseudo registers.  */
640
  else if (regnum >= 0
641
           && regnum < gdbarch_num_regs (gdbarch)
642
                       + gdbarch_num_pseudo_regs (gdbarch))
643
    {
644
      xtensa_register_t *reg = &gdbarch_tdep (gdbarch)->regmap[regnum];
645
      xtensa_register_type_t type = reg->type;
646
      int flags = gdbarch_tdep (gdbarch)->target_flags;
647
 
648
      /* On most targets, we cannot write registers
649
         of type "Unknown" or "Unmapped".  */
650
      if (type == xtRegisterTypeUnmapped || type == xtRegisterTypeUnknown)
651
        {
652
          if ((flags & xtTargetFlagsNonVisibleRegs) == 0)
653
            {
654
              warning (_("cannot write register %s"),
655
                       xtensa_register_name (gdbarch, regnum));
656
              return;
657
            }
658
        }
659
 
660
      /* Some targets cannot read TIE register files.  */
661
      else if (type == xtRegisterTypeTieRegfile)
662
        {
663
          /* Use 'store' to get register?  */
664
          if (flags & xtTargetFlagsUseFetchStore)
665
            {
666
              warning (_("cannot write register"));
667
              return;
668
            }
669
 
670
          /* On some targets (esp. simulators), we can always write
671
             the register.  */
672
          else if ((flags & xtTargetFlagsNonVisibleRegs) == 0)
673
            {
674
              warning (_("cannot write register"));
675
              return;
676
            }
677
        }
678
 
679
      /* We can always write mapped registers.  */
680
      else if (type == xtRegisterTypeMapped || type == xtRegisterTypeTieState)
681
        {
682
          xtensa_register_write_masked (regcache, reg, buffer);
683
          return;
684
        }
685
 
686
      /* Assume that we can write the register.  */
687
      regcache_raw_write (regcache, regnum, buffer);
688
    }
689
  else
690
    internal_error (__FILE__, __LINE__,
691
                    _("invalid register number %d"), regnum);
692
}
693
 
694
static struct reggroup *xtensa_ar_reggroup;
695
static struct reggroup *xtensa_user_reggroup;
696
static struct reggroup *xtensa_vectra_reggroup;
697
static struct reggroup *xtensa_cp[XTENSA_MAX_COPROCESSOR];
698
 
699
static void
700
xtensa_init_reggroups (void)
701
{
702
  xtensa_ar_reggroup = reggroup_new ("ar", USER_REGGROUP);
703
  xtensa_user_reggroup = reggroup_new ("user", USER_REGGROUP);
704
  xtensa_vectra_reggroup = reggroup_new ("vectra", USER_REGGROUP);
705
 
706
  xtensa_cp[0] = reggroup_new ("cp0", USER_REGGROUP);
707
  xtensa_cp[1] = reggroup_new ("cp1", USER_REGGROUP);
708
  xtensa_cp[2] = reggroup_new ("cp2", USER_REGGROUP);
709
  xtensa_cp[3] = reggroup_new ("cp3", USER_REGGROUP);
710
  xtensa_cp[4] = reggroup_new ("cp4", USER_REGGROUP);
711
  xtensa_cp[5] = reggroup_new ("cp5", USER_REGGROUP);
712
  xtensa_cp[6] = reggroup_new ("cp6", USER_REGGROUP);
713
  xtensa_cp[7] = reggroup_new ("cp7", USER_REGGROUP);
714
}
715
 
716
static void
717
xtensa_add_reggroups (struct gdbarch *gdbarch)
718
{
719
  int i;
720
 
721
  /* Predefined groups.  */
722
  reggroup_add (gdbarch, all_reggroup);
723
  reggroup_add (gdbarch, save_reggroup);
724
  reggroup_add (gdbarch, restore_reggroup);
725
  reggroup_add (gdbarch, system_reggroup);
726
  reggroup_add (gdbarch, vector_reggroup);
727
  reggroup_add (gdbarch, general_reggroup);
728
  reggroup_add (gdbarch, float_reggroup);
729
 
730
  /* Xtensa-specific groups.  */
731
  reggroup_add (gdbarch, xtensa_ar_reggroup);
732
  reggroup_add (gdbarch, xtensa_user_reggroup);
733
  reggroup_add (gdbarch, xtensa_vectra_reggroup);
734
 
735
  for (i = 0; i < XTENSA_MAX_COPROCESSOR; i++)
736
    reggroup_add (gdbarch, xtensa_cp[i]);
737
}
738
 
739
static int
740
xtensa_coprocessor_register_group (struct reggroup *group)
741
{
742
  int i;
743
 
744
  for (i = 0; i < XTENSA_MAX_COPROCESSOR; i++)
745
    if (group == xtensa_cp[i])
746
      return i;
747
 
748
  return -1;
749
}
750
 
751
#define SAVE_REST_FLAGS (XTENSA_REGISTER_FLAGS_READABLE \
752
                        | XTENSA_REGISTER_FLAGS_WRITABLE \
753
                        | XTENSA_REGISTER_FLAGS_VOLATILE)
754
 
755
#define SAVE_REST_VALID (XTENSA_REGISTER_FLAGS_READABLE \
756
                        | XTENSA_REGISTER_FLAGS_WRITABLE)
757
 
758
static int
759
xtensa_register_reggroup_p (struct gdbarch *gdbarch,
760
                            int regnum,
761
                            struct reggroup *group)
762
{
763
  xtensa_register_t* reg = &gdbarch_tdep (gdbarch)->regmap[regnum];
764
  xtensa_register_type_t type = reg->type;
765
  xtensa_register_group_t rg = reg->group;
766
  int cp_number;
767
 
768
  /* First, skip registers that are not visible to this target
769
     (unknown and unmapped registers when not using ISS).  */
770
 
771
  if (type == xtRegisterTypeUnmapped || type == xtRegisterTypeUnknown)
772
    return 0;
773
  if (group == all_reggroup)
774
    return 1;
775
  if (group == xtensa_ar_reggroup)
776
    return rg & xtRegisterGroupAddrReg;
777
  if (group == xtensa_user_reggroup)
778
    return rg & xtRegisterGroupUser;
779
  if (group == float_reggroup)
780
    return rg & xtRegisterGroupFloat;
781
  if (group == general_reggroup)
782
    return rg & xtRegisterGroupGeneral;
783
  if (group == float_reggroup)
784
    return rg & xtRegisterGroupFloat;
785
  if (group == system_reggroup)
786
    return rg & xtRegisterGroupState;
787
  if (group == vector_reggroup || group == xtensa_vectra_reggroup)
788
    return rg & xtRegisterGroupVectra;
789
  if (group == save_reggroup || group == restore_reggroup)
790
    return (regnum < gdbarch_num_regs (gdbarch)
791
            && (reg->flags & SAVE_REST_FLAGS) == SAVE_REST_VALID);
792
  if ((cp_number = xtensa_coprocessor_register_group (group)) >= 0)
793
    return rg & (xtRegisterGroupCP0 << cp_number);
794
  else
795
    return 1;
796
}
797
 
798
 
799
/* Supply register REGNUM from the buffer specified by GREGS and LEN
800
   in the general-purpose register set REGSET to register cache
801
   REGCACHE.  If REGNUM is -1 do this for all registers in REGSET.  */
802
 
803
static void
804
xtensa_supply_gregset (const struct regset *regset,
805
                       struct regcache *rc,
806
                       int regnum,
807
                       const void *gregs,
808
                       size_t len)
809
{
810
  const xtensa_elf_gregset_t *regs = gregs;
811
  struct gdbarch *gdbarch = get_regcache_arch (rc);
812
  int i;
813
 
814
  DEBUGTRACE ("xtensa_supply_gregset (..., regnum==%d, ...) \n", regnum);
815
 
816
  if (regnum == gdbarch_pc_regnum (gdbarch) || regnum == -1)
817
    regcache_raw_supply (rc, gdbarch_pc_regnum (gdbarch), (char *) &regs->pc);
818
  if (regnum == gdbarch_ps_regnum (gdbarch) || regnum == -1)
819
    regcache_raw_supply (rc, gdbarch_ps_regnum (gdbarch), (char *) &regs->ps);
820
  if (regnum == gdbarch_tdep (gdbarch)->wb_regnum || regnum == -1)
821
    regcache_raw_supply (rc, gdbarch_tdep (gdbarch)->wb_regnum,
822
                         (char *) &regs->windowbase);
823
  if (regnum == gdbarch_tdep (gdbarch)->ws_regnum || regnum == -1)
824
    regcache_raw_supply (rc, gdbarch_tdep (gdbarch)->ws_regnum,
825
                         (char *) &regs->windowstart);
826
  if (regnum == gdbarch_tdep (gdbarch)->lbeg_regnum || regnum == -1)
827
    regcache_raw_supply (rc, gdbarch_tdep (gdbarch)->lbeg_regnum,
828
                         (char *) &regs->lbeg);
829
  if (regnum == gdbarch_tdep (gdbarch)->lend_regnum || regnum == -1)
830
    regcache_raw_supply (rc, gdbarch_tdep (gdbarch)->lend_regnum,
831
                         (char *) &regs->lend);
832
  if (regnum == gdbarch_tdep (gdbarch)->lcount_regnum || regnum == -1)
833
    regcache_raw_supply (rc, gdbarch_tdep (gdbarch)->lcount_regnum,
834
                         (char *) &regs->lcount);
835
  if (regnum == gdbarch_tdep (gdbarch)->sar_regnum || regnum == -1)
836
    regcache_raw_supply (rc, gdbarch_tdep (gdbarch)->sar_regnum,
837
                         (char *) &regs->sar);
838
  if (regnum >=gdbarch_tdep (gdbarch)->ar_base
839
      && regnum < gdbarch_tdep (gdbarch)->ar_base
840
                    + gdbarch_tdep (gdbarch)->num_aregs)
841
    regcache_raw_supply (rc, regnum,
842
                         (char *) &regs->ar[regnum - gdbarch_tdep
843
                           (gdbarch)->ar_base]);
844
  else if (regnum == -1)
845
    {
846
      for (i = 0; i < gdbarch_tdep (gdbarch)->num_aregs; ++i)
847
        regcache_raw_supply (rc, gdbarch_tdep (gdbarch)->ar_base + i,
848
                             (char *) &regs->ar[i]);
849
    }
850
}
851
 
852
 
853
/* Xtensa register set.  */
854
 
855
static struct regset
856
xtensa_gregset =
857
{
858
  NULL,
859
  xtensa_supply_gregset
860
};
861
 
862
 
863
/* Return the appropriate register set for the core
864
   section identified by SECT_NAME and SECT_SIZE.  */
865
 
866
static const struct regset *
867
xtensa_regset_from_core_section (struct gdbarch *core_arch,
868
                                 const char *sect_name,
869
                                 size_t sect_size)
870
{
871
  DEBUGTRACE ("xtensa_regset_from_core_section "
872
              "(..., sect_name==\"%s\", sect_size==%x) \n",
873
              sect_name, (unsigned int) sect_size);
874
 
875
  if (strcmp (sect_name, ".reg") == 0
876
      && sect_size >= sizeof(xtensa_elf_gregset_t))
877
    return &xtensa_gregset;
878
 
879
  return NULL;
880
}
881
 
882
 
883
/* Handling frames.  */
884
 
885
/* Number of registers to save in case of Windowed ABI.  */
886
#define XTENSA_NUM_SAVED_AREGS          12
887
 
888
/* Frame cache part for Windowed ABI.  */
889
typedef struct xtensa_windowed_frame_cache
890
{
891
  int wb;               /* WINDOWBASE of the previous frame.  */
892
  int callsize;         /* Call size of this frame.  */
893
  int ws;               /* WINDOWSTART of the previous frame.  It keeps track of
894
                           life windows only.  If there is no bit set for the
895
                           window, that means it had been already spilled
896
                           because of window overflow.  */
897
 
898
  /* Spilled A-registers from the previous frame.
899
     AREGS[i] == -1, if corresponding AR is alive.  */
900
  CORE_ADDR aregs[XTENSA_NUM_SAVED_AREGS];
901
} xtensa_windowed_frame_cache_t;
902
 
903
/* Call0 ABI Definitions.  */
904
 
905
#define C0_MAXOPDS  3   /* Maximum number of operands for prologue analysis.  */
906
#define C0_NREGS   16   /* Number of A-registers to track.  */
907
#define C0_CLESV   12   /* Callee-saved registers are here and up.  */
908
#define C0_SP       1   /* Register used as SP.  */
909
#define C0_FP      15   /* Register used as FP.  */
910
#define C0_RA       0   /* Register used as return address.  */
911
#define C0_ARGS     2   /* Register used as first arg/retval.  */
912
#define C0_NARGS    6   /* Number of A-regs for args/retvals.  */
913
 
914
/* Each element of xtensa_call0_frame_cache.c0_rt[] describes for each
915
   A-register where the current content of the reg came from (in terms
916
   of an original reg and a constant).  Negative values of c0_rt[n].fp_reg
917
   mean that the orignal content of the register was saved to the stack.
918
   c0_rt[n].fr.ofs is NOT the offset from the frame base because we don't
919
   know where SP will end up until the entire prologue has been analyzed.  */
920
 
921
#define C0_CONST   -1   /* fr_reg value if register contains a constant.  */
922
#define C0_INEXP   -2   /* fr_reg value if inexpressible as reg + offset.  */
923
#define C0_NOSTK   -1   /* to_stk value if register has not been stored.  */
924
 
925
extern xtensa_isa xtensa_default_isa;
926
 
927
typedef struct xtensa_c0reg
928
{
929
    int     fr_reg;     /* original register from which register content
930
                           is derived, or C0_CONST, or C0_INEXP.  */
931
    int     fr_ofs;     /* constant offset from reg, or immediate value.  */
932
    int     to_stk;     /* offset from original SP to register (4-byte aligned),
933
                           or C0_NOSTK if register has not been saved.  */
934
} xtensa_c0reg_t;
935
 
936
 
937
/* Frame cache part for Call0 ABI.  */
938
typedef struct xtensa_call0_frame_cache
939
{
940
  int c0_frmsz;                         /* Stack frame size.  */
941
  int c0_hasfp;                         /* Current frame uses frame pointer.  */
942
  int fp_regnum;                        /* A-register used as FP.  */
943
  int c0_fp;                            /* Actual value of frame pointer.  */
944
  xtensa_c0reg_t c0_rt[C0_NREGS];       /* Register tracking information.  */
945
} xtensa_call0_frame_cache_t;
946
 
947
typedef struct xtensa_frame_cache
948
{
949
  CORE_ADDR base;       /* Stack pointer of this frame.  */
950
  CORE_ADDR pc;         /* PC at the entry point to the function.  */
951
  CORE_ADDR ra;         /* The raw return address (without CALLINC).  */
952
  CORE_ADDR ps;         /* The PS register of this frame.  */
953
  CORE_ADDR prev_sp;    /* Stack Pointer of the previous frame.  */
954
  int call0;            /* It's a call0 framework (else windowed).  */
955
  union
956
    {
957
      xtensa_windowed_frame_cache_t     wd;     /* call0 == false.  */
958
      xtensa_call0_frame_cache_t        c0;     /* call0 == true.  */
959
    };
960
} xtensa_frame_cache_t;
961
 
962
 
963
static struct xtensa_frame_cache *
964
xtensa_alloc_frame_cache (int windowed)
965
{
966
  xtensa_frame_cache_t *cache;
967
  int i;
968
 
969
  DEBUGTRACE ("xtensa_alloc_frame_cache ()\n");
970
 
971
  cache = FRAME_OBSTACK_ZALLOC (xtensa_frame_cache_t);
972
 
973
  cache->base = 0;
974
  cache->pc = 0;
975
  cache->ra = 0;
976
  cache->ps = 0;
977
  cache->prev_sp = 0;
978
  cache->call0 = !windowed;
979
  if (cache->call0)
980
    {
981
      cache->c0.c0_frmsz  = -1;
982
      cache->c0.c0_hasfp  =  0;
983
      cache->c0.fp_regnum = -1;
984
      cache->c0.c0_fp     = -1;
985
 
986
      for (i = 0; i < C0_NREGS; i++)
987
        {
988
          cache->c0.c0_rt[i].fr_reg = i;
989
          cache->c0.c0_rt[i].fr_ofs = 0;
990
          cache->c0.c0_rt[i].to_stk = C0_NOSTK;
991
        }
992
    }
993
  else
994
    {
995
      cache->wd.wb = 0;
996
      cache->wd.ws = 0;
997
      cache->wd.callsize = -1;
998
 
999
      for (i = 0; i < XTENSA_NUM_SAVED_AREGS; i++)
1000
        cache->wd.aregs[i] = -1;
1001
    }
1002
  return cache;
1003
}
1004
 
1005
 
1006
static CORE_ADDR
1007
xtensa_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
1008
{
1009
  return address & ~15;
1010
}
1011
 
1012
 
1013
static CORE_ADDR
1014
xtensa_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
1015
{
1016
  gdb_byte buf[8];
1017
  CORE_ADDR pc;
1018
 
1019
  DEBUGTRACE ("xtensa_unwind_pc (next_frame = %s)\n",
1020
                host_address_to_string (next_frame));
1021
 
1022
  frame_unwind_register (next_frame, gdbarch_pc_regnum (gdbarch), buf);
1023
  pc = extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
1024
 
1025
  DEBUGINFO ("[xtensa_unwind_pc] pc = 0x%08x\n", (unsigned int) pc);
1026
 
1027
  return pc;
1028
}
1029
 
1030
 
1031
static struct frame_id
1032
xtensa_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1033
{
1034
  CORE_ADDR pc, fp;
1035
 
1036
  /* THIS-FRAME is a dummy frame.  Return a frame ID of that frame.  */
1037
 
1038
  pc = get_frame_pc (this_frame);
1039
  fp = get_frame_register_unsigned
1040
         (this_frame, gdbarch_tdep (gdbarch)->a0_base + 1);
1041
 
1042
  /* Make dummy frame ID unique by adding a constant.  */
1043
  return frame_id_build (fp + SP_ALIGNMENT, pc);
1044
}
1045
 
1046
/* Returns the best guess about which register is a frame pointer
1047
   for the function containing CURRENT_PC.  */
1048
 
1049
#define XTENSA_ISA_BSZ          32              /* Instruction buffer size.  */
1050
#define XTENSA_ISA_BADPC        ((CORE_ADDR)0)  /* Bad PC value.  */
1051
 
1052
static unsigned int
1053
xtensa_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR current_pc)
1054
{
1055
#define RETURN_FP goto done
1056
 
1057
  unsigned int fp_regnum = gdbarch_tdep (gdbarch)->a0_base + 1;
1058
  CORE_ADDR start_addr;
1059
  xtensa_isa isa;
1060
  xtensa_insnbuf ins, slot;
1061
  char ibuf[XTENSA_ISA_BSZ];
1062
  CORE_ADDR ia, bt, ba;
1063
  xtensa_format ifmt;
1064
  int ilen, islots, is;
1065
  xtensa_opcode opc;
1066
  const char *opcname;
1067
 
1068
  find_pc_partial_function (current_pc, NULL, &start_addr, NULL);
1069
  if (start_addr == 0)
1070
    return fp_regnum;
1071
 
1072
  if (!xtensa_default_isa)
1073
    xtensa_default_isa = xtensa_isa_init (0, 0);
1074
  isa = xtensa_default_isa;
1075
  gdb_assert (XTENSA_ISA_BSZ >= xtensa_isa_maxlength (isa));
1076
  ins = xtensa_insnbuf_alloc (isa);
1077
  slot = xtensa_insnbuf_alloc (isa);
1078
  ba = 0;
1079
 
1080
  for (ia = start_addr, bt = ia; ia < current_pc ; ia += ilen)
1081
    {
1082
      if (ia + xtensa_isa_maxlength (isa) > bt)
1083
        {
1084
          ba = ia;
1085
          bt = (ba + XTENSA_ISA_BSZ) < current_pc
1086
            ? ba + XTENSA_ISA_BSZ : current_pc;
1087
          if (target_read_memory (ba, ibuf, bt - ba) != 0)
1088
            RETURN_FP;
1089
        }
1090
 
1091
      xtensa_insnbuf_from_chars (isa, ins, &ibuf[ia-ba], 0);
1092
      ifmt = xtensa_format_decode (isa, ins);
1093
      if (ifmt == XTENSA_UNDEFINED)
1094
        RETURN_FP;
1095
      ilen = xtensa_format_length (isa, ifmt);
1096
      if (ilen == XTENSA_UNDEFINED)
1097
        RETURN_FP;
1098
      islots = xtensa_format_num_slots (isa, ifmt);
1099
      if (islots == XTENSA_UNDEFINED)
1100
        RETURN_FP;
1101
 
1102
      for (is = 0; is < islots; ++is)
1103
        {
1104
          if (xtensa_format_get_slot (isa, ifmt, is, ins, slot))
1105
            RETURN_FP;
1106
 
1107
          opc = xtensa_opcode_decode (isa, ifmt, is, slot);
1108
          if (opc == XTENSA_UNDEFINED)
1109
            RETURN_FP;
1110
 
1111
          opcname = xtensa_opcode_name (isa, opc);
1112
 
1113
          if (strcasecmp (opcname, "mov.n") == 0
1114
              || strcasecmp (opcname, "or") == 0)
1115
            {
1116
              unsigned int register_operand;
1117
 
1118
              /* Possible candidate for setting frame pointer
1119
                 from A1. This is what we are looking for.  */
1120
 
1121
              if (xtensa_operand_get_field (isa, opc, 1, ifmt,
1122
                                            is, slot, &register_operand) != 0)
1123
                RETURN_FP;
1124
              if (xtensa_operand_decode (isa, opc, 1, &register_operand) != 0)
1125
                RETURN_FP;
1126
              if (register_operand == 1)  /* Mov{.n} FP A1.  */
1127
                {
1128
                  if (xtensa_operand_get_field (isa, opc, 0, ifmt, is, slot,
1129
                                                &register_operand) != 0)
1130
                    RETURN_FP;
1131
                  if (xtensa_operand_decode (isa, opc, 0,
1132
                                             &register_operand) != 0)
1133
                    RETURN_FP;
1134
 
1135
                  fp_regnum = gdbarch_tdep (gdbarch)->a0_base + register_operand;
1136
                  RETURN_FP;
1137
                }
1138
            }
1139
 
1140
          if (
1141
              /* We have problems decoding the memory.  */
1142
              opcname == NULL
1143
              || strcasecmp (opcname, "ill") == 0
1144
              || strcasecmp (opcname, "ill.n") == 0
1145
              /* Hit planted breakpoint.  */
1146
              || strcasecmp (opcname, "break") == 0
1147
              || strcasecmp (opcname, "break.n") == 0
1148
              /* Flow control instructions finish prologue.  */
1149
              || xtensa_opcode_is_branch (isa, opc) > 0
1150
              || xtensa_opcode_is_jump   (isa, opc) > 0
1151
              || xtensa_opcode_is_loop   (isa, opc) > 0
1152
              || xtensa_opcode_is_call   (isa, opc) > 0
1153
              || strcasecmp (opcname, "simcall") == 0
1154
              || strcasecmp (opcname, "syscall") == 0)
1155
            /* Can not continue analysis.  */
1156
            RETURN_FP;
1157
        }
1158
    }
1159
done:
1160
  xtensa_insnbuf_free(isa, slot);
1161
  xtensa_insnbuf_free(isa, ins);
1162
  return fp_regnum;
1163
}
1164
 
1165
/* The key values to identify the frame using "cache" are
1166
 
1167
        cache->base    = SP (or best guess about FP) of this frame;
1168
        cache->pc      = entry-PC (entry point of the frame function);
1169
        cache->prev_sp = SP of the previous frame.
1170
*/
1171
 
1172
static void
1173
call0_frame_cache (struct frame_info *this_frame,
1174
                   xtensa_frame_cache_t *cache,
1175
                   CORE_ADDR pc, CORE_ADDR litbase);
1176
 
1177
static struct xtensa_frame_cache *
1178
xtensa_frame_cache (struct frame_info *this_frame, void **this_cache)
1179
{
1180
  xtensa_frame_cache_t *cache;
1181
  CORE_ADDR ra, wb, ws, pc, sp, ps;
1182
  struct gdbarch *gdbarch = get_frame_arch (this_frame);
1183
  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1184
  unsigned int fp_regnum;
1185
  char op1;
1186
  int  windowed;
1187
 
1188
  if (*this_cache)
1189
    return *this_cache;
1190
 
1191
  ps = get_frame_register_unsigned (this_frame, gdbarch_ps_regnum (gdbarch));
1192
  windowed = windowing_enabled (ps);
1193
 
1194
  /* Get pristine xtensa-frame.  */
1195
  cache = xtensa_alloc_frame_cache (windowed);
1196
  *this_cache = cache;
1197
 
1198
  pc = get_frame_register_unsigned (this_frame, gdbarch_pc_regnum (gdbarch));
1199
 
1200
  if (windowed)
1201
    {
1202
      /* Get WINDOWBASE, WINDOWSTART, and PS registers.  */
1203
      wb = get_frame_register_unsigned (this_frame,
1204
                                        gdbarch_tdep (gdbarch)->wb_regnum);
1205
      ws = get_frame_register_unsigned (this_frame,
1206
                                        gdbarch_tdep (gdbarch)->ws_regnum);
1207
 
1208
      op1 = read_memory_integer (pc, 1, byte_order);
1209
      if (XTENSA_IS_ENTRY (gdbarch, op1))
1210
        {
1211
          int callinc = CALLINC (ps);
1212
          ra = get_frame_register_unsigned
1213
            (this_frame, gdbarch_tdep (gdbarch)->a0_base + callinc * 4);
1214
 
1215
          /* ENTRY hasn't been executed yet, therefore callsize is still 0.  */
1216
          cache->wd.callsize = 0;
1217
          cache->wd.wb = wb;
1218
          cache->wd.ws = ws;
1219
          cache->prev_sp = get_frame_register_unsigned
1220
                             (this_frame, gdbarch_tdep (gdbarch)->a0_base + 1);
1221
 
1222
          /* This only can be the outermost frame since we are
1223
             just about to execute ENTRY.  SP hasn't been set yet.
1224
             We can assume any frame size, because it does not
1225
             matter, and, let's fake frame base in cache.  */
1226
          cache->base = cache->prev_sp + 16;
1227
 
1228
          cache->pc = pc;
1229
          cache->ra = (cache->pc & 0xc0000000) | (ra & 0x3fffffff);
1230
          cache->ps = (ps & ~PS_CALLINC_MASK)
1231
            | ((WINSIZE(ra)/4) << PS_CALLINC_SHIFT);
1232
 
1233
          return cache;
1234
        }
1235
      else
1236
        {
1237
          fp_regnum = xtensa_scan_prologue (gdbarch, pc);
1238
          ra = get_frame_register_unsigned (this_frame,
1239
                                            gdbarch_tdep (gdbarch)->a0_base);
1240
          cache->wd.callsize = WINSIZE (ra);
1241
          cache->wd.wb = (wb - cache->wd.callsize / 4)
1242
                          & (gdbarch_tdep (gdbarch)->num_aregs / 4 - 1);
1243
          cache->wd.ws = ws & ~(1 << wb);
1244
 
1245
          cache->pc = get_frame_func (this_frame);
1246
          cache->ra = (pc & 0xc0000000) | (ra & 0x3fffffff);
1247
          cache->ps = (ps & ~PS_CALLINC_MASK)
1248
            | ((WINSIZE(ra)/4) << PS_CALLINC_SHIFT);
1249
        }
1250
 
1251
      if (cache->wd.ws == 0)
1252
        {
1253
          int i;
1254
 
1255
          /* Set A0...A3.  */
1256
          sp = get_frame_register_unsigned
1257
            (this_frame, gdbarch_tdep (gdbarch)->a0_base + 1) - 16;
1258
 
1259
          for (i = 0; i < 4; i++, sp += 4)
1260
            {
1261
              cache->wd.aregs[i] = sp;
1262
            }
1263
 
1264
          if (cache->wd.callsize > 4)
1265
            {
1266
              /* Set A4...A7/A11.  */
1267
              /* Get the SP of the frame previous to the previous one.
1268
                 To achieve this, we have to dereference SP twice.  */
1269
              sp = (CORE_ADDR) read_memory_integer (sp - 12, 4, byte_order);
1270
              sp = (CORE_ADDR) read_memory_integer (sp - 12, 4, byte_order);
1271
              sp -= cache->wd.callsize * 4;
1272
 
1273
              for ( i = 4; i < cache->wd.callsize; i++, sp += 4)
1274
                {
1275
                  cache->wd.aregs[i] = sp;
1276
                }
1277
            }
1278
        }
1279
 
1280
      if ((cache->prev_sp == 0) && ( ra != 0 ))
1281
        /* If RA is equal to 0 this frame is an outermost frame.  Leave
1282
           cache->prev_sp unchanged marking the boundary of the frame stack.  */
1283
        {
1284
          if ((cache->wd.ws & (1 << cache->wd.wb)) == 0)
1285
            {
1286
              /* Register window overflow already happened.
1287
                 We can read caller's SP from the proper spill loction.  */
1288
              sp = get_frame_register_unsigned
1289
                (this_frame, gdbarch_tdep (gdbarch)->a0_base + 1);
1290
              cache->prev_sp = read_memory_integer (sp - 12, 4, byte_order);
1291
            }
1292
          else
1293
            {
1294
              /* Read caller's frame SP directly from the previous window.  */
1295
              int regnum = arreg_number
1296
                             (gdbarch, gdbarch_tdep (gdbarch)->a0_base + 1,
1297
                              cache->wd.wb);
1298
 
1299
              cache->prev_sp = get_frame_register_unsigned (this_frame, regnum);
1300
            }
1301
        }
1302
    }
1303
  else  /* Call0 framework.  */
1304
    {
1305
      unsigned int litbase_regnum = gdbarch_tdep (gdbarch)->litbase_regnum;
1306
      CORE_ADDR litbase = (litbase_regnum == -1)
1307
        ? 0 : get_frame_register_unsigned (this_frame, litbase_regnum);
1308
 
1309
      call0_frame_cache (this_frame, cache, pc, litbase);
1310
      fp_regnum = cache->c0.fp_regnum;
1311
    }
1312
 
1313
  cache->base = get_frame_register_unsigned (this_frame, fp_regnum);
1314
 
1315
  return cache;
1316
}
1317
 
1318
static void
1319
xtensa_frame_this_id (struct frame_info *this_frame,
1320
                      void **this_cache,
1321
                      struct frame_id *this_id)
1322
{
1323
  struct xtensa_frame_cache *cache =
1324
    xtensa_frame_cache (this_frame, this_cache);
1325
 
1326
  if (cache->prev_sp == 0)
1327
    return;
1328
 
1329
  (*this_id) = frame_id_build (cache->prev_sp, cache->pc);
1330
}
1331
 
1332
static struct value *
1333
xtensa_frame_prev_register (struct frame_info *this_frame,
1334
                            void **this_cache,
1335
                            int regnum)
1336
{
1337
  struct gdbarch *gdbarch = get_frame_arch (this_frame);
1338
  struct xtensa_frame_cache *cache;
1339
  ULONGEST saved_reg = 0;
1340
  int done = 1;
1341
 
1342
  if (*this_cache == NULL)
1343
    *this_cache = xtensa_frame_cache (this_frame, this_cache);
1344
  cache = *this_cache;
1345
 
1346
  if (regnum ==gdbarch_pc_regnum (gdbarch))
1347
    saved_reg = cache->ra;
1348
  else if (regnum == gdbarch_tdep (gdbarch)->a0_base + 1)
1349
    saved_reg = cache->prev_sp;
1350
  else if (!cache->call0)
1351
    {
1352
      if (regnum == gdbarch_tdep (gdbarch)->ws_regnum)
1353
        saved_reg = cache->wd.ws;
1354
      else if (regnum == gdbarch_tdep (gdbarch)->wb_regnum)
1355
        saved_reg = cache->wd.wb;
1356
      else if (regnum == gdbarch_ps_regnum (gdbarch))
1357
        saved_reg = cache->ps;
1358
      else
1359
        done = 0;
1360
    }
1361
  else
1362
    done = 0;
1363
 
1364
  if (done)
1365
    return frame_unwind_got_constant (this_frame, regnum, saved_reg);
1366
 
1367
  if (!cache->call0) /* Windowed ABI.  */
1368
    {
1369
      /* Convert A-register numbers to AR-register numbers,
1370
         if we deal with A-register.  */
1371
      if (regnum >= gdbarch_tdep (gdbarch)->a0_base
1372
          && regnum <= gdbarch_tdep (gdbarch)->a0_base + 15)
1373
        regnum = arreg_number (gdbarch, regnum, cache->wd.wb);
1374
 
1375
      /* Check, if we deal with AR-register saved on stack.  */
1376
      if (regnum >= gdbarch_tdep (gdbarch)->ar_base
1377
          && regnum <= (gdbarch_tdep (gdbarch)->ar_base
1378
                         + gdbarch_tdep (gdbarch)->num_aregs))
1379
        {
1380
          int areg = areg_number (gdbarch, regnum, cache->wd.wb);
1381
 
1382
          if (areg >= 0
1383
              && areg < XTENSA_NUM_SAVED_AREGS
1384
              && cache->wd.aregs[areg] != -1)
1385
            return frame_unwind_got_memory (this_frame, regnum,
1386
                                            cache->wd.aregs[areg]);
1387
        }
1388
    }
1389
  else /* Call0 ABI.  */
1390
    {
1391
      int reg = (regnum >= gdbarch_tdep (gdbarch)->ar_base
1392
                && regnum <= (gdbarch_tdep (gdbarch)->ar_base
1393
                               + C0_NREGS))
1394
                  ? regnum - gdbarch_tdep (gdbarch)->ar_base : regnum;
1395
 
1396
      if (reg < C0_NREGS)
1397
        {
1398
          CORE_ADDR spe;
1399
          int stkofs;
1400
 
1401
          /* If register was saved in the prologue, retrieve it.  */
1402
          stkofs = cache->c0.c0_rt[reg].to_stk;
1403
          if (stkofs != C0_NOSTK)
1404
            {
1405
              /* Determine SP on entry based on FP.  */
1406
              spe = cache->c0.c0_fp
1407
                - cache->c0.c0_rt[cache->c0.fp_regnum].fr_ofs;
1408
 
1409
              return frame_unwind_got_memory (this_frame, regnum, spe + stkofs);
1410
            }
1411
        }
1412
    }
1413
 
1414
  /* All other registers have been either saved to
1415
     the stack or are still alive in the processor.  */
1416
 
1417
  return frame_unwind_got_register (this_frame, regnum, regnum);
1418
}
1419
 
1420
 
1421
static const struct frame_unwind
1422
xtensa_unwind =
1423
{
1424
  NORMAL_FRAME,
1425
  xtensa_frame_this_id,
1426
  xtensa_frame_prev_register,
1427
  NULL,
1428
  default_frame_sniffer
1429
};
1430
 
1431
static CORE_ADDR
1432
xtensa_frame_base_address (struct frame_info *this_frame, void **this_cache)
1433
{
1434
  struct xtensa_frame_cache *cache =
1435
    xtensa_frame_cache (this_frame, this_cache);
1436
 
1437
  return cache->base;
1438
}
1439
 
1440
static const struct frame_base
1441
xtensa_frame_base =
1442
{
1443
  &xtensa_unwind,
1444
  xtensa_frame_base_address,
1445
  xtensa_frame_base_address,
1446
  xtensa_frame_base_address
1447
};
1448
 
1449
 
1450
static void
1451
xtensa_extract_return_value (struct type *type,
1452
                             struct regcache *regcache,
1453
                             void *dst)
1454
{
1455
  struct gdbarch *gdbarch = get_regcache_arch (regcache);
1456
  bfd_byte *valbuf = dst;
1457
  int len = TYPE_LENGTH (type);
1458
  ULONGEST pc, wb;
1459
  int callsize, areg;
1460
  int offset = 0;
1461
 
1462
  DEBUGTRACE ("xtensa_extract_return_value (...)\n");
1463
 
1464
  gdb_assert(len > 0);
1465
 
1466
  if (gdbarch_tdep (gdbarch)->call_abi != CallAbiCall0Only)
1467
    {
1468
      /* First, we have to find the caller window in the register file.  */
1469
      regcache_raw_read_unsigned (regcache, gdbarch_pc_regnum (gdbarch), &pc);
1470
      callsize = extract_call_winsize (gdbarch, pc);
1471
 
1472
      /* On Xtensa, we can return up to 4 words (or 2 for call12).  */
1473
      if (len > (callsize > 8 ? 8 : 16))
1474
        internal_error (__FILE__, __LINE__,
1475
                        _("cannot extract return value of %d bytes long"), len);
1476
 
1477
      /* Get the register offset of the return
1478
         register (A2) in the caller window.  */
1479
      regcache_raw_read_unsigned
1480
        (regcache, gdbarch_tdep (gdbarch)->wb_regnum, &wb);
1481
      areg = arreg_number (gdbarch,
1482
                          gdbarch_tdep (gdbarch)->a0_base + 2 + callsize, wb);
1483
    }
1484
  else
1485
    {
1486
      /* No windowing hardware - Call0 ABI.  */
1487
      areg = gdbarch_tdep (gdbarch)->a0_base + C0_ARGS;
1488
    }
1489
 
1490
  DEBUGINFO ("[xtensa_extract_return_value] areg %d len %d\n", areg, len);
1491
 
1492
  if (len < 4 && gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1493
    offset = 4 - len;
1494
 
1495
  for (; len > 0; len -= 4, areg++, valbuf += 4)
1496
    {
1497
      if (len < 4)
1498
        regcache_raw_read_part (regcache, areg, offset, len, valbuf);
1499
      else
1500
        regcache_raw_read (regcache, areg, valbuf);
1501
    }
1502
}
1503
 
1504
 
1505
static void
1506
xtensa_store_return_value (struct type *type,
1507
                           struct regcache *regcache,
1508
                           const void *dst)
1509
{
1510
  struct gdbarch *gdbarch = get_regcache_arch (regcache);
1511
  const bfd_byte *valbuf = dst;
1512
  unsigned int areg;
1513
  ULONGEST pc, wb;
1514
  int callsize;
1515
  int len = TYPE_LENGTH (type);
1516
  int offset = 0;
1517
 
1518
  DEBUGTRACE ("xtensa_store_return_value (...)\n");
1519
 
1520
  if (gdbarch_tdep (gdbarch)->call_abi != CallAbiCall0Only)
1521
    {
1522
      regcache_raw_read_unsigned
1523
        (regcache, gdbarch_tdep (gdbarch)->wb_regnum, &wb);
1524
      regcache_raw_read_unsigned (regcache, gdbarch_pc_regnum (gdbarch), &pc);
1525
      callsize = extract_call_winsize (gdbarch, pc);
1526
 
1527
      if (len > (callsize > 8 ? 8 : 16))
1528
        internal_error (__FILE__, __LINE__,
1529
                        _("unimplemented for this length: %d"),
1530
                        TYPE_LENGTH (type));
1531
      areg = arreg_number (gdbarch,
1532
                           gdbarch_tdep (gdbarch)->a0_base + 2 + callsize, wb);
1533
 
1534
      DEBUGTRACE ("[xtensa_store_return_value] callsize %d wb %d\n",
1535
              callsize, (int) wb);
1536
    }
1537
  else
1538
    {
1539
      areg = gdbarch_tdep (gdbarch)->a0_base + C0_ARGS;
1540
    }
1541
 
1542
  if (len < 4 && gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1543
    offset = 4 - len;
1544
 
1545
  for (; len > 0; len -= 4, areg++, valbuf += 4)
1546
    {
1547
      if (len < 4)
1548
        regcache_raw_write_part (regcache, areg, offset, len, valbuf);
1549
      else
1550
        regcache_raw_write (regcache, areg, valbuf);
1551
    }
1552
}
1553
 
1554
 
1555
static enum return_value_convention
1556
xtensa_return_value (struct gdbarch *gdbarch,
1557
                     struct type *func_type,
1558
                     struct type *valtype,
1559
                     struct regcache *regcache,
1560
                     gdb_byte *readbuf,
1561
                     const gdb_byte *writebuf)
1562
{
1563
  /* Structures up to 16 bytes are returned in registers.  */
1564
 
1565
  int struct_return = ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT
1566
                        || TYPE_CODE (valtype) == TYPE_CODE_UNION
1567
                        || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
1568
                       && TYPE_LENGTH (valtype) > 16);
1569
 
1570
  if (struct_return)
1571
    return RETURN_VALUE_STRUCT_CONVENTION;
1572
 
1573
  DEBUGTRACE ("xtensa_return_value(...)\n");
1574
 
1575
  if (writebuf != NULL)
1576
    {
1577
      xtensa_store_return_value (valtype, regcache, writebuf);
1578
    }
1579
 
1580
  if (readbuf != NULL)
1581
    {
1582
      gdb_assert (!struct_return);
1583
      xtensa_extract_return_value (valtype, regcache, readbuf);
1584
    }
1585
  return RETURN_VALUE_REGISTER_CONVENTION;
1586
}
1587
 
1588
 
1589
/* DUMMY FRAME */
1590
 
1591
static CORE_ADDR
1592
xtensa_push_dummy_call (struct gdbarch *gdbarch,
1593
                        struct value *function,
1594
                        struct regcache *regcache,
1595
                        CORE_ADDR bp_addr,
1596
                        int nargs,
1597
                        struct value **args,
1598
                        CORE_ADDR sp,
1599
                        int struct_return,
1600
                        CORE_ADDR struct_addr)
1601
{
1602
  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1603
  int i;
1604
  int size, onstack_size;
1605
  gdb_byte *buf = (gdb_byte *) alloca (16);
1606
  CORE_ADDR ra, ps;
1607
  struct argument_info
1608
  {
1609
    const bfd_byte *contents;
1610
    int length;
1611
    int onstack;                /* onstack == 0 => in reg */
1612
    int align;                  /* alignment */
1613
    union
1614
    {
1615
      int offset;               /* stack offset if on stack */
1616
      int regno;                /* regno if in register */
1617
    } u;
1618
  };
1619
 
1620
  struct argument_info *arg_info =
1621
    (struct argument_info *) alloca (nargs * sizeof (struct argument_info));
1622
 
1623
  CORE_ADDR osp = sp;
1624
 
1625
  DEBUGTRACE ("xtensa_push_dummy_call (...)\n");
1626
 
1627
  if (xtensa_debug_level > 3)
1628
    {
1629
      int i;
1630
      DEBUGINFO ("[xtensa_push_dummy_call] nargs = %d\n", nargs);
1631
      DEBUGINFO ("[xtensa_push_dummy_call] sp=0x%x, struct_return=%d, "
1632
                 "struct_addr=0x%x\n",
1633
                 (int) sp, (int) struct_return, (int) struct_addr);
1634
 
1635
      for (i = 0; i < nargs; i++)
1636
        {
1637
          struct value *arg = args[i];
1638
          struct type *arg_type = check_typedef (value_type (arg));
1639
          fprintf_unfiltered (gdb_stdlog, "%2d: 0x%lx %3d ",
1640
                              i, (unsigned long) arg, TYPE_LENGTH (arg_type));
1641
          switch (TYPE_CODE (arg_type))
1642
            {
1643
            case TYPE_CODE_INT:
1644
              fprintf_unfiltered (gdb_stdlog, "int");
1645
              break;
1646
            case TYPE_CODE_STRUCT:
1647
              fprintf_unfiltered (gdb_stdlog, "struct");
1648
              break;
1649
            default:
1650
              fprintf_unfiltered (gdb_stdlog, "%3d", TYPE_CODE (arg_type));
1651
              break;
1652
            }
1653
          fprintf_unfiltered (gdb_stdlog, " 0x%lx\n",
1654
                              (unsigned long) value_contents (arg));
1655
        }
1656
    }
1657
 
1658
  /* First loop: collect information.
1659
     Cast into type_long.  (This shouldn't happen often for C because
1660
     GDB already does this earlier.)  It's possible that GDB could
1661
     do it all the time but it's harmless to leave this code here.  */
1662
 
1663
  size = 0;
1664
  onstack_size = 0;
1665
  i = 0;
1666
 
1667
  if (struct_return)
1668
    size = REGISTER_SIZE;
1669
 
1670
  for (i = 0; i < nargs; i++)
1671
    {
1672
      struct argument_info *info = &arg_info[i];
1673
      struct value *arg = args[i];
1674
      struct type *arg_type = check_typedef (value_type (arg));
1675
 
1676
      switch (TYPE_CODE (arg_type))
1677
        {
1678
        case TYPE_CODE_INT:
1679
        case TYPE_CODE_BOOL:
1680
        case TYPE_CODE_CHAR:
1681
        case TYPE_CODE_RANGE:
1682
        case TYPE_CODE_ENUM:
1683
 
1684
          /* Cast argument to long if necessary as the mask does it too.  */
1685
          if (TYPE_LENGTH (arg_type)
1686
              < TYPE_LENGTH (builtin_type (gdbarch)->builtin_long))
1687
            {
1688
              arg_type = builtin_type (gdbarch)->builtin_long;
1689
              arg = value_cast (arg_type, arg);
1690
            }
1691
          /* Aligment is equal to the type length for the basic types.  */
1692
          info->align = TYPE_LENGTH (arg_type);
1693
          break;
1694
 
1695
        case TYPE_CODE_FLT:
1696
 
1697
          /* Align doubles correctly.  */
1698
          if (TYPE_LENGTH (arg_type)
1699
              == TYPE_LENGTH (builtin_type (gdbarch)->builtin_double))
1700
            info->align = TYPE_LENGTH (builtin_type (gdbarch)->builtin_double);
1701
          else
1702
            info->align = TYPE_LENGTH (builtin_type (gdbarch)->builtin_long);
1703
          break;
1704
 
1705
        case TYPE_CODE_STRUCT:
1706
        default:
1707
          info->align = TYPE_LENGTH (builtin_type (gdbarch)->builtin_long);
1708
          break;
1709
        }
1710
      info->length = TYPE_LENGTH (arg_type);
1711
      info->contents = value_contents (arg);
1712
 
1713
      /* Align size and onstack_size.  */
1714
      size = (size + info->align - 1) & ~(info->align - 1);
1715
      onstack_size = (onstack_size + info->align - 1) & ~(info->align - 1);
1716
 
1717
      if (size + info->length > REGISTER_SIZE * ARG_NOF (gdbarch))
1718
        {
1719
          info->onstack = 1;
1720
          info->u.offset = onstack_size;
1721
          onstack_size += info->length;
1722
        }
1723
      else
1724
        {
1725
          info->onstack = 0;
1726
          info->u.regno = ARG_1ST (gdbarch) + size / REGISTER_SIZE;
1727
        }
1728
      size += info->length;
1729
    }
1730
 
1731
  /* Adjust the stack pointer and align it.  */
1732
  sp = align_down (sp - onstack_size, SP_ALIGNMENT);
1733
 
1734
  /* Simulate MOVSP, if Windowed ABI.  */
1735
  if ((gdbarch_tdep (gdbarch)->call_abi != CallAbiCall0Only)
1736
      && (sp != osp))
1737
    {
1738
      read_memory (osp - 16, buf, 16);
1739
      write_memory (sp - 16, buf, 16);
1740
    }
1741
 
1742
  /* Second Loop: Load arguments.  */
1743
 
1744
  if (struct_return)
1745
    {
1746
      store_unsigned_integer (buf, REGISTER_SIZE, byte_order, struct_addr);
1747
      regcache_cooked_write (regcache, ARG_1ST (gdbarch), buf);
1748
    }
1749
 
1750
  for (i = 0; i < nargs; i++)
1751
    {
1752
      struct argument_info *info = &arg_info[i];
1753
 
1754
      if (info->onstack)
1755
        {
1756
          int n = info->length;
1757
          CORE_ADDR offset = sp + info->u.offset;
1758
 
1759
          /* Odd-sized structs are aligned to the lower side of a memory
1760
             word in big-endian mode and require a shift.  This only
1761
             applies for structures smaller than one word.  */
1762
 
1763
          if (n < REGISTER_SIZE
1764
              && gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1765
            offset += (REGISTER_SIZE - n);
1766
 
1767
          write_memory (offset, info->contents, info->length);
1768
 
1769
        }
1770
      else
1771
        {
1772
          int n = info->length;
1773
          const bfd_byte *cp = info->contents;
1774
          int r = info->u.regno;
1775
 
1776
          /* Odd-sized structs are aligned to the lower side of registers in
1777
             big-endian mode and require a shift.  The odd-sized leftover will
1778
             be at the end.  Note that this is only true for structures smaller
1779
             than REGISTER_SIZE; for larger odd-sized structures the excess
1780
             will be left-aligned in the register on both endiannesses.  */
1781
 
1782
          if (n < REGISTER_SIZE && byte_order == BFD_ENDIAN_BIG)
1783
            {
1784
              ULONGEST v;
1785
              v = extract_unsigned_integer (cp, REGISTER_SIZE, byte_order);
1786
              v = v >> ((REGISTER_SIZE - n) * TARGET_CHAR_BIT);
1787
 
1788
              store_unsigned_integer (buf, REGISTER_SIZE, byte_order, v);
1789
              regcache_cooked_write (regcache, r, buf);
1790
 
1791
              cp += REGISTER_SIZE;
1792
              n -= REGISTER_SIZE;
1793
              r++;
1794
            }
1795
          else
1796
            while (n > 0)
1797
              {
1798
                regcache_cooked_write (regcache, r, cp);
1799
 
1800
                cp += REGISTER_SIZE;
1801
                n -= REGISTER_SIZE;
1802
                r++;
1803
              }
1804
        }
1805
    }
1806
 
1807
  /* Set the return address of dummy frame to the dummy address.
1808
     The return address for the current function (in A0) is
1809
     saved in the dummy frame, so we can savely overwrite A0 here.  */
1810
 
1811
  if (gdbarch_tdep (gdbarch)->call_abi != CallAbiCall0Only)
1812
    {
1813
      ra = (bp_addr & 0x3fffffff) | 0x40000000;
1814
      regcache_raw_read (regcache, gdbarch_ps_regnum (gdbarch), buf);
1815
      ps = extract_unsigned_integer (buf, 4, byte_order) & ~0x00030000;
1816
      regcache_cooked_write_unsigned
1817
        (regcache, gdbarch_tdep (gdbarch)->a0_base + 4, ra);
1818
      regcache_cooked_write_unsigned (regcache,
1819
                                      gdbarch_ps_regnum (gdbarch),
1820
                                      ps | 0x00010000);
1821
 
1822
      /* All the registers have been saved.  After executing
1823
         dummy call, they all will be restored.  So it's safe
1824
         to modify WINDOWSTART register to make it look like there
1825
         is only one register window corresponding to WINDOWEBASE.  */
1826
 
1827
      regcache_raw_read (regcache, gdbarch_tdep (gdbarch)->wb_regnum, buf);
1828
      regcache_cooked_write_unsigned
1829
        (regcache, gdbarch_tdep (gdbarch)->ws_regnum,
1830
         1 << extract_unsigned_integer (buf, 4, byte_order));
1831
    }
1832
  else
1833
    {
1834
      /* Simulate CALL0: write RA into A0 register.  */
1835
      regcache_cooked_write_unsigned
1836
        (regcache, gdbarch_tdep (gdbarch)->a0_base, bp_addr);
1837
    }
1838
 
1839
  /* Set new stack pointer and return it.  */
1840
  regcache_cooked_write_unsigned (regcache,
1841
                                  gdbarch_tdep (gdbarch)->a0_base + 1, sp);
1842
  /* Make dummy frame ID unique by adding a constant.  */
1843
  return sp + SP_ALIGNMENT;
1844
}
1845
 
1846
 
1847
/* Return a breakpoint for the current location of PC.  We always use
1848
   the density version if we have density instructions (regardless of the
1849
   current instruction at PC), and use regular instructions otherwise.  */
1850
 
1851
#define BIG_BREAKPOINT { 0x00, 0x04, 0x00 }
1852
#define LITTLE_BREAKPOINT { 0x00, 0x40, 0x00 }
1853
#define DENSITY_BIG_BREAKPOINT { 0xd2, 0x0f }
1854
#define DENSITY_LITTLE_BREAKPOINT { 0x2d, 0xf0 }
1855
 
1856
static const unsigned char *
1857
xtensa_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr,
1858
                           int *lenptr)
1859
{
1860
  static unsigned char big_breakpoint[] = BIG_BREAKPOINT;
1861
  static unsigned char little_breakpoint[] = LITTLE_BREAKPOINT;
1862
  static unsigned char density_big_breakpoint[] = DENSITY_BIG_BREAKPOINT;
1863
  static unsigned char density_little_breakpoint[] = DENSITY_LITTLE_BREAKPOINT;
1864
 
1865
  DEBUGTRACE ("xtensa_breakpoint_from_pc (pc = 0x%08x)\n", (int) *pcptr);
1866
 
1867
  if (gdbarch_tdep (gdbarch)->isa_use_density_instructions)
1868
    {
1869
      if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1870
        {
1871
          *lenptr = sizeof (density_big_breakpoint);
1872
          return density_big_breakpoint;
1873
        }
1874
      else
1875
        {
1876
          *lenptr = sizeof (density_little_breakpoint);
1877
          return density_little_breakpoint;
1878
        }
1879
    }
1880
  else
1881
    {
1882
      if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1883
        {
1884
          *lenptr = sizeof (big_breakpoint);
1885
          return big_breakpoint;
1886
        }
1887
      else
1888
        {
1889
          *lenptr = sizeof (little_breakpoint);
1890
          return little_breakpoint;
1891
        }
1892
    }
1893
}
1894
 
1895
/* Call0 ABI support routines.  */
1896
 
1897
/* Call0 opcode class.  Opcodes are preclassified according to what they
1898
   mean for Call0 prologue analysis, and their number of significant operands.
1899
   The purpose of this is to simplify prologue analysis by separating
1900
   instruction decoding (libisa) from the semantics of prologue analysis.  */
1901
 
1902
typedef enum {
1903
  c0opc_illegal,       /* Unknown to libisa (invalid) or 'ill' opcode.  */
1904
  c0opc_uninteresting, /* Not interesting for Call0 prologue analysis.  */
1905
  c0opc_flow,          /* Flow control insn.  */
1906
  c0opc_entry,         /* ENTRY indicates non-Call0 prologue.  */
1907
  c0opc_break,         /* Debugger software breakpoints.  */
1908
  c0opc_add,           /* Adding two registers.  */
1909
  c0opc_addi,          /* Adding a register and an immediate.  */
1910
  c0opc_sub,           /* Subtracting a register from a register.  */
1911
  c0opc_mov,           /* Moving a register to a register.  */
1912
  c0opc_movi,          /* Moving an immediate to a register.  */
1913
  c0opc_l32r,          /* Loading a literal.  */
1914
  c0opc_s32i,          /* Storing word at fixed offset from a base register.  */
1915
  c0opc_NrOf           /* Number of opcode classifications.  */
1916
} xtensa_insn_kind;
1917
 
1918
 
1919
/* Classify an opcode based on what it means for Call0 prologue analysis.  */
1920
 
1921
static xtensa_insn_kind
1922
call0_classify_opcode (xtensa_isa isa, xtensa_opcode opc)
1923
{
1924
  const char *opcname;
1925
  xtensa_insn_kind opclass = c0opc_uninteresting;
1926
 
1927
  DEBUGTRACE ("call0_classify_opcode (..., opc = %d)\n", opc);
1928
 
1929
  /* Get opcode name and handle special classifications.  */
1930
 
1931
  opcname = xtensa_opcode_name (isa, opc);
1932
 
1933
  if (opcname == NULL
1934
      || strcasecmp (opcname, "ill") == 0
1935
      || strcasecmp (opcname, "ill.n") == 0)
1936
    opclass = c0opc_illegal;
1937
  else if (strcasecmp (opcname, "break") == 0
1938
           || strcasecmp (opcname, "break.n") == 0)
1939
     opclass = c0opc_break;
1940
  else if (strcasecmp (opcname, "entry") == 0)
1941
    opclass = c0opc_entry;
1942
  else if (xtensa_opcode_is_branch (isa, opc) > 0
1943
           || xtensa_opcode_is_jump   (isa, opc) > 0
1944
           || xtensa_opcode_is_loop   (isa, opc) > 0
1945
           || xtensa_opcode_is_call   (isa, opc) > 0
1946
           || strcasecmp (opcname, "simcall") == 0
1947
           || strcasecmp (opcname, "syscall") == 0)
1948
    opclass = c0opc_flow;
1949
 
1950
  /* Also, classify specific opcodes that need to be tracked.  */
1951
  else if (strcasecmp (opcname, "add") == 0
1952
           || strcasecmp (opcname, "add.n") == 0)
1953
    opclass = c0opc_add;
1954
  else if (strcasecmp (opcname, "addi") == 0
1955
           || strcasecmp (opcname, "addi.n") == 0
1956
           || strcasecmp (opcname, "addmi") == 0)
1957
    opclass = c0opc_addi;
1958
  else if (strcasecmp (opcname, "sub") == 0)
1959
    opclass = c0opc_sub;
1960
  else if (strcasecmp (opcname, "mov.n") == 0
1961
           || strcasecmp (opcname, "or") == 0) /* Could be 'mov' asm macro.  */
1962
    opclass = c0opc_mov;
1963
  else if (strcasecmp (opcname, "movi") == 0
1964
           || strcasecmp (opcname, "movi.n") == 0)
1965
    opclass = c0opc_movi;
1966
  else if (strcasecmp (opcname, "l32r") == 0)
1967
    opclass = c0opc_l32r;
1968
  else if (strcasecmp (opcname, "s32i") == 0
1969
           || strcasecmp (opcname, "s32i.n") == 0)
1970
    opclass = c0opc_s32i;
1971
 
1972
  return opclass;
1973
}
1974
 
1975
/* Tracks register movement/mutation for a given operation, which may
1976
   be within a bundle.  Updates the destination register tracking info
1977
   accordingly.  The pc is needed only for pc-relative load instructions
1978
   (eg. l32r).  The SP register number is needed to identify stores to
1979
   the stack frame.  */
1980
 
1981
static void
1982
call0_track_op (struct gdbarch *gdbarch,
1983
                xtensa_c0reg_t dst[], xtensa_c0reg_t src[],
1984
                xtensa_insn_kind opclass, int nods, unsigned odv[],
1985
                CORE_ADDR pc, CORE_ADDR litbase, int spreg)
1986
{
1987
  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1988
  unsigned litaddr, litval;
1989
 
1990
  switch (opclass)
1991
    {
1992
    case c0opc_addi:
1993
      /* 3 operands: dst, src, imm.  */
1994
      gdb_assert (nods == 3);
1995
      dst[odv[0]].fr_reg = src[odv[1]].fr_reg;
1996
      dst[odv[0]].fr_ofs = src[odv[1]].fr_ofs + odv[2];
1997
      break;
1998
    case c0opc_add:
1999
      /* 3 operands: dst, src1, src2.  */
2000
      gdb_assert (nods == 3);
2001
      if      (src[odv[1]].fr_reg == C0_CONST)
2002
        {
2003
          dst[odv[0]].fr_reg = src[odv[2]].fr_reg;
2004
          dst[odv[0]].fr_ofs = src[odv[2]].fr_ofs + src[odv[1]].fr_ofs;
2005
        }
2006
      else if (src[odv[2]].fr_reg == C0_CONST)
2007
        {
2008
          dst[odv[0]].fr_reg = src[odv[1]].fr_reg;
2009
          dst[odv[0]].fr_ofs = src[odv[1]].fr_ofs + src[odv[2]].fr_ofs;
2010
        }
2011
      else dst[odv[0]].fr_reg = C0_INEXP;
2012
      break;
2013
    case c0opc_sub:
2014
      /* 3 operands: dst, src1, src2.  */
2015
      gdb_assert (nods == 3);
2016
      if      (src[odv[2]].fr_reg == C0_CONST)
2017
        {
2018
          dst[odv[0]].fr_reg = src[odv[1]].fr_reg;
2019
          dst[odv[0]].fr_ofs = src[odv[1]].fr_ofs - src[odv[2]].fr_ofs;
2020
        }
2021
      else dst[odv[0]].fr_reg = C0_INEXP;
2022
      break;
2023
    case c0opc_mov:
2024
      /* 2 operands: dst, src [, src].  */
2025
      gdb_assert (nods == 2);
2026
      dst[odv[0]].fr_reg = src[odv[1]].fr_reg;
2027
      dst[odv[0]].fr_ofs = src[odv[1]].fr_ofs;
2028
      break;
2029
    case c0opc_movi:
2030
      /* 2 operands: dst, imm.  */
2031
      gdb_assert (nods == 2);
2032
      dst[odv[0]].fr_reg = C0_CONST;
2033
      dst[odv[0]].fr_ofs = odv[1];
2034
      break;
2035
    case c0opc_l32r:
2036
      /* 2 operands: dst, literal offset.  */
2037
      gdb_assert (nods == 2);
2038
      litaddr = litbase & 1
2039
                  ? (litbase & ~1) + (signed)odv[1]
2040
                  : (pc + 3  + (signed)odv[1]) & ~3;
2041
      litval = read_memory_integer (litaddr, 4, byte_order);
2042
      dst[odv[0]].fr_reg = C0_CONST;
2043
      dst[odv[0]].fr_ofs = litval;
2044
      break;
2045
    case c0opc_s32i:
2046
      /* 3 operands: value, base, offset.  */
2047
      gdb_assert (nods == 3 && spreg >= 0 && spreg < C0_NREGS);
2048
      if (src[odv[1]].fr_reg == spreg        /* Store to stack frame.  */
2049
          && (src[odv[1]].fr_ofs & 3) == 0   /* Alignment preserved.  */
2050
          &&  src[odv[0]].fr_reg >= 0          /* Value is from a register.  */
2051
          &&  src[odv[0]].fr_ofs == 0          /* Value hasn't been modified.  */
2052
          &&  src[src[odv[0]].fr_reg].to_stk == C0_NOSTK) /* First time.  */
2053
        {
2054
          /* ISA encoding guarantees alignment.  But, check it anyway.  */
2055
          gdb_assert ((odv[2] & 3) == 0);
2056
          dst[src[odv[0]].fr_reg].to_stk = src[odv[1]].fr_ofs + odv[2];
2057
        }
2058
      break;
2059
    default:
2060
        gdb_assert (0);
2061
    }
2062
}
2063
 
2064
/* Analyze prologue of the function at start address to determine if it uses
2065
   the Call0 ABI, and if so track register moves and linear modifications
2066
   in the prologue up to the PC or just beyond the prologue, whichever is first.
2067
   An 'entry' instruction indicates non-Call0 ABI and the end of the prologue.
2068
   The prologue may overlap non-prologue instructions but is guaranteed to end
2069
   by the first flow-control instruction (jump, branch, call or return).
2070
   Since an optimized function may move information around and change the
2071
   stack frame arbitrarily during the prologue, the information is guaranteed
2072
   valid only at the point in the function indicated by the PC.
2073
   May be used to skip the prologue or identify the ABI, w/o tracking.
2074
 
2075
   Returns:   Address of first instruction after prologue, or PC (whichever
2076
              is first), or 0, if decoding failed (in libisa).
2077
   Input args:
2078
      start   Start address of function/prologue.
2079
      pc      Program counter to stop at.  Use 0 to continue to end of prologue.
2080
              If 0, avoids infinite run-on in corrupt code memory by bounding
2081
              the scan to the end of the function if that can be determined.
2082
      nregs   Number of general registers to track (size of rt[] array).
2083
   InOut args:
2084
      rt[]    Array[nregs] of xtensa_c0reg structures for register tracking info.
2085
              If NULL, registers are not tracked.
2086
   Output args:
2087
      call0   If != NULL, *call0 is set non-zero if Call0 ABI used, else 0
2088
              (more accurately, non-zero until 'entry' insn is encountered).
2089
 
2090
      Note that these may produce useful results even if decoding fails
2091
      because they begin with default assumptions that analysis may change.  */
2092
 
2093
static CORE_ADDR
2094
call0_analyze_prologue (struct gdbarch *gdbarch,
2095
                        CORE_ADDR start, CORE_ADDR pc, CORE_ADDR litbase,
2096
                        int nregs, xtensa_c0reg_t rt[], int *call0)
2097
{
2098
  CORE_ADDR ia;             /* Current insn address in prologue.  */
2099
  CORE_ADDR ba = 0;          /* Current address at base of insn buffer.  */
2100
  CORE_ADDR bt;             /* Current address at top+1 of insn buffer.  */
2101
  char ibuf[XTENSA_ISA_BSZ];/* Instruction buffer for decoding prologue.  */
2102
  xtensa_isa isa;           /* libisa ISA handle.  */
2103
  xtensa_insnbuf ins, slot; /* libisa handle to decoded insn, slot.  */
2104
  xtensa_format ifmt;       /* libisa instruction format.  */
2105
  int ilen, islots, is;     /* Instruction length, nbr slots, current slot.  */
2106
  xtensa_opcode opc;        /* Opcode in current slot.  */
2107
  xtensa_insn_kind opclass; /* Opcode class for Call0 prologue analysis.  */
2108
  int nods;                 /* Opcode number of operands.  */
2109
  unsigned odv[C0_MAXOPDS]; /* Operand values in order provided by libisa.  */
2110
  xtensa_c0reg_t *rtmp;     /* Register tracking info snapshot.  */
2111
  int j;                    /* General loop counter.  */
2112
  int fail = 0;              /* Set non-zero and exit, if decoding fails.  */
2113
  CORE_ADDR body_pc;        /* The PC for the first non-prologue insn.  */
2114
  CORE_ADDR end_pc;         /* The PC for the lust function insn.  */
2115
 
2116
  struct symtab_and_line prologue_sal;
2117
 
2118
  DEBUGTRACE ("call0_analyze_prologue (start = 0x%08x, pc = 0x%08x, ...)\n",
2119
              (int)start, (int)pc);
2120
 
2121
  /* Try to limit the scan to the end of the function if a non-zero pc
2122
     arg was not supplied to avoid probing beyond the end of valid memory.
2123
     If memory is full of garbage that classifies as c0opc_uninteresting.
2124
     If this fails (eg. if no symbols) pc ends up 0 as it was.
2125
     Intialize the Call0 frame and register tracking info.
2126
     Assume it's Call0 until an 'entry' instruction is encountered.
2127
     Assume we may be in the prologue until we hit a flow control instr.  */
2128
 
2129
  rtmp = NULL;
2130
  body_pc = UINT_MAX;
2131
  end_pc = 0;
2132
 
2133
  /* Find out, if we have an information about the prologue from DWARF.  */
2134
  prologue_sal = find_pc_line (start, 0);
2135
  if (prologue_sal.line != 0) /* Found debug info.  */
2136
    body_pc = prologue_sal.end;
2137
 
2138
  /* If we are going to analyze the prologue in general without knowing about
2139
     the current PC, make the best assumtion for the end of the prologue.  */
2140
  if (pc == 0)
2141
    {
2142
      find_pc_partial_function (start, 0, NULL, &end_pc);
2143
      body_pc = min (end_pc, body_pc);
2144
    }
2145
  else
2146
    body_pc = min (pc, body_pc);
2147
 
2148
  if (call0 != NULL)
2149
      *call0 = 1;
2150
 
2151
  if (rt != NULL)
2152
    {
2153
      rtmp = (xtensa_c0reg_t*) alloca(nregs * sizeof(xtensa_c0reg_t));
2154
      /* rt is already initialized in xtensa_alloc_frame_cache().  */
2155
    }
2156
  else nregs = 0;
2157
 
2158
  if (!xtensa_default_isa)
2159
    xtensa_default_isa = xtensa_isa_init (0, 0);
2160
  isa = xtensa_default_isa;
2161
  gdb_assert (XTENSA_ISA_BSZ >= xtensa_isa_maxlength (isa));
2162
  ins = xtensa_insnbuf_alloc (isa);
2163
  slot = xtensa_insnbuf_alloc (isa);
2164
 
2165
  for (ia = start, bt = ia; ia < body_pc ; ia += ilen)
2166
    {
2167
      /* (Re)fill instruction buffer from memory if necessary, but do not
2168
         read memory beyond PC to be sure we stay within text section
2169
         (this protection only works if a non-zero pc is supplied).  */
2170
 
2171
      if (ia + xtensa_isa_maxlength (isa) > bt)
2172
        {
2173
          ba = ia;
2174
          bt = (ba + XTENSA_ISA_BSZ) < body_pc ? ba + XTENSA_ISA_BSZ : body_pc;
2175
          read_memory (ba, ibuf, bt - ba);
2176
          /* If there is a memory reading error read_memory () will report it
2177
             and then throw an exception, stopping command execution.  */
2178
        }
2179
 
2180
      /* Decode format information.  */
2181
 
2182
      xtensa_insnbuf_from_chars (isa, ins, &ibuf[ia-ba], 0);
2183
      ifmt = xtensa_format_decode (isa, ins);
2184
      if (ifmt == XTENSA_UNDEFINED)
2185
        {
2186
          fail = 1;
2187
          goto done;
2188
        }
2189
      ilen = xtensa_format_length (isa, ifmt);
2190
      if (ilen == XTENSA_UNDEFINED)
2191
        {
2192
          fail = 1;
2193
          goto done;
2194
        }
2195
      islots = xtensa_format_num_slots (isa, ifmt);
2196
      if (islots == XTENSA_UNDEFINED)
2197
        {
2198
          fail = 1;
2199
          goto done;
2200
        }
2201
 
2202
      /* Analyze a bundle or a single instruction, using a snapshot of
2203
         the register tracking info as input for the entire bundle so that
2204
         register changes do not take effect within this bundle.  */
2205
 
2206
      for (j = 0; j < nregs; ++j)
2207
        rtmp[j] = rt[j];
2208
 
2209
      for (is = 0; is < islots; ++is)
2210
        {
2211
          /* Decode a slot and classify the opcode.  */
2212
 
2213
          fail = xtensa_format_get_slot (isa, ifmt, is, ins, slot);
2214
          if (fail)
2215
            goto done;
2216
 
2217
          opc = xtensa_opcode_decode (isa, ifmt, is, slot);
2218
          DEBUGVERB ("[call0_analyze_prologue] instr addr = 0x%08x, opc = %d\n",
2219
                     (unsigned)ia, opc);
2220
          if (opc == XTENSA_UNDEFINED)
2221
            opclass = c0opc_illegal;
2222
          else
2223
            opclass = call0_classify_opcode (isa, opc);
2224
 
2225
          /* Decide whether to track this opcode, ignore it, or bail out.  */
2226
 
2227
          switch (opclass)
2228
            {
2229
            case c0opc_illegal:
2230
            case c0opc_break:
2231
              fail = 1;
2232
              goto done;
2233
 
2234
            case c0opc_uninteresting:
2235
              continue;
2236
 
2237
            case c0opc_flow:
2238
              goto done;
2239
 
2240
            case c0opc_entry:
2241
              if (call0 != NULL)
2242
                *call0 = 0;
2243
              ia += ilen;               /* Skip over 'entry' insn.  */
2244
              goto done;
2245
 
2246
            default:
2247
              if (call0 != NULL)
2248
                *call0 = 1;
2249
            }
2250
 
2251
          /* Only expected opcodes should get this far.  */
2252
          if (rt == NULL)
2253
            continue;
2254
 
2255
          /* Extract and decode the operands.  */
2256
          nods = xtensa_opcode_num_operands (isa, opc);
2257
          if (nods == XTENSA_UNDEFINED)
2258
            {
2259
              fail = 1;
2260
              goto done;
2261
            }
2262
 
2263
          for (j = 0; j < nods && j < C0_MAXOPDS; ++j)
2264
            {
2265
              fail = xtensa_operand_get_field (isa, opc, j, ifmt,
2266
                                               is, slot, &odv[j]);
2267
              if (fail)
2268
                goto done;
2269
 
2270
              fail = xtensa_operand_decode (isa, opc, j, &odv[j]);
2271
              if (fail)
2272
                goto done;
2273
            }
2274
 
2275
          /* Check operands to verify use of 'mov' assembler macro.  */
2276
          if (opclass == c0opc_mov && nods == 3)
2277
            {
2278
              if (odv[2] == odv[1])
2279
                nods = 2;
2280
              else
2281
                {
2282
                  opclass = c0opc_uninteresting;
2283
                  continue;
2284
                }
2285
            }
2286
 
2287
          /* Track register movement and modification for this operation.  */
2288
          call0_track_op (gdbarch, rt, rtmp, opclass,
2289
                          nods, odv, ia, litbase, 1);
2290
        }
2291
    }
2292
done:
2293
  DEBUGVERB ("[call0_analyze_prologue] stopped at instr addr 0x%08x, %s\n",
2294
             (unsigned)ia, fail ? "failed" : "succeeded");
2295
  xtensa_insnbuf_free(isa, slot);
2296
  xtensa_insnbuf_free(isa, ins);
2297
  return fail ? XTENSA_ISA_BADPC : ia;
2298
}
2299
 
2300
/* Initialize frame cache for the current frame in CALL0 ABI.  */
2301
 
2302
static void
2303
call0_frame_cache (struct frame_info *this_frame,
2304
                   xtensa_frame_cache_t *cache, CORE_ADDR pc, CORE_ADDR litbase)
2305
{
2306
  struct gdbarch *gdbarch = get_frame_arch (this_frame);
2307
  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2308
  CORE_ADDR start_pc;           /* The beginning of the function.  */
2309
  CORE_ADDR body_pc=UINT_MAX;   /* PC, where prologue analysis stopped.  */
2310
  CORE_ADDR sp, fp, ra;
2311
  int fp_regnum, c0_hasfp, c0_frmsz, prev_sp, to_stk;
2312
 
2313
  /* Find the beginning of the prologue of the function containing the PC
2314
     and analyze it up to the PC or the end of the prologue.  */
2315
 
2316
  if (find_pc_partial_function (pc, NULL, &start_pc, NULL))
2317
    {
2318
      body_pc = call0_analyze_prologue (gdbarch, start_pc, pc, litbase,
2319
                                        C0_NREGS,
2320
                                        &cache->c0.c0_rt[0],
2321
                                        &cache->call0);
2322
 
2323
      if (body_pc == XTENSA_ISA_BADPC)
2324
        error (_("Xtensa-specific internal error: CALL0 prologue \
2325
analysis failed in this frame. GDB command execution stopped."));
2326
    }
2327
 
2328
  sp = get_frame_register_unsigned
2329
    (this_frame, gdbarch_tdep (gdbarch)->a0_base + 1);
2330
  fp = sp; /* Assume FP == SP until proven otherwise.  */
2331
 
2332
  /* Get the frame information and FP (if used) at the current PC.
2333
     If PC is in the prologue, the prologue analysis is more reliable
2334
     than DWARF info.  We don't not know for sure if PC is in the prologue,
2335
     but we know no calls have yet taken place, so we can almost
2336
     certainly rely on the prologue analysis.  */
2337
 
2338
  if (body_pc <= pc)
2339
    {
2340
      /* Prologue analysis was successful up to the PC.
2341
         It includes the cases when PC == START_PC.  */
2342
      c0_hasfp = cache->c0.c0_rt[C0_FP].fr_reg == C0_SP;
2343
      /* c0_hasfp == true means there is a frame pointer because
2344
         we analyzed the prologue and found that cache->c0.c0_rt[C0_FP]
2345
         was derived from SP.  Otherwise, it would be C0_FP.  */
2346
      fp_regnum = c0_hasfp ? C0_FP : C0_SP;
2347
      c0_frmsz = - cache->c0.c0_rt[fp_regnum].fr_ofs;
2348
      fp_regnum += gdbarch_tdep (gdbarch)->a0_base;
2349
    }
2350
  else  /* No data from the prologue analysis.  */
2351
    {
2352
      c0_hasfp = 0;
2353
      fp_regnum = gdbarch_tdep (gdbarch)->a0_base + C0_SP;
2354
      c0_frmsz = 0;
2355
      start_pc = pc;
2356
   }
2357
 
2358
  prev_sp = fp + c0_frmsz;
2359
 
2360
  /* Frame size from debug info or prologue tracking does not account for
2361
     alloca() and other dynamic allocations.  Adjust frame size by FP - SP.  */
2362
  if (c0_hasfp)
2363
    {
2364
      fp = get_frame_register_unsigned (this_frame, fp_regnum);
2365
 
2366
      /* Recalculate previous SP.  */
2367
      prev_sp = fp + c0_frmsz;
2368
      /* Update the stack frame size.  */
2369
      c0_frmsz += fp - sp;
2370
    }
2371
 
2372
  /* Get the return address (RA) from the stack if saved,
2373
     or try to get it from a register.  */
2374
 
2375
  to_stk = cache->c0.c0_rt[C0_RA].to_stk;
2376
  if (to_stk != C0_NOSTK)
2377
    ra = (CORE_ADDR)
2378
      read_memory_integer (sp + c0_frmsz + cache->c0.c0_rt[C0_RA].to_stk,
2379
                           4, byte_order);
2380
 
2381
  else if (cache->c0.c0_rt[C0_RA].fr_reg == C0_CONST
2382
           && cache->c0.c0_rt[C0_RA].fr_ofs == 0)
2383
    {
2384
      /* Special case for terminating backtrace at a function that wants to
2385
         be seen as the outermost.  Such a function will clear it's RA (A0)
2386
         register to 0 in the prologue instead of saving its original value.  */
2387
      ra = 0;
2388
    }
2389
  else
2390
    {
2391
      /* RA was copied to another register or (before any function call) may
2392
         still be in the original RA register.  This is not always reliable:
2393
         even in a leaf function, register tracking stops after prologue, and
2394
         even in prologue, non-prologue instructions (not tracked) may overwrite
2395
         RA or any register it was copied to.  If likely in prologue or before
2396
         any call, use retracking info and hope for the best (compiler should
2397
         have saved RA in stack if not in a leaf function).  If not in prologue,
2398
         too bad.  */
2399
 
2400
      int i;
2401
      for (i = 0;
2402
           (i < C0_NREGS) &&
2403
             (i == C0_RA || cache->c0.c0_rt[i].fr_reg != C0_RA);
2404
           ++i);
2405
      if (i >= C0_NREGS && cache->c0.c0_rt[C0_RA].fr_reg == C0_RA)
2406
        i = C0_RA;
2407
      if (i < C0_NREGS)
2408
        {
2409
          ra = get_frame_register_unsigned
2410
            (this_frame,
2411
             gdbarch_tdep (gdbarch)->a0_base + cache->c0.c0_rt[i].fr_reg);
2412
        }
2413
      else ra = 0;
2414
    }
2415
 
2416
  cache->pc = start_pc;
2417
  cache->ra = ra;
2418
  /* RA == 0 marks the outermost frame.  Do not go past it.  */
2419
  cache->prev_sp = (ra != 0) ?  prev_sp : 0;
2420
  cache->c0.fp_regnum = fp_regnum;
2421
  cache->c0.c0_frmsz = c0_frmsz;
2422
  cache->c0.c0_hasfp = c0_hasfp;
2423
  cache->c0.c0_fp = fp;
2424
}
2425
 
2426
 
2427
/* Skip function prologue.
2428
 
2429
   Return the pc of the first instruction after prologue.  GDB calls this to
2430
   find the address of the first line of the function or (if there is no line
2431
   number information) to skip the prologue for planting breakpoints on
2432
   function entries.  Use debug info (if present) or prologue analysis to skip
2433
   the prologue to achieve reliable debugging behavior.  For windowed ABI,
2434
   only the 'entry' instruction is skipped.  It is not strictly necessary to
2435
   skip the prologue (Call0) or 'entry' (Windowed) because xt-gdb knows how to
2436
   backtrace at any point in the prologue, however certain potential hazards
2437
   are avoided and a more "normal" debugging experience is ensured by
2438
   skipping the prologue (can be disabled by defining DONT_SKIP_PROLOG).
2439
   For example, if we don't skip the prologue:
2440
   - Some args may not yet have been saved to the stack where the debug
2441
     info expects to find them (true anyway when only 'entry' is skipped);
2442
   - Software breakpoints ('break' instrs) may not have been unplanted
2443
     when the prologue analysis is done on initializing the frame cache,
2444
     and breaks in the prologue will throw off the analysis.
2445
 
2446
   If we have debug info ( line-number info, in particular ) we simply skip
2447
   the code associated with the first function line effectively skipping
2448
   the prologue code.  It works even in cases like
2449
 
2450
   int main()
2451
   {    int local_var = 1;
2452
        ....
2453
   }
2454
 
2455
   because, for this source code, both Xtensa compilers will generate two
2456
   separate entries ( with the same line number ) in dwarf line-number
2457
   section to make sure there is a boundary between the prologue code and
2458
   the rest of the function.
2459
 
2460
   If there is no debug info, we need to analyze the code.  */
2461
 
2462
/* #define DONT_SKIP_PROLOGUE  */
2463
 
2464
static CORE_ADDR
2465
xtensa_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
2466
{
2467
  struct symtab_and_line prologue_sal;
2468
  CORE_ADDR body_pc;
2469
 
2470
  DEBUGTRACE ("xtensa_skip_prologue (start_pc = 0x%08x)\n", (int) start_pc);
2471
 
2472
#if DONT_SKIP_PROLOGUE
2473
  return start_pc;
2474
#endif
2475
 
2476
 /* Try to find first body line from debug info.  */
2477
 
2478
  prologue_sal = find_pc_line (start_pc, 0);
2479
  if (prologue_sal.line != 0) /* Found debug info.  */
2480
    {
2481
      /* In Call0, it is possible to have a function with only one instruction
2482
         ('ret') resulting from a 1-line optimized function that does nothing.
2483
         In that case, prologue_sal.end may actually point to the start of the
2484
         next function in the text section, causing a breakpoint to be set at
2485
         the wrong place.  Check if the end address is in a different function,
2486
         and if so return the start PC.  We know we have symbol info.  */
2487
 
2488
      CORE_ADDR end_func;
2489
 
2490
      find_pc_partial_function (prologue_sal.end, NULL, &end_func, NULL);
2491
      if (end_func != start_pc)
2492
        return start_pc;
2493
 
2494
      return prologue_sal.end;
2495
    }
2496
 
2497
  /* No debug line info.  Analyze prologue for Call0 or simply skip ENTRY.  */
2498
  body_pc = call0_analyze_prologue (gdbarch, start_pc, 0, 0, 0, NULL, NULL);
2499
  return body_pc != 0 ? body_pc : start_pc;
2500
}
2501
 
2502
/* Verify the current configuration.  */
2503
static void
2504
xtensa_verify_config (struct gdbarch *gdbarch)
2505
{
2506
  struct ui_file *log;
2507
  struct cleanup *cleanups;
2508
  struct gdbarch_tdep *tdep;
2509
  long length;
2510
  char *buf;
2511
 
2512
  tdep = gdbarch_tdep (gdbarch);
2513
  log = mem_fileopen ();
2514
  cleanups = make_cleanup_ui_file_delete (log);
2515
 
2516
  /* Verify that we got a reasonable number of AREGS.  */
2517
  if ((tdep->num_aregs & -tdep->num_aregs) != tdep->num_aregs)
2518
    fprintf_unfiltered (log, _("\
2519
\n\tnum_aregs: Number of AR registers (%d) is not a power of two!"),
2520
                        tdep->num_aregs);
2521
 
2522
  /* Verify that certain registers exist.  */
2523
 
2524
  if (tdep->pc_regnum == -1)
2525
    fprintf_unfiltered (log, _("\n\tpc_regnum: No PC register"));
2526
  if (tdep->isa_use_exceptions && tdep->ps_regnum == -1)
2527
    fprintf_unfiltered (log, _("\n\tps_regnum: No PS register"));
2528
 
2529
  if (tdep->isa_use_windowed_registers)
2530
    {
2531
      if (tdep->wb_regnum == -1)
2532
        fprintf_unfiltered (log, _("\n\twb_regnum: No WB register"));
2533
      if (tdep->ws_regnum == -1)
2534
        fprintf_unfiltered (log, _("\n\tws_regnum: No WS register"));
2535
      if (tdep->ar_base == -1)
2536
        fprintf_unfiltered (log, _("\n\tar_base: No AR registers"));
2537
    }
2538
 
2539
  if (tdep->a0_base == -1)
2540
    fprintf_unfiltered (log, _("\n\ta0_base: No Ax registers"));
2541
 
2542
  buf = ui_file_xstrdup (log, &length);
2543
  make_cleanup (xfree, buf);
2544
  if (length > 0)
2545
    internal_error (__FILE__, __LINE__,
2546
                    _("the following are invalid: %s"), buf);
2547
  do_cleanups (cleanups);
2548
}
2549
 
2550
 
2551
/* Derive specific register numbers from the array of registers.  */
2552
 
2553
static void
2554
xtensa_derive_tdep (struct gdbarch_tdep *tdep)
2555
{
2556
  xtensa_register_t* rmap;
2557
  int n, max_size = 4;
2558
 
2559
  tdep->num_regs = 0;
2560
  tdep->num_nopriv_regs = 0;
2561
 
2562
/* Special registers 0..255 (core).  */
2563
#define XTENSA_DBREGN_SREG(n)  (0x0200+(n))
2564
 
2565
  for (rmap = tdep->regmap, n = 0; rmap->target_number != -1; n++, rmap++)
2566
    {
2567
      if (rmap->target_number == 0x0020)
2568
        tdep->pc_regnum = n;
2569
      else if (rmap->target_number == 0x0100)
2570
        tdep->ar_base = n;
2571
      else if (rmap->target_number == 0x0000)
2572
        tdep->a0_base = n;
2573
      else if (rmap->target_number == XTENSA_DBREGN_SREG(72))
2574
        tdep->wb_regnum = n;
2575
      else if (rmap->target_number == XTENSA_DBREGN_SREG(73))
2576
        tdep->ws_regnum = n;
2577
      else if (rmap->target_number == XTENSA_DBREGN_SREG(233))
2578
        tdep->debugcause_regnum = n;
2579
      else if (rmap->target_number == XTENSA_DBREGN_SREG(232))
2580
        tdep->exccause_regnum = n;
2581
      else if (rmap->target_number == XTENSA_DBREGN_SREG(238))
2582
        tdep->excvaddr_regnum = n;
2583
      else if (rmap->target_number == XTENSA_DBREGN_SREG(0))
2584
        tdep->lbeg_regnum = n;
2585
      else if (rmap->target_number == XTENSA_DBREGN_SREG(1))
2586
        tdep->lend_regnum = n;
2587
      else if (rmap->target_number == XTENSA_DBREGN_SREG(2))
2588
        tdep->lcount_regnum = n;
2589
      else if (rmap->target_number == XTENSA_DBREGN_SREG(3))
2590
        tdep->sar_regnum = n;
2591
      else if (rmap->target_number == XTENSA_DBREGN_SREG(5))
2592
        tdep->litbase_regnum = n;
2593
      else if (rmap->target_number == XTENSA_DBREGN_SREG(230))
2594
        tdep->ps_regnum = n;
2595
#if 0
2596
      else if (rmap->target_number == XTENSA_DBREGN_SREG(226))
2597
        tdep->interrupt_regnum = n;
2598
      else if (rmap->target_number == XTENSA_DBREGN_SREG(227))
2599
        tdep->interrupt2_regnum = n;
2600
      else if (rmap->target_number == XTENSA_DBREGN_SREG(224))
2601
        tdep->cpenable_regnum = n;
2602
#endif
2603
 
2604
      if (rmap->byte_size > max_size)
2605
        max_size = rmap->byte_size;
2606
      if (rmap->mask != 0 && tdep->num_regs == 0)
2607
        tdep->num_regs = n;
2608
      /* Find out out how to deal with priveleged registers.
2609
 
2610
         if ((rmap->flags & XTENSA_REGISTER_FLAGS_PRIVILEGED) != 0
2611
              && tdep->num_nopriv_regs == 0)
2612
           tdep->num_nopriv_regs = n;
2613
      */
2614
      if ((rmap->flags & XTENSA_REGISTER_FLAGS_PRIVILEGED) != 0
2615
          && tdep->num_regs == 0)
2616
        tdep->num_regs = n;
2617
    }
2618
 
2619
  /* Number of pseudo registers.  */
2620
  tdep->num_pseudo_regs = n - tdep->num_regs;
2621
 
2622
  /* Empirically determined maximum sizes.  */
2623
  tdep->max_register_raw_size = max_size;
2624
  tdep->max_register_virtual_size = max_size;
2625
}
2626
 
2627
/* Module "constructor" function.  */
2628
 
2629
extern struct gdbarch_tdep xtensa_tdep;
2630
 
2631
static struct gdbarch *
2632
xtensa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2633
{
2634
  struct gdbarch_tdep *tdep;
2635
  struct gdbarch *gdbarch;
2636
  struct xtensa_abi_handler *abi_handler;
2637
 
2638
  DEBUGTRACE ("gdbarch_init()\n");
2639
 
2640
  /* We have to set the byte order before we call gdbarch_alloc.  */
2641
  info.byte_order = XCHAL_HAVE_BE ? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE;
2642
 
2643
  tdep = &xtensa_tdep;
2644
  gdbarch = gdbarch_alloc (&info, tdep);
2645
  xtensa_derive_tdep (tdep);
2646
 
2647
  /* Verify our configuration.  */
2648
  xtensa_verify_config (gdbarch);
2649
 
2650
  /* Pseudo-Register read/write.  */
2651
  set_gdbarch_pseudo_register_read (gdbarch, xtensa_pseudo_register_read);
2652
  set_gdbarch_pseudo_register_write (gdbarch, xtensa_pseudo_register_write);
2653
 
2654
  /* Set target information.  */
2655
  set_gdbarch_num_regs (gdbarch, tdep->num_regs);
2656
  set_gdbarch_num_pseudo_regs (gdbarch, tdep->num_pseudo_regs);
2657
  set_gdbarch_sp_regnum (gdbarch, tdep->a0_base + 1);
2658
  set_gdbarch_pc_regnum (gdbarch, tdep->pc_regnum);
2659
  set_gdbarch_ps_regnum (gdbarch, tdep->ps_regnum);
2660
 
2661
  /* Renumber registers for known formats (stabs and dwarf2).  */
2662
  set_gdbarch_stab_reg_to_regnum (gdbarch, xtensa_reg_to_regnum);
2663
  set_gdbarch_dwarf2_reg_to_regnum (gdbarch, xtensa_reg_to_regnum);
2664
 
2665
  /* We provide our own function to get register information.  */
2666
  set_gdbarch_register_name (gdbarch, xtensa_register_name);
2667
  set_gdbarch_register_type (gdbarch, xtensa_register_type);
2668
 
2669
  /* To call functions from GDB using dummy frame */
2670
  set_gdbarch_push_dummy_call (gdbarch, xtensa_push_dummy_call);
2671
 
2672
  set_gdbarch_believe_pcc_promotion (gdbarch, 1);
2673
 
2674
  set_gdbarch_return_value (gdbarch, xtensa_return_value);
2675
 
2676
  /* Advance PC across any prologue instructions to reach "real" code.  */
2677
  set_gdbarch_skip_prologue (gdbarch, xtensa_skip_prologue);
2678
 
2679
  /* Stack grows downward.  */
2680
  set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
2681
 
2682
  /* Set breakpoints.  */
2683
  set_gdbarch_breakpoint_from_pc (gdbarch, xtensa_breakpoint_from_pc);
2684
 
2685
  /* After breakpoint instruction or illegal instruction, pc still
2686
     points at break instruction, so don't decrement.  */
2687
  set_gdbarch_decr_pc_after_break (gdbarch, 0);
2688
 
2689
  /* We don't skip args.  */
2690
  set_gdbarch_frame_args_skip (gdbarch, 0);
2691
 
2692
  set_gdbarch_unwind_pc (gdbarch, xtensa_unwind_pc);
2693
 
2694
  set_gdbarch_frame_align (gdbarch, xtensa_frame_align);
2695
 
2696
  set_gdbarch_dummy_id (gdbarch, xtensa_dummy_id);
2697
 
2698
  /* Frame handling.  */
2699
  frame_base_set_default (gdbarch, &xtensa_frame_base);
2700
  frame_unwind_append_unwinder (gdbarch, &xtensa_unwind);
2701
  dwarf2_append_unwinders (gdbarch);
2702
 
2703
  set_gdbarch_print_insn (gdbarch, print_insn_xtensa);
2704
 
2705
  set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
2706
 
2707
  xtensa_add_reggroups (gdbarch);
2708
  set_gdbarch_register_reggroup_p (gdbarch, xtensa_register_reggroup_p);
2709
 
2710
  set_gdbarch_regset_from_core_section (gdbarch,
2711
                                        xtensa_regset_from_core_section);
2712
 
2713
  set_solib_svr4_fetch_link_map_offsets
2714
    (gdbarch, svr4_ilp32_fetch_link_map_offsets);
2715
 
2716
  return gdbarch;
2717
}
2718
 
2719
static void
2720
xtensa_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
2721
{
2722
  error (_("xtensa_dump_tdep(): not implemented"));
2723
}
2724
 
2725
/* Provide a prototype to silence -Wmissing-prototypes.  */
2726
extern initialize_file_ftype _initialize_xtensa_tdep;
2727
 
2728
void
2729
_initialize_xtensa_tdep (void)
2730
{
2731
  struct cmd_list_element *c;
2732
 
2733
  gdbarch_register (bfd_arch_xtensa, xtensa_gdbarch_init, xtensa_dump_tdep);
2734
  xtensa_init_reggroups ();
2735
 
2736
  add_setshow_zinteger_cmd ("xtensa",
2737
                            class_maintenance,
2738
                            &xtensa_debug_level, _("\
2739
Set Xtensa debugging."), _("\
2740
Show Xtensa debugging."), _("\
2741
When non-zero, Xtensa-specific debugging is enabled. \
2742
Can be 1, 2, 3, or 4 indicating the level of debugging."),
2743
                            NULL,
2744
                            NULL,
2745
                            &setdebuglist, &showdebuglist);
2746
}

powered by: WebSVN 2.1.0

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