nios2-tdep.c revision 1.6
1/* Target-machine dependent code for Nios II, for GDB.
2   Copyright (C) 2012-2016 Free Software Foundation, Inc.
3   Contributed by Peter Brookes (pbrookes@altera.com)
4   and Andrew Draper (adraper@altera.com).
5   Contributed by Mentor Graphics, Inc.
6
7   This file is part of GDB.
8
9   This program is free software; you can redistribute it and/or modify
10   it under the terms of the GNU General Public License as published by
11   the Free Software Foundation; either version 3 of the License, or
12   (at your option) any later version.
13
14   This program is distributed in the hope that it will be useful,
15   but WITHOUT ANY WARRANTY; without even the implied warranty of
16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   GNU General Public License for more details.
18
19   You should have received a copy of the GNU General Public License
20   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22#include "defs.h"
23#include "frame.h"
24#include "frame-unwind.h"
25#include "frame-base.h"
26#include "trad-frame.h"
27#include "dwarf2-frame.h"
28#include "symtab.h"
29#include "inferior.h"
30#include "gdbtypes.h"
31#include "gdbcore.h"
32#include "gdbcmd.h"
33#include "osabi.h"
34#include "target.h"
35#include "dis-asm.h"
36#include "regcache.h"
37#include "value.h"
38#include "symfile.h"
39#include "arch-utils.h"
40#include "floatformat.h"
41#include "infcall.h"
42#include "regset.h"
43#include "target-descriptions.h"
44
45/* To get entry_point_address.  */
46#include "objfiles.h"
47
48/* Nios II specific header.  */
49#include "nios2-tdep.h"
50
51#include "features/nios2.c"
52
53/* Control debugging information emitted in this file.  */
54
55static int nios2_debug = 0;
56
57/* The following structures are used in the cache for prologue
58   analysis; see the reg_value and reg_saved tables in
59   struct nios2_unwind_cache, respectively.  */
60
61/* struct reg_value is used to record that a register has the same value
62   as reg at the given offset from the start of a function.  */
63
64struct reg_value
65{
66  int reg;
67  unsigned int offset;
68};
69
70/* struct reg_saved is used to record that a register value has been saved at
71   basereg + addr, for basereg >= 0.  If basereg < 0, that indicates
72   that the register is not known to have been saved.  Note that when
73   basereg == NIOS2_Z_REGNUM (that is, r0, which holds value 0),
74   addr is an absolute address.  */
75
76struct reg_saved
77{
78  int basereg;
79  CORE_ADDR addr;
80};
81
82struct nios2_unwind_cache
83{
84  /* The frame's base, optionally used by the high-level debug info.  */
85  CORE_ADDR base;
86
87  /* The previous frame's inner most stack address.  Used as this
88     frame ID's stack_addr.  */
89  CORE_ADDR cfa;
90
91  /* The address of the first instruction in this function.  */
92  CORE_ADDR pc;
93
94  /* Which register holds the return address for the frame.  */
95  int return_regnum;
96
97  /* Table indicating what changes have been made to each register.  */
98  struct reg_value reg_value[NIOS2_NUM_REGS];
99
100  /* Table indicating where each register has been saved.  */
101  struct reg_saved reg_saved[NIOS2_NUM_REGS];
102};
103
104
105/* This array is a mapping from Dwarf-2 register numbering to GDB's.  */
106
107static int nios2_dwarf2gdb_regno_map[] =
108{
109  0, 1, 2, 3,
110  4, 5, 6, 7,
111  8, 9, 10, 11,
112  12, 13, 14, 15,
113  16, 17, 18, 19,
114  20, 21, 22, 23,
115  24, 25,
116  NIOS2_GP_REGNUM,        /* 26 */
117  NIOS2_SP_REGNUM,        /* 27 */
118  NIOS2_FP_REGNUM,        /* 28 */
119  NIOS2_EA_REGNUM,        /* 29 */
120  NIOS2_BA_REGNUM,        /* 30 */
121  NIOS2_RA_REGNUM,        /* 31 */
122  NIOS2_PC_REGNUM,        /* 32 */
123  NIOS2_STATUS_REGNUM,    /* 33 */
124  NIOS2_ESTATUS_REGNUM,   /* 34 */
125  NIOS2_BSTATUS_REGNUM,   /* 35 */
126  NIOS2_IENABLE_REGNUM,   /* 36 */
127  NIOS2_IPENDING_REGNUM,  /* 37 */
128  NIOS2_CPUID_REGNUM,     /* 38 */
129  39, /* CTL6 */          /* 39 */
130  NIOS2_EXCEPTION_REGNUM, /* 40 */
131  NIOS2_PTEADDR_REGNUM,   /* 41 */
132  NIOS2_TLBACC_REGNUM,    /* 42 */
133  NIOS2_TLBMISC_REGNUM,   /* 43 */
134  NIOS2_ECCINJ_REGNUM,    /* 44 */
135  NIOS2_BADADDR_REGNUM,   /* 45 */
136  NIOS2_CONFIG_REGNUM,    /* 46 */
137  NIOS2_MPUBASE_REGNUM,   /* 47 */
138  NIOS2_MPUACC_REGNUM     /* 48 */
139};
140
141gdb_static_assert (ARRAY_SIZE (nios2_dwarf2gdb_regno_map) == NIOS2_NUM_REGS);
142
143/* Implement the dwarf2_reg_to_regnum gdbarch method.  */
144
145static int
146nios2_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int dw_reg)
147{
148  if (dw_reg < 0 || dw_reg >= NIOS2_NUM_REGS)
149    return -1;
150
151  return nios2_dwarf2gdb_regno_map[dw_reg];
152}
153
154/* Canonical names for the 49 registers.  */
155
156static const char *const nios2_reg_names[NIOS2_NUM_REGS] =
157{
158  "zero", "at", "r2", "r3", "r4", "r5", "r6", "r7",
159  "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
160  "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
161  "et", "bt", "gp", "sp", "fp", "ea", "sstatus", "ra",
162  "pc",
163  "status", "estatus", "bstatus", "ienable",
164  "ipending", "cpuid", "ctl6", "exception",
165  "pteaddr", "tlbacc", "tlbmisc", "eccinj",
166  "badaddr", "config", "mpubase", "mpuacc"
167};
168
169/* Implement the register_name gdbarch method.  */
170
171static const char *
172nios2_register_name (struct gdbarch *gdbarch, int regno)
173{
174  /* Use mnemonic aliases for GPRs.  */
175  if (regno >= 0 && regno < NIOS2_NUM_REGS)
176    return nios2_reg_names[regno];
177  else
178    return tdesc_register_name (gdbarch, regno);
179}
180
181/* Implement the register_type gdbarch method.  */
182
183static struct type *
184nios2_register_type (struct gdbarch *gdbarch, int regno)
185{
186  /* If the XML description has register information, use that to
187     determine the register type.  */
188  if (tdesc_has_registers (gdbarch_target_desc (gdbarch)))
189    return tdesc_register_type (gdbarch, regno);
190
191  if (regno == NIOS2_PC_REGNUM)
192    return builtin_type (gdbarch)->builtin_func_ptr;
193  else if (regno == NIOS2_SP_REGNUM)
194    return builtin_type (gdbarch)->builtin_data_ptr;
195  else
196    return builtin_type (gdbarch)->builtin_uint32;
197}
198
199/* Given a return value in REGCACHE with a type VALTYPE,
200   extract and copy its value into VALBUF.  */
201
202static void
203nios2_extract_return_value (struct gdbarch *gdbarch, struct type *valtype,
204			    struct regcache *regcache, gdb_byte *valbuf)
205{
206  int len = TYPE_LENGTH (valtype);
207
208  /* Return values of up to 8 bytes are returned in $r2 $r3.  */
209  if (len <= register_size (gdbarch, NIOS2_R2_REGNUM))
210    regcache_cooked_read (regcache, NIOS2_R2_REGNUM, valbuf);
211  else
212    {
213      gdb_assert (len <= (register_size (gdbarch, NIOS2_R2_REGNUM)
214			  + register_size (gdbarch, NIOS2_R3_REGNUM)));
215      regcache_cooked_read (regcache, NIOS2_R2_REGNUM, valbuf);
216      regcache_cooked_read (regcache, NIOS2_R3_REGNUM, valbuf + 4);
217    }
218}
219
220/* Write into appropriate registers a function return value
221   of type TYPE, given in virtual format.  */
222
223static void
224nios2_store_return_value (struct gdbarch *gdbarch, struct type *valtype,
225			  struct regcache *regcache, const gdb_byte *valbuf)
226{
227  int len = TYPE_LENGTH (valtype);
228
229  /* Return values of up to 8 bytes are returned in $r2 $r3.  */
230  if (len <= register_size (gdbarch, NIOS2_R2_REGNUM))
231    regcache_cooked_write (regcache, NIOS2_R2_REGNUM, valbuf);
232  else
233    {
234      gdb_assert (len <= (register_size (gdbarch, NIOS2_R2_REGNUM)
235			  + register_size (gdbarch, NIOS2_R3_REGNUM)));
236      regcache_cooked_write (regcache, NIOS2_R2_REGNUM, valbuf);
237      regcache_cooked_write (regcache, NIOS2_R3_REGNUM, valbuf + 4);
238    }
239}
240
241
242/* Set up the default values of the registers.  */
243
244static void
245nios2_setup_default (struct nios2_unwind_cache *cache)
246{
247  int i;
248
249  for (i = 0; i < NIOS2_NUM_REGS; i++)
250  {
251    /* All registers start off holding their previous values.  */
252    cache->reg_value[i].reg    = i;
253    cache->reg_value[i].offset = 0;
254
255    /* All registers start off not saved.  */
256    cache->reg_saved[i].basereg = -1;
257    cache->reg_saved[i].addr    = 0;
258  }
259}
260
261/* Initialize the unwind cache.  */
262
263static void
264nios2_init_cache (struct nios2_unwind_cache *cache, CORE_ADDR pc)
265{
266  cache->base = 0;
267  cache->cfa = 0;
268  cache->pc = pc;
269  cache->return_regnum = NIOS2_RA_REGNUM;
270  nios2_setup_default (cache);
271}
272
273/* Read and identify an instruction at PC.  If INSNP is non-null,
274   store the instruction word into that location.  Return the opcode
275   pointer or NULL if the memory couldn't be read or disassembled.  */
276
277static const struct nios2_opcode *
278nios2_fetch_insn (struct gdbarch *gdbarch, CORE_ADDR pc,
279		  unsigned int *insnp)
280{
281  LONGEST memword;
282  unsigned long mach = gdbarch_bfd_arch_info (gdbarch)->mach;
283  unsigned int insn;
284
285  if (mach == bfd_mach_nios2r2)
286    {
287      if (!safe_read_memory_integer (pc, NIOS2_OPCODE_SIZE,
288				     BFD_ENDIAN_LITTLE, &memword)
289	  && !safe_read_memory_integer (pc, NIOS2_CDX_OPCODE_SIZE,
290					BFD_ENDIAN_LITTLE, &memword))
291	return NULL;
292    }
293  else if (!safe_read_memory_integer (pc, NIOS2_OPCODE_SIZE,
294				      gdbarch_byte_order (gdbarch), &memword))
295    return NULL;
296
297  insn = (unsigned int) memword;
298  if (insnp)
299    *insnp = insn;
300  return nios2_find_opcode_hash (insn, mach);
301}
302
303
304/* Match and disassemble an ADD-type instruction, with 3 register operands.
305   Returns true on success, and fills in the operand pointers.  */
306
307static int
308nios2_match_add (uint32_t insn, const struct nios2_opcode *op,
309		 unsigned long mach, int *ra, int *rb, int *rc)
310{
311  int is_r2 = (mach == bfd_mach_nios2r2);
312
313  if (!is_r2 && (op->match == MATCH_R1_ADD || op->match == MATCH_R1_MOV))
314    {
315      *ra = GET_IW_R_A (insn);
316      *rb = GET_IW_R_B (insn);
317      *rc = GET_IW_R_C (insn);
318      return 1;
319    }
320  else if (!is_r2)
321    return 0;
322  else if (op->match == MATCH_R2_ADD || op->match == MATCH_R2_MOV)
323    {
324      *ra = GET_IW_F3X6L5_A (insn);
325      *rb = GET_IW_F3X6L5_B (insn);
326      *rc = GET_IW_F3X6L5_C (insn);
327      return 1;
328    }
329  else if (op->match == MATCH_R2_ADD_N)
330    {
331      *ra = nios2_r2_reg3_mappings[GET_IW_T3X1_A3 (insn)];
332      *rb = nios2_r2_reg3_mappings[GET_IW_T3X1_B3 (insn)];
333      *rc = nios2_r2_reg3_mappings[GET_IW_T3X1_C3 (insn)];
334      return 1;
335    }
336  else if (op->match == MATCH_R2_MOV_N)
337    {
338      *ra = GET_IW_F2_A (insn);
339      *rb = 0;
340      *rc = GET_IW_F2_B (insn);
341      return 1;
342    }
343  return 0;
344}
345
346/* Match and disassemble a SUB-type instruction, with 3 register operands.
347   Returns true on success, and fills in the operand pointers.  */
348
349static int
350nios2_match_sub (uint32_t insn, const struct nios2_opcode *op,
351		 unsigned long mach, int *ra, int *rb, int *rc)
352{
353  int is_r2 = (mach == bfd_mach_nios2r2);
354
355  if (!is_r2 && op->match == MATCH_R1_SUB)
356    {
357      *ra = GET_IW_R_A (insn);
358      *rb = GET_IW_R_B (insn);
359      *rc = GET_IW_R_C (insn);
360      return 1;
361    }
362  else if (!is_r2)
363    return 0;
364  else if (op->match == MATCH_R2_SUB)
365    {
366      *ra = GET_IW_F3X6L5_A (insn);
367      *rb = GET_IW_F3X6L5_B (insn);
368      *rc = GET_IW_F3X6L5_C (insn);
369      return 1;
370    }
371  else if (op->match == MATCH_R2_SUB_N)
372    {
373      *ra = nios2_r2_reg3_mappings[GET_IW_T3X1_A3 (insn)];
374      *rb = nios2_r2_reg3_mappings[GET_IW_T3X1_B3 (insn)];
375      *rc = nios2_r2_reg3_mappings[GET_IW_T3X1_C3 (insn)];
376      return 1;
377    }
378  return 0;
379}
380
381/* Match and disassemble an ADDI-type instruction, with 2 register operands
382   and one immediate operand.
383   Returns true on success, and fills in the operand pointers.  */
384
385static int
386nios2_match_addi (uint32_t insn, const struct nios2_opcode *op,
387		  unsigned long mach, int *ra, int *rb, int *imm)
388{
389  int is_r2 = (mach == bfd_mach_nios2r2);
390
391  if (!is_r2 && op->match == MATCH_R1_ADDI)
392    {
393      *ra = GET_IW_I_A (insn);
394      *rb = GET_IW_I_B (insn);
395      *imm = (signed) (GET_IW_I_IMM16 (insn) << 16) >> 16;
396      return 1;
397    }
398  else if (!is_r2)
399    return 0;
400  else if (op->match == MATCH_R2_ADDI)
401    {
402      *ra = GET_IW_F2I16_A (insn);
403      *rb = GET_IW_F2I16_B (insn);
404      *imm = (signed) (GET_IW_F2I16_IMM16 (insn) << 16) >> 16;
405      return 1;
406    }
407  else if (op->match == MATCH_R2_ADDI_N || op->match == MATCH_R2_SUBI_N)
408    {
409      *ra = nios2_r2_reg3_mappings[GET_IW_T2X1I3_A3 (insn)];
410      *rb = nios2_r2_reg3_mappings[GET_IW_T2X1I3_B3 (insn)];
411      *imm = nios2_r2_asi_n_mappings[GET_IW_T2X1I3_IMM3 (insn)];
412      if (op->match == MATCH_R2_SUBI_N)
413	*imm = - (*imm);
414      return 1;
415    }
416  else if (op->match == MATCH_R2_SPADDI_N)
417    {
418      *ra = nios2_r2_reg3_mappings[GET_IW_T1I7_A3 (insn)];
419      *rb = NIOS2_SP_REGNUM;
420      *imm = GET_IW_T1I7_IMM7 (insn) << 2;
421      return 1;
422    }
423  else if (op->match == MATCH_R2_SPINCI_N || op->match == MATCH_R2_SPDECI_N)
424    {
425      *ra = NIOS2_SP_REGNUM;
426      *rb = NIOS2_SP_REGNUM;
427      *imm = GET_IW_X1I7_IMM7 (insn) << 2;
428      if (op->match == MATCH_R2_SPDECI_N)
429	*imm = - (*imm);
430      return 1;
431    }
432  return 0;
433}
434
435/* Match and disassemble an ORHI-type instruction, with 2 register operands
436   and one unsigned immediate operand.
437   Returns true on success, and fills in the operand pointers.  */
438
439static int
440nios2_match_orhi (uint32_t insn, const struct nios2_opcode *op,
441		  unsigned long mach, int *ra, int *rb, unsigned int *uimm)
442{
443  int is_r2 = (mach == bfd_mach_nios2r2);
444
445  if (!is_r2 && op->match == MATCH_R1_ORHI)
446    {
447      *ra = GET_IW_I_A (insn);
448      *rb = GET_IW_I_B (insn);
449      *uimm = GET_IW_I_IMM16 (insn);
450      return 1;
451    }
452  else if (!is_r2)
453    return 0;
454  else if (op->match == MATCH_R2_ORHI)
455    {
456      *ra = GET_IW_F2I16_A (insn);
457      *rb = GET_IW_F2I16_B (insn);
458      *uimm = GET_IW_F2I16_IMM16 (insn);
459      return 1;
460    }
461  return 0;
462}
463
464/* Match and disassemble a STW-type instruction, with 2 register operands
465   and one immediate operand.
466   Returns true on success, and fills in the operand pointers.  */
467
468static int
469nios2_match_stw (uint32_t insn, const struct nios2_opcode *op,
470		 unsigned long mach, int *ra, int *rb, int *imm)
471{
472  int is_r2 = (mach == bfd_mach_nios2r2);
473
474  if (!is_r2 && (op->match == MATCH_R1_STW || op->match == MATCH_R1_STWIO))
475    {
476      *ra = GET_IW_I_A (insn);
477      *rb = GET_IW_I_B (insn);
478      *imm = (signed) (GET_IW_I_IMM16 (insn) << 16) >> 16;
479      return 1;
480    }
481  else if (!is_r2)
482    return 0;
483  else if (op->match == MATCH_R2_STW)
484    {
485      *ra = GET_IW_F2I16_A (insn);
486      *rb = GET_IW_F2I16_B (insn);
487      *imm = (signed) (GET_IW_F2I16_IMM16 (insn) << 16) >> 16;
488      return 1;
489    }
490  else if (op->match == MATCH_R2_STWIO)
491    {
492      *ra = GET_IW_F2X4I12_A (insn);
493      *rb = GET_IW_F2X4I12_B (insn);
494      *imm = (signed) (GET_IW_F2X4I12_IMM12 (insn) << 20) >> 20;
495      return 1;
496    }
497  else if (op->match == MATCH_R2_STW_N)
498    {
499      *ra = nios2_r2_reg3_mappings[GET_IW_T2I4_A3 (insn)];
500      *rb = nios2_r2_reg3_mappings[GET_IW_T2I4_B3 (insn)];
501      *imm = GET_IW_T2I4_IMM4 (insn) << 2;
502      return 1;
503    }
504  else if (op->match == MATCH_R2_STWSP_N)
505    {
506      *ra = NIOS2_SP_REGNUM;
507      *rb = GET_IW_F1I5_B (insn);
508      *imm = GET_IW_F1I5_IMM5 (insn) << 2;
509      return 1;
510    }
511  else if (op->match == MATCH_R2_STWZ_N)
512    {
513      *ra = nios2_r2_reg3_mappings[GET_IW_T1X1I6_A3 (insn)];
514      *rb = 0;
515      *imm = GET_IW_T1X1I6_IMM6 (insn) << 2;
516      return 1;
517    }
518  return 0;
519}
520
521/* Match and disassemble a LDW-type instruction, with 2 register operands
522   and one immediate operand.
523   Returns true on success, and fills in the operand pointers.  */
524
525static int
526nios2_match_ldw (uint32_t insn, const struct nios2_opcode *op,
527		 unsigned long mach, int *ra, int *rb, int *imm)
528{
529  int is_r2 = (mach == bfd_mach_nios2r2);
530
531  if (!is_r2 && (op->match == MATCH_R1_LDW || op->match == MATCH_R1_LDWIO))
532    {
533      *ra = GET_IW_I_A (insn);
534      *rb = GET_IW_I_B (insn);
535      *imm = (signed) (GET_IW_I_IMM16 (insn) << 16) >> 16;
536      return 1;
537    }
538  else if (!is_r2)
539    return 0;
540  else if (op->match == MATCH_R2_LDW)
541    {
542      *ra = GET_IW_F2I16_A (insn);
543      *rb = GET_IW_F2I16_B (insn);
544      *imm = (signed) (GET_IW_F2I16_IMM16 (insn) << 16) >> 16;
545      return 1;
546    }
547  else if (op->match == MATCH_R2_LDWIO)
548    {
549      *ra = GET_IW_F2X4I12_A (insn);
550      *rb = GET_IW_F2X4I12_B (insn);
551      *imm = (signed) (GET_IW_F2X4I12_IMM12 (insn) << 20) >> 20;
552      return 1;
553    }
554  else if (op->match == MATCH_R2_LDW_N)
555    {
556      *ra = nios2_r2_reg3_mappings[GET_IW_T2I4_A3 (insn)];
557      *rb = nios2_r2_reg3_mappings[GET_IW_T2I4_B3 (insn)];
558      *imm = GET_IW_T2I4_IMM4 (insn) << 2;
559      return 1;
560    }
561  else if (op->match == MATCH_R2_LDWSP_N)
562    {
563      *ra = NIOS2_SP_REGNUM;
564      *rb = GET_IW_F1I5_B (insn);
565      *imm = GET_IW_F1I5_IMM5 (insn) << 2;
566      return 1;
567    }
568  return 0;
569}
570
571/* Match and disassemble a RDCTL instruction, with 2 register operands.
572   Returns true on success, and fills in the operand pointers.  */
573
574static int
575nios2_match_rdctl (uint32_t insn, const struct nios2_opcode *op,
576		   unsigned long mach, int *ra, int *rc)
577{
578  int is_r2 = (mach == bfd_mach_nios2r2);
579
580  if (!is_r2 && (op->match == MATCH_R1_RDCTL))
581    {
582      *ra = GET_IW_R_IMM5 (insn);
583      *rc = GET_IW_R_C (insn);
584      return 1;
585    }
586  else if (!is_r2)
587    return 0;
588  else if (op->match == MATCH_R2_RDCTL)
589    {
590      *ra = GET_IW_F3X6L5_IMM5 (insn);
591      *rc = GET_IW_F3X6L5_C (insn);
592      return 1;
593    }
594  return 0;
595}
596
597/* Match and disassemble a PUSH.N or STWM instruction.
598   Returns true on success, and fills in the operand pointers.  */
599
600static int
601nios2_match_stwm (uint32_t insn, const struct nios2_opcode *op,
602		  unsigned long mach, unsigned int *reglist,
603		  int *ra, int *imm, int *wb, int *id)
604{
605  int is_r2 = (mach == bfd_mach_nios2r2);
606
607  if (!is_r2)
608    return 0;
609  else if (op->match == MATCH_R2_PUSH_N)
610    {
611      *reglist = 1 << 31;
612      if (GET_IW_L5I4X1_FP (insn))
613	*reglist |= (1 << 28);
614      if (GET_IW_L5I4X1_CS (insn))
615	{
616	  int val = GET_IW_L5I4X1_REGRANGE (insn);
617	  *reglist |= nios2_r2_reg_range_mappings[val];
618	}
619      *ra = NIOS2_SP_REGNUM;
620      *imm = GET_IW_L5I4X1_IMM4 (insn) << 2;
621      *wb = 1;
622      *id = 0;
623      return 1;
624    }
625  else if (op->match == MATCH_R2_STWM)
626    {
627      unsigned int rawmask = GET_IW_F1X4L17_REGMASK (insn);
628      if (GET_IW_F1X4L17_RS (insn))
629	{
630	  *reglist = ((rawmask << 14) & 0x00ffc000);
631	  if (rawmask & (1 << 10))
632	    *reglist |= (1 << 28);
633	  if (rawmask & (1 << 11))
634	    *reglist |= (1 << 31);
635	}
636      else
637	*reglist = rawmask << 2;
638      *ra = GET_IW_F1X4L17_A (insn);
639      *imm = 0;
640      *wb = GET_IW_F1X4L17_WB (insn);
641      *id = GET_IW_F1X4L17_ID (insn);
642      return 1;
643    }
644  return 0;
645}
646
647/* Match and disassemble a POP.N or LDWM instruction.
648   Returns true on success, and fills in the operand pointers.  */
649
650static int
651nios2_match_ldwm (uint32_t insn, const struct nios2_opcode *op,
652		  unsigned long mach, unsigned int *reglist,
653		  int *ra, int *imm, int *wb, int *id, int *ret)
654{
655  int is_r2 = (mach == bfd_mach_nios2r2);
656
657  if (!is_r2)
658    return 0;
659  else if (op->match == MATCH_R2_POP_N)
660    {
661      *reglist = 1 << 31;
662      if (GET_IW_L5I4X1_FP (insn))
663	*reglist |= (1 << 28);
664      if (GET_IW_L5I4X1_CS (insn))
665	{
666	  int val = GET_IW_L5I4X1_REGRANGE (insn);
667	  *reglist |= nios2_r2_reg_range_mappings[val];
668	}
669      *ra = NIOS2_SP_REGNUM;
670      *imm = GET_IW_L5I4X1_IMM4 (insn) << 2;
671      *wb = 1;
672      *id = 1;
673      *ret = 1;
674      return 1;
675    }
676  else if (op->match == MATCH_R2_LDWM)
677    {
678      unsigned int rawmask = GET_IW_F1X4L17_REGMASK (insn);
679      if (GET_IW_F1X4L17_RS (insn))
680	{
681	  *reglist = ((rawmask << 14) & 0x00ffc000);
682	  if (rawmask & (1 << 10))
683	    *reglist |= (1 << 28);
684	  if (rawmask & (1 << 11))
685	    *reglist |= (1 << 31);
686	}
687      else
688	*reglist = rawmask << 2;
689      *ra = GET_IW_F1X4L17_A (insn);
690      *imm = 0;
691      *wb = GET_IW_F1X4L17_WB (insn);
692      *id = GET_IW_F1X4L17_ID (insn);
693      *ret = GET_IW_F1X4L17_PC (insn);
694      return 1;
695    }
696  return 0;
697}
698
699/* Match and disassemble a branch instruction, with (potentially)
700   2 register operands and one immediate operand.
701   Returns true on success, and fills in the operand pointers.  */
702
703enum branch_condition {
704  branch_none,
705  branch_eq,
706  branch_ne,
707  branch_ge,
708  branch_geu,
709  branch_lt,
710  branch_ltu
711};
712
713static int
714nios2_match_branch (uint32_t insn, const struct nios2_opcode *op,
715		    unsigned long mach, int *ra, int *rb, int *imm,
716		    enum branch_condition *cond)
717{
718  int is_r2 = (mach == bfd_mach_nios2r2);
719
720  if (!is_r2)
721    {
722      switch (op->match)
723	{
724	case MATCH_R1_BR:
725	  *cond = branch_none;
726	  break;
727	case MATCH_R1_BEQ:
728	  *cond = branch_eq;
729	  break;
730	case MATCH_R1_BNE:
731	  *cond = branch_ne;
732	  break;
733	case MATCH_R1_BGE:
734	  *cond = branch_ge;
735	  break;
736	case MATCH_R1_BGEU:
737	  *cond = branch_geu;
738	  break;
739	case MATCH_R1_BLT:
740	  *cond = branch_lt;
741	  break;
742	case MATCH_R1_BLTU:
743	  *cond = branch_ltu;
744	  break;
745	default:
746	  return 0;
747	}
748      *imm = (signed) (GET_IW_I_IMM16 (insn) << 16) >> 16;
749      *ra = GET_IW_I_A (insn);
750      *rb = GET_IW_I_B (insn);
751      return 1;
752    }
753  else
754    {
755      switch (op->match)
756	{
757	case MATCH_R2_BR_N:
758	  *cond = branch_none;
759	  *ra = NIOS2_Z_REGNUM;
760	  *rb = NIOS2_Z_REGNUM;
761	  *imm = (signed) ((GET_IW_I10_IMM10 (insn) << 1) << 21) >> 21;
762	  return 1;
763	case MATCH_R2_BEQZ_N:
764	  *cond = branch_eq;
765	  *ra = nios2_r2_reg3_mappings[GET_IW_T1I7_A3 (insn)];
766	  *rb = NIOS2_Z_REGNUM;
767	  *imm = (signed) ((GET_IW_T1I7_IMM7 (insn) << 1) << 24) >> 24;
768	  return 1;
769	case MATCH_R2_BNEZ_N:
770	  *cond = branch_ne;
771	  *ra = nios2_r2_reg3_mappings[GET_IW_T1I7_A3 (insn)];
772	  *rb = NIOS2_Z_REGNUM;
773	  *imm = (signed) ((GET_IW_T1I7_IMM7 (insn) << 1) << 24) >> 24;
774	  return 1;
775	case MATCH_R2_BR:
776	  *cond = branch_none;
777	  break;
778	case MATCH_R2_BEQ:
779	  *cond = branch_eq;
780	  break;
781	case MATCH_R2_BNE:
782	  *cond = branch_ne;
783	  break;
784	case MATCH_R2_BGE:
785	  *cond = branch_ge;
786	  break;
787	case MATCH_R2_BGEU:
788	  *cond = branch_geu;
789	  break;
790	case MATCH_R2_BLT:
791	  *cond = branch_lt;
792	  break;
793	case MATCH_R2_BLTU:
794	  *cond = branch_ltu;
795	  break;
796	default:
797	  return 0;
798	}
799      *ra = GET_IW_F2I16_A (insn);
800      *rb = GET_IW_F2I16_B (insn);
801      *imm = (signed) (GET_IW_F2I16_IMM16 (insn) << 16) >> 16;
802      return 1;
803    }
804  return 0;
805}
806
807/* Match and disassemble a direct jump instruction, with an
808   unsigned operand.  Returns true on success, and fills in the operand
809   pointer.  */
810
811static int
812nios2_match_jmpi (uint32_t insn, const struct nios2_opcode *op,
813		  unsigned long mach, unsigned int *uimm)
814{
815  int is_r2 = (mach == bfd_mach_nios2r2);
816
817  if (!is_r2 && op->match == MATCH_R1_JMPI)
818    {
819      *uimm = GET_IW_J_IMM26 (insn) << 2;
820      return 1;
821    }
822  else if (!is_r2)
823    return 0;
824  else if (op->match == MATCH_R2_JMPI)
825    {
826      *uimm = GET_IW_L26_IMM26 (insn) << 2;
827      return 1;
828    }
829  return 0;
830}
831
832/* Match and disassemble a direct call instruction, with an
833   unsigned operand.  Returns true on success, and fills in the operand
834   pointer.  */
835
836static int
837nios2_match_calli (uint32_t insn, const struct nios2_opcode *op,
838		   unsigned long mach, unsigned int *uimm)
839{
840  int is_r2 = (mach == bfd_mach_nios2r2);
841
842  if (!is_r2 && op->match == MATCH_R1_CALL)
843    {
844      *uimm = GET_IW_J_IMM26 (insn) << 2;
845      return 1;
846    }
847  else if (!is_r2)
848    return 0;
849  else if (op->match == MATCH_R2_CALL)
850    {
851      *uimm = GET_IW_L26_IMM26 (insn) << 2;
852      return 1;
853    }
854  return 0;
855}
856
857/* Match and disassemble an indirect jump instruction, with a
858   (possibly implicit) register operand.  Returns true on success, and fills
859   in the operand pointer.  */
860
861static int
862nios2_match_jmpr (uint32_t insn, const struct nios2_opcode *op,
863		  unsigned long mach, int *ra)
864{
865  int is_r2 = (mach == bfd_mach_nios2r2);
866
867  if (!is_r2)
868    switch (op->match)
869      {
870      case MATCH_R1_JMP:
871	*ra = GET_IW_I_A (insn);
872	return 1;
873      case MATCH_R1_RET:
874	*ra = NIOS2_RA_REGNUM;
875	return 1;
876      case MATCH_R1_ERET:
877	*ra = NIOS2_EA_REGNUM;
878	return 1;
879      case MATCH_R1_BRET:
880	*ra = NIOS2_BA_REGNUM;
881	return 1;
882      default:
883	return 0;
884      }
885  else
886    switch (op->match)
887      {
888      case MATCH_R2_JMP:
889	*ra = GET_IW_F2I16_A (insn);
890	return 1;
891      case MATCH_R2_JMPR_N:
892	*ra = GET_IW_F1X1_A (insn);
893	return 1;
894      case MATCH_R2_RET:
895      case MATCH_R2_RET_N:
896	*ra = NIOS2_RA_REGNUM;
897	return 1;
898      case MATCH_R2_ERET:
899	*ra = NIOS2_EA_REGNUM;
900	return 1;
901      case MATCH_R2_BRET:
902	*ra = NIOS2_BA_REGNUM;
903	return 1;
904      default:
905	return 0;
906      }
907  return 0;
908}
909
910/* Match and disassemble an indirect call instruction, with a register
911   operand.  Returns true on success, and fills in the operand pointer.  */
912
913static int
914nios2_match_callr (uint32_t insn, const struct nios2_opcode *op,
915		   unsigned long mach, int *ra)
916{
917  int is_r2 = (mach == bfd_mach_nios2r2);
918
919  if (!is_r2 && op->match == MATCH_R1_CALLR)
920    {
921      *ra = GET_IW_I_A (insn);
922      return 1;
923    }
924  else if (!is_r2)
925    return 0;
926  else if (op->match == MATCH_R2_CALLR)
927    {
928      *ra = GET_IW_F2I16_A (insn);
929      return 1;
930    }
931  else if (op->match == MATCH_R2_CALLR_N)
932    {
933      *ra = GET_IW_F1X1_A (insn);
934      return 1;
935    }
936  return 0;
937}
938
939/* Match and disassemble a break instruction, with an unsigned operand.
940   Returns true on success, and fills in the operand pointer.  */
941
942static int
943nios2_match_break (uint32_t insn, const struct nios2_opcode *op,
944		  unsigned long mach, unsigned int *uimm)
945{
946  int is_r2 = (mach == bfd_mach_nios2r2);
947
948  if (!is_r2 && op->match == MATCH_R1_BREAK)
949    {
950      *uimm = GET_IW_R_IMM5 (insn);
951      return 1;
952    }
953  else if (!is_r2)
954    return 0;
955  else if (op->match == MATCH_R2_BREAK)
956    {
957      *uimm = GET_IW_F3X6L5_IMM5 (insn);
958      return 1;
959    }
960  else if (op->match == MATCH_R2_BREAK_N)
961    {
962      *uimm = GET_IW_X2L5_IMM5 (insn);
963      return 1;
964    }
965  return 0;
966}
967
968/* Match and disassemble a trap instruction, with an unsigned operand.
969   Returns true on success, and fills in the operand pointer.  */
970
971static int
972nios2_match_trap (uint32_t insn, const struct nios2_opcode *op,
973		  unsigned long mach, unsigned int *uimm)
974{
975  int is_r2 = (mach == bfd_mach_nios2r2);
976
977  if (!is_r2 && op->match == MATCH_R1_TRAP)
978    {
979      *uimm = GET_IW_R_IMM5 (insn);
980      return 1;
981    }
982  else if (!is_r2)
983    return 0;
984  else if (op->match == MATCH_R2_TRAP)
985    {
986      *uimm = GET_IW_F3X6L5_IMM5 (insn);
987      return 1;
988    }
989  else if (op->match == MATCH_R2_TRAP_N)
990    {
991      *uimm = GET_IW_X2L5_IMM5 (insn);
992      return 1;
993    }
994  return 0;
995}
996
997/* Helper function to identify when we're in a function epilogue;
998   that is, the part of the function from the point at which the
999   stack adjustments are made, to the return or sibcall.
1000   Note that we may have several stack adjustment instructions, and
1001   this function needs to test whether the stack teardown has already
1002   started before current_pc, not whether it has completed.  */
1003
1004static int
1005nios2_in_epilogue_p (struct gdbarch *gdbarch,
1006		     CORE_ADDR current_pc,
1007		     CORE_ADDR start_pc)
1008{
1009  unsigned long mach = gdbarch_bfd_arch_info (gdbarch)->mach;
1010  int is_r2 = (mach == bfd_mach_nios2r2);
1011  /* Maximum number of possibly-epilogue instructions to check.
1012     Note that this number should not be too large, else we can
1013     potentially end up iterating through unmapped memory.  */
1014  int ninsns, max_insns = 5;
1015  unsigned int insn;
1016  const struct nios2_opcode *op = NULL;
1017  unsigned int uimm;
1018  int imm;
1019  int wb, id, ret;
1020  int ra, rb, rc;
1021  enum branch_condition cond;
1022  CORE_ADDR pc;
1023
1024  /* There has to be a previous instruction in the function.  */
1025  if (current_pc <= start_pc)
1026    return 0;
1027
1028  /* Find the previous instruction before current_pc.  For R2, it might
1029     be either a 16-bit or 32-bit instruction; the only way to know for
1030     sure is to scan through from the beginning of the function,
1031     disassembling as we go.  */
1032  if (is_r2)
1033    for (pc = start_pc; ; )
1034      {
1035	op = nios2_fetch_insn (gdbarch, pc, &insn);
1036	if (op == NULL)
1037	  return 0;
1038	if (pc + op->size < current_pc)
1039	  pc += op->size;
1040	else
1041	  break;
1042	/* We can skip over insns to a forward branch target.  Since
1043	   the branch offset is relative to the next instruction,
1044	   it's correct to do this after incrementing the pc above.  */
1045	if (nios2_match_branch (insn, op, mach, &ra, &rb, &imm, &cond)
1046	    && imm > 0
1047	    && pc + imm < current_pc)
1048	  pc += imm;
1049      }
1050  /* Otherwise just go back to the previous 32-bit insn.  */
1051  else
1052    pc = current_pc - NIOS2_OPCODE_SIZE;
1053
1054  /* Beginning with the previous instruction we just located, check whether
1055     we are in a sequence of at least one stack adjustment instruction.
1056     Possible instructions here include:
1057	 ADDI sp, sp, n
1058	 ADD sp, sp, rn
1059	 LDW sp, n(sp)
1060	 SPINCI.N n
1061	 LDWSP.N sp, n(sp)
1062	 LDWM {reglist}, (sp)++, wb */
1063  for (ninsns = 0; ninsns < max_insns; ninsns++)
1064    {
1065      int ok = 0;
1066
1067      /* Fetch the insn at pc.  */
1068      op = nios2_fetch_insn (gdbarch, pc, &insn);
1069      if (op == NULL)
1070	return 0;
1071      pc += op->size;
1072
1073      /* Was it a stack adjustment?  */
1074      if (nios2_match_addi (insn, op, mach, &ra, &rb, &imm))
1075	ok = (rb == NIOS2_SP_REGNUM);
1076      else if (nios2_match_add (insn, op, mach, &ra, &rb, &rc))
1077	ok = (rc == NIOS2_SP_REGNUM);
1078      else if (nios2_match_ldw (insn, op, mach, &ra, &rb, &imm))
1079	ok = (rb == NIOS2_SP_REGNUM);
1080      else if (nios2_match_ldwm (insn, op, mach, &uimm, &ra,
1081				 &imm, &wb, &ret, &id))
1082	ok = (ra == NIOS2_SP_REGNUM && wb && id);
1083      if (!ok)
1084	break;
1085    }
1086
1087  /* No stack adjustments found.  */
1088  if (ninsns == 0)
1089    return 0;
1090
1091  /* We found more stack adjustments than we expect GCC to be generating.
1092     Since it looks like a stack unwind might be in progress tell GDB to
1093     treat it as such.  */
1094  if (ninsns == max_insns)
1095    return 1;
1096
1097  /* The next instruction following the stack adjustments must be a
1098     return, jump, or unconditional branch, or a CDX pop.n or ldwm
1099     that does an implicit return.  */
1100  if (nios2_match_jmpr (insn, op, mach, &ra)
1101      || nios2_match_jmpi (insn, op, mach, &uimm)
1102      || (nios2_match_ldwm (insn, op, mach, &uimm, &ra, &imm, &wb, &id, &ret)
1103	  && ret)
1104      || (nios2_match_branch (insn, op, mach, &ra, &rb, &imm, &cond)
1105	  && cond == branch_none))
1106    return 1;
1107
1108  return 0;
1109}
1110
1111/* Implement the stack_frame_destroyed_p gdbarch method.  */
1112
1113static int
1114nios2_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR pc)
1115{
1116  CORE_ADDR func_addr;
1117
1118  if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
1119    return nios2_in_epilogue_p (gdbarch, pc, func_addr);
1120
1121  return 0;
1122}
1123
1124/* Do prologue analysis, returning the PC of the first instruction
1125   after the function prologue.  Assumes CACHE has already been
1126   initialized.  THIS_FRAME can be null, in which case we are only
1127   interested in skipping the prologue.  Otherwise CACHE is filled in
1128   from the frame information.
1129
1130   The prologue may consist of the following parts:
1131     1) Profiling instrumentation.  For non-PIC code it looks like:
1132	  mov	 r8, ra
1133	  call	 mcount
1134	  mov	 ra, r8
1135
1136     2) A stack adjustment and save of R4-R7 for varargs functions.
1137        For R2 CDX this is typically handled with a STWM, otherwise
1138	this is typically merged with item 3.
1139
1140     3) A stack adjustment and save of the callee-saved registers.
1141        For R2 CDX these are typically handled with a PUSH.N or STWM,
1142	otherwise as an explicit SP decrement and individual register
1143	saves.
1144
1145        There may also be a stack switch here in an exception handler
1146	in place of a stack adjustment.  It looks like:
1147	  movhi  rx, %hiadj(newstack)
1148	  addhi  rx, rx, %lo(newstack)
1149	  stw    sp, constant(rx)
1150	  mov    sp, rx
1151
1152     4) A frame pointer save, which can be either a MOV or ADDI.
1153
1154     5) A further stack pointer adjustment.  This is normally included
1155        adjustment in step 3 unless the total adjustment is too large
1156	to be done in one step.
1157
1158     7) A stack overflow check, which can take either of these forms:
1159	  bgeu   sp, rx, +8
1160	  trap  3
1161	or
1162	  bltu   sp, rx, .Lstack_overflow
1163	  ...
1164	.Lstack_overflow:
1165	  trap  3
1166
1167	Older versions of GCC emitted "break 3" instead of "trap 3" here,
1168	so we check for both cases.
1169
1170	Older GCC versions emitted stack overflow checks after the SP
1171	adjustments in both steps 3 and 4.  Starting with GCC 6, there is
1172	at most one overflow check, which is placed before the first
1173	stack adjustment for R2 CDX and after the first stack adjustment
1174	otherwise.
1175
1176    The prologue instructions may be combined or interleaved with other
1177    instructions.
1178
1179    To cope with all this variability we decode all the instructions
1180    from the start of the prologue until we hit an instruction that
1181    cannot possibly be a prologue instruction, such as a branch, call,
1182    return, or epilogue instruction.  The prologue is considered to end
1183    at the last instruction that can definitely be considered a
1184    prologue instruction.  */
1185
1186static CORE_ADDR
1187nios2_analyze_prologue (struct gdbarch *gdbarch, const CORE_ADDR start_pc,
1188			const CORE_ADDR current_pc,
1189			struct nios2_unwind_cache *cache,
1190			struct frame_info *this_frame)
1191{
1192  /* Maximum number of possibly-prologue instructions to check.
1193     Note that this number should not be too large, else we can
1194     potentially end up iterating through unmapped memory.  */
1195  int ninsns, max_insns = 50;
1196  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1197  unsigned long mach = gdbarch_bfd_arch_info (gdbarch)->mach;
1198
1199  /* Does the frame set up the FP register?  */
1200  int base_reg = 0;
1201
1202  struct reg_value *value = cache->reg_value;
1203  struct reg_value temp_value[NIOS2_NUM_REGS];
1204
1205  int i;
1206
1207  /* Save the starting PC so we can correct the pc after running
1208     through the prolog, using symbol info.  */
1209  CORE_ADDR pc = start_pc;
1210
1211  /* Is this an exception handler?  */
1212  int exception_handler = 0;
1213
1214  /* What was the original value of SP (or fake original value for
1215     functions which switch stacks?  */
1216  CORE_ADDR frame_high;
1217
1218  /* The last definitely-prologue instruction seen.  */
1219  CORE_ADDR prologue_end;
1220
1221  /* Is this the innermost function?  */
1222  int innermost = (this_frame ? (frame_relative_level (this_frame) == 0) : 1);
1223
1224  if (nios2_debug)
1225    fprintf_unfiltered (gdb_stdlog,
1226			"{ nios2_analyze_prologue start=%s, current=%s ",
1227			paddress (gdbarch, start_pc),
1228			paddress (gdbarch, current_pc));
1229
1230  /* Set up the default values of the registers.  */
1231  nios2_setup_default (cache);
1232
1233  /* Find the prologue instructions.  */
1234  prologue_end = start_pc;
1235  for (ninsns = 0; ninsns < max_insns; ninsns++)
1236    {
1237      /* Present instruction.  */
1238      uint32_t insn;
1239      const struct nios2_opcode *op;
1240      int ra, rb, rc, imm;
1241      unsigned int uimm;
1242      unsigned int reglist;
1243      int wb, id, ret;
1244      enum branch_condition cond;
1245
1246      if (pc == current_pc)
1247      {
1248	/* When we reach the current PC we must save the current
1249	   register state (for the backtrace) but keep analysing
1250	   because there might be more to find out (eg. is this an
1251	   exception handler).  */
1252	memcpy (temp_value, value, sizeof (temp_value));
1253	value = temp_value;
1254	if (nios2_debug)
1255	  fprintf_unfiltered (gdb_stdlog, "*");
1256      }
1257
1258      op = nios2_fetch_insn (gdbarch, pc, &insn);
1259
1260      /* Unknown opcode?  Stop scanning.  */
1261      if (op == NULL)
1262	break;
1263      pc += op->size;
1264
1265      if (nios2_debug)
1266	{
1267	  if (op->size == 2)
1268	    fprintf_unfiltered (gdb_stdlog, "[%04X]", insn & 0xffff);
1269	  else
1270	    fprintf_unfiltered (gdb_stdlog, "[%08X]", insn);
1271	}
1272
1273      /* The following instructions can appear in the prologue.  */
1274
1275      if (nios2_match_add (insn, op, mach, &ra, &rb, &rc))
1276	{
1277	  /* ADD   rc, ra, rb  (also used for MOV) */
1278	  if (rc == NIOS2_SP_REGNUM
1279	      && rb == 0
1280	      && value[ra].reg == cache->reg_saved[NIOS2_SP_REGNUM].basereg)
1281	    {
1282	      /* If the previous value of SP is available somewhere
1283		 near the new stack pointer value then this is a
1284		 stack switch.  */
1285
1286	      /* If any registers were saved on the stack before then
1287		 we can't backtrace into them now.  */
1288	      for (i = 0 ; i < NIOS2_NUM_REGS ; i++)
1289		{
1290		  if (cache->reg_saved[i].basereg == NIOS2_SP_REGNUM)
1291		    cache->reg_saved[i].basereg = -1;
1292		  if (value[i].reg == NIOS2_SP_REGNUM)
1293		    value[i].reg = -1;
1294		}
1295
1296	      /* Create a fake "high water mark" 4 bytes above where SP
1297		 was stored and fake up the registers to be consistent
1298		 with that.  */
1299	      value[NIOS2_SP_REGNUM].reg = NIOS2_SP_REGNUM;
1300	      value[NIOS2_SP_REGNUM].offset
1301		= (value[ra].offset
1302		   - cache->reg_saved[NIOS2_SP_REGNUM].addr
1303		   - 4);
1304	      cache->reg_saved[NIOS2_SP_REGNUM].basereg = NIOS2_SP_REGNUM;
1305	      cache->reg_saved[NIOS2_SP_REGNUM].addr = -4;
1306	    }
1307
1308	  else if (rc == NIOS2_SP_REGNUM && ra == NIOS2_FP_REGNUM)
1309	    /* This is setting SP from FP.  This only happens in the
1310	       function epilogue.  */
1311	    break;
1312
1313	  else if (rc != 0)
1314	    {
1315	      if (value[rb].reg == 0)
1316		value[rc].reg = value[ra].reg;
1317	      else if (value[ra].reg == 0)
1318		value[rc].reg = value[rb].reg;
1319	      else
1320		value[rc].reg = -1;
1321	      value[rc].offset = value[ra].offset + value[rb].offset;
1322	    }
1323
1324	  /* The add/move is only considered a prologue instruction
1325	     if the destination is SP or FP.  */
1326	  if (rc == NIOS2_SP_REGNUM || rc == NIOS2_FP_REGNUM)
1327	    prologue_end = pc;
1328	}
1329
1330      else if (nios2_match_sub (insn, op, mach, &ra, &rb, &rc))
1331	{
1332	  /* SUB   rc, ra, rb */
1333	  if (rc == NIOS2_SP_REGNUM && rb == NIOS2_SP_REGNUM
1334	      && value[rc].reg != 0)
1335	    /* If we are decrementing the SP by a non-constant amount,
1336	       this is alloca, not part of the prologue.  */
1337	    break;
1338	  else if (rc != 0)
1339	    {
1340	      if (value[rb].reg == 0)
1341		value[rc].reg = value[ra].reg;
1342	      else
1343		value[rc].reg = -1;
1344	      value[rc].offset = value[ra].offset - value[rb].offset;
1345	    }
1346	}
1347
1348      else if (nios2_match_addi (insn, op, mach, &ra, &rb, &imm))
1349	{
1350	  /* ADDI    rb, ra, imm */
1351
1352	  /* A positive stack adjustment has to be part of the epilogue.  */
1353	  if (rb == NIOS2_SP_REGNUM
1354	      && (imm > 0 || value[ra].reg != NIOS2_SP_REGNUM))
1355	    break;
1356
1357	  /* Likewise restoring SP from FP.  */
1358	  else if (rb == NIOS2_SP_REGNUM && ra == NIOS2_FP_REGNUM)
1359	    break;
1360
1361	  if (rb != 0)
1362	    {
1363	      value[rb].reg    = value[ra].reg;
1364	      value[rb].offset = value[ra].offset + imm;
1365	    }
1366
1367	  /* The add is only considered a prologue instruction
1368	     if the destination is SP or FP.  */
1369	  if (rb == NIOS2_SP_REGNUM || rb == NIOS2_FP_REGNUM)
1370	    prologue_end = pc;
1371	}
1372
1373      else if (nios2_match_orhi (insn, op, mach, &ra, &rb, &uimm))
1374	{
1375	  /* ORHI  rb, ra, uimm   (also used for MOVHI) */
1376	  if (rb != 0)
1377	    {
1378  	      value[rb].reg    = (value[ra].reg == 0) ? 0 : -1;
1379	      value[rb].offset = value[ra].offset | (uimm << 16);
1380	    }
1381	}
1382
1383      else if (nios2_match_stw (insn, op, mach, &ra, &rb, &imm))
1384        {
1385	  /* STW rb, imm(ra) */
1386
1387	  /* Are we storing the original value of a register to the stack?
1388	     For exception handlers the value of EA-4 (return
1389	     address from interrupts etc) is sometimes stored.  */
1390	  int orig = value[rb].reg;
1391	  if (orig > 0
1392	      && (value[rb].offset == 0
1393		  || (orig == NIOS2_EA_REGNUM && value[rb].offset == -4))
1394	      && value[ra].reg == NIOS2_SP_REGNUM)
1395	    {
1396	      if (pc < current_pc)
1397		{
1398		  /* Save off callee saved registers.  */
1399		  cache->reg_saved[orig].basereg = value[ra].reg;
1400		  cache->reg_saved[orig].addr = value[ra].offset + imm;
1401		}
1402
1403	      prologue_end = pc;
1404
1405	      if (orig == NIOS2_EA_REGNUM || orig == NIOS2_ESTATUS_REGNUM)
1406		exception_handler = 1;
1407	    }
1408	  else
1409	    /* Non-stack memory writes cannot appear in the prologue.  */
1410	    break;
1411        }
1412
1413      else if (nios2_match_stwm (insn, op, mach,
1414				 &reglist, &ra, &imm, &wb, &id))
1415	{
1416	  /* PUSH.N {reglist}, adjust
1417	     or
1418	     STWM {reglist}, --(SP)[, writeback] */
1419	  int i;
1420	  int off = 0;
1421
1422	  if (ra != NIOS2_SP_REGNUM || id != 0)
1423	    /* This is a non-stack-push memory write and cannot be
1424	       part of the prologue.  */
1425	    break;
1426
1427	  for (i = 31; i >= 0; i--)
1428	    if (reglist & (1 << i))
1429	      {
1430		int orig = value[i].reg;
1431
1432		off += 4;
1433		if (orig > 0 && value[i].offset == 0 && pc < current_pc)
1434		  {
1435		    cache->reg_saved[orig].basereg
1436		      = value[NIOS2_SP_REGNUM].reg;
1437		    cache->reg_saved[orig].addr
1438		      = value[NIOS2_SP_REGNUM].offset - off;
1439		  }
1440	      }
1441
1442	  if (wb)
1443	    value[NIOS2_SP_REGNUM].offset -= off;
1444	  value[NIOS2_SP_REGNUM].offset -= imm;
1445
1446	  prologue_end = pc;
1447	}
1448
1449      else if (nios2_match_rdctl (insn, op, mach, &ra, &rc))
1450	{
1451	  /* RDCTL rC, ctlN
1452	     This can appear in exception handlers in combination with
1453	     a subsequent save to the stack frame.  */
1454	  if (rc != 0)
1455	    {
1456	      value[rc].reg    = NIOS2_STATUS_REGNUM + ra;
1457	      value[rc].offset = 0;
1458	    }
1459        }
1460
1461      else if (nios2_match_calli (insn, op, mach, &uimm))
1462	{
1463	  if (value[8].reg == NIOS2_RA_REGNUM
1464	      && value[8].offset == 0
1465	      && value[NIOS2_SP_REGNUM].reg == NIOS2_SP_REGNUM
1466	      && value[NIOS2_SP_REGNUM].offset == 0)
1467	    {
1468	      /* A CALL instruction.  This is treated as a call to mcount
1469		 if ra has been stored into r8 beforehand and if it's
1470		 before the stack adjust.
1471		 Note mcount corrupts r2-r3, r9-r15 & ra.  */
1472	      for (i = 2 ; i <= 3 ; i++)
1473		value[i].reg = -1;
1474	      for (i = 9 ; i <= 15 ; i++)
1475		value[i].reg = -1;
1476	      value[NIOS2_RA_REGNUM].reg = -1;
1477
1478	      prologue_end = pc;
1479	    }
1480
1481	  /* Other calls are not part of the prologue.  */
1482	  else
1483	    break;
1484	}
1485
1486      else if (nios2_match_branch (insn, op, mach, &ra, &rb, &imm, &cond))
1487	{
1488	  /* Branches not involving a stack overflow check aren't part of
1489	     the prologue.  */
1490	  if (ra != NIOS2_SP_REGNUM)
1491	    break;
1492	  else if (cond == branch_geu)
1493	    {
1494	      /* BGEU sp, rx, +8
1495		 TRAP 3  (or BREAK 3)
1496		 This instruction sequence is used in stack checking;
1497		 we can ignore it.  */
1498	      unsigned int next_insn;
1499	      const struct nios2_opcode *next_op
1500		= nios2_fetch_insn (gdbarch, pc, &next_insn);
1501	      if (next_op != NULL
1502		  && (nios2_match_trap (next_insn, op, mach, &uimm)
1503		      || nios2_match_break (next_insn, op, mach, &uimm)))
1504		pc += next_op->size;
1505	      else
1506		break;
1507	    }
1508	  else if (cond == branch_ltu)
1509	    {
1510	      /* BLTU sp, rx, .Lstackoverflow
1511		 If the location branched to holds a TRAP or BREAK
1512		 instruction then this is also stack overflow detection.  */
1513	      unsigned int next_insn;
1514	      const struct nios2_opcode *next_op
1515		= nios2_fetch_insn (gdbarch, pc + imm, &next_insn);
1516	      if (next_op != NULL
1517		  && (nios2_match_trap (next_insn, op, mach, &uimm)
1518		      || nios2_match_break (next_insn, op, mach, &uimm)))
1519		;
1520	      else
1521		break;
1522	    }
1523	  else
1524	    break;
1525	}
1526
1527      /* All other calls, jumps, returns, TRAPs, or BREAKs terminate
1528	 the prologue.  */
1529      else if (nios2_match_callr (insn, op, mach, &ra)
1530	       || nios2_match_jmpr (insn, op, mach, &ra)
1531	       || nios2_match_jmpi (insn, op, mach, &uimm)
1532	       || (nios2_match_ldwm (insn, op, mach, &reglist, &ra,
1533				     &imm, &wb, &id, &ret)
1534		   && ret)
1535	       || nios2_match_trap (insn, op, mach, &uimm)
1536	       || nios2_match_break (insn, op, mach, &uimm))
1537	break;
1538    }
1539
1540  /* If THIS_FRAME is NULL, we are being called from skip_prologue
1541     and are only interested in the PROLOGUE_END value, so just
1542     return that now and skip over the cache updates, which depend
1543     on having frame information.  */
1544  if (this_frame == NULL)
1545    return prologue_end;
1546
1547  /* If we are in the function epilogue and have already popped
1548     registers off the stack in preparation for returning, then we
1549     want to go back to the original register values.  */
1550  if (innermost && nios2_in_epilogue_p (gdbarch, current_pc, start_pc))
1551    nios2_setup_default (cache);
1552
1553  /* Exception handlers use a different return address register.  */
1554  if (exception_handler)
1555    cache->return_regnum = NIOS2_EA_REGNUM;
1556
1557  if (nios2_debug)
1558    fprintf_unfiltered (gdb_stdlog, "\n-> retreg=%d, ", cache->return_regnum);
1559
1560  if (cache->reg_value[NIOS2_FP_REGNUM].reg == NIOS2_SP_REGNUM)
1561    /* If the FP now holds an offset from the CFA then this is a
1562       normal frame which uses the frame pointer.  */
1563    base_reg = NIOS2_FP_REGNUM;
1564  else if (cache->reg_value[NIOS2_SP_REGNUM].reg == NIOS2_SP_REGNUM)
1565    /* FP doesn't hold an offset from the CFA.  If SP still holds an
1566       offset from the CFA then we might be in a function which omits
1567       the frame pointer, or we might be partway through the prologue.
1568       In both cases we can find the CFA using SP.  */
1569    base_reg = NIOS2_SP_REGNUM;
1570  else
1571    {
1572      /* Somehow the stack pointer has been corrupted.
1573	 We can't return.  */
1574      if (nios2_debug)
1575	fprintf_unfiltered (gdb_stdlog, "<can't reach cfa> }\n");
1576      return 0;
1577    }
1578
1579  if (cache->reg_value[base_reg].offset == 0
1580      || cache->reg_saved[NIOS2_RA_REGNUM].basereg != NIOS2_SP_REGNUM
1581      || cache->reg_saved[cache->return_regnum].basereg != NIOS2_SP_REGNUM)
1582    {
1583      /* If the frame didn't adjust the stack, didn't save RA or
1584	 didn't save EA in an exception handler then it must either
1585	 be a leaf function (doesn't call any other functions) or it
1586	 can't return.  If it has called another function then it
1587	 can't be a leaf, so set base == 0 to indicate that we can't
1588	 backtrace past it.  */
1589
1590      if (!innermost)
1591	{
1592	  /* If it isn't the innermost function then it can't be a
1593	     leaf, unless it was interrupted.  Check whether RA for
1594	     this frame is the same as PC.  If so then it probably
1595	     wasn't interrupted.  */
1596	  CORE_ADDR ra
1597	    = get_frame_register_unsigned (this_frame, NIOS2_RA_REGNUM);
1598
1599	  if (ra == current_pc)
1600	    {
1601	      if (nios2_debug)
1602		fprintf_unfiltered
1603		  (gdb_stdlog,
1604		   "<noreturn ADJUST %s, r31@r%d+?>, r%d@r%d+?> }\n",
1605		   paddress (gdbarch, cache->reg_value[base_reg].offset),
1606		   cache->reg_saved[NIOS2_RA_REGNUM].basereg,
1607		   cache->return_regnum,
1608		   cache->reg_saved[cache->return_regnum].basereg);
1609	      return 0;
1610	    }
1611	}
1612    }
1613
1614  /* Get the value of whichever register we are using for the
1615     base.  */
1616  cache->base = get_frame_register_unsigned (this_frame, base_reg);
1617
1618  /* What was the value of SP at the start of this function (or just
1619     after the stack switch).  */
1620  frame_high = cache->base - cache->reg_value[base_reg].offset;
1621
1622  /* Adjust all the saved registers such that they contain addresses
1623     instead of offsets.  */
1624  for (i = 0; i < NIOS2_NUM_REGS; i++)
1625    if (cache->reg_saved[i].basereg == NIOS2_SP_REGNUM)
1626      {
1627	cache->reg_saved[i].basereg = NIOS2_Z_REGNUM;
1628	cache->reg_saved[i].addr += frame_high;
1629      }
1630
1631  for (i = 0; i < NIOS2_NUM_REGS; i++)
1632    if (cache->reg_saved[i].basereg == NIOS2_GP_REGNUM)
1633      {
1634	CORE_ADDR gp = get_frame_register_unsigned (this_frame,
1635						    NIOS2_GP_REGNUM);
1636
1637	for ( ; i < NIOS2_NUM_REGS; i++)
1638	  if (cache->reg_saved[i].basereg == NIOS2_GP_REGNUM)
1639	    {
1640	      cache->reg_saved[i].basereg = NIOS2_Z_REGNUM;
1641	      cache->reg_saved[i].addr += gp;
1642	    }
1643      }
1644
1645  /* Work out what the value of SP was on the first instruction of
1646     this function.  If we didn't switch stacks then this can be
1647     trivially computed from the base address.  */
1648  if (cache->reg_saved[NIOS2_SP_REGNUM].basereg == NIOS2_Z_REGNUM)
1649    cache->cfa
1650      = read_memory_unsigned_integer (cache->reg_saved[NIOS2_SP_REGNUM].addr,
1651				      4, byte_order);
1652  else
1653    cache->cfa = frame_high;
1654
1655  /* Exception handlers restore ESTATUS into STATUS.  */
1656  if (exception_handler)
1657    {
1658      cache->reg_saved[NIOS2_STATUS_REGNUM]
1659	= cache->reg_saved[NIOS2_ESTATUS_REGNUM];
1660      cache->reg_saved[NIOS2_ESTATUS_REGNUM].basereg = -1;
1661    }
1662
1663  if (nios2_debug)
1664    fprintf_unfiltered (gdb_stdlog, "cfa=%s }\n",
1665			paddress (gdbarch, cache->cfa));
1666
1667  return prologue_end;
1668}
1669
1670/* Implement the skip_prologue gdbarch hook.  */
1671
1672static CORE_ADDR
1673nios2_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR start_pc)
1674{
1675  CORE_ADDR func_addr;
1676
1677  struct nios2_unwind_cache cache;
1678
1679  /* See if we can determine the end of the prologue via the symbol
1680     table.  If so, then return either PC, or the PC after the
1681     prologue, whichever is greater.  */
1682  if (find_pc_partial_function (start_pc, NULL, &func_addr, NULL))
1683    {
1684      CORE_ADDR post_prologue_pc
1685        = skip_prologue_using_sal (gdbarch, func_addr);
1686
1687      if (post_prologue_pc != 0)
1688        return max (start_pc, post_prologue_pc);
1689    }
1690
1691  /* Prologue analysis does the rest....  */
1692  nios2_init_cache (&cache, start_pc);
1693  return nios2_analyze_prologue (gdbarch, start_pc, start_pc, &cache, NULL);
1694}
1695
1696/* Implement the breakpoint_from_pc gdbarch hook.
1697
1698   The Nios II ABI for Linux says: "Userspace programs should not use
1699   the break instruction and userspace debuggers should not insert
1700   one." and "Userspace breakpoints are accomplished using the trap
1701   instruction with immediate operand 31 (all ones)."
1702
1703   So, we use "trap 31" consistently as the breakpoint on bare-metal
1704   as well as Linux targets.  */
1705
1706static const gdb_byte*
1707nios2_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *bp_addr,
1708			  int *bp_size)
1709{
1710  enum bfd_endian byte_order_for_code = gdbarch_byte_order_for_code (gdbarch);
1711  unsigned long mach = gdbarch_bfd_arch_info (gdbarch)->mach;
1712
1713  if (mach == bfd_mach_nios2r2)
1714    {
1715      /* R2 trap encoding:
1716	   ((0x2d << 26) | (0x1f << 21) | (0x1d << 16) | (0x20 << 0))
1717	   0xb7fd0020
1718	 CDX trap.n encoding:
1719	   ((0xd << 12) | (0x1f << 6) | (0x9 << 0))
1720	   0xd7c9
1721         Note that code is always little-endian on R2.  */
1722      static const gdb_byte r2_breakpoint_le[] = {0x20, 0x00, 0xfd, 0xb7};
1723      static const gdb_byte cdx_breakpoint_le[] = {0xc9, 0xd7};
1724      unsigned int insn;
1725      const struct nios2_opcode *op
1726	= nios2_fetch_insn (gdbarch, *bp_addr, &insn);
1727
1728      if (op && op->size == NIOS2_CDX_OPCODE_SIZE)
1729	{
1730	  *bp_size = NIOS2_CDX_OPCODE_SIZE;
1731	  return cdx_breakpoint_le;
1732	}
1733      else
1734	{
1735	  *bp_size = NIOS2_OPCODE_SIZE;
1736	  return r2_breakpoint_le;
1737	}
1738    }
1739  else
1740    {
1741      /* R1 trap encoding:
1742	 ((0x1d << 17) | (0x2d << 11) | (0x1f << 6) | (0x3a << 0))
1743	 0x003b6ffa */
1744      static const gdb_byte r1_breakpoint_le[] = {0xfa, 0x6f, 0x3b, 0x0};
1745      static const gdb_byte r1_breakpoint_be[] = {0x0, 0x3b, 0x6f, 0xfa};
1746      *bp_size = NIOS2_OPCODE_SIZE;
1747      if (byte_order_for_code == BFD_ENDIAN_BIG)
1748	return r1_breakpoint_be;
1749      else
1750	return r1_breakpoint_le;
1751    }
1752}
1753
1754/* Implement the print_insn gdbarch method.  */
1755
1756static int
1757nios2_print_insn (bfd_vma memaddr, disassemble_info *info)
1758{
1759  if (info->endian == BFD_ENDIAN_BIG)
1760    return print_insn_big_nios2 (memaddr, info);
1761  else
1762    return print_insn_little_nios2 (memaddr, info);
1763}
1764
1765
1766/* Implement the frame_align gdbarch method.  */
1767
1768static CORE_ADDR
1769nios2_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
1770{
1771  return align_down (addr, 4);
1772}
1773
1774
1775/* Implement the return_value gdbarch method.  */
1776
1777static enum return_value_convention
1778nios2_return_value (struct gdbarch *gdbarch, struct value *function,
1779		    struct type *type, struct regcache *regcache,
1780		    gdb_byte *readbuf, const gdb_byte *writebuf)
1781{
1782  if (TYPE_LENGTH (type) > 8)
1783    return RETURN_VALUE_STRUCT_CONVENTION;
1784
1785  if (readbuf)
1786    nios2_extract_return_value (gdbarch, type, regcache, readbuf);
1787  if (writebuf)
1788    nios2_store_return_value (gdbarch, type, regcache, writebuf);
1789
1790  return RETURN_VALUE_REGISTER_CONVENTION;
1791}
1792
1793/* Implement the dummy_id gdbarch method.  */
1794
1795static struct frame_id
1796nios2_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1797{
1798  return frame_id_build
1799    (get_frame_register_unsigned (this_frame, NIOS2_SP_REGNUM),
1800     get_frame_pc (this_frame));
1801}
1802
1803/* Implement the push_dummy_call gdbarch method.  */
1804
1805static CORE_ADDR
1806nios2_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
1807                       struct regcache *regcache, CORE_ADDR bp_addr,
1808                       int nargs, struct value **args, CORE_ADDR sp,
1809                       int struct_return, CORE_ADDR struct_addr)
1810{
1811  int argreg;
1812  int float_argreg;
1813  int argnum;
1814  int len = 0;
1815  int stack_offset = 0;
1816  CORE_ADDR func_addr = find_function_addr (function, NULL);
1817  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1818
1819  /* Set the return address register to point to the entry point of
1820     the program, where a breakpoint lies in wait.  */
1821  regcache_cooked_write_signed (regcache, NIOS2_RA_REGNUM, bp_addr);
1822
1823  /* Now make space on the stack for the args.  */
1824  for (argnum = 0; argnum < nargs; argnum++)
1825    len += align_up (TYPE_LENGTH (value_type (args[argnum])), 4);
1826  sp -= len;
1827
1828  /* Initialize the register pointer.  */
1829  argreg = NIOS2_FIRST_ARGREG;
1830
1831  /* The struct_return pointer occupies the first parameter-passing
1832     register.  */
1833  if (struct_return)
1834    regcache_cooked_write_unsigned (regcache, argreg++, struct_addr);
1835
1836  /* Now load as many as possible of the first arguments into
1837     registers, and push the rest onto the stack.  Loop through args
1838     from first to last.  */
1839  for (argnum = 0; argnum < nargs; argnum++)
1840    {
1841      const gdb_byte *val;
1842      struct value *arg = args[argnum];
1843      struct type *arg_type = check_typedef (value_type (arg));
1844      int len = TYPE_LENGTH (arg_type);
1845
1846      val = value_contents (arg);
1847
1848      /* Copy the argument to general registers or the stack in
1849         register-sized pieces.  Large arguments are split between
1850         registers and stack.  */
1851      while (len > 0)
1852        {
1853	  int partial_len = (len < 4 ? len : 4);
1854
1855	  if (argreg <= NIOS2_LAST_ARGREG)
1856	    {
1857	      /* The argument is being passed in a register.  */
1858	      CORE_ADDR regval = extract_unsigned_integer (val, partial_len,
1859							   byte_order);
1860
1861	      regcache_cooked_write_unsigned (regcache, argreg, regval);
1862	      argreg++;
1863	    }
1864	  else
1865	    {
1866	      /* The argument is being passed on the stack.  */
1867	      CORE_ADDR addr = sp + stack_offset;
1868
1869	      write_memory (addr, val, partial_len);
1870	      stack_offset += align_up (partial_len, 4);
1871	    }
1872
1873	  len -= partial_len;
1874	  val += partial_len;
1875	}
1876    }
1877
1878  regcache_cooked_write_signed (regcache, NIOS2_SP_REGNUM, sp);
1879
1880  /* Return adjusted stack pointer.  */
1881  return sp;
1882}
1883
1884/* Implement the unwind_pc gdbarch method.  */
1885
1886static CORE_ADDR
1887nios2_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
1888{
1889  gdb_byte buf[4];
1890
1891  frame_unwind_register (next_frame, NIOS2_PC_REGNUM, buf);
1892  return extract_typed_address (buf, builtin_type (gdbarch)->builtin_func_ptr);
1893}
1894
1895/* Implement the unwind_sp gdbarch method.  */
1896
1897static CORE_ADDR
1898nios2_unwind_sp (struct gdbarch *gdbarch, struct frame_info *this_frame)
1899{
1900  return frame_unwind_register_unsigned (this_frame, NIOS2_SP_REGNUM);
1901}
1902
1903/* Use prologue analysis to fill in the register cache
1904   *THIS_PROLOGUE_CACHE for THIS_FRAME.  This function initializes
1905   *THIS_PROLOGUE_CACHE first.  */
1906
1907static struct nios2_unwind_cache *
1908nios2_frame_unwind_cache (struct frame_info *this_frame,
1909			  void **this_prologue_cache)
1910{
1911  struct gdbarch *gdbarch = get_frame_arch (this_frame);
1912  CORE_ADDR current_pc;
1913  struct nios2_unwind_cache *cache;
1914
1915  if (*this_prologue_cache)
1916    return (struct nios2_unwind_cache *) *this_prologue_cache;
1917
1918  cache = FRAME_OBSTACK_ZALLOC (struct nios2_unwind_cache);
1919  *this_prologue_cache = cache;
1920
1921  /* Zero all fields.  */
1922  nios2_init_cache (cache, get_frame_func (this_frame));
1923
1924  /* Prologue analysis does the rest...  */
1925  current_pc = get_frame_pc (this_frame);
1926  if (cache->pc != 0)
1927    nios2_analyze_prologue (gdbarch, cache->pc, current_pc, cache, this_frame);
1928
1929  return cache;
1930}
1931
1932/* Implement the this_id function for the normal unwinder.  */
1933
1934static void
1935nios2_frame_this_id (struct frame_info *this_frame, void **this_cache,
1936		     struct frame_id *this_id)
1937{
1938  struct nios2_unwind_cache *cache =
1939    nios2_frame_unwind_cache (this_frame, this_cache);
1940
1941  /* This marks the outermost frame.  */
1942  if (cache->base == 0)
1943    return;
1944
1945  *this_id = frame_id_build (cache->cfa, cache->pc);
1946}
1947
1948/* Implement the prev_register function for the normal unwinder.  */
1949
1950static struct value *
1951nios2_frame_prev_register (struct frame_info *this_frame, void **this_cache,
1952			   int regnum)
1953{
1954  struct nios2_unwind_cache *cache =
1955    nios2_frame_unwind_cache (this_frame, this_cache);
1956
1957  gdb_assert (regnum >= 0 && regnum < NIOS2_NUM_REGS);
1958
1959  /* The PC of the previous frame is stored in the RA register of
1960     the current frame.  Frob regnum so that we pull the value from
1961     the correct place.  */
1962  if (regnum == NIOS2_PC_REGNUM)
1963    regnum = cache->return_regnum;
1964
1965  if (regnum == NIOS2_SP_REGNUM && cache->cfa)
1966    return frame_unwind_got_constant (this_frame, regnum, cache->cfa);
1967
1968  /* If we've worked out where a register is stored then load it from
1969     there.  */
1970  if (cache->reg_saved[regnum].basereg == NIOS2_Z_REGNUM)
1971    return frame_unwind_got_memory (this_frame, regnum,
1972				    cache->reg_saved[regnum].addr);
1973
1974  return frame_unwind_got_register (this_frame, regnum, regnum);
1975}
1976
1977/* Implement the this_base, this_locals, and this_args hooks
1978   for the normal unwinder.  */
1979
1980static CORE_ADDR
1981nios2_frame_base_address (struct frame_info *this_frame, void **this_cache)
1982{
1983  struct nios2_unwind_cache *info
1984    = nios2_frame_unwind_cache (this_frame, this_cache);
1985
1986  return info->base;
1987}
1988
1989/* Data structures for the normal prologue-analysis-based
1990   unwinder.  */
1991
1992static const struct frame_unwind nios2_frame_unwind =
1993{
1994  NORMAL_FRAME,
1995  default_frame_unwind_stop_reason,
1996  nios2_frame_this_id,
1997  nios2_frame_prev_register,
1998  NULL,
1999  default_frame_sniffer
2000};
2001
2002static const struct frame_base nios2_frame_base =
2003{
2004  &nios2_frame_unwind,
2005  nios2_frame_base_address,
2006  nios2_frame_base_address,
2007  nios2_frame_base_address
2008};
2009
2010/* Fill in the register cache *THIS_CACHE for THIS_FRAME for use
2011   in the stub unwinder.  */
2012
2013static struct trad_frame_cache *
2014nios2_stub_frame_cache (struct frame_info *this_frame, void **this_cache)
2015{
2016  CORE_ADDR pc;
2017  CORE_ADDR start_addr;
2018  CORE_ADDR stack_addr;
2019  struct trad_frame_cache *this_trad_cache;
2020  struct gdbarch *gdbarch = get_frame_arch (this_frame);
2021
2022  if (*this_cache != NULL)
2023    return (struct trad_frame_cache *) *this_cache;
2024  this_trad_cache = trad_frame_cache_zalloc (this_frame);
2025  *this_cache = this_trad_cache;
2026
2027  /* The return address is in the link register.  */
2028  trad_frame_set_reg_realreg (this_trad_cache,
2029                              gdbarch_pc_regnum (gdbarch),
2030                              NIOS2_RA_REGNUM);
2031
2032  /* Frame ID, since it's a frameless / stackless function, no stack
2033     space is allocated and SP on entry is the current SP.  */
2034  pc = get_frame_pc (this_frame);
2035  find_pc_partial_function (pc, NULL, &start_addr, NULL);
2036  stack_addr = get_frame_register_unsigned (this_frame, NIOS2_SP_REGNUM);
2037  trad_frame_set_id (this_trad_cache, frame_id_build (start_addr, stack_addr));
2038  /* Assume that the frame's base is the same as the stack pointer.  */
2039  trad_frame_set_this_base (this_trad_cache, stack_addr);
2040
2041  return this_trad_cache;
2042}
2043
2044/* Implement the this_id function for the stub unwinder.  */
2045
2046static void
2047nios2_stub_frame_this_id (struct frame_info *this_frame, void **this_cache,
2048                          struct frame_id *this_id)
2049{
2050  struct trad_frame_cache *this_trad_cache
2051    = nios2_stub_frame_cache (this_frame, this_cache);
2052
2053  trad_frame_get_id (this_trad_cache, this_id);
2054}
2055
2056/* Implement the prev_register function for the stub unwinder.  */
2057
2058static struct value *
2059nios2_stub_frame_prev_register (struct frame_info *this_frame,
2060			        void **this_cache, int regnum)
2061{
2062  struct trad_frame_cache *this_trad_cache
2063    = nios2_stub_frame_cache (this_frame, this_cache);
2064
2065  return trad_frame_get_register (this_trad_cache, this_frame, regnum);
2066}
2067
2068/* Implement the sniffer function for the stub unwinder.
2069   This unwinder is used for cases where the normal
2070   prologue-analysis-based unwinder can't work,
2071   such as PLT stubs.  */
2072
2073static int
2074nios2_stub_frame_sniffer (const struct frame_unwind *self,
2075			  struct frame_info *this_frame, void **cache)
2076{
2077  gdb_byte dummy[4];
2078  CORE_ADDR pc = get_frame_address_in_block (this_frame);
2079
2080  /* Use the stub unwinder for unreadable code.  */
2081  if (target_read_memory (get_frame_pc (this_frame), dummy, 4) != 0)
2082    return 1;
2083
2084  if (in_plt_section (pc))
2085    return 1;
2086
2087  return 0;
2088}
2089
2090/* Define the data structures for the stub unwinder.  */
2091
2092static const struct frame_unwind nios2_stub_frame_unwind =
2093{
2094  NORMAL_FRAME,
2095  default_frame_unwind_stop_reason,
2096  nios2_stub_frame_this_id,
2097  nios2_stub_frame_prev_register,
2098  NULL,
2099  nios2_stub_frame_sniffer
2100};
2101
2102
2103
2104/* Determine where to set a single step breakpoint while considering
2105   branch prediction.  */
2106
2107static CORE_ADDR
2108nios2_get_next_pc (struct frame_info *frame, CORE_ADDR pc)
2109{
2110  struct gdbarch *gdbarch = get_frame_arch (frame);
2111  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2112  unsigned long mach = gdbarch_bfd_arch_info (gdbarch)->mach;
2113  unsigned int insn;
2114  const struct nios2_opcode *op = nios2_fetch_insn (gdbarch, pc, &insn);
2115  int ra;
2116  int rb;
2117  int imm;
2118  unsigned int uimm;
2119  int wb, id, ret;
2120  enum branch_condition cond;
2121
2122  /* Do something stupid if we can't disassemble the insn at pc.  */
2123  if (op == NULL)
2124    return pc + NIOS2_OPCODE_SIZE;
2125
2126  if (nios2_match_branch (insn, op, mach, &ra, &rb, &imm, &cond))
2127    {
2128      int ras = get_frame_register_signed (frame, ra);
2129      int rbs = get_frame_register_signed (frame, rb);
2130      unsigned int rau = get_frame_register_unsigned (frame, ra);
2131      unsigned int rbu = get_frame_register_unsigned (frame, rb);
2132
2133      pc += op->size;
2134      switch (cond)
2135	{
2136	case branch_none:
2137	  pc += imm;
2138	  break;
2139	case branch_eq:
2140	  if (ras == rbs)
2141	    pc += imm;
2142	  break;
2143	case branch_ne:
2144	  if (ras != rbs)
2145	    pc += imm;
2146	  break;
2147	case branch_ge:
2148	  if (ras >= rbs)
2149	    pc += imm;
2150	  break;
2151	case branch_geu:
2152	  if (rau >= rbu)
2153	    pc += imm;
2154	  break;
2155	case branch_lt:
2156	  if (ras < rbs)
2157	    pc += imm;
2158	  break;
2159	case branch_ltu:
2160	  if (rau < rbu)
2161	    pc += imm;
2162	  break;
2163	default:
2164	  break;
2165	}
2166    }
2167
2168  else if (nios2_match_jmpi (insn, op, mach, &uimm)
2169	   || nios2_match_calli (insn, op, mach, &uimm))
2170    pc = (pc & 0xf0000000) | uimm;
2171
2172  else if (nios2_match_jmpr (insn, op, mach, &ra)
2173	   || nios2_match_callr (insn, op, mach, &ra))
2174    pc = get_frame_register_unsigned (frame, ra);
2175
2176  else if (nios2_match_ldwm (insn, op, mach, &uimm, &ra, &imm, &wb, &id, &ret)
2177	   && ret)
2178    {
2179      /* If ra is in the reglist, we have to use the value saved in the
2180	 stack frame rather than the current value.  */
2181      if (uimm & (1 << NIOS2_RA_REGNUM))
2182	pc = nios2_unwind_pc (gdbarch, frame);
2183      else
2184	pc = get_frame_register_unsigned (frame, NIOS2_RA_REGNUM);
2185    }
2186
2187  else if (nios2_match_trap (insn, op, mach, &uimm) && uimm == 0)
2188    {
2189      if (tdep->syscall_next_pc != NULL)
2190	return tdep->syscall_next_pc (frame, op);
2191    }
2192
2193  else
2194    pc += op->size;
2195
2196  return pc;
2197}
2198
2199/* Implement the software_single_step gdbarch method.  */
2200
2201static int
2202nios2_software_single_step (struct frame_info *frame)
2203{
2204  struct gdbarch *gdbarch = get_frame_arch (frame);
2205  struct address_space *aspace = get_frame_address_space (frame);
2206  CORE_ADDR next_pc = nios2_get_next_pc (frame, get_frame_pc (frame));
2207
2208  insert_single_step_breakpoint (gdbarch, aspace, next_pc);
2209
2210  return 1;
2211}
2212
2213/* Implement the get_longjump_target gdbarch method.  */
2214
2215static int
2216nios2_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
2217{
2218  struct gdbarch *gdbarch = get_frame_arch (frame);
2219  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
2220  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2221  CORE_ADDR jb_addr = get_frame_register_unsigned (frame, NIOS2_R4_REGNUM);
2222  gdb_byte buf[4];
2223
2224  if (target_read_memory (jb_addr + (tdep->jb_pc * 4), buf, 4))
2225    return 0;
2226
2227  *pc = extract_unsigned_integer (buf, 4, byte_order);
2228  return 1;
2229}
2230
2231/* Initialize the Nios II gdbarch.  */
2232
2233static struct gdbarch *
2234nios2_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2235{
2236  struct gdbarch *gdbarch;
2237  struct gdbarch_tdep *tdep;
2238  int i;
2239  struct tdesc_arch_data *tdesc_data = NULL;
2240  const struct target_desc *tdesc = info.target_desc;
2241
2242  if (!tdesc_has_registers (tdesc))
2243    /* Pick a default target description.  */
2244    tdesc = tdesc_nios2;
2245
2246  /* Check any target description for validity.  */
2247  if (tdesc_has_registers (tdesc))
2248    {
2249      const struct tdesc_feature *feature;
2250      int valid_p;
2251
2252      feature = tdesc_find_feature (tdesc, "org.gnu.gdb.nios2.cpu");
2253      if (feature == NULL)
2254	return NULL;
2255
2256      tdesc_data = tdesc_data_alloc ();
2257
2258      valid_p = 1;
2259
2260      for (i = 0; i < NIOS2_NUM_REGS; i++)
2261	valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
2262					    nios2_reg_names[i]);
2263
2264      if (!valid_p)
2265	{
2266	  tdesc_data_cleanup (tdesc_data);
2267	  return NULL;
2268	}
2269    }
2270
2271  /* Find a candidate among the list of pre-declared architectures.  */
2272  arches = gdbarch_list_lookup_by_info (arches, &info);
2273  if (arches != NULL)
2274    return arches->gdbarch;
2275
2276  /* None found, create a new architecture from the information
2277     provided.  */
2278  tdep = XCNEW (struct gdbarch_tdep);
2279  gdbarch = gdbarch_alloc (&info, tdep);
2280
2281  /* longjmp support not enabled by default.  */
2282  tdep->jb_pc = -1;
2283
2284  /* Data type sizes.  */
2285  set_gdbarch_ptr_bit (gdbarch, 32);
2286  set_gdbarch_addr_bit (gdbarch, 32);
2287  set_gdbarch_short_bit (gdbarch, 16);
2288  set_gdbarch_int_bit (gdbarch, 32);
2289  set_gdbarch_long_bit (gdbarch, 32);
2290  set_gdbarch_long_long_bit (gdbarch, 64);
2291  set_gdbarch_float_bit (gdbarch, 32);
2292  set_gdbarch_double_bit (gdbarch, 64);
2293
2294  set_gdbarch_float_format (gdbarch, floatformats_ieee_single);
2295  set_gdbarch_double_format (gdbarch, floatformats_ieee_double);
2296
2297  /* The register set.  */
2298  set_gdbarch_num_regs (gdbarch, NIOS2_NUM_REGS);
2299  set_gdbarch_sp_regnum (gdbarch, NIOS2_SP_REGNUM);
2300  set_gdbarch_pc_regnum (gdbarch, NIOS2_PC_REGNUM);	/* Pseudo register PC */
2301
2302  set_gdbarch_register_name (gdbarch, nios2_register_name);
2303  set_gdbarch_register_type (gdbarch, nios2_register_type);
2304
2305  /* Provide register mappings for stabs and dwarf2.  */
2306  set_gdbarch_stab_reg_to_regnum (gdbarch, nios2_dwarf_reg_to_regnum);
2307  set_gdbarch_dwarf2_reg_to_regnum (gdbarch, nios2_dwarf_reg_to_regnum);
2308
2309  set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
2310
2311  /* Call dummy code.  */
2312  set_gdbarch_frame_align (gdbarch, nios2_frame_align);
2313
2314  set_gdbarch_return_value (gdbarch, nios2_return_value);
2315
2316  set_gdbarch_skip_prologue (gdbarch, nios2_skip_prologue);
2317  set_gdbarch_stack_frame_destroyed_p (gdbarch, nios2_stack_frame_destroyed_p);
2318  set_gdbarch_breakpoint_from_pc (gdbarch, nios2_breakpoint_from_pc);
2319
2320  set_gdbarch_dummy_id (gdbarch, nios2_dummy_id);
2321  set_gdbarch_unwind_pc (gdbarch, nios2_unwind_pc);
2322  set_gdbarch_unwind_sp (gdbarch, nios2_unwind_sp);
2323
2324  /* The dwarf2 unwinder will normally produce the best results if
2325     the debug information is available, so register it first.  */
2326  dwarf2_append_unwinders (gdbarch);
2327  frame_unwind_append_unwinder (gdbarch, &nios2_stub_frame_unwind);
2328  frame_unwind_append_unwinder (gdbarch, &nios2_frame_unwind);
2329
2330  /* Single stepping.  */
2331  set_gdbarch_software_single_step (gdbarch, nios2_software_single_step);
2332
2333  /* Hook in ABI-specific overrides, if they have been registered.  */
2334  gdbarch_init_osabi (info, gdbarch);
2335
2336  if (tdep->jb_pc >= 0)
2337    set_gdbarch_get_longjmp_target (gdbarch, nios2_get_longjmp_target);
2338
2339  frame_base_set_default (gdbarch, &nios2_frame_base);
2340
2341  set_gdbarch_print_insn (gdbarch, nios2_print_insn);
2342
2343  /* Enable inferior call support.  */
2344  set_gdbarch_push_dummy_call (gdbarch, nios2_push_dummy_call);
2345
2346  if (tdesc_data)
2347    tdesc_use_registers (gdbarch, tdesc, tdesc_data);
2348
2349  return gdbarch;
2350}
2351
2352extern initialize_file_ftype _initialize_nios2_tdep; /* -Wmissing-prototypes */
2353
2354void
2355_initialize_nios2_tdep (void)
2356{
2357  gdbarch_register (bfd_arch_nios2, nios2_gdbarch_init, NULL);
2358  initialize_tdesc_nios2 ();
2359
2360  /* Allow debugging this file's internals.  */
2361  add_setshow_boolean_cmd ("nios2", class_maintenance, &nios2_debug,
2362			   _("Set Nios II debugging."),
2363			   _("Show Nios II debugging."),
2364			   _("When on, Nios II specific debugging is enabled."),
2365			   NULL,
2366			   NULL,
2367			   &setdebuglist, &showdebuglist);
2368}
2369