OSDN Git Service

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