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