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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gdb/] [gdb-6.8/] [gdb/] [xtensa-tdep.c] - Blame information for rev 25

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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