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