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