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