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