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