1 /* Target-dependent code for the Xtensa port of GDB, the GNU debugger.
3 Copyright (C) 2003-2016 Free Software Foundation, Inc.
5 This file is part of GDB.
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.
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.
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/>. */
22 #include "solib-svr4.h"
32 #include "floatformat.h"
34 #include "reggroups.h"
37 #include "dummy-frame.h"
39 #include "dwarf2-frame.h"
40 #include "dwarf2loc.h"
41 #include "frame-base.h"
42 #include "frame-unwind.h"
44 #include "arch-utils.h"
52 #include "xtensa-isa.h"
53 #include "xtensa-tdep.h"
54 #include "xtensa-config.h"
57 static unsigned int xtensa_debug_level = 0;
59 #define DEBUGWARN(args...) \
60 if (xtensa_debug_level > 0) \
61 fprintf_unfiltered (gdb_stdlog, "(warn ) " args)
63 #define DEBUGINFO(args...) \
64 if (xtensa_debug_level > 1) \
65 fprintf_unfiltered (gdb_stdlog, "(info ) " args)
67 #define DEBUGTRACE(args...) \
68 if (xtensa_debug_level > 2) \
69 fprintf_unfiltered (gdb_stdlog, "(trace) " args)
71 #define DEBUGVERB(args...) \
72 if (xtensa_debug_level > 3) \
73 fprintf_unfiltered (gdb_stdlog, "(verb ) " args)
76 /* According to the ABI, the SP must be aligned to 16-byte boundaries. */
77 #define SP_ALIGNMENT 16
80 /* On Windowed ABI, we use a6 through a11 for passing arguments
81 to a function called by GDB because CALL4 is used. */
82 #define ARGS_NUM_REGS 6
83 #define REGISTER_SIZE 4
86 /* Extract the call size from the return address or PS register. */
87 #define PS_CALLINC_SHIFT 16
88 #define PS_CALLINC_MASK 0x00030000
89 #define CALLINC(ps) (((ps) & PS_CALLINC_MASK) >> PS_CALLINC_SHIFT)
90 #define WINSIZE(ra) (4 * (( (ra) >> 30) & 0x3))
92 /* On TX, hardware can be configured without Exception Option.
93 There is no PS register in this case. Inside XT-GDB, let us treat
94 it as a virtual read-only register always holding the same value. */
97 /* ABI-independent macros. */
98 #define ARG_NOF(gdbarch) \
99 (gdbarch_tdep (gdbarch)->call_abi \
100 == CallAbiCall0Only ? C0_NARGS : (ARGS_NUM_REGS))
101 #define ARG_1ST(gdbarch) \
102 (gdbarch_tdep (gdbarch)->call_abi == CallAbiCall0Only \
103 ? (gdbarch_tdep (gdbarch)->a0_base + C0_ARGS) \
104 : (gdbarch_tdep (gdbarch)->a0_base + 6))
106 /* XTENSA_IS_ENTRY tests whether the first byte of an instruction
107 indicates that the instruction is an ENTRY instruction. */
109 #define XTENSA_IS_ENTRY(gdbarch, op1) \
110 ((gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG) \
111 ? ((op1) == 0x6c) : ((op1) == 0x36))
113 #define XTENSA_ENTRY_LENGTH 3
115 /* windowing_enabled() returns true, if windowing is enabled.
116 WOE must be set to 1; EXCM to 0.
117 Note: We assume that EXCM is always 0 for XEA1. */
119 #define PS_WOE (1<<18)
120 #define PS_EXC (1<<4)
123 windowing_enabled (struct gdbarch *gdbarch, unsigned int ps)
125 /* If we know CALL0 ABI is set explicitly, say it is Call0. */
126 if (gdbarch_tdep (gdbarch)->call_abi == CallAbiCall0Only)
129 return ((ps & PS_EXC) == 0 && (ps & PS_WOE) != 0);
132 /* Convert a live A-register number to the corresponding AR-register
135 arreg_number (struct gdbarch *gdbarch, int a_regnum, ULONGEST wb)
137 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
140 arreg = a_regnum - tdep->a0_base;
141 arreg += (wb & ((tdep->num_aregs - 1) >> 2)) << WB_SHIFT;
142 arreg &= tdep->num_aregs - 1;
144 return arreg + tdep->ar_base;
147 /* Convert a live AR-register number to the corresponding A-register order
148 number in a range [0..15]. Return -1, if AR_REGNUM is out of WB window. */
150 areg_number (struct gdbarch *gdbarch, int ar_regnum, unsigned int wb)
152 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
155 areg = ar_regnum - tdep->ar_base;
156 if (areg < 0 || areg >= tdep->num_aregs)
158 areg = (areg - wb * 4) & (tdep->num_aregs - 1);
159 return (areg > 15) ? -1 : areg;
162 /* Read Xtensa register directly from the hardware. */
164 xtensa_read_register (int regnum)
168 regcache_raw_read_unsigned (get_current_regcache (), regnum, &value);
169 return (unsigned long) value;
172 /* Write Xtensa register directly to the hardware. */
174 xtensa_write_register (int regnum, ULONGEST value)
176 regcache_raw_write_unsigned (get_current_regcache (), regnum, value);
179 /* Return the window size of the previous call to the function from which we
182 This function is used to extract the return value after a called function
183 has returned to the caller. On Xtensa, the register that holds the return
184 value (from the perspective of the caller) depends on what call
185 instruction was used. For now, we are assuming that the call instruction
186 precedes the current address, so we simply analyze the call instruction.
187 If we are in a dummy frame, we simply return 4 as we used a 'pseudo-call4'
188 method to call the inferior function. */
191 extract_call_winsize (struct gdbarch *gdbarch, CORE_ADDR pc)
193 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
198 DEBUGTRACE ("extract_call_winsize (pc = 0x%08x)\n", (int) pc);
200 /* Read the previous instruction (should be a call[x]{4|8|12}. */
201 read_memory (pc-3, buf, 3);
202 insn = extract_unsigned_integer (buf, 3, byte_order);
204 /* Decode call instruction:
206 call{0,4,8,12} OFFSET || {00,01,10,11} || 0101
207 callx{0,4,8,12} OFFSET || 11 || {00,01,10,11} || 0000
209 call{0,4,8,12} 0101 || {00,01,10,11} || OFFSET
210 callx{0,4,8,12} 0000 || {00,01,10,11} || 11 || OFFSET. */
212 if (byte_order == BFD_ENDIAN_LITTLE)
214 if (((insn & 0xf) == 0x5) || ((insn & 0xcf) == 0xc0))
215 winsize = (insn & 0x30) >> 2; /* 0, 4, 8, 12. */
219 if (((insn >> 20) == 0x5) || (((insn >> 16) & 0xf3) == 0x03))
220 winsize = (insn >> 16) & 0xc; /* 0, 4, 8, 12. */
226 /* REGISTER INFORMATION */
228 /* Find register by name. */
230 xtensa_find_register_by_name (struct gdbarch *gdbarch, char *name)
234 for (i = 0; i < gdbarch_num_regs (gdbarch)
235 + gdbarch_num_pseudo_regs (gdbarch);
238 if (strcasecmp (gdbarch_tdep (gdbarch)->regmap[i].name, name) == 0)
244 /* Returns the name of a register. */
246 xtensa_register_name (struct gdbarch *gdbarch, int regnum)
248 /* Return the name stored in the register map. */
249 if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch)
250 + gdbarch_num_pseudo_regs (gdbarch))
251 return gdbarch_tdep (gdbarch)->regmap[regnum].name;
253 internal_error (__FILE__, __LINE__, _("invalid register %d"), regnum);
257 /* Return the type of a register. Create a new type, if necessary. */
260 xtensa_register_type (struct gdbarch *gdbarch, int regnum)
262 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
264 /* Return signed integer for ARx and Ax registers. */
265 if ((regnum >= tdep->ar_base
266 && regnum < tdep->ar_base + tdep->num_aregs)
267 || (regnum >= tdep->a0_base
268 && regnum < tdep->a0_base + 16))
269 return builtin_type (gdbarch)->builtin_int;
271 if (regnum == gdbarch_pc_regnum (gdbarch)
272 || regnum == tdep->a0_base + 1)
273 return builtin_type (gdbarch)->builtin_data_ptr;
275 /* Return the stored type for all other registers. */
276 else if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch)
277 + gdbarch_num_pseudo_regs (gdbarch))
279 xtensa_register_t* reg = &tdep->regmap[regnum];
281 /* Set ctype for this register (only the first time). */
285 struct ctype_cache *tp;
286 int size = reg->byte_size;
288 /* We always use the memory representation,
289 even if the register width is smaller. */
293 reg->ctype = builtin_type (gdbarch)->builtin_uint8;
297 reg->ctype = builtin_type (gdbarch)->builtin_uint16;
301 reg->ctype = builtin_type (gdbarch)->builtin_uint32;
305 reg->ctype = builtin_type (gdbarch)->builtin_uint64;
309 reg->ctype = builtin_type (gdbarch)->builtin_uint128;
313 for (tp = tdep->type_entries; tp != NULL; tp = tp->next)
314 if (tp->size == size)
319 char *name = xstrprintf ("int%d", size * 8);
321 tp = XNEW (struct ctype_cache);
322 tp->next = tdep->type_entries;
323 tdep->type_entries = tp;
326 = arch_integer_type (gdbarch, size * 8, 1, name);
330 reg->ctype = tp->virtual_type;
336 internal_error (__FILE__, __LINE__, _("invalid register number %d"), regnum);
341 /* Return the 'local' register number for stubs, dwarf2, etc.
342 The debugging information enumerates registers starting from 0 for A0
343 to n for An. So, we only have to add the base number for A0. */
346 xtensa_reg_to_regnum (struct gdbarch *gdbarch, int regnum)
350 if (regnum >= 0 && regnum < 16)
351 return gdbarch_tdep (gdbarch)->a0_base + regnum;
354 i < gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
356 if (regnum == gdbarch_tdep (gdbarch)->regmap[i].target_number)
363 /* Write the bits of a masked register to the various registers.
364 Only the masked areas of these registers are modified; the other
365 fields are untouched. The size of masked registers is always less
366 than or equal to 32 bits. */
369 xtensa_register_write_masked (struct regcache *regcache,
370 xtensa_register_t *reg, const gdb_byte *buffer)
372 unsigned int value[(MAX_REGISTER_SIZE + 3) / 4];
373 const xtensa_mask_t *mask = reg->mask;
375 int shift = 0; /* Shift for next mask (mod 32). */
376 int start, size; /* Start bit and size of current mask. */
378 unsigned int *ptr = value;
379 unsigned int regval, m, mem = 0;
381 int bytesize = reg->byte_size;
382 int bitsize = bytesize * 8;
385 DEBUGTRACE ("xtensa_register_write_masked ()\n");
387 /* Copy the masked register to host byte-order. */
388 if (gdbarch_byte_order (get_regcache_arch (regcache)) == BFD_ENDIAN_BIG)
389 for (i = 0; i < bytesize; i++)
392 mem |= (buffer[bytesize - i - 1] << 24);
397 for (i = 0; i < bytesize; i++)
400 mem |= (buffer[i] << 24);
405 /* We might have to shift the final value:
406 bytesize & 3 == 0 -> nothing to do, we use the full 32 bits,
407 bytesize & 3 == x -> shift (4-x) * 8. */
409 *ptr = mem >> (((0 - bytesize) & 3) * 8);
413 /* Write the bits to the masked areas of the other registers. */
414 for (i = 0; i < mask->count; i++)
416 start = mask->mask[i].bit_start;
417 size = mask->mask[i].bit_size;
418 regval = mem >> shift;
420 if ((shift += size) > bitsize)
421 error (_("size of all masks is larger than the register"));
430 regval |= mem << (size - shift);
433 /* Make sure we have a valid register. */
434 r = mask->mask[i].reg_num;
435 if (r >= 0 && size > 0)
437 /* Don't overwrite the unmasked areas. */
439 regcache_cooked_read_unsigned (regcache, r, &old_val);
440 m = 0xffffffff >> (32 - size) << start;
442 regval = (regval & m) | (old_val & ~m);
443 regcache_cooked_write_unsigned (regcache, r, regval);
449 /* Read a tie state or mapped registers. Read the masked areas
450 of the registers and assemble them into a single value. */
452 static enum register_status
453 xtensa_register_read_masked (struct regcache *regcache,
454 xtensa_register_t *reg, gdb_byte *buffer)
456 unsigned int value[(MAX_REGISTER_SIZE + 3) / 4];
457 const xtensa_mask_t *mask = reg->mask;
462 unsigned int *ptr = value;
463 unsigned int regval, mem = 0;
465 int bytesize = reg->byte_size;
466 int bitsize = bytesize * 8;
469 DEBUGTRACE ("xtensa_register_read_masked (reg \"%s\", ...)\n",
470 reg->name == 0 ? "" : reg->name);
472 /* Assemble the register from the masked areas of other registers. */
473 for (i = 0; i < mask->count; i++)
475 int r = mask->mask[i].reg_num;
478 enum register_status status;
481 status = regcache_cooked_read_unsigned (regcache, r, &val);
482 if (status != REG_VALID)
484 regval = (unsigned int) val;
489 start = mask->mask[i].bit_start;
490 size = mask->mask[i].bit_size;
495 regval &= (0xffffffff >> (32 - size));
497 mem |= regval << shift;
499 if ((shift += size) > bitsize)
500 error (_("size of all masks is larger than the register"));
511 mem = regval >> (size - shift);
518 /* Copy value to target byte order. */
522 if (gdbarch_byte_order (get_regcache_arch (regcache)) == BFD_ENDIAN_BIG)
523 for (i = 0; i < bytesize; i++)
527 buffer[bytesize - i - 1] = mem & 0xff;
531 for (i = 0; i < bytesize; i++)
535 buffer[i] = mem & 0xff;
543 /* Read pseudo registers. */
545 static enum register_status
546 xtensa_pseudo_register_read (struct gdbarch *gdbarch,
547 struct regcache *regcache,
551 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
553 DEBUGTRACE ("xtensa_pseudo_register_read (... regnum = %d (%s) ...)\n",
554 regnum, xtensa_register_name (gdbarch, regnum));
556 /* Read aliases a0..a15, if this is a Windowed ABI. */
557 if (gdbarch_tdep (gdbarch)->isa_use_windowed_registers
558 && (regnum >= gdbarch_tdep (gdbarch)->a0_base)
559 && (regnum <= gdbarch_tdep (gdbarch)->a0_base + 15))
561 gdb_byte *buf = (gdb_byte *) alloca (MAX_REGISTER_SIZE);
562 enum register_status status;
564 status = regcache_raw_read (regcache,
565 gdbarch_tdep (gdbarch)->wb_regnum,
567 if (status != REG_VALID)
569 regnum = arreg_number (gdbarch, regnum,
570 extract_unsigned_integer (buf, 4, byte_order));
573 /* We can always read non-pseudo registers. */
574 if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch))
575 return regcache_raw_read (regcache, regnum, buffer);
577 /* We have to find out how to deal with priveleged registers.
578 Let's treat them as pseudo-registers, but we cannot read/write them. */
580 else if (regnum < gdbarch_tdep (gdbarch)->a0_base)
582 buffer[0] = (gdb_byte)0;
583 buffer[1] = (gdb_byte)0;
584 buffer[2] = (gdb_byte)0;
585 buffer[3] = (gdb_byte)0;
588 /* Pseudo registers. */
590 && regnum < gdbarch_num_regs (gdbarch)
591 + gdbarch_num_pseudo_regs (gdbarch))
593 xtensa_register_t *reg = &gdbarch_tdep (gdbarch)->regmap[regnum];
594 xtensa_register_type_t type = reg->type;
595 int flags = gdbarch_tdep (gdbarch)->target_flags;
597 /* We cannot read Unknown or Unmapped registers. */
598 if (type == xtRegisterTypeUnmapped || type == xtRegisterTypeUnknown)
600 if ((flags & xtTargetFlagsNonVisibleRegs) == 0)
602 warning (_("cannot read register %s"),
603 xtensa_register_name (gdbarch, regnum));
608 /* Some targets cannot read TIE register files. */
609 else if (type == xtRegisterTypeTieRegfile)
611 /* Use 'fetch' to get register? */
612 if (flags & xtTargetFlagsUseFetchStore)
614 warning (_("cannot read register"));
618 /* On some targets (esp. simulators), we can always read the reg. */
619 else if ((flags & xtTargetFlagsNonVisibleRegs) == 0)
621 warning (_("cannot read register"));
626 /* We can always read mapped registers. */
627 else if (type == xtRegisterTypeMapped || type == xtRegisterTypeTieState)
628 return xtensa_register_read_masked (regcache, reg, buffer);
630 /* Assume that we can read the register. */
631 return regcache_raw_read (regcache, regnum, buffer);
634 internal_error (__FILE__, __LINE__,
635 _("invalid register number %d"), regnum);
639 /* Write pseudo registers. */
642 xtensa_pseudo_register_write (struct gdbarch *gdbarch,
643 struct regcache *regcache,
645 const gdb_byte *buffer)
647 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
649 DEBUGTRACE ("xtensa_pseudo_register_write (... regnum = %d (%s) ...)\n",
650 regnum, xtensa_register_name (gdbarch, regnum));
652 /* Renumber register, if aliase a0..a15 on Windowed ABI. */
653 if (gdbarch_tdep (gdbarch)->isa_use_windowed_registers
654 && (regnum >= gdbarch_tdep (gdbarch)->a0_base)
655 && (regnum <= gdbarch_tdep (gdbarch)->a0_base + 15))
657 gdb_byte *buf = (gdb_byte *) alloca (MAX_REGISTER_SIZE);
659 regcache_raw_read (regcache,
660 gdbarch_tdep (gdbarch)->wb_regnum, buf);
661 regnum = arreg_number (gdbarch, regnum,
662 extract_unsigned_integer (buf, 4, byte_order));
665 /* We can always write 'core' registers.
666 Note: We might have converted Ax->ARy. */
667 if (regnum >= 0 && regnum < gdbarch_num_regs (gdbarch))
668 regcache_raw_write (regcache, regnum, buffer);
670 /* We have to find out how to deal with priveleged registers.
671 Let's treat them as pseudo-registers, but we cannot read/write them. */
673 else if (regnum < gdbarch_tdep (gdbarch)->a0_base)
677 /* Pseudo registers. */
679 && regnum < gdbarch_num_regs (gdbarch)
680 + gdbarch_num_pseudo_regs (gdbarch))
682 xtensa_register_t *reg = &gdbarch_tdep (gdbarch)->regmap[regnum];
683 xtensa_register_type_t type = reg->type;
684 int flags = gdbarch_tdep (gdbarch)->target_flags;
686 /* On most targets, we cannot write registers
687 of type "Unknown" or "Unmapped". */
688 if (type == xtRegisterTypeUnmapped || type == xtRegisterTypeUnknown)
690 if ((flags & xtTargetFlagsNonVisibleRegs) == 0)
692 warning (_("cannot write register %s"),
693 xtensa_register_name (gdbarch, regnum));
698 /* Some targets cannot read TIE register files. */
699 else if (type == xtRegisterTypeTieRegfile)
701 /* Use 'store' to get register? */
702 if (flags & xtTargetFlagsUseFetchStore)
704 warning (_("cannot write register"));
708 /* On some targets (esp. simulators), we can always write
710 else if ((flags & xtTargetFlagsNonVisibleRegs) == 0)
712 warning (_("cannot write register"));
717 /* We can always write mapped registers. */
718 else if (type == xtRegisterTypeMapped || type == xtRegisterTypeTieState)
720 xtensa_register_write_masked (regcache, reg, buffer);
724 /* Assume that we can write the register. */
725 regcache_raw_write (regcache, regnum, buffer);
728 internal_error (__FILE__, __LINE__,
729 _("invalid register number %d"), regnum);
732 static struct reggroup *xtensa_ar_reggroup;
733 static struct reggroup *xtensa_user_reggroup;
734 static struct reggroup *xtensa_vectra_reggroup;
735 static struct reggroup *xtensa_cp[XTENSA_MAX_COPROCESSOR];
738 xtensa_init_reggroups (void)
741 char cpname[] = "cp0";
743 xtensa_ar_reggroup = reggroup_new ("ar", USER_REGGROUP);
744 xtensa_user_reggroup = reggroup_new ("user", USER_REGGROUP);
745 xtensa_vectra_reggroup = reggroup_new ("vectra", USER_REGGROUP);
747 for (i = 0; i < XTENSA_MAX_COPROCESSOR; i++)
750 xtensa_cp[i] = reggroup_new (cpname, USER_REGGROUP);
755 xtensa_add_reggroups (struct gdbarch *gdbarch)
759 /* Predefined groups. */
760 reggroup_add (gdbarch, all_reggroup);
761 reggroup_add (gdbarch, save_reggroup);
762 reggroup_add (gdbarch, restore_reggroup);
763 reggroup_add (gdbarch, system_reggroup);
764 reggroup_add (gdbarch, vector_reggroup);
765 reggroup_add (gdbarch, general_reggroup);
766 reggroup_add (gdbarch, float_reggroup);
768 /* Xtensa-specific groups. */
769 reggroup_add (gdbarch, xtensa_ar_reggroup);
770 reggroup_add (gdbarch, xtensa_user_reggroup);
771 reggroup_add (gdbarch, xtensa_vectra_reggroup);
773 for (i = 0; i < XTENSA_MAX_COPROCESSOR; i++)
774 reggroup_add (gdbarch, xtensa_cp[i]);
778 xtensa_coprocessor_register_group (struct reggroup *group)
782 for (i = 0; i < XTENSA_MAX_COPROCESSOR; i++)
783 if (group == xtensa_cp[i])
789 #define SAVE_REST_FLAGS (XTENSA_REGISTER_FLAGS_READABLE \
790 | XTENSA_REGISTER_FLAGS_WRITABLE \
791 | XTENSA_REGISTER_FLAGS_VOLATILE)
793 #define SAVE_REST_VALID (XTENSA_REGISTER_FLAGS_READABLE \
794 | XTENSA_REGISTER_FLAGS_WRITABLE)
797 xtensa_register_reggroup_p (struct gdbarch *gdbarch,
799 struct reggroup *group)
801 xtensa_register_t* reg = &gdbarch_tdep (gdbarch)->regmap[regnum];
802 xtensa_register_type_t type = reg->type;
803 xtensa_register_group_t rg = reg->group;
806 if (group == save_reggroup)
807 /* Every single register should be included into the list of registers
808 to be watched for changes while using -data-list-changed-registers. */
811 /* First, skip registers that are not visible to this target
812 (unknown and unmapped registers when not using ISS). */
814 if (type == xtRegisterTypeUnmapped || type == xtRegisterTypeUnknown)
816 if (group == all_reggroup)
818 if (group == xtensa_ar_reggroup)
819 return rg & xtRegisterGroupAddrReg;
820 if (group == xtensa_user_reggroup)
821 return rg & xtRegisterGroupUser;
822 if (group == float_reggroup)
823 return rg & xtRegisterGroupFloat;
824 if (group == general_reggroup)
825 return rg & xtRegisterGroupGeneral;
826 if (group == system_reggroup)
827 return rg & xtRegisterGroupState;
828 if (group == vector_reggroup || group == xtensa_vectra_reggroup)
829 return rg & xtRegisterGroupVectra;
830 if (group == restore_reggroup)
831 return (regnum < gdbarch_num_regs (gdbarch)
832 && (reg->flags & SAVE_REST_FLAGS) == SAVE_REST_VALID);
833 cp_number = xtensa_coprocessor_register_group (group);
835 return rg & (xtRegisterGroupCP0 << cp_number);
841 /* Supply register REGNUM from the buffer specified by GREGS and LEN
842 in the general-purpose register set REGSET to register cache
843 REGCACHE. If REGNUM is -1 do this for all registers in REGSET. */
846 xtensa_supply_gregset (const struct regset *regset,
852 const xtensa_elf_gregset_t *regs = (const xtensa_elf_gregset_t *) gregs;
853 struct gdbarch *gdbarch = get_regcache_arch (rc);
856 DEBUGTRACE ("xtensa_supply_gregset (..., regnum==%d, ...)\n", regnum);
858 if (regnum == gdbarch_pc_regnum (gdbarch) || regnum == -1)
859 regcache_raw_supply (rc, gdbarch_pc_regnum (gdbarch), (char *) ®s->pc);
860 if (regnum == gdbarch_ps_regnum (gdbarch) || regnum == -1)
861 regcache_raw_supply (rc, gdbarch_ps_regnum (gdbarch), (char *) ®s->ps);
862 if (regnum == gdbarch_tdep (gdbarch)->wb_regnum || regnum == -1)
863 regcache_raw_supply (rc, gdbarch_tdep (gdbarch)->wb_regnum,
864 (char *) ®s->windowbase);
865 if (regnum == gdbarch_tdep (gdbarch)->ws_regnum || regnum == -1)
866 regcache_raw_supply (rc, gdbarch_tdep (gdbarch)->ws_regnum,
867 (char *) ®s->windowstart);
868 if (regnum == gdbarch_tdep (gdbarch)->lbeg_regnum || regnum == -1)
869 regcache_raw_supply (rc, gdbarch_tdep (gdbarch)->lbeg_regnum,
870 (char *) ®s->lbeg);
871 if (regnum == gdbarch_tdep (gdbarch)->lend_regnum || regnum == -1)
872 regcache_raw_supply (rc, gdbarch_tdep (gdbarch)->lend_regnum,
873 (char *) ®s->lend);
874 if (regnum == gdbarch_tdep (gdbarch)->lcount_regnum || regnum == -1)
875 regcache_raw_supply (rc, gdbarch_tdep (gdbarch)->lcount_regnum,
876 (char *) ®s->lcount);
877 if (regnum == gdbarch_tdep (gdbarch)->sar_regnum || regnum == -1)
878 regcache_raw_supply (rc, gdbarch_tdep (gdbarch)->sar_regnum,
879 (char *) ®s->sar);
880 if (regnum >=gdbarch_tdep (gdbarch)->ar_base
881 && regnum < gdbarch_tdep (gdbarch)->ar_base
882 + gdbarch_tdep (gdbarch)->num_aregs)
883 regcache_raw_supply (rc, regnum,
884 (char *) ®s->ar[regnum - gdbarch_tdep
885 (gdbarch)->ar_base]);
886 else if (regnum == -1)
888 for (i = 0; i < gdbarch_tdep (gdbarch)->num_aregs; ++i)
889 regcache_raw_supply (rc, gdbarch_tdep (gdbarch)->ar_base + i,
890 (char *) ®s->ar[i]);
895 /* Xtensa register set. */
901 xtensa_supply_gregset
905 /* Iterate over supported core file register note sections. */
908 xtensa_iterate_over_regset_sections (struct gdbarch *gdbarch,
909 iterate_over_regset_sections_cb *cb,
911 const struct regcache *regcache)
913 DEBUGTRACE ("xtensa_iterate_over_regset_sections\n");
915 cb (".reg", sizeof (xtensa_elf_gregset_t), &xtensa_gregset,
920 /* Handling frames. */
922 /* Number of registers to save in case of Windowed ABI. */
923 #define XTENSA_NUM_SAVED_AREGS 12
925 /* Frame cache part for Windowed ABI. */
926 typedef struct xtensa_windowed_frame_cache
928 int wb; /* WINDOWBASE of the previous frame. */
929 int callsize; /* Call size of this frame. */
930 int ws; /* WINDOWSTART of the previous frame. It keeps track of
931 life windows only. If there is no bit set for the
932 window, that means it had been already spilled
933 because of window overflow. */
935 /* Addresses of spilled A-registers.
936 AREGS[i] == -1, if corresponding AR is alive. */
937 CORE_ADDR aregs[XTENSA_NUM_SAVED_AREGS];
938 } xtensa_windowed_frame_cache_t;
940 /* Call0 ABI Definitions. */
942 #define C0_MAXOPDS 3 /* Maximum number of operands for prologue
944 #define C0_NREGS 16 /* Number of A-registers to track. */
945 #define C0_CLESV 12 /* Callee-saved registers are here and up. */
946 #define C0_SP 1 /* Register used as SP. */
947 #define C0_FP 15 /* Register used as FP. */
948 #define C0_RA 0 /* Register used as return address. */
949 #define C0_ARGS 2 /* Register used as first arg/retval. */
950 #define C0_NARGS 6 /* Number of A-regs for args/retvals. */
952 /* Each element of xtensa_call0_frame_cache.c0_rt[] describes for each
953 A-register where the current content of the reg came from (in terms
954 of an original reg and a constant). Negative values of c0_rt[n].fp_reg
955 mean that the orignal content of the register was saved to the stack.
956 c0_rt[n].fr.ofs is NOT the offset from the frame base because we don't
957 know where SP will end up until the entire prologue has been analyzed. */
959 #define C0_CONST -1 /* fr_reg value if register contains a constant. */
960 #define C0_INEXP -2 /* fr_reg value if inexpressible as reg + offset. */
961 #define C0_NOSTK -1 /* to_stk value if register has not been stored. */
963 extern xtensa_isa xtensa_default_isa;
965 typedef struct xtensa_c0reg
967 int fr_reg; /* original register from which register content
968 is derived, or C0_CONST, or C0_INEXP. */
969 int fr_ofs; /* constant offset from reg, or immediate value. */
970 int to_stk; /* offset from original SP to register (4-byte aligned),
971 or C0_NOSTK if register has not been saved. */
974 /* Frame cache part for Call0 ABI. */
975 typedef struct xtensa_call0_frame_cache
977 int c0_frmsz; /* Stack frame size. */
978 int c0_hasfp; /* Current frame uses frame pointer. */
979 int fp_regnum; /* A-register used as FP. */
980 int c0_fp; /* Actual value of frame pointer. */
981 int c0_fpalign; /* Dinamic adjustment for the stack
982 pointer. It's an AND mask. Zero,
983 if alignment was not adjusted. */
984 int c0_old_sp; /* In case of dynamic adjustment, it is
985 a register holding unaligned sp.
986 C0_INEXP, when undefined. */
987 int c0_sp_ofs; /* If "c0_old_sp" was spilled it's a
988 stack offset. C0_NOSTK otherwise. */
990 xtensa_c0reg_t c0_rt[C0_NREGS]; /* Register tracking information. */
991 } xtensa_call0_frame_cache_t;
993 typedef struct xtensa_frame_cache
995 CORE_ADDR base; /* Stack pointer of this frame. */
996 CORE_ADDR pc; /* PC of this frame at the function entry point. */
997 CORE_ADDR ra; /* The raw return address of this frame. */
998 CORE_ADDR ps; /* The PS register of the previous (older) frame. */
999 CORE_ADDR prev_sp; /* Stack Pointer of the previous (older) frame. */
1000 int call0; /* It's a call0 framework (else windowed). */
1003 xtensa_windowed_frame_cache_t wd; /* call0 == false. */
1004 xtensa_call0_frame_cache_t c0; /* call0 == true. */
1006 } xtensa_frame_cache_t;
1009 static struct xtensa_frame_cache *
1010 xtensa_alloc_frame_cache (int windowed)
1012 xtensa_frame_cache_t *cache;
1015 DEBUGTRACE ("xtensa_alloc_frame_cache ()\n");
1017 cache = FRAME_OBSTACK_ZALLOC (xtensa_frame_cache_t);
1024 cache->call0 = !windowed;
1027 cache->c0.c0_frmsz = -1;
1028 cache->c0.c0_hasfp = 0;
1029 cache->c0.fp_regnum = -1;
1030 cache->c0.c0_fp = -1;
1031 cache->c0.c0_fpalign = 0;
1032 cache->c0.c0_old_sp = C0_INEXP;
1033 cache->c0.c0_sp_ofs = C0_NOSTK;
1035 for (i = 0; i < C0_NREGS; i++)
1037 cache->c0.c0_rt[i].fr_reg = i;
1038 cache->c0.c0_rt[i].fr_ofs = 0;
1039 cache->c0.c0_rt[i].to_stk = C0_NOSTK;
1046 cache->wd.callsize = -1;
1048 for (i = 0; i < XTENSA_NUM_SAVED_AREGS; i++)
1049 cache->wd.aregs[i] = -1;
1056 xtensa_frame_align (struct gdbarch *gdbarch, CORE_ADDR address)
1058 return address & ~15;
1063 xtensa_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
1068 DEBUGTRACE ("xtensa_unwind_pc (next_frame = %s)\n",
1069 host_address_to_string (next_frame));
1071 frame_unwind_register (next_frame, gdbarch_pc_regnum (gdbarch), buf);
1072 pc = extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
1074 DEBUGINFO ("[xtensa_unwind_pc] pc = 0x%08x\n", (unsigned int) pc);
1080 static struct frame_id
1081 xtensa_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1085 /* THIS-FRAME is a dummy frame. Return a frame ID of that frame. */
1087 pc = get_frame_pc (this_frame);
1088 fp = get_frame_register_unsigned
1089 (this_frame, gdbarch_tdep (gdbarch)->a0_base + 1);
1091 /* Make dummy frame ID unique by adding a constant. */
1092 return frame_id_build (fp + SP_ALIGNMENT, pc);
1095 /* Returns true, if instruction to execute next is unique to Xtensa Window
1096 Interrupt Handlers. It can only be one of L32E, S32E, RFWO, or RFWU. */
1099 xtensa_window_interrupt_insn (struct gdbarch *gdbarch, CORE_ADDR pc)
1101 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1102 unsigned int insn = read_memory_integer (pc, 4, byte_order);
1105 if (byte_order == BFD_ENDIAN_BIG)
1107 /* Check, if this is L32E or S32E. */
1108 code = insn & 0xf000ff00;
1109 if ((code == 0x00009000) || (code == 0x00009400))
1111 /* Check, if this is RFWU or RFWO. */
1112 code = insn & 0xffffff00;
1113 return ((code == 0x00430000) || (code == 0x00530000));
1117 /* Check, if this is L32E or S32E. */
1118 code = insn & 0x00ff000f;
1119 if ((code == 0x090000) || (code == 0x490000))
1121 /* Check, if this is RFWU or RFWO. */
1122 code = insn & 0x00ffffff;
1123 return ((code == 0x00003400) || (code == 0x00003500));
1127 /* Returns the best guess about which register is a frame pointer
1128 for the function containing CURRENT_PC. */
1130 #define XTENSA_ISA_BSZ 32 /* Instruction buffer size. */
1131 #define XTENSA_ISA_BADPC ((CORE_ADDR)0) /* Bad PC value. */
1134 xtensa_scan_prologue (struct gdbarch *gdbarch, CORE_ADDR current_pc)
1136 #define RETURN_FP goto done
1138 unsigned int fp_regnum = gdbarch_tdep (gdbarch)->a0_base + 1;
1139 CORE_ADDR start_addr;
1141 xtensa_insnbuf ins, slot;
1142 gdb_byte ibuf[XTENSA_ISA_BSZ];
1143 CORE_ADDR ia, bt, ba;
1145 int ilen, islots, is;
1147 const char *opcname;
1149 find_pc_partial_function (current_pc, NULL, &start_addr, NULL);
1150 if (start_addr == 0)
1153 if (!xtensa_default_isa)
1154 xtensa_default_isa = xtensa_isa_init (0, 0);
1155 isa = xtensa_default_isa;
1156 gdb_assert (XTENSA_ISA_BSZ >= xtensa_isa_maxlength (isa));
1157 ins = xtensa_insnbuf_alloc (isa);
1158 slot = xtensa_insnbuf_alloc (isa);
1161 for (ia = start_addr, bt = ia; ia < current_pc ; ia += ilen)
1163 if (ia + xtensa_isa_maxlength (isa) > bt)
1166 bt = (ba + XTENSA_ISA_BSZ) < current_pc
1167 ? ba + XTENSA_ISA_BSZ : current_pc;
1168 if (target_read_memory (ba, ibuf, bt - ba) != 0)
1172 xtensa_insnbuf_from_chars (isa, ins, &ibuf[ia-ba], 0);
1173 ifmt = xtensa_format_decode (isa, ins);
1174 if (ifmt == XTENSA_UNDEFINED)
1176 ilen = xtensa_format_length (isa, ifmt);
1177 if (ilen == XTENSA_UNDEFINED)
1179 islots = xtensa_format_num_slots (isa, ifmt);
1180 if (islots == XTENSA_UNDEFINED)
1183 for (is = 0; is < islots; ++is)
1185 if (xtensa_format_get_slot (isa, ifmt, is, ins, slot))
1188 opc = xtensa_opcode_decode (isa, ifmt, is, slot);
1189 if (opc == XTENSA_UNDEFINED)
1192 opcname = xtensa_opcode_name (isa, opc);
1194 if (strcasecmp (opcname, "mov.n") == 0
1195 || strcasecmp (opcname, "or") == 0)
1197 unsigned int register_operand;
1199 /* Possible candidate for setting frame pointer
1200 from A1. This is what we are looking for. */
1202 if (xtensa_operand_get_field (isa, opc, 1, ifmt,
1203 is, slot, ®ister_operand) != 0)
1205 if (xtensa_operand_decode (isa, opc, 1, ®ister_operand) != 0)
1207 if (register_operand == 1) /* Mov{.n} FP A1. */
1209 if (xtensa_operand_get_field (isa, opc, 0, ifmt, is, slot,
1210 ®ister_operand) != 0)
1212 if (xtensa_operand_decode (isa, opc, 0,
1213 ®ister_operand) != 0)
1217 = gdbarch_tdep (gdbarch)->a0_base + register_operand;
1223 /* We have problems decoding the memory. */
1225 || strcasecmp (opcname, "ill") == 0
1226 || strcasecmp (opcname, "ill.n") == 0
1227 /* Hit planted breakpoint. */
1228 || strcasecmp (opcname, "break") == 0
1229 || strcasecmp (opcname, "break.n") == 0
1230 /* Flow control instructions finish prologue. */
1231 || xtensa_opcode_is_branch (isa, opc) > 0
1232 || xtensa_opcode_is_jump (isa, opc) > 0
1233 || xtensa_opcode_is_loop (isa, opc) > 0
1234 || xtensa_opcode_is_call (isa, opc) > 0
1235 || strcasecmp (opcname, "simcall") == 0
1236 || strcasecmp (opcname, "syscall") == 0)
1237 /* Can not continue analysis. */
1242 xtensa_insnbuf_free(isa, slot);
1243 xtensa_insnbuf_free(isa, ins);
1247 /* The key values to identify the frame using "cache" are
1249 cache->base = SP (or best guess about FP) of this frame;
1250 cache->pc = entry-PC (entry point of the frame function);
1251 cache->prev_sp = SP of the previous frame. */
1254 call0_frame_cache (struct frame_info *this_frame,
1255 xtensa_frame_cache_t *cache, CORE_ADDR pc);
1258 xtensa_window_interrupt_frame_cache (struct frame_info *this_frame,
1259 xtensa_frame_cache_t *cache,
1262 static struct xtensa_frame_cache *
1263 xtensa_frame_cache (struct frame_info *this_frame, void **this_cache)
1265 xtensa_frame_cache_t *cache;
1266 CORE_ADDR ra, wb, ws, pc, sp, ps;
1267 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1268 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1269 unsigned int fp_regnum;
1270 int windowed, ps_regnum;
1273 return (struct xtensa_frame_cache *) *this_cache;
1275 pc = get_frame_register_unsigned (this_frame, gdbarch_pc_regnum (gdbarch));
1276 ps_regnum = gdbarch_ps_regnum (gdbarch);
1277 ps = (ps_regnum >= 0
1278 ? get_frame_register_unsigned (this_frame, ps_regnum) : TX_PS);
1280 windowed = windowing_enabled (gdbarch, ps);
1282 /* Get pristine xtensa-frame. */
1283 cache = xtensa_alloc_frame_cache (windowed);
1284 *this_cache = cache;
1290 /* Get WINDOWBASE, WINDOWSTART, and PS registers. */
1291 wb = get_frame_register_unsigned (this_frame,
1292 gdbarch_tdep (gdbarch)->wb_regnum);
1293 ws = get_frame_register_unsigned (this_frame,
1294 gdbarch_tdep (gdbarch)->ws_regnum);
1296 op1 = read_memory_integer (pc, 1, byte_order);
1297 if (XTENSA_IS_ENTRY (gdbarch, op1))
1299 int callinc = CALLINC (ps);
1300 ra = get_frame_register_unsigned
1301 (this_frame, gdbarch_tdep (gdbarch)->a0_base + callinc * 4);
1303 /* ENTRY hasn't been executed yet, therefore callsize is still 0. */
1304 cache->wd.callsize = 0;
1307 cache->prev_sp = get_frame_register_unsigned
1308 (this_frame, gdbarch_tdep (gdbarch)->a0_base + 1);
1310 /* This only can be the outermost frame since we are
1311 just about to execute ENTRY. SP hasn't been set yet.
1312 We can assume any frame size, because it does not
1313 matter, and, let's fake frame base in cache. */
1314 cache->base = cache->prev_sp - 16;
1317 cache->ra = (cache->pc & 0xc0000000) | (ra & 0x3fffffff);
1318 cache->ps = (ps & ~PS_CALLINC_MASK)
1319 | ((WINSIZE(ra)/4) << PS_CALLINC_SHIFT);
1325 fp_regnum = xtensa_scan_prologue (gdbarch, pc);
1326 ra = get_frame_register_unsigned (this_frame,
1327 gdbarch_tdep (gdbarch)->a0_base);
1328 cache->wd.callsize = WINSIZE (ra);
1329 cache->wd.wb = (wb - cache->wd.callsize / 4)
1330 & (gdbarch_tdep (gdbarch)->num_aregs / 4 - 1);
1331 cache->wd.ws = ws & ~(1 << wb);
1333 cache->pc = get_frame_func (this_frame);
1334 cache->ra = (pc & 0xc0000000) | (ra & 0x3fffffff);
1335 cache->ps = (ps & ~PS_CALLINC_MASK)
1336 | ((WINSIZE(ra)/4) << PS_CALLINC_SHIFT);
1339 if (cache->wd.ws == 0)
1344 sp = get_frame_register_unsigned
1345 (this_frame, gdbarch_tdep (gdbarch)->a0_base + 1) - 16;
1347 for (i = 0; i < 4; i++, sp += 4)
1349 cache->wd.aregs[i] = sp;
1352 if (cache->wd.callsize > 4)
1354 /* Set A4...A7/A11. */
1355 /* Get the SP of the frame previous to the previous one.
1356 To achieve this, we have to dereference SP twice. */
1357 sp = (CORE_ADDR) read_memory_integer (sp - 12, 4, byte_order);
1358 sp = (CORE_ADDR) read_memory_integer (sp - 12, 4, byte_order);
1359 sp -= cache->wd.callsize * 4;
1361 for ( i = 4; i < cache->wd.callsize; i++, sp += 4)
1363 cache->wd.aregs[i] = sp;
1368 if ((cache->prev_sp == 0) && ( ra != 0 ))
1369 /* If RA is equal to 0 this frame is an outermost frame. Leave
1370 cache->prev_sp unchanged marking the boundary of the frame stack. */
1372 if ((cache->wd.ws & (1 << cache->wd.wb)) == 0)
1374 /* Register window overflow already happened.
1375 We can read caller's SP from the proper spill loction. */
1376 sp = get_frame_register_unsigned
1377 (this_frame, gdbarch_tdep (gdbarch)->a0_base + 1);
1378 cache->prev_sp = read_memory_integer (sp - 12, 4, byte_order);
1382 /* Read caller's frame SP directly from the previous window. */
1383 int regnum = arreg_number
1384 (gdbarch, gdbarch_tdep (gdbarch)->a0_base + 1,
1387 cache->prev_sp = xtensa_read_register (regnum);
1391 else if (xtensa_window_interrupt_insn (gdbarch, pc))
1393 /* Execution stopped inside Xtensa Window Interrupt Handler. */
1395 xtensa_window_interrupt_frame_cache (this_frame, cache, pc);
1396 /* Everything was set already, including cache->base. */
1399 else /* Call0 framework. */
1401 call0_frame_cache (this_frame, cache, pc);
1402 fp_regnum = cache->c0.fp_regnum;
1405 cache->base = get_frame_register_unsigned (this_frame, fp_regnum);
1410 static int xtensa_session_once_reported = 1;
1412 /* Report a problem with prologue analysis while doing backtracing.
1413 But, do it only once to avoid annoyng repeated messages. */
1418 if (xtensa_session_once_reported == 0)
1420 \nUnrecognised function prologue. Stack trace cannot be resolved. \
1421 This message will not be repeated in this session.\n"));
1423 xtensa_session_once_reported = 1;
1428 xtensa_frame_this_id (struct frame_info *this_frame,
1430 struct frame_id *this_id)
1432 struct xtensa_frame_cache *cache =
1433 xtensa_frame_cache (this_frame, this_cache);
1435 if (cache->prev_sp == 0)
1438 (*this_id) = frame_id_build (cache->prev_sp, cache->pc);
1441 static struct value *
1442 xtensa_frame_prev_register (struct frame_info *this_frame,
1446 struct gdbarch *gdbarch = get_frame_arch (this_frame);
1447 struct xtensa_frame_cache *cache;
1448 ULONGEST saved_reg = 0;
1451 if (*this_cache == NULL)
1452 *this_cache = xtensa_frame_cache (this_frame, this_cache);
1453 cache = (struct xtensa_frame_cache *) *this_cache;
1455 if (regnum ==gdbarch_pc_regnum (gdbarch))
1456 saved_reg = cache->ra;
1457 else if (regnum == gdbarch_tdep (gdbarch)->a0_base + 1)
1458 saved_reg = cache->prev_sp;
1459 else if (!cache->call0)
1461 if (regnum == gdbarch_tdep (gdbarch)->ws_regnum)
1462 saved_reg = cache->wd.ws;
1463 else if (regnum == gdbarch_tdep (gdbarch)->wb_regnum)
1464 saved_reg = cache->wd.wb;
1465 else if (regnum == gdbarch_ps_regnum (gdbarch))
1466 saved_reg = cache->ps;
1474 return frame_unwind_got_constant (this_frame, regnum, saved_reg);
1476 if (!cache->call0) /* Windowed ABI. */
1478 /* Convert A-register numbers to AR-register numbers,
1479 if we deal with A-register. */
1480 if (regnum >= gdbarch_tdep (gdbarch)->a0_base
1481 && regnum <= gdbarch_tdep (gdbarch)->a0_base + 15)
1482 regnum = arreg_number (gdbarch, regnum, cache->wd.wb);
1484 /* Check, if we deal with AR-register saved on stack. */
1485 if (regnum >= gdbarch_tdep (gdbarch)->ar_base
1486 && regnum <= (gdbarch_tdep (gdbarch)->ar_base
1487 + gdbarch_tdep (gdbarch)->num_aregs))
1489 int areg = areg_number (gdbarch, regnum, cache->wd.wb);
1492 && areg < XTENSA_NUM_SAVED_AREGS
1493 && cache->wd.aregs[areg] != -1)
1494 return frame_unwind_got_memory (this_frame, regnum,
1495 cache->wd.aregs[areg]);
1498 else /* Call0 ABI. */
1500 int reg = (regnum >= gdbarch_tdep (gdbarch)->ar_base
1501 && regnum <= (gdbarch_tdep (gdbarch)->ar_base
1503 ? regnum - gdbarch_tdep (gdbarch)->ar_base : regnum;
1510 /* If register was saved in the prologue, retrieve it. */
1511 stkofs = cache->c0.c0_rt[reg].to_stk;
1512 if (stkofs != C0_NOSTK)
1514 /* Determine SP on entry based on FP. */
1515 spe = cache->c0.c0_fp
1516 - cache->c0.c0_rt[cache->c0.fp_regnum].fr_ofs;
1518 return frame_unwind_got_memory (this_frame, regnum,
1524 /* All other registers have been either saved to
1525 the stack or are still alive in the processor. */
1527 return frame_unwind_got_register (this_frame, regnum, regnum);
1531 static const struct frame_unwind
1535 default_frame_unwind_stop_reason,
1536 xtensa_frame_this_id,
1537 xtensa_frame_prev_register,
1539 default_frame_sniffer
1543 xtensa_frame_base_address (struct frame_info *this_frame, void **this_cache)
1545 struct xtensa_frame_cache *cache =
1546 xtensa_frame_cache (this_frame, this_cache);
1551 static const struct frame_base
1555 xtensa_frame_base_address,
1556 xtensa_frame_base_address,
1557 xtensa_frame_base_address
1562 xtensa_extract_return_value (struct type *type,
1563 struct regcache *regcache,
1566 struct gdbarch *gdbarch = get_regcache_arch (regcache);
1567 bfd_byte *valbuf = (bfd_byte *) dst;
1568 int len = TYPE_LENGTH (type);
1573 DEBUGTRACE ("xtensa_extract_return_value (...)\n");
1575 gdb_assert(len > 0);
1577 if (gdbarch_tdep (gdbarch)->call_abi != CallAbiCall0Only)
1579 /* First, we have to find the caller window in the register file. */
1580 regcache_raw_read_unsigned (regcache, gdbarch_pc_regnum (gdbarch), &pc);
1581 callsize = extract_call_winsize (gdbarch, pc);
1583 /* On Xtensa, we can return up to 4 words (or 2 for call12). */
1584 if (len > (callsize > 8 ? 8 : 16))
1585 internal_error (__FILE__, __LINE__,
1586 _("cannot extract return value of %d bytes long"),
1589 /* Get the register offset of the return
1590 register (A2) in the caller window. */
1591 regcache_raw_read_unsigned
1592 (regcache, gdbarch_tdep (gdbarch)->wb_regnum, &wb);
1593 areg = arreg_number (gdbarch,
1594 gdbarch_tdep (gdbarch)->a0_base + 2 + callsize, wb);
1598 /* No windowing hardware - Call0 ABI. */
1599 areg = gdbarch_tdep (gdbarch)->a0_base + C0_ARGS;
1602 DEBUGINFO ("[xtensa_extract_return_value] areg %d len %d\n", areg, len);
1604 if (len < 4 && gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1607 for (; len > 0; len -= 4, areg++, valbuf += 4)
1610 regcache_raw_read_part (regcache, areg, offset, len, valbuf);
1612 regcache_raw_read (regcache, areg, valbuf);
1618 xtensa_store_return_value (struct type *type,
1619 struct regcache *regcache,
1622 struct gdbarch *gdbarch = get_regcache_arch (regcache);
1623 const bfd_byte *valbuf = (const bfd_byte *) dst;
1627 int len = TYPE_LENGTH (type);
1630 DEBUGTRACE ("xtensa_store_return_value (...)\n");
1632 if (gdbarch_tdep (gdbarch)->call_abi != CallAbiCall0Only)
1634 regcache_raw_read_unsigned
1635 (regcache, gdbarch_tdep (gdbarch)->wb_regnum, &wb);
1636 regcache_raw_read_unsigned (regcache, gdbarch_pc_regnum (gdbarch), &pc);
1637 callsize = extract_call_winsize (gdbarch, pc);
1639 if (len > (callsize > 8 ? 8 : 16))
1640 internal_error (__FILE__, __LINE__,
1641 _("unimplemented for this length: %d"),
1642 TYPE_LENGTH (type));
1643 areg = arreg_number (gdbarch,
1644 gdbarch_tdep (gdbarch)->a0_base + 2 + callsize, wb);
1646 DEBUGTRACE ("[xtensa_store_return_value] callsize %d wb %d\n",
1647 callsize, (int) wb);
1651 areg = gdbarch_tdep (gdbarch)->a0_base + C0_ARGS;
1654 if (len < 4 && gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1657 for (; len > 0; len -= 4, areg++, valbuf += 4)
1660 regcache_raw_write_part (regcache, areg, offset, len, valbuf);
1662 regcache_raw_write (regcache, areg, valbuf);
1667 static enum return_value_convention
1668 xtensa_return_value (struct gdbarch *gdbarch,
1669 struct value *function,
1670 struct type *valtype,
1671 struct regcache *regcache,
1673 const gdb_byte *writebuf)
1675 /* Structures up to 16 bytes are returned in registers. */
1677 int struct_return = ((TYPE_CODE (valtype) == TYPE_CODE_STRUCT
1678 || TYPE_CODE (valtype) == TYPE_CODE_UNION
1679 || TYPE_CODE (valtype) == TYPE_CODE_ARRAY)
1680 && TYPE_LENGTH (valtype) > 16);
1683 return RETURN_VALUE_STRUCT_CONVENTION;
1685 DEBUGTRACE ("xtensa_return_value(...)\n");
1687 if (writebuf != NULL)
1689 xtensa_store_return_value (valtype, regcache, writebuf);
1692 if (readbuf != NULL)
1694 gdb_assert (!struct_return);
1695 xtensa_extract_return_value (valtype, regcache, readbuf);
1697 return RETURN_VALUE_REGISTER_CONVENTION;
1704 xtensa_push_dummy_call (struct gdbarch *gdbarch,
1705 struct value *function,
1706 struct regcache *regcache,
1709 struct value **args,
1712 CORE_ADDR struct_addr)
1714 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1716 int size, onstack_size;
1717 gdb_byte *buf = (gdb_byte *) alloca (16);
1719 struct argument_info
1721 const bfd_byte *contents;
1723 int onstack; /* onstack == 0 => in reg */
1724 int align; /* alignment */
1727 int offset; /* stack offset if on stack. */
1728 int regno; /* regno if in register. */
1732 struct argument_info *arg_info =
1733 (struct argument_info *) alloca (nargs * sizeof (struct argument_info));
1737 DEBUGTRACE ("xtensa_push_dummy_call (...)\n");
1739 if (xtensa_debug_level > 3)
1742 DEBUGINFO ("[xtensa_push_dummy_call] nargs = %d\n", nargs);
1743 DEBUGINFO ("[xtensa_push_dummy_call] sp=0x%x, struct_return=%d, "
1744 "struct_addr=0x%x\n",
1745 (int) sp, (int) struct_return, (int) struct_addr);
1747 for (i = 0; i < nargs; i++)
1749 struct value *arg = args[i];
1750 struct type *arg_type = check_typedef (value_type (arg));
1751 fprintf_unfiltered (gdb_stdlog, "%2d: %s %3d ", i,
1752 host_address_to_string (arg),
1753 TYPE_LENGTH (arg_type));
1754 switch (TYPE_CODE (arg_type))
1757 fprintf_unfiltered (gdb_stdlog, "int");
1759 case TYPE_CODE_STRUCT:
1760 fprintf_unfiltered (gdb_stdlog, "struct");
1763 fprintf_unfiltered (gdb_stdlog, "%3d", TYPE_CODE (arg_type));
1766 fprintf_unfiltered (gdb_stdlog, " %s\n",
1767 host_address_to_string (value_contents (arg)));
1771 /* First loop: collect information.
1772 Cast into type_long. (This shouldn't happen often for C because
1773 GDB already does this earlier.) It's possible that GDB could
1774 do it all the time but it's harmless to leave this code here. */
1781 size = REGISTER_SIZE;
1783 for (i = 0; i < nargs; i++)
1785 struct argument_info *info = &arg_info[i];
1786 struct value *arg = args[i];
1787 struct type *arg_type = check_typedef (value_type (arg));
1789 switch (TYPE_CODE (arg_type))
1792 case TYPE_CODE_BOOL:
1793 case TYPE_CODE_CHAR:
1794 case TYPE_CODE_RANGE:
1795 case TYPE_CODE_ENUM:
1797 /* Cast argument to long if necessary as the mask does it too. */
1798 if (TYPE_LENGTH (arg_type)
1799 < TYPE_LENGTH (builtin_type (gdbarch)->builtin_long))
1801 arg_type = builtin_type (gdbarch)->builtin_long;
1802 arg = value_cast (arg_type, arg);
1804 /* Aligment is equal to the type length for the basic types. */
1805 info->align = TYPE_LENGTH (arg_type);
1810 /* Align doubles correctly. */
1811 if (TYPE_LENGTH (arg_type)
1812 == TYPE_LENGTH (builtin_type (gdbarch)->builtin_double))
1813 info->align = TYPE_LENGTH (builtin_type (gdbarch)->builtin_double);
1815 info->align = TYPE_LENGTH (builtin_type (gdbarch)->builtin_long);
1818 case TYPE_CODE_STRUCT:
1820 info->align = TYPE_LENGTH (builtin_type (gdbarch)->builtin_long);
1823 info->length = TYPE_LENGTH (arg_type);
1824 info->contents = value_contents (arg);
1826 /* Align size and onstack_size. */
1827 size = (size + info->align - 1) & ~(info->align - 1);
1828 onstack_size = (onstack_size + info->align - 1) & ~(info->align - 1);
1830 if (size + info->length > REGISTER_SIZE * ARG_NOF (gdbarch))
1833 info->u.offset = onstack_size;
1834 onstack_size += info->length;
1839 info->u.regno = ARG_1ST (gdbarch) + size / REGISTER_SIZE;
1841 size += info->length;
1844 /* Adjust the stack pointer and align it. */
1845 sp = align_down (sp - onstack_size, SP_ALIGNMENT);
1847 /* Simulate MOVSP, if Windowed ABI. */
1848 if ((gdbarch_tdep (gdbarch)->call_abi != CallAbiCall0Only)
1851 read_memory (osp - 16, buf, 16);
1852 write_memory (sp - 16, buf, 16);
1855 /* Second Loop: Load arguments. */
1859 store_unsigned_integer (buf, REGISTER_SIZE, byte_order, struct_addr);
1860 regcache_cooked_write (regcache, ARG_1ST (gdbarch), buf);
1863 for (i = 0; i < nargs; i++)
1865 struct argument_info *info = &arg_info[i];
1869 int n = info->length;
1870 CORE_ADDR offset = sp + info->u.offset;
1872 /* Odd-sized structs are aligned to the lower side of a memory
1873 word in big-endian mode and require a shift. This only
1874 applies for structures smaller than one word. */
1876 if (n < REGISTER_SIZE
1877 && gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1878 offset += (REGISTER_SIZE - n);
1880 write_memory (offset, info->contents, info->length);
1885 int n = info->length;
1886 const bfd_byte *cp = info->contents;
1887 int r = info->u.regno;
1889 /* Odd-sized structs are aligned to the lower side of registers in
1890 big-endian mode and require a shift. The odd-sized leftover will
1891 be at the end. Note that this is only true for structures smaller
1892 than REGISTER_SIZE; for larger odd-sized structures the excess
1893 will be left-aligned in the register on both endiannesses. */
1895 if (n < REGISTER_SIZE && byte_order == BFD_ENDIAN_BIG)
1898 v = extract_unsigned_integer (cp, REGISTER_SIZE, byte_order);
1899 v = v >> ((REGISTER_SIZE - n) * TARGET_CHAR_BIT);
1901 store_unsigned_integer (buf, REGISTER_SIZE, byte_order, v);
1902 regcache_cooked_write (regcache, r, buf);
1904 cp += REGISTER_SIZE;
1911 regcache_cooked_write (regcache, r, cp);
1913 cp += REGISTER_SIZE;
1920 /* Set the return address of dummy frame to the dummy address.
1921 The return address for the current function (in A0) is
1922 saved in the dummy frame, so we can savely overwrite A0 here. */
1924 if (gdbarch_tdep (gdbarch)->call_abi != CallAbiCall0Only)
1928 ra = (bp_addr & 0x3fffffff) | 0x40000000;
1929 regcache_raw_read_unsigned (regcache, gdbarch_ps_regnum (gdbarch), &val);
1930 ps = (unsigned long) val & ~0x00030000;
1931 regcache_cooked_write_unsigned
1932 (regcache, gdbarch_tdep (gdbarch)->a0_base + 4, ra);
1933 regcache_cooked_write_unsigned (regcache,
1934 gdbarch_ps_regnum (gdbarch),
1937 /* All the registers have been saved. After executing
1938 dummy call, they all will be restored. So it's safe
1939 to modify WINDOWSTART register to make it look like there
1940 is only one register window corresponding to WINDOWEBASE. */
1942 regcache_raw_read (regcache, gdbarch_tdep (gdbarch)->wb_regnum, buf);
1943 regcache_cooked_write_unsigned
1944 (regcache, gdbarch_tdep (gdbarch)->ws_regnum,
1945 1 << extract_unsigned_integer (buf, 4, byte_order));
1949 /* Simulate CALL0: write RA into A0 register. */
1950 regcache_cooked_write_unsigned
1951 (regcache, gdbarch_tdep (gdbarch)->a0_base, bp_addr);
1954 /* Set new stack pointer and return it. */
1955 regcache_cooked_write_unsigned (regcache,
1956 gdbarch_tdep (gdbarch)->a0_base + 1, sp);
1957 /* Make dummy frame ID unique by adding a constant. */
1958 return sp + SP_ALIGNMENT;
1962 /* Return a breakpoint for the current location of PC. We always use
1963 the density version if we have density instructions (regardless of the
1964 current instruction at PC), and use regular instructions otherwise. */
1966 #define BIG_BREAKPOINT { 0x00, 0x04, 0x00 }
1967 #define LITTLE_BREAKPOINT { 0x00, 0x40, 0x00 }
1968 #define DENSITY_BIG_BREAKPOINT { 0xd2, 0x0f }
1969 #define DENSITY_LITTLE_BREAKPOINT { 0x2d, 0xf0 }
1971 static const unsigned char *
1972 xtensa_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr,
1975 static unsigned char big_breakpoint[] = BIG_BREAKPOINT;
1976 static unsigned char little_breakpoint[] = LITTLE_BREAKPOINT;
1977 static unsigned char density_big_breakpoint[] = DENSITY_BIG_BREAKPOINT;
1978 static unsigned char density_little_breakpoint[] = DENSITY_LITTLE_BREAKPOINT;
1980 DEBUGTRACE ("xtensa_breakpoint_from_pc (pc = 0x%08x)\n", (int) *pcptr);
1982 if (gdbarch_tdep (gdbarch)->isa_use_density_instructions)
1984 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1986 *lenptr = sizeof (density_big_breakpoint);
1987 return density_big_breakpoint;
1991 *lenptr = sizeof (density_little_breakpoint);
1992 return density_little_breakpoint;
1997 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
1999 *lenptr = sizeof (big_breakpoint);
2000 return big_breakpoint;
2004 *lenptr = sizeof (little_breakpoint);
2005 return little_breakpoint;
2010 /* Call0 ABI support routines. */
2012 /* Return true, if PC points to "ret" or "ret.n". */
2015 call0_ret (CORE_ADDR start_pc, CORE_ADDR finish_pc)
2017 #define RETURN_RET goto done
2019 xtensa_insnbuf ins, slot;
2020 gdb_byte ibuf[XTENSA_ISA_BSZ];
2021 CORE_ADDR ia, bt, ba;
2023 int ilen, islots, is;
2025 const char *opcname;
2028 isa = xtensa_default_isa;
2029 gdb_assert (XTENSA_ISA_BSZ >= xtensa_isa_maxlength (isa));
2030 ins = xtensa_insnbuf_alloc (isa);
2031 slot = xtensa_insnbuf_alloc (isa);
2034 for (ia = start_pc, bt = ia; ia < finish_pc ; ia += ilen)
2036 if (ia + xtensa_isa_maxlength (isa) > bt)
2039 bt = (ba + XTENSA_ISA_BSZ) < finish_pc
2040 ? ba + XTENSA_ISA_BSZ : finish_pc;
2041 if (target_read_memory (ba, ibuf, bt - ba) != 0 )
2045 xtensa_insnbuf_from_chars (isa, ins, &ibuf[ia-ba], 0);
2046 ifmt = xtensa_format_decode (isa, ins);
2047 if (ifmt == XTENSA_UNDEFINED)
2049 ilen = xtensa_format_length (isa, ifmt);
2050 if (ilen == XTENSA_UNDEFINED)
2052 islots = xtensa_format_num_slots (isa, ifmt);
2053 if (islots == XTENSA_UNDEFINED)
2056 for (is = 0; is < islots; ++is)
2058 if (xtensa_format_get_slot (isa, ifmt, is, ins, slot))
2061 opc = xtensa_opcode_decode (isa, ifmt, is, slot);
2062 if (opc == XTENSA_UNDEFINED)
2065 opcname = xtensa_opcode_name (isa, opc);
2067 if ((strcasecmp (opcname, "ret.n") == 0)
2068 || (strcasecmp (opcname, "ret") == 0))
2076 xtensa_insnbuf_free(isa, slot);
2077 xtensa_insnbuf_free(isa, ins);
2081 /* Call0 opcode class. Opcodes are preclassified according to what they
2082 mean for Call0 prologue analysis, and their number of significant operands.
2083 The purpose of this is to simplify prologue analysis by separating
2084 instruction decoding (libisa) from the semantics of prologue analysis. */
2088 c0opc_illegal, /* Unknown to libisa (invalid) or 'ill' opcode. */
2089 c0opc_uninteresting, /* Not interesting for Call0 prologue analysis. */
2090 c0opc_flow, /* Flow control insn. */
2091 c0opc_entry, /* ENTRY indicates non-Call0 prologue. */
2092 c0opc_break, /* Debugger software breakpoints. */
2093 c0opc_add, /* Adding two registers. */
2094 c0opc_addi, /* Adding a register and an immediate. */
2095 c0opc_and, /* Bitwise "and"-ing two registers. */
2096 c0opc_sub, /* Subtracting a register from a register. */
2097 c0opc_mov, /* Moving a register to a register. */
2098 c0opc_movi, /* Moving an immediate to a register. */
2099 c0opc_l32r, /* Loading a literal. */
2100 c0opc_s32i, /* Storing word at fixed offset from a base register. */
2101 c0opc_rwxsr, /* RSR, WRS, or XSR instructions. */
2102 c0opc_l32e, /* L32E instruction. */
2103 c0opc_s32e, /* S32E instruction. */
2104 c0opc_rfwo, /* RFWO instruction. */
2105 c0opc_rfwu, /* RFWU instruction. */
2106 c0opc_NrOf /* Number of opcode classifications. */
2109 /* Return true, if OPCNAME is RSR, WRS, or XSR instruction. */
2112 rwx_special_register (const char *opcname)
2114 char ch = *opcname++;
2116 if ((ch != 'r') && (ch != 'w') && (ch != 'x'))
2118 if (*opcname++ != 's')
2120 if (*opcname++ != 'r')
2122 if (*opcname++ != '.')
2128 /* Classify an opcode based on what it means for Call0 prologue analysis. */
2130 static xtensa_insn_kind
2131 call0_classify_opcode (xtensa_isa isa, xtensa_opcode opc)
2133 const char *opcname;
2134 xtensa_insn_kind opclass = c0opc_uninteresting;
2136 DEBUGTRACE ("call0_classify_opcode (..., opc = %d)\n", opc);
2138 /* Get opcode name and handle special classifications. */
2140 opcname = xtensa_opcode_name (isa, opc);
2143 || strcasecmp (opcname, "ill") == 0
2144 || strcasecmp (opcname, "ill.n") == 0)
2145 opclass = c0opc_illegal;
2146 else if (strcasecmp (opcname, "break") == 0
2147 || strcasecmp (opcname, "break.n") == 0)
2148 opclass = c0opc_break;
2149 else if (strcasecmp (opcname, "entry") == 0)
2150 opclass = c0opc_entry;
2151 else if (strcasecmp (opcname, "rfwo") == 0)
2152 opclass = c0opc_rfwo;
2153 else if (strcasecmp (opcname, "rfwu") == 0)
2154 opclass = c0opc_rfwu;
2155 else if (xtensa_opcode_is_branch (isa, opc) > 0
2156 || xtensa_opcode_is_jump (isa, opc) > 0
2157 || xtensa_opcode_is_loop (isa, opc) > 0
2158 || xtensa_opcode_is_call (isa, opc) > 0
2159 || strcasecmp (opcname, "simcall") == 0
2160 || strcasecmp (opcname, "syscall") == 0)
2161 opclass = c0opc_flow;
2163 /* Also, classify specific opcodes that need to be tracked. */
2164 else if (strcasecmp (opcname, "add") == 0
2165 || strcasecmp (opcname, "add.n") == 0)
2166 opclass = c0opc_add;
2167 else if (strcasecmp (opcname, "and") == 0)
2168 opclass = c0opc_and;
2169 else if (strcasecmp (opcname, "addi") == 0
2170 || strcasecmp (opcname, "addi.n") == 0
2171 || strcasecmp (opcname, "addmi") == 0)
2172 opclass = c0opc_addi;
2173 else if (strcasecmp (opcname, "sub") == 0)
2174 opclass = c0opc_sub;
2175 else if (strcasecmp (opcname, "mov.n") == 0
2176 || strcasecmp (opcname, "or") == 0) /* Could be 'mov' asm macro. */
2177 opclass = c0opc_mov;
2178 else if (strcasecmp (opcname, "movi") == 0
2179 || strcasecmp (opcname, "movi.n") == 0)
2180 opclass = c0opc_movi;
2181 else if (strcasecmp (opcname, "l32r") == 0)
2182 opclass = c0opc_l32r;
2183 else if (strcasecmp (opcname, "s32i") == 0
2184 || strcasecmp (opcname, "s32i.n") == 0)
2185 opclass = c0opc_s32i;
2186 else if (strcasecmp (opcname, "l32e") == 0)
2187 opclass = c0opc_l32e;
2188 else if (strcasecmp (opcname, "s32e") == 0)
2189 opclass = c0opc_s32e;
2190 else if (rwx_special_register (opcname))
2191 opclass = c0opc_rwxsr;
2196 /* Tracks register movement/mutation for a given operation, which may
2197 be within a bundle. Updates the destination register tracking info
2198 accordingly. The pc is needed only for pc-relative load instructions
2199 (eg. l32r). The SP register number is needed to identify stores to
2200 the stack frame. Returns 0, if analysis was succesfull, non-zero
2204 call0_track_op (struct gdbarch *gdbarch, xtensa_c0reg_t dst[], xtensa_c0reg_t src[],
2205 xtensa_insn_kind opclass, int nods, unsigned odv[],
2206 CORE_ADDR pc, int spreg, xtensa_frame_cache_t *cache)
2208 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2209 unsigned litbase, litaddr, litval;
2214 /* 3 operands: dst, src, imm. */
2215 gdb_assert (nods == 3);
2216 dst[odv[0]].fr_reg = src[odv[1]].fr_reg;
2217 dst[odv[0]].fr_ofs = src[odv[1]].fr_ofs + odv[2];
2220 /* 3 operands: dst, src1, src2. */
2221 gdb_assert (nods == 3);
2222 if (src[odv[1]].fr_reg == C0_CONST)
2224 dst[odv[0]].fr_reg = src[odv[2]].fr_reg;
2225 dst[odv[0]].fr_ofs = src[odv[2]].fr_ofs + src[odv[1]].fr_ofs;
2227 else if (src[odv[2]].fr_reg == C0_CONST)
2229 dst[odv[0]].fr_reg = src[odv[1]].fr_reg;
2230 dst[odv[0]].fr_ofs = src[odv[1]].fr_ofs + src[odv[2]].fr_ofs;
2232 else dst[odv[0]].fr_reg = C0_INEXP;
2235 /* 3 operands: dst, src1, src2. */
2236 gdb_assert (nods == 3);
2237 if (cache->c0.c0_fpalign == 0)
2239 /* Handle dynamic stack alignment. */
2240 if ((src[odv[0]].fr_reg == spreg) && (src[odv[1]].fr_reg == spreg))
2242 if (src[odv[2]].fr_reg == C0_CONST)
2243 cache->c0.c0_fpalign = src[odv[2]].fr_ofs;
2246 else if ((src[odv[0]].fr_reg == spreg)
2247 && (src[odv[2]].fr_reg == spreg))
2249 if (src[odv[1]].fr_reg == C0_CONST)
2250 cache->c0.c0_fpalign = src[odv[1]].fr_ofs;
2253 /* else fall through. */
2255 if (src[odv[1]].fr_reg == C0_CONST)
2257 dst[odv[0]].fr_reg = src[odv[2]].fr_reg;
2258 dst[odv[0]].fr_ofs = src[odv[2]].fr_ofs & src[odv[1]].fr_ofs;
2260 else if (src[odv[2]].fr_reg == C0_CONST)
2262 dst[odv[0]].fr_reg = src[odv[1]].fr_reg;
2263 dst[odv[0]].fr_ofs = src[odv[1]].fr_ofs & src[odv[2]].fr_ofs;
2265 else dst[odv[0]].fr_reg = C0_INEXP;
2268 /* 3 operands: dst, src1, src2. */
2269 gdb_assert (nods == 3);
2270 if (src[odv[2]].fr_reg == C0_CONST)
2272 dst[odv[0]].fr_reg = src[odv[1]].fr_reg;
2273 dst[odv[0]].fr_ofs = src[odv[1]].fr_ofs - src[odv[2]].fr_ofs;
2275 else dst[odv[0]].fr_reg = C0_INEXP;
2278 /* 2 operands: dst, src [, src]. */
2279 gdb_assert (nods == 2);
2280 /* First, check if it's a special case of saving unaligned SP
2281 to a spare register in case of dynamic stack adjustment.
2282 But, only do it one time. The second time could be initializing
2283 frame pointer. We don't want to overwrite the first one. */
2284 if ((odv[1] == spreg) && (cache->c0.c0_old_sp == C0_INEXP))
2285 cache->c0.c0_old_sp = odv[0];
2287 dst[odv[0]].fr_reg = src[odv[1]].fr_reg;
2288 dst[odv[0]].fr_ofs = src[odv[1]].fr_ofs;
2291 /* 2 operands: dst, imm. */
2292 gdb_assert (nods == 2);
2293 dst[odv[0]].fr_reg = C0_CONST;
2294 dst[odv[0]].fr_ofs = odv[1];
2297 /* 2 operands: dst, literal offset. */
2298 gdb_assert (nods == 2);
2299 /* litbase = xtensa_get_litbase (pc); can be also used. */
2300 litbase = (gdbarch_tdep (gdbarch)->litbase_regnum == -1)
2301 ? 0 : xtensa_read_register
2302 (gdbarch_tdep (gdbarch)->litbase_regnum);
2303 litaddr = litbase & 1
2304 ? (litbase & ~1) + (signed)odv[1]
2305 : (pc + 3 + (signed)odv[1]) & ~3;
2306 litval = read_memory_integer (litaddr, 4, byte_order);
2307 dst[odv[0]].fr_reg = C0_CONST;
2308 dst[odv[0]].fr_ofs = litval;
2311 /* 3 operands: value, base, offset. */
2312 gdb_assert (nods == 3 && spreg >= 0 && spreg < C0_NREGS);
2313 /* First, check if it's a spill for saved unaligned SP,
2314 when dynamic stack adjustment was applied to this frame. */
2315 if ((cache->c0.c0_fpalign != 0) /* Dynamic stack adjustment. */
2316 && (odv[1] == spreg) /* SP usage indicates spill. */
2317 && (odv[0] == cache->c0.c0_old_sp)) /* Old SP register spilled. */
2318 cache->c0.c0_sp_ofs = odv[2];
2320 if (src[odv[1]].fr_reg == spreg /* Store to stack frame. */
2321 && (src[odv[1]].fr_ofs & 3) == 0 /* Alignment preserved. */
2322 && src[odv[0]].fr_reg >= 0 /* Value is from a register. */
2323 && src[odv[0]].fr_ofs == 0 /* Value hasn't been modified. */
2324 && src[src[odv[0]].fr_reg].to_stk == C0_NOSTK) /* First time. */
2326 /* ISA encoding guarantees alignment. But, check it anyway. */
2327 gdb_assert ((odv[2] & 3) == 0);
2328 dst[src[odv[0]].fr_reg].to_stk = src[odv[1]].fr_ofs + odv[2];
2331 /* If we end up inside Window Overflow / Underflow interrupt handler
2332 report an error because these handlers should have been handled
2333 already in a different way. */
2345 /* Analyze prologue of the function at start address to determine if it uses
2346 the Call0 ABI, and if so track register moves and linear modifications
2347 in the prologue up to the PC or just beyond the prologue, whichever is
2348 first. An 'entry' instruction indicates non-Call0 ABI and the end of the
2349 prologue. The prologue may overlap non-prologue instructions but is
2350 guaranteed to end by the first flow-control instruction (jump, branch,
2351 call or return). Since an optimized function may move information around
2352 and change the stack frame arbitrarily during the prologue, the information
2353 is guaranteed valid only at the point in the function indicated by the PC.
2354 May be used to skip the prologue or identify the ABI, w/o tracking.
2356 Returns: Address of first instruction after prologue, or PC (whichever
2357 is first), or 0, if decoding failed (in libisa).
2359 start Start address of function/prologue.
2360 pc Program counter to stop at. Use 0 to continue to end of prologue.
2361 If 0, avoids infinite run-on in corrupt code memory by bounding
2362 the scan to the end of the function if that can be determined.
2363 nregs Number of general registers to track.
2365 cache Xtensa frame cache.
2367 Note that these may produce useful results even if decoding fails
2368 because they begin with default assumptions that analysis may change. */
2371 call0_analyze_prologue (struct gdbarch *gdbarch,
2372 CORE_ADDR start, CORE_ADDR pc,
2373 int nregs, xtensa_frame_cache_t *cache)
2375 CORE_ADDR ia; /* Current insn address in prologue. */
2376 CORE_ADDR ba = 0; /* Current address at base of insn buffer. */
2377 CORE_ADDR bt; /* Current address at top+1 of insn buffer. */
2378 gdb_byte ibuf[XTENSA_ISA_BSZ];/* Instruction buffer for decoding prologue. */
2379 xtensa_isa isa; /* libisa ISA handle. */
2380 xtensa_insnbuf ins, slot; /* libisa handle to decoded insn, slot. */
2381 xtensa_format ifmt; /* libisa instruction format. */
2382 int ilen, islots, is; /* Instruction length, nbr slots, current slot. */
2383 xtensa_opcode opc; /* Opcode in current slot. */
2384 xtensa_insn_kind opclass; /* Opcode class for Call0 prologue analysis. */
2385 int nods; /* Opcode number of operands. */
2386 unsigned odv[C0_MAXOPDS]; /* Operand values in order provided by libisa. */
2387 xtensa_c0reg_t *rtmp; /* Register tracking info snapshot. */
2388 int j; /* General loop counter. */
2389 int fail = 0; /* Set non-zero and exit, if decoding fails. */
2390 CORE_ADDR body_pc; /* The PC for the first non-prologue insn. */
2391 CORE_ADDR end_pc; /* The PC for the lust function insn. */
2393 struct symtab_and_line prologue_sal;
2395 DEBUGTRACE ("call0_analyze_prologue (start = 0x%08x, pc = 0x%08x, ...)\n",
2396 (int)start, (int)pc);
2398 /* Try to limit the scan to the end of the function if a non-zero pc
2399 arg was not supplied to avoid probing beyond the end of valid memory.
2400 If memory is full of garbage that classifies as c0opc_uninteresting.
2401 If this fails (eg. if no symbols) pc ends up 0 as it was.
2402 Intialize the Call0 frame and register tracking info.
2403 Assume it's Call0 until an 'entry' instruction is encountered.
2404 Assume we may be in the prologue until we hit a flow control instr. */
2410 /* Find out, if we have an information about the prologue from DWARF. */
2411 prologue_sal = find_pc_line (start, 0);
2412 if (prologue_sal.line != 0) /* Found debug info. */
2413 body_pc = prologue_sal.end;
2415 /* If we are going to analyze the prologue in general without knowing about
2416 the current PC, make the best assumtion for the end of the prologue. */
2419 find_pc_partial_function (start, 0, NULL, &end_pc);
2420 body_pc = min (end_pc, body_pc);
2423 body_pc = min (pc, body_pc);
2426 rtmp = (xtensa_c0reg_t*) alloca(nregs * sizeof(xtensa_c0reg_t));
2428 if (!xtensa_default_isa)
2429 xtensa_default_isa = xtensa_isa_init (0, 0);
2430 isa = xtensa_default_isa;
2431 gdb_assert (XTENSA_ISA_BSZ >= xtensa_isa_maxlength (isa));
2432 ins = xtensa_insnbuf_alloc (isa);
2433 slot = xtensa_insnbuf_alloc (isa);
2435 for (ia = start, bt = ia; ia < body_pc ; ia += ilen)
2437 /* (Re)fill instruction buffer from memory if necessary, but do not
2438 read memory beyond PC to be sure we stay within text section
2439 (this protection only works if a non-zero pc is supplied). */
2441 if (ia + xtensa_isa_maxlength (isa) > bt)
2444 bt = (ba + XTENSA_ISA_BSZ) < body_pc ? ba + XTENSA_ISA_BSZ : body_pc;
2445 if (target_read_memory (ba, ibuf, bt - ba) != 0 )
2446 error (_("Unable to read target memory ..."));
2449 /* Decode format information. */
2451 xtensa_insnbuf_from_chars (isa, ins, &ibuf[ia-ba], 0);
2452 ifmt = xtensa_format_decode (isa, ins);
2453 if (ifmt == XTENSA_UNDEFINED)
2458 ilen = xtensa_format_length (isa, ifmt);
2459 if (ilen == XTENSA_UNDEFINED)
2464 islots = xtensa_format_num_slots (isa, ifmt);
2465 if (islots == XTENSA_UNDEFINED)
2471 /* Analyze a bundle or a single instruction, using a snapshot of
2472 the register tracking info as input for the entire bundle so that
2473 register changes do not take effect within this bundle. */
2475 for (j = 0; j < nregs; ++j)
2476 rtmp[j] = cache->c0.c0_rt[j];
2478 for (is = 0; is < islots; ++is)
2480 /* Decode a slot and classify the opcode. */
2482 fail = xtensa_format_get_slot (isa, ifmt, is, ins, slot);
2486 opc = xtensa_opcode_decode (isa, ifmt, is, slot);
2487 DEBUGVERB ("[call0_analyze_prologue] instr addr = 0x%08x, opc = %d\n",
2489 if (opc == XTENSA_UNDEFINED)
2490 opclass = c0opc_illegal;
2492 opclass = call0_classify_opcode (isa, opc);
2494 /* Decide whether to track this opcode, ignore it, or bail out. */
2503 case c0opc_uninteresting:
2506 case c0opc_flow: /* Flow control instructions stop analysis. */
2507 case c0opc_rwxsr: /* RSR, WSR, XSR instructions stop analysis. */
2512 ia += ilen; /* Skip over 'entry' insn. */
2519 /* Only expected opcodes should get this far. */
2521 /* Extract and decode the operands. */
2522 nods = xtensa_opcode_num_operands (isa, opc);
2523 if (nods == XTENSA_UNDEFINED)
2529 for (j = 0; j < nods && j < C0_MAXOPDS; ++j)
2531 fail = xtensa_operand_get_field (isa, opc, j, ifmt,
2536 fail = xtensa_operand_decode (isa, opc, j, &odv[j]);
2541 /* Check operands to verify use of 'mov' assembler macro. */
2542 if (opclass == c0opc_mov && nods == 3)
2544 if (odv[2] == odv[1])
2547 if ((odv[0] == 1) && (odv[1] != 1))
2548 /* OR A1, An, An , where n != 1.
2549 This means we are inside epilogue already. */
2554 opclass = c0opc_uninteresting;
2559 /* Track register movement and modification for this operation. */
2560 fail = call0_track_op (gdbarch, cache->c0.c0_rt, rtmp,
2561 opclass, nods, odv, ia, 1, cache);
2567 DEBUGVERB ("[call0_analyze_prologue] stopped at instr addr 0x%08x, %s\n",
2568 (unsigned)ia, fail ? "failed" : "succeeded");
2569 xtensa_insnbuf_free(isa, slot);
2570 xtensa_insnbuf_free(isa, ins);
2571 return fail ? XTENSA_ISA_BADPC : ia;
2574 /* Initialize frame cache for the current frame in CALL0 ABI. */
2577 call0_frame_cache (struct frame_info *this_frame,
2578 xtensa_frame_cache_t *cache, CORE_ADDR pc)
2580 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2581 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2582 CORE_ADDR start_pc; /* The beginning of the function. */
2583 CORE_ADDR body_pc=UINT_MAX; /* PC, where prologue analysis stopped. */
2584 CORE_ADDR sp, fp, ra;
2585 int fp_regnum = C0_SP, c0_hasfp = 0, c0_frmsz = 0, prev_sp = 0, to_stk;
2587 sp = get_frame_register_unsigned
2588 (this_frame, gdbarch_tdep (gdbarch)->a0_base + 1);
2589 fp = sp; /* Assume FP == SP until proven otherwise. */
2591 /* Find the beginning of the prologue of the function containing the PC
2592 and analyze it up to the PC or the end of the prologue. */
2594 if (find_pc_partial_function (pc, NULL, &start_pc, NULL))
2596 body_pc = call0_analyze_prologue (gdbarch, start_pc, pc, C0_NREGS, cache);
2598 if (body_pc == XTENSA_ISA_BADPC)
2602 goto finish_frame_analysis;
2606 /* Get the frame information and FP (if used) at the current PC.
2607 If PC is in the prologue, the prologue analysis is more reliable
2608 than DWARF info. We don't not know for sure, if PC is in the prologue,
2609 but we do know no calls have yet taken place, so we can almost
2610 certainly rely on the prologue analysis. */
2614 /* Prologue analysis was successful up to the PC.
2615 It includes the cases when PC == START_PC. */
2616 c0_hasfp = cache->c0.c0_rt[C0_FP].fr_reg == C0_SP;
2617 /* c0_hasfp == true means there is a frame pointer because
2618 we analyzed the prologue and found that cache->c0.c0_rt[C0_FP]
2619 was derived from SP. Otherwise, it would be C0_FP. */
2620 fp_regnum = c0_hasfp ? C0_FP : C0_SP;
2621 c0_frmsz = - cache->c0.c0_rt[fp_regnum].fr_ofs;
2622 fp_regnum += gdbarch_tdep (gdbarch)->a0_base;
2624 else /* No data from the prologue analysis. */
2627 fp_regnum = gdbarch_tdep (gdbarch)->a0_base + C0_SP;
2632 if (cache->c0.c0_fpalign)
2634 /* This frame has a special prologue with a dynamic stack adjustment
2635 to force an alignment, which is bigger than standard 16 bytes. */
2637 CORE_ADDR unaligned_sp;
2639 if (cache->c0.c0_old_sp == C0_INEXP)
2640 /* This can't be. Prologue code should be consistent.
2641 Unaligned stack pointer should be saved in a spare register. */
2645 goto finish_frame_analysis;
2648 if (cache->c0.c0_sp_ofs == C0_NOSTK)
2649 /* Saved unaligned value of SP is kept in a register. */
2650 unaligned_sp = get_frame_register_unsigned
2651 (this_frame, gdbarch_tdep (gdbarch)->a0_base + cache->c0.c0_old_sp);
2653 /* Get the value from stack. */
2654 unaligned_sp = (CORE_ADDR)
2655 read_memory_integer (fp + cache->c0.c0_sp_ofs, 4, byte_order);
2657 prev_sp = unaligned_sp + c0_frmsz;
2660 prev_sp = fp + c0_frmsz;
2662 /* Frame size from debug info or prologue tracking does not account for
2663 alloca() and other dynamic allocations. Adjust frame size by FP - SP. */
2666 fp = get_frame_register_unsigned (this_frame, fp_regnum);
2668 /* Update the stack frame size. */
2669 c0_frmsz += fp - sp;
2672 /* Get the return address (RA) from the stack if saved,
2673 or try to get it from a register. */
2675 to_stk = cache->c0.c0_rt[C0_RA].to_stk;
2676 if (to_stk != C0_NOSTK)
2678 read_memory_integer (sp + c0_frmsz + cache->c0.c0_rt[C0_RA].to_stk,
2681 else if (cache->c0.c0_rt[C0_RA].fr_reg == C0_CONST
2682 && cache->c0.c0_rt[C0_RA].fr_ofs == 0)
2684 /* Special case for terminating backtrace at a function that wants to
2685 be seen as the outermost one. Such a function will clear it's RA (A0)
2686 register to 0 in the prologue instead of saving its original value. */
2691 /* RA was copied to another register or (before any function call) may
2692 still be in the original RA register. This is not always reliable:
2693 even in a leaf function, register tracking stops after prologue, and
2694 even in prologue, non-prologue instructions (not tracked) may overwrite
2695 RA or any register it was copied to. If likely in prologue or before
2696 any call, use retracking info and hope for the best (compiler should
2697 have saved RA in stack if not in a leaf function). If not in prologue,
2703 && (i == C0_RA || cache->c0.c0_rt[i].fr_reg != C0_RA);
2705 if (i >= C0_NREGS && cache->c0.c0_rt[C0_RA].fr_reg == C0_RA)
2709 ra = get_frame_register_unsigned
2711 gdbarch_tdep (gdbarch)->a0_base + cache->c0.c0_rt[i].fr_reg);
2716 finish_frame_analysis:
2717 cache->pc = start_pc;
2719 /* RA == 0 marks the outermost frame. Do not go past it. */
2720 cache->prev_sp = (ra != 0) ? prev_sp : 0;
2721 cache->c0.fp_regnum = fp_regnum;
2722 cache->c0.c0_frmsz = c0_frmsz;
2723 cache->c0.c0_hasfp = c0_hasfp;
2724 cache->c0.c0_fp = fp;
2727 static CORE_ADDR a0_saved;
2728 static CORE_ADDR a7_saved;
2729 static CORE_ADDR a11_saved;
2730 static int a0_was_saved;
2731 static int a7_was_saved;
2732 static int a11_was_saved;
2734 /* Simulate L32E instruction: AT <-- ref (AS + offset). */
2736 execute_l32e (struct gdbarch *gdbarch, int at, int as, int offset, CORE_ADDR wb)
2738 int atreg = arreg_number (gdbarch, gdbarch_tdep (gdbarch)->a0_base + at, wb);
2739 int asreg = arreg_number (gdbarch, gdbarch_tdep (gdbarch)->a0_base + as, wb);
2740 CORE_ADDR addr = xtensa_read_register (asreg) + offset;
2741 unsigned int spilled_value
2742 = read_memory_unsigned_integer (addr, 4, gdbarch_byte_order (gdbarch));
2744 if ((at == 0) && !a0_was_saved)
2746 a0_saved = xtensa_read_register (atreg);
2749 else if ((at == 7) && !a7_was_saved)
2751 a7_saved = xtensa_read_register (atreg);
2754 else if ((at == 11) && !a11_was_saved)
2756 a11_saved = xtensa_read_register (atreg);
2760 xtensa_write_register (atreg, spilled_value);
2763 /* Simulate S32E instruction: AT --> ref (AS + offset). */
2765 execute_s32e (struct gdbarch *gdbarch, int at, int as, int offset, CORE_ADDR wb)
2767 int atreg = arreg_number (gdbarch, gdbarch_tdep (gdbarch)->a0_base + at, wb);
2768 int asreg = arreg_number (gdbarch, gdbarch_tdep (gdbarch)->a0_base + as, wb);
2769 CORE_ADDR addr = xtensa_read_register (asreg) + offset;
2770 ULONGEST spilled_value = xtensa_read_register (atreg);
2772 write_memory_unsigned_integer (addr, 4,
2773 gdbarch_byte_order (gdbarch),
2777 #define XTENSA_MAX_WINDOW_INTERRUPT_HANDLER_LEN 200
2783 xtNoExceptionHandler
2784 } xtensa_exception_handler_t;
2786 /* Execute instruction stream from current PC until hitting RFWU or RFWO.
2787 Return type of Xtensa Window Interrupt Handler on success. */
2788 static xtensa_exception_handler_t
2789 execute_code (struct gdbarch *gdbarch, CORE_ADDR current_pc, CORE_ADDR wb)
2792 xtensa_insnbuf ins, slot;
2793 gdb_byte ibuf[XTENSA_ISA_BSZ];
2794 CORE_ADDR ia, bt, ba;
2796 int ilen, islots, is;
2800 void (*func) (struct gdbarch *, int, int, int, CORE_ADDR);
2802 uint32_t at, as, offset;
2804 /* WindowUnderflow12 = true, when inside _WindowUnderflow12. */
2805 int WindowUnderflow12 = (current_pc & 0x1ff) >= 0x140;
2807 isa = xtensa_default_isa;
2808 gdb_assert (XTENSA_ISA_BSZ >= xtensa_isa_maxlength (isa));
2809 ins = xtensa_insnbuf_alloc (isa);
2810 slot = xtensa_insnbuf_alloc (isa);
2819 while (insn_num++ < XTENSA_MAX_WINDOW_INTERRUPT_HANDLER_LEN)
2821 if (ia + xtensa_isa_maxlength (isa) > bt)
2824 bt = (ba + XTENSA_ISA_BSZ);
2825 if (target_read_memory (ba, ibuf, bt - ba) != 0)
2826 return xtNoExceptionHandler;
2828 xtensa_insnbuf_from_chars (isa, ins, &ibuf[ia-ba], 0);
2829 ifmt = xtensa_format_decode (isa, ins);
2830 if (ifmt == XTENSA_UNDEFINED)
2831 return xtNoExceptionHandler;
2832 ilen = xtensa_format_length (isa, ifmt);
2833 if (ilen == XTENSA_UNDEFINED)
2834 return xtNoExceptionHandler;
2835 islots = xtensa_format_num_slots (isa, ifmt);
2836 if (islots == XTENSA_UNDEFINED)
2837 return xtNoExceptionHandler;
2838 for (is = 0; is < islots; ++is)
2840 if (xtensa_format_get_slot (isa, ifmt, is, ins, slot))
2841 return xtNoExceptionHandler;
2842 opc = xtensa_opcode_decode (isa, ifmt, is, slot);
2843 if (opc == XTENSA_UNDEFINED)
2844 return xtNoExceptionHandler;
2845 switch (call0_classify_opcode (isa, opc))
2851 /* We expect none of them here. */
2852 return xtNoExceptionHandler;
2854 func = execute_l32e;
2857 func = execute_s32e;
2859 case c0opc_rfwo: /* RFWO. */
2860 /* Here, we return from WindowOverflow handler and,
2861 if we stopped at the very beginning, which means
2862 A0 was saved, we have to restore it now. */
2865 int arreg = arreg_number (gdbarch,
2866 gdbarch_tdep (gdbarch)->a0_base,
2868 xtensa_write_register (arreg, a0_saved);
2870 return xtWindowOverflow;
2871 case c0opc_rfwu: /* RFWU. */
2872 /* Here, we return from WindowUnderflow handler.
2873 Let's see if either A7 or A11 has to be restored. */
2874 if (WindowUnderflow12)
2878 int arreg = arreg_number (gdbarch,
2879 gdbarch_tdep (gdbarch)->a0_base + 11,
2881 xtensa_write_register (arreg, a11_saved);
2884 else if (a7_was_saved)
2886 int arreg = arreg_number (gdbarch,
2887 gdbarch_tdep (gdbarch)->a0_base + 7,
2889 xtensa_write_register (arreg, a7_saved);
2891 return xtWindowUnderflow;
2892 default: /* Simply skip this insns. */
2896 /* Decode arguments for L32E / S32E and simulate their execution. */
2897 if ( xtensa_opcode_num_operands (isa, opc) != 3 )
2898 return xtNoExceptionHandler;
2899 if (xtensa_operand_get_field (isa, opc, 0, ifmt, is, slot, &at))
2900 return xtNoExceptionHandler;
2901 if (xtensa_operand_decode (isa, opc, 0, &at))
2902 return xtNoExceptionHandler;
2903 if (xtensa_operand_get_field (isa, opc, 1, ifmt, is, slot, &as))
2904 return xtNoExceptionHandler;
2905 if (xtensa_operand_decode (isa, opc, 1, &as))
2906 return xtNoExceptionHandler;
2907 if (xtensa_operand_get_field (isa, opc, 2, ifmt, is, slot, &offset))
2908 return xtNoExceptionHandler;
2909 if (xtensa_operand_decode (isa, opc, 2, &offset))
2910 return xtNoExceptionHandler;
2912 (*func) (gdbarch, at, as, offset, wb);
2917 return xtNoExceptionHandler;
2920 /* Handle Window Overflow / Underflow exception frames. */
2923 xtensa_window_interrupt_frame_cache (struct frame_info *this_frame,
2924 xtensa_frame_cache_t *cache,
2927 struct gdbarch *gdbarch = get_frame_arch (this_frame);
2928 CORE_ADDR ps, wb, ws, ra;
2929 int epc1_regnum, i, regnum;
2930 xtensa_exception_handler_t eh_type;
2932 /* Read PS, WB, and WS from the hardware. Note that PS register
2933 must be present, if Windowed ABI is supported. */
2934 ps = xtensa_read_register (gdbarch_ps_regnum (gdbarch));
2935 wb = xtensa_read_register (gdbarch_tdep (gdbarch)->wb_regnum);
2936 ws = xtensa_read_register (gdbarch_tdep (gdbarch)->ws_regnum);
2938 /* Execute all the remaining instructions from Window Interrupt Handler
2939 by simulating them on the remote protocol level. On return, set the
2940 type of Xtensa Window Interrupt Handler, or report an error. */
2941 eh_type = execute_code (gdbarch, pc, wb);
2942 if (eh_type == xtNoExceptionHandler)
2944 Unable to decode Xtensa Window Interrupt Handler's code."));
2946 cache->ps = ps ^ PS_EXC; /* Clear the exception bit in PS. */
2947 cache->call0 = 0; /* It's Windowed ABI. */
2949 /* All registers for the cached frame will be alive. */
2950 for (i = 0; i < XTENSA_NUM_SAVED_AREGS; i++)
2951 cache->wd.aregs[i] = -1;
2953 if (eh_type == xtWindowOverflow)
2954 cache->wd.ws = ws ^ (1 << wb);
2955 else /* eh_type == xtWindowUnderflow. */
2956 cache->wd.ws = ws | (1 << wb);
2958 cache->wd.wb = (ps & 0xf00) >> 8; /* Set WB to OWB. */
2959 regnum = arreg_number (gdbarch, gdbarch_tdep (gdbarch)->a0_base,
2961 ra = xtensa_read_register (regnum);
2962 cache->wd.callsize = WINSIZE (ra);
2963 cache->prev_sp = xtensa_read_register (regnum + 1);
2964 /* Set regnum to a frame pointer of the frame being cached. */
2965 regnum = xtensa_scan_prologue (gdbarch, pc);
2966 regnum = arreg_number (gdbarch,
2967 gdbarch_tdep (gdbarch)->a0_base + regnum,
2969 cache->base = get_frame_register_unsigned (this_frame, regnum);
2971 /* Read PC of interrupted function from EPC1 register. */
2972 epc1_regnum = xtensa_find_register_by_name (gdbarch,"epc1");
2973 if (epc1_regnum < 0)
2974 error(_("Unable to read Xtensa register EPC1"));
2975 cache->ra = xtensa_read_register (epc1_regnum);
2976 cache->pc = get_frame_func (this_frame);
2980 /* Skip function prologue.
2982 Return the pc of the first instruction after prologue. GDB calls this to
2983 find the address of the first line of the function or (if there is no line
2984 number information) to skip the prologue for planting breakpoints on
2985 function entries. Use debug info (if present) or prologue analysis to skip
2986 the prologue to achieve reliable debugging behavior. For windowed ABI,
2987 only the 'entry' instruction is skipped. It is not strictly necessary to
2988 skip the prologue (Call0) or 'entry' (Windowed) because xt-gdb knows how to
2989 backtrace at any point in the prologue, however certain potential hazards
2990 are avoided and a more "normal" debugging experience is ensured by
2991 skipping the prologue (can be disabled by defining DONT_SKIP_PROLOG).
2992 For example, if we don't skip the prologue:
2993 - Some args may not yet have been saved to the stack where the debug
2994 info expects to find them (true anyway when only 'entry' is skipped);
2995 - Software breakpoints ('break' instrs) may not have been unplanted
2996 when the prologue analysis is done on initializing the frame cache,
2997 and breaks in the prologue will throw off the analysis.
2999 If we have debug info ( line-number info, in particular ) we simply skip
3000 the code associated with the first function line effectively skipping
3001 the prologue code. It works even in cases like
3004 { int local_var = 1;
3008 because, for this source code, both Xtensa compilers will generate two
3009 separate entries ( with the same line number ) in dwarf line-number
3010 section to make sure there is a boundary between the prologue code and
3011 the rest of the function.
3013 If there is no debug info, we need to analyze the code. */
3015 /* #define DONT_SKIP_PROLOGUE */
3018 xtensa_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
3020 struct symtab_and_line prologue_sal;
3023 DEBUGTRACE ("xtensa_skip_prologue (start_pc = 0x%08x)\n", (int) start_pc);
3025 #if DONT_SKIP_PROLOGUE
3029 /* Try to find first body line from debug info. */
3031 prologue_sal = find_pc_line (start_pc, 0);
3032 if (prologue_sal.line != 0) /* Found debug info. */
3034 /* In Call0, it is possible to have a function with only one instruction
3035 ('ret') resulting from a one-line optimized function that does nothing.
3036 In that case, prologue_sal.end may actually point to the start of the
3037 next function in the text section, causing a breakpoint to be set at
3038 the wrong place. Check, if the end address is within a different
3039 function, and if so return the start PC. We know we have symbol
3044 if ((gdbarch_tdep (gdbarch)->call_abi == CallAbiCall0Only)
3045 && call0_ret (start_pc, prologue_sal.end))
3048 find_pc_partial_function (prologue_sal.end, NULL, &end_func, NULL);
3049 if (end_func != start_pc)
3052 return prologue_sal.end;
3055 /* No debug line info. Analyze prologue for Call0 or simply skip ENTRY. */
3056 body_pc = call0_analyze_prologue (gdbarch, start_pc, 0, 0,
3057 xtensa_alloc_frame_cache (0));
3058 return body_pc != 0 ? body_pc : start_pc;
3061 /* Verify the current configuration. */
3063 xtensa_verify_config (struct gdbarch *gdbarch)
3065 struct ui_file *log;
3066 struct cleanup *cleanups;
3067 struct gdbarch_tdep *tdep;
3071 tdep = gdbarch_tdep (gdbarch);
3072 log = mem_fileopen ();
3073 cleanups = make_cleanup_ui_file_delete (log);
3075 /* Verify that we got a reasonable number of AREGS. */
3076 if ((tdep->num_aregs & -tdep->num_aregs) != tdep->num_aregs)
3077 fprintf_unfiltered (log, _("\
3078 \n\tnum_aregs: Number of AR registers (%d) is not a power of two!"),
3081 /* Verify that certain registers exist. */
3083 if (tdep->pc_regnum == -1)
3084 fprintf_unfiltered (log, _("\n\tpc_regnum: No PC register"));
3085 if (tdep->isa_use_exceptions && tdep->ps_regnum == -1)
3086 fprintf_unfiltered (log, _("\n\tps_regnum: No PS register"));
3088 if (tdep->isa_use_windowed_registers)
3090 if (tdep->wb_regnum == -1)
3091 fprintf_unfiltered (log, _("\n\twb_regnum: No WB register"));
3092 if (tdep->ws_regnum == -1)
3093 fprintf_unfiltered (log, _("\n\tws_regnum: No WS register"));
3094 if (tdep->ar_base == -1)
3095 fprintf_unfiltered (log, _("\n\tar_base: No AR registers"));
3098 if (tdep->a0_base == -1)
3099 fprintf_unfiltered (log, _("\n\ta0_base: No Ax registers"));
3101 buf = ui_file_xstrdup (log, &length);
3102 make_cleanup (xfree, buf);
3104 internal_error (__FILE__, __LINE__,
3105 _("the following are invalid: %s"), buf);
3106 do_cleanups (cleanups);
3110 /* Derive specific register numbers from the array of registers. */
3113 xtensa_derive_tdep (struct gdbarch_tdep *tdep)
3115 xtensa_register_t* rmap;
3116 int n, max_size = 4;
3119 tdep->num_nopriv_regs = 0;
3121 /* Special registers 0..255 (core). */
3122 #define XTENSA_DBREGN_SREG(n) (0x0200+(n))
3124 for (rmap = tdep->regmap, n = 0; rmap->target_number != -1; n++, rmap++)
3126 if (rmap->target_number == 0x0020)
3127 tdep->pc_regnum = n;
3128 else if (rmap->target_number == 0x0100)
3130 else if (rmap->target_number == 0x0000)
3132 else if (rmap->target_number == XTENSA_DBREGN_SREG(72))
3133 tdep->wb_regnum = n;
3134 else if (rmap->target_number == XTENSA_DBREGN_SREG(73))
3135 tdep->ws_regnum = n;
3136 else if (rmap->target_number == XTENSA_DBREGN_SREG(233))
3137 tdep->debugcause_regnum = n;
3138 else if (rmap->target_number == XTENSA_DBREGN_SREG(232))
3139 tdep->exccause_regnum = n;
3140 else if (rmap->target_number == XTENSA_DBREGN_SREG(238))
3141 tdep->excvaddr_regnum = n;
3142 else if (rmap->target_number == XTENSA_DBREGN_SREG(0))
3143 tdep->lbeg_regnum = n;
3144 else if (rmap->target_number == XTENSA_DBREGN_SREG(1))
3145 tdep->lend_regnum = n;
3146 else if (rmap->target_number == XTENSA_DBREGN_SREG(2))
3147 tdep->lcount_regnum = n;
3148 else if (rmap->target_number == XTENSA_DBREGN_SREG(3))
3149 tdep->sar_regnum = n;
3150 else if (rmap->target_number == XTENSA_DBREGN_SREG(5))
3151 tdep->litbase_regnum = n;
3152 else if (rmap->target_number == XTENSA_DBREGN_SREG(230))
3153 tdep->ps_regnum = n;
3155 else if (rmap->target_number == XTENSA_DBREGN_SREG(226))
3156 tdep->interrupt_regnum = n;
3157 else if (rmap->target_number == XTENSA_DBREGN_SREG(227))
3158 tdep->interrupt2_regnum = n;
3159 else if (rmap->target_number == XTENSA_DBREGN_SREG(224))
3160 tdep->cpenable_regnum = n;
3163 if (rmap->byte_size > max_size)
3164 max_size = rmap->byte_size;
3165 if (rmap->mask != 0 && tdep->num_regs == 0)
3167 /* Find out out how to deal with priveleged registers.
3169 if ((rmap->flags & XTENSA_REGISTER_FLAGS_PRIVILEGED) != 0
3170 && tdep->num_nopriv_regs == 0)
3171 tdep->num_nopriv_regs = n;
3173 if ((rmap->flags & XTENSA_REGISTER_FLAGS_PRIVILEGED) != 0
3174 && tdep->num_regs == 0)
3178 /* Number of pseudo registers. */
3179 tdep->num_pseudo_regs = n - tdep->num_regs;
3181 /* Empirically determined maximum sizes. */
3182 tdep->max_register_raw_size = max_size;
3183 tdep->max_register_virtual_size = max_size;
3186 /* Module "constructor" function. */
3188 extern struct gdbarch_tdep xtensa_tdep;
3190 static struct gdbarch *
3191 xtensa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
3193 struct gdbarch_tdep *tdep;
3194 struct gdbarch *gdbarch;
3195 struct xtensa_abi_handler *abi_handler;
3197 DEBUGTRACE ("gdbarch_init()\n");
3199 /* We have to set the byte order before we call gdbarch_alloc. */
3200 info.byte_order = XCHAL_HAVE_BE ? BFD_ENDIAN_BIG : BFD_ENDIAN_LITTLE;
3202 tdep = &xtensa_tdep;
3203 gdbarch = gdbarch_alloc (&info, tdep);
3204 xtensa_derive_tdep (tdep);
3206 /* Verify our configuration. */
3207 xtensa_verify_config (gdbarch);
3208 xtensa_session_once_reported = 0;
3210 /* Pseudo-Register read/write. */
3211 set_gdbarch_pseudo_register_read (gdbarch, xtensa_pseudo_register_read);
3212 set_gdbarch_pseudo_register_write (gdbarch, xtensa_pseudo_register_write);
3214 /* Set target information. */
3215 set_gdbarch_num_regs (gdbarch, tdep->num_regs);
3216 set_gdbarch_num_pseudo_regs (gdbarch, tdep->num_pseudo_regs);
3217 set_gdbarch_sp_regnum (gdbarch, tdep->a0_base + 1);
3218 set_gdbarch_pc_regnum (gdbarch, tdep->pc_regnum);
3219 set_gdbarch_ps_regnum (gdbarch, tdep->ps_regnum);
3221 /* Renumber registers for known formats (stabs and dwarf2). */
3222 set_gdbarch_stab_reg_to_regnum (gdbarch, xtensa_reg_to_regnum);
3223 set_gdbarch_dwarf2_reg_to_regnum (gdbarch, xtensa_reg_to_regnum);
3225 /* We provide our own function to get register information. */
3226 set_gdbarch_register_name (gdbarch, xtensa_register_name);
3227 set_gdbarch_register_type (gdbarch, xtensa_register_type);
3229 /* To call functions from GDB using dummy frame. */
3230 set_gdbarch_push_dummy_call (gdbarch, xtensa_push_dummy_call);
3232 set_gdbarch_believe_pcc_promotion (gdbarch, 1);
3234 set_gdbarch_return_value (gdbarch, xtensa_return_value);
3236 /* Advance PC across any prologue instructions to reach "real" code. */
3237 set_gdbarch_skip_prologue (gdbarch, xtensa_skip_prologue);
3239 /* Stack grows downward. */
3240 set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
3242 /* Set breakpoints. */
3243 set_gdbarch_breakpoint_from_pc (gdbarch, xtensa_breakpoint_from_pc);
3245 /* After breakpoint instruction or illegal instruction, pc still
3246 points at break instruction, so don't decrement. */
3247 set_gdbarch_decr_pc_after_break (gdbarch, 0);
3249 /* We don't skip args. */
3250 set_gdbarch_frame_args_skip (gdbarch, 0);
3252 set_gdbarch_unwind_pc (gdbarch, xtensa_unwind_pc);
3254 set_gdbarch_frame_align (gdbarch, xtensa_frame_align);
3256 set_gdbarch_dummy_id (gdbarch, xtensa_dummy_id);
3258 /* Frame handling. */
3259 frame_base_set_default (gdbarch, &xtensa_frame_base);
3260 frame_unwind_append_unwinder (gdbarch, &xtensa_unwind);
3261 dwarf2_append_unwinders (gdbarch);
3263 set_gdbarch_print_insn (gdbarch, print_insn_xtensa);
3265 set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
3267 xtensa_add_reggroups (gdbarch);
3268 set_gdbarch_register_reggroup_p (gdbarch, xtensa_register_reggroup_p);
3270 set_gdbarch_iterate_over_regset_sections
3271 (gdbarch, xtensa_iterate_over_regset_sections);
3273 set_solib_svr4_fetch_link_map_offsets
3274 (gdbarch, svr4_ilp32_fetch_link_map_offsets);
3276 /* Hook in the ABI-specific overrides, if they have been registered. */
3277 gdbarch_init_osabi (info, gdbarch);
3283 xtensa_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
3285 error (_("xtensa_dump_tdep(): not implemented"));
3288 /* Provide a prototype to silence -Wmissing-prototypes. */
3289 extern initialize_file_ftype _initialize_xtensa_tdep;
3292 _initialize_xtensa_tdep (void)
3294 struct cmd_list_element *c;
3296 gdbarch_register (bfd_arch_xtensa, xtensa_gdbarch_init, xtensa_dump_tdep);
3297 xtensa_init_reggroups ();
3299 add_setshow_zuinteger_cmd ("xtensa",
3301 &xtensa_debug_level,
3302 _("Set Xtensa debugging."),
3303 _("Show Xtensa debugging."), _("\
3304 When non-zero, Xtensa-specific debugging is enabled. \
3305 Can be 1, 2, 3, or 4 indicating the level of debugging."),
3308 &setdebuglist, &showdebuglist);