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