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