update copyright year range in GDB files
[external/binutils.git] / gdb / nds32-tdep.c
1 /* Target-dependent code for the NDS32 architecture, for GDB.
2
3    Copyright (C) 2013-2017 Free Software Foundation, Inc.
4    Contributed by Andes Technology Corporation.
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 "frame-unwind.h"
24 #include "frame-base.h"
25 #include "symtab.h"
26 #include "gdbtypes.h"
27 #include "gdbcore.h"
28 #include "value.h"
29 #include "reggroups.h"
30 #include "inferior.h"
31 #include "osabi.h"
32 #include "arch-utils.h"
33 #include "regcache.h"
34 #include "dis-asm.h"
35 #include "user-regs.h"
36 #include "elf-bfd.h"
37 #include "dwarf2-frame.h"
38 #include "remote.h"
39 #include "target-descriptions.h"
40
41 #include "nds32-tdep.h"
42 #include "elf/nds32.h"
43 #include "opcode/nds32.h"
44 #include <algorithm>
45
46 #include "features/nds32.c"
47
48 /* Simple macros for instruction analysis.  */
49 #define CHOP_BITS(insn, n)      (insn & ~__MASK (n))
50 #define N32_LSMW_ENABLE4(insn)  (((insn) >> 6) & 0xf)
51 #define N32_SMW_ADM \
52         N32_TYPE4 (LSMW, 0, 0, 0, 1, (N32_LSMW_ADM << 2) | N32_LSMW_LSMW)
53 #define N32_LMW_BIM \
54         N32_TYPE4 (LSMW, 0, 0, 0, 0, (N32_LSMW_BIM << 2) | N32_LSMW_LSMW)
55 #define N32_FLDI_SP \
56         N32_TYPE2 (LDC, 0, REG_SP, 0)
57
58 extern void _initialize_nds32_tdep (void);
59
60 /* Use an invalid address value as 'not available' marker.  */
61 enum { REG_UNAVAIL = (CORE_ADDR) -1 };
62
63 /* Use an impossible value as invalid offset.  */
64 enum { INVALID_OFFSET = (CORE_ADDR) -1 };
65
66 /* Instruction groups for NDS32 epilogue analysis.  */
67 enum
68 {
69   /* Instructions used everywhere, not only in epilogue.  */
70   INSN_NORMAL,
71   /* Instructions used to reset sp for local vars, arguments, etc.  */
72   INSN_RESET_SP,
73   /* Instructions used to recover saved regs and to recover padding.  */
74   INSN_RECOVER,
75   /* Instructions used to return to the caller.  */
76   INSN_RETURN,
77   /* Instructions used to recover saved regs and to return to the caller.  */
78   INSN_RECOVER_RETURN,
79 };
80
81 static const char *const nds32_register_names[] =
82 {
83   /* 32 GPRs.  */
84   "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
85   "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
86   "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
87   "r24", "r25", "r26", "r27", "fp", "gp", "lp", "sp",
88   /* PC.  */
89   "pc",
90 };
91
92 static const char *const nds32_fdr_register_names[] =
93 {
94   "fd0", "fd1", "fd2", "fd3", "fd4", "fd5", "fd6", "fd7",
95   "fd8", "fd9", "fd10", "fd11", "fd12", "fd13", "fd14", "fd15",
96   "fd16", "fd17", "fd18", "fd19", "fd20", "fd21", "fd22", "fd23",
97   "fd24", "fd25", "fd26", "fd27", "fd28", "fd29", "fd30", "fd31"
98 };
99
100 static const char *const nds32_fsr_register_names[] =
101 {
102   "fs0", "fs1", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7",
103   "fs8", "fs9", "fs10", "fs11", "fs12", "fs13", "fs14", "fs15",
104   "fs16", "fs17", "fs18", "fs19", "fs20", "fs21", "fs22", "fs23",
105   "fs24", "fs25", "fs26", "fs27", "fs28", "fs29", "fs30", "fs31"
106 };
107
108 /* The number of registers for four FPU configuration options.  */
109 const int num_fdr_map[] = { 4, 8, 16, 32 };
110 const int num_fsr_map[] = { 8, 16, 32, 32 };
111
112 /* Aliases for registers.  */
113 static const struct
114 {
115   const char *name;
116   const char *alias;
117 } nds32_register_aliases[] =
118 {
119   {"r15", "ta"},
120   {"r26", "p0"},
121   {"r27", "p1"},
122   {"fp", "r28"},
123   {"gp", "r29"},
124   {"lp", "r30"},
125   {"sp", "r31"},
126
127   {"cr0", "cpu_ver"},
128   {"cr1", "icm_cfg"},
129   {"cr2", "dcm_cfg"},
130   {"cr3", "mmu_cfg"},
131   {"cr4", "msc_cfg"},
132   {"cr5", "core_id"},
133   {"cr6", "fucop_exist"},
134   {"cr7", "msc_cfg2"},
135
136   {"ir0", "psw"},
137   {"ir1", "ipsw"},
138   {"ir2", "p_psw"},
139   {"ir3", "ivb"},
140   {"ir4", "eva"},
141   {"ir5", "p_eva"},
142   {"ir6", "itype"},
143   {"ir7", "p_itype"},
144   {"ir8", "merr"},
145   {"ir9", "ipc"},
146   {"ir10", "p_ipc"},
147   {"ir11", "oipc"},
148   {"ir12", "p_p0"},
149   {"ir13", "p_p1"},
150   {"ir14", "int_mask"},
151   {"ir15", "int_pend"},
152   {"ir16", "sp_usr"},
153   {"ir17", "sp_priv"},
154   {"ir18", "int_pri"},
155   {"ir19", "int_ctrl"},
156   {"ir20", "sp_usr1"},
157   {"ir21", "sp_priv1"},
158   {"ir22", "sp_usr2"},
159   {"ir23", "sp_priv2"},
160   {"ir24", "sp_usr3"},
161   {"ir25", "sp_priv3"},
162   {"ir26", "int_mask2"},
163   {"ir27", "int_pend2"},
164   {"ir28", "int_pri2"},
165   {"ir29", "int_trigger"},
166
167   {"mr0", "mmu_ctl"},
168   {"mr1", "l1_pptb"},
169   {"mr2", "tlb_vpn"},
170   {"mr3", "tlb_data"},
171   {"mr4", "tlb_misc"},
172   {"mr5", "vlpt_idx"},
173   {"mr6", "ilmb"},
174   {"mr7", "dlmb"},
175   {"mr8", "cache_ctl"},
176   {"mr9", "hsmp_saddr"},
177   {"mr10", "hsmp_eaddr"},
178   {"mr11", "bg_region"},
179
180   {"dr0", "bpc0"},
181   {"dr1", "bpc1"},
182   {"dr2", "bpc2"},
183   {"dr3", "bpc3"},
184   {"dr4", "bpc4"},
185   {"dr5", "bpc5"},
186   {"dr6", "bpc6"},
187   {"dr7", "bpc7"},
188   {"dr8", "bpa0"},
189   {"dr9", "bpa1"},
190   {"dr10", "bpa2"},
191   {"dr11", "bpa3"},
192   {"dr12", "bpa4"},
193   {"dr13", "bpa5"},
194   {"dr14", "bpa6"},
195   {"dr15", "bpa7"},
196   {"dr16", "bpam0"},
197   {"dr17", "bpam1"},
198   {"dr18", "bpam2"},
199   {"dr19", "bpam3"},
200   {"dr20", "bpam4"},
201   {"dr21", "bpam5"},
202   {"dr22", "bpam6"},
203   {"dr23", "bpam7"},
204   {"dr24", "bpv0"},
205   {"dr25", "bpv1"},
206   {"dr26", "bpv2"},
207   {"dr27", "bpv3"},
208   {"dr28", "bpv4"},
209   {"dr29", "bpv5"},
210   {"dr30", "bpv6"},
211   {"dr31", "bpv7"},
212   {"dr32", "bpcid0"},
213   {"dr33", "bpcid1"},
214   {"dr34", "bpcid2"},
215   {"dr35", "bpcid3"},
216   {"dr36", "bpcid4"},
217   {"dr37", "bpcid5"},
218   {"dr38", "bpcid6"},
219   {"dr39", "bpcid7"},
220   {"dr40", "edm_cfg"},
221   {"dr41", "edmsw"},
222   {"dr42", "edm_ctl"},
223   {"dr43", "edm_dtr"},
224   {"dr44", "bpmtc"},
225   {"dr45", "dimbr"},
226   {"dr46", "tecr0"},
227   {"dr47", "tecr1"},
228
229   {"hspr0", "hsp_ctl"},
230   {"hspr1", "sp_bound"},
231   {"hspr2", "sp_bound_priv"},
232
233   {"pfr0", "pfmc0"},
234   {"pfr1", "pfmc1"},
235   {"pfr2", "pfmc2"},
236   {"pfr3", "pfm_ctl"},
237   {"pfr4", "pft_ctl"},
238
239   {"dmar0", "dma_cfg"},
240   {"dmar1", "dma_gcsw"},
241   {"dmar2", "dma_chnsel"},
242   {"dmar3", "dma_act"},
243   {"dmar4", "dma_setup"},
244   {"dmar5", "dma_isaddr"},
245   {"dmar6", "dma_esaddr"},
246   {"dmar7", "dma_tcnt"},
247   {"dmar8", "dma_status"},
248   {"dmar9", "dma_2dset"},
249   {"dmar10", "dma_2dsctl"},
250   {"dmar11", "dma_rcnt"},
251   {"dmar12", "dma_hstatus"},
252
253   {"racr0", "prusr_acc_ctl"},
254   {"fucpr", "fucop_ctl"},
255
256   {"idr0", "sdz_ctl"},
257   {"idr1", "misc_ctl"},
258   {"idr2", "ecc_misc"},
259
260   {"secur0", "sfcr"},
261   {"secur1", "sign"},
262   {"secur2", "isign"},
263   {"secur3", "p_isign"},
264 };
265
266 /* Value of a register alias.  BATON is the regnum of the corresponding
267    register.  */
268
269 static struct value *
270 value_of_nds32_reg (struct frame_info *frame, const void *baton)
271 {
272   return value_of_register ((int) (intptr_t) baton, frame);
273 }
274 \f
275 /* Implement the "frame_align" gdbarch method.  */
276
277 static CORE_ADDR
278 nds32_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
279 {
280   /* 8-byte aligned.  */
281   return align_down (sp, 8);
282 }
283
284 /* The same insn machine code is used for little-endian and big-endian.  */
285 constexpr gdb_byte nds32_break_insn[] = { 0xEA, 0x00 };
286
287 typedef BP_MANIPULATION (nds32_break_insn) nds32_breakpoint;
288
289 /* Implement the "dwarf2_reg_to_regnum" gdbarch method.  */
290
291 static int
292 nds32_dwarf2_reg_to_regnum (struct gdbarch *gdbarch, int num)
293 {
294   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
295   const int FSR = 38;
296   const int FDR = FSR + 32;
297
298   if (num >= 0 && num < 32)
299     {
300       /* General-purpose registers (R0 - R31).  */
301       return num;
302     }
303   else if (num >= FSR && num < FSR + 32)
304     {
305       /* Single precision floating-point registers (FS0 - FS31).  */
306       return num - FSR + tdep->fs0_regnum;
307     }
308   else if (num >= FDR && num < FDR + 32)
309     {
310       /* Double precision floating-point registers (FD0 - FD31).  */
311       return num - FDR + NDS32_FD0_REGNUM;
312     }
313
314   /* No match, return a inaccessible register number.  */
315   return -1;
316 }
317 \f
318 /* NDS32 register groups.  */
319 static struct reggroup *nds32_cr_reggroup;
320 static struct reggroup *nds32_ir_reggroup;
321 static struct reggroup *nds32_mr_reggroup;
322 static struct reggroup *nds32_dr_reggroup;
323 static struct reggroup *nds32_pfr_reggroup;
324 static struct reggroup *nds32_hspr_reggroup;
325 static struct reggroup *nds32_dmar_reggroup;
326 static struct reggroup *nds32_racr_reggroup;
327 static struct reggroup *nds32_idr_reggroup;
328 static struct reggroup *nds32_secur_reggroup;
329
330 static void
331 nds32_init_reggroups (void)
332 {
333   nds32_cr_reggroup = reggroup_new ("cr", USER_REGGROUP);
334   nds32_ir_reggroup = reggroup_new ("ir", USER_REGGROUP);
335   nds32_mr_reggroup = reggroup_new ("mr", USER_REGGROUP);
336   nds32_dr_reggroup = reggroup_new ("dr", USER_REGGROUP);
337   nds32_pfr_reggroup = reggroup_new ("pfr", USER_REGGROUP);
338   nds32_hspr_reggroup = reggroup_new ("hspr", USER_REGGROUP);
339   nds32_dmar_reggroup = reggroup_new ("dmar", USER_REGGROUP);
340   nds32_racr_reggroup = reggroup_new ("racr", USER_REGGROUP);
341   nds32_idr_reggroup = reggroup_new ("idr", USER_REGGROUP);
342   nds32_secur_reggroup = reggroup_new ("secur", USER_REGGROUP);
343 }
344
345 static void
346 nds32_add_reggroups (struct gdbarch *gdbarch)
347 {
348   /* Add pre-defined register groups.  */
349   reggroup_add (gdbarch, general_reggroup);
350   reggroup_add (gdbarch, float_reggroup);
351   reggroup_add (gdbarch, system_reggroup);
352   reggroup_add (gdbarch, all_reggroup);
353   reggroup_add (gdbarch, save_reggroup);
354   reggroup_add (gdbarch, restore_reggroup);
355
356   /* Add NDS32 register groups.  */
357   reggroup_add (gdbarch, nds32_cr_reggroup);
358   reggroup_add (gdbarch, nds32_ir_reggroup);
359   reggroup_add (gdbarch, nds32_mr_reggroup);
360   reggroup_add (gdbarch, nds32_dr_reggroup);
361   reggroup_add (gdbarch, nds32_pfr_reggroup);
362   reggroup_add (gdbarch, nds32_hspr_reggroup);
363   reggroup_add (gdbarch, nds32_dmar_reggroup);
364   reggroup_add (gdbarch, nds32_racr_reggroup);
365   reggroup_add (gdbarch, nds32_idr_reggroup);
366   reggroup_add (gdbarch, nds32_secur_reggroup);
367 }
368
369 /* Implement the "register_reggroup_p" gdbarch method.  */
370
371 static int
372 nds32_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
373                            struct reggroup *reggroup)
374 {
375   const char *reg_name;
376   const char *group_name;
377   int ret;
378
379   if (reggroup == all_reggroup)
380     return 1;
381
382   /* General reggroup contains only GPRs and PC.  */
383   if (reggroup == general_reggroup)
384     return regnum <= NDS32_PC_REGNUM;
385
386   if (reggroup == float_reggroup || reggroup == save_reggroup
387       || reggroup == restore_reggroup)
388     {
389       ret = tdesc_register_in_reggroup_p (gdbarch, regnum, reggroup);
390       if (ret != -1)
391         return ret;
392
393       return default_register_reggroup_p (gdbarch, regnum, reggroup);
394     }
395
396   if (reggroup == system_reggroup)
397     return (regnum > NDS32_PC_REGNUM)
398             && !nds32_register_reggroup_p (gdbarch, regnum, float_reggroup);
399
400   /* The NDS32 reggroup contains registers whose name is prefixed
401      by reggroup name.  */
402   reg_name = gdbarch_register_name (gdbarch, regnum);
403   group_name = reggroup_name (reggroup);
404   return !strncmp (reg_name, group_name, strlen (group_name));
405 }
406 \f
407 /* Implement the "pseudo_register_type" tdesc_arch_data method.  */
408
409 static struct type *
410 nds32_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
411 {
412   regnum -= gdbarch_num_regs (gdbarch);
413
414   /* Currently, only FSRs could be defined as pseudo registers.  */
415   if (regnum < gdbarch_num_pseudo_regs (gdbarch))
416     return arch_float_type (gdbarch, -1, "builtin_type_ieee_single",
417                             floatformats_ieee_single);
418
419   warning (_("Unknown nds32 pseudo register %d."), regnum);
420   return NULL;
421 }
422
423 /* Implement the "pseudo_register_name" tdesc_arch_data method.  */
424
425 static const char *
426 nds32_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
427 {
428   regnum -= gdbarch_num_regs (gdbarch);
429
430   /* Currently, only FSRs could be defined as pseudo registers.  */
431   if (regnum < gdbarch_num_pseudo_regs (gdbarch))
432     return nds32_fsr_register_names[regnum];
433
434   warning (_("Unknown nds32 pseudo register %d."), regnum);
435   return NULL;
436 }
437
438 /* Implement the "pseudo_register_read" gdbarch method.  */
439
440 static enum register_status
441 nds32_pseudo_register_read (struct gdbarch *gdbarch,
442                             struct regcache *regcache, int regnum,
443                             gdb_byte *buf)
444 {
445   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
446   gdb_byte reg_buf[8];
447   int offset, fdr_regnum;
448   enum register_status status = REG_UNKNOWN;
449
450   /* Sanity check.  */
451   if (tdep->fpu_freg == -1 || tdep->use_pseudo_fsrs == 0)
452     return status;
453
454   regnum -= gdbarch_num_regs (gdbarch);
455
456   /* Currently, only FSRs could be defined as pseudo registers.  */
457   if (regnum < gdbarch_num_pseudo_regs (gdbarch))
458     {
459       /* fs0 is always the most significant half of fd0.  */
460       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
461         offset = (regnum & 1) ? 4 : 0;
462       else
463         offset = (regnum & 1) ? 0 : 4;
464
465       fdr_regnum = NDS32_FD0_REGNUM + (regnum >> 1);
466       status = regcache_raw_read (regcache, fdr_regnum, reg_buf);
467       if (status == REG_VALID)
468         memcpy (buf, reg_buf + offset, 4);
469     }
470
471   return status;
472 }
473
474 /* Implement the "pseudo_register_write" gdbarch method.  */
475
476 static void
477 nds32_pseudo_register_write (struct gdbarch *gdbarch,
478                              struct regcache *regcache, int regnum,
479                              const gdb_byte *buf)
480 {
481   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
482   gdb_byte reg_buf[8];
483   int offset, fdr_regnum;
484
485   /* Sanity check.  */
486   if (tdep->fpu_freg == -1 || tdep->use_pseudo_fsrs == 0)
487     return;
488
489   regnum -= gdbarch_num_regs (gdbarch);
490
491   /* Currently, only FSRs could be defined as pseudo registers.  */
492   if (regnum < gdbarch_num_pseudo_regs (gdbarch))
493     {
494       /* fs0 is always the most significant half of fd0.  */
495       if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
496         offset = (regnum & 1) ? 4 : 0;
497       else
498         offset = (regnum & 1) ? 0 : 4;
499
500       fdr_regnum = NDS32_FD0_REGNUM + (regnum >> 1);
501       regcache_raw_read (regcache, fdr_regnum, reg_buf);
502       memcpy (reg_buf + offset, buf, 4);
503       regcache_raw_write (regcache, fdr_regnum, reg_buf);
504     }
505 }
506 \f
507 /* Helper function for NDS32 ABI.  Return true if FPRs can be used
508    to pass function arguments and return value.  */
509
510 static int
511 nds32_abi_use_fpr (int elf_abi)
512 {
513   return elf_abi == E_NDS_ABI_V2FP_PLUS;
514 }
515
516 /* Helper function for NDS32 ABI.  Return true if GPRs and stack
517    can be used together to pass an argument.  */
518
519 static int
520 nds32_abi_split (int elf_abi)
521 {
522   return elf_abi == E_NDS_ABI_AABI;
523 }
524
525 #define NDS32_NUM_SAVED_REGS (NDS32_LP_REGNUM + 1)
526
527 struct nds32_frame_cache
528 {
529   /* The previous frame's inner most stack address.  Used as this
530      frame ID's stack_addr.  */
531   CORE_ADDR prev_sp;
532
533   /* The frame's base, optionally used by the high-level debug info.  */
534   CORE_ADDR base;
535
536   /* During prologue analysis, keep how far the SP and FP have been offset
537      from the start of the stack frame (as defined by the previous frame's
538      stack pointer).
539      During epilogue analysis, keep how far the SP has been offset from the
540      current stack pointer.  */
541   CORE_ADDR sp_offset;
542   CORE_ADDR fp_offset;
543
544   /* The address of the first instruction in this function.  */
545   CORE_ADDR pc;
546
547   /* Saved registers.  */
548   CORE_ADDR saved_regs[NDS32_NUM_SAVED_REGS];
549 };
550
551 /* Allocate and initialize a frame cache.  */
552
553 static struct nds32_frame_cache *
554 nds32_alloc_frame_cache (void)
555 {
556   struct nds32_frame_cache *cache;
557   int i;
558
559   cache = FRAME_OBSTACK_ZALLOC (struct nds32_frame_cache);
560
561   /* Initialize fp_offset to check if FP is set in prologue.  */
562   cache->fp_offset = INVALID_OFFSET;
563
564   /* Saved registers.  We initialize these to -1 since zero is a valid
565      offset.  */
566   for (i = 0; i < NDS32_NUM_SAVED_REGS; i++)
567     cache->saved_regs[i] = REG_UNAVAIL;
568
569   return cache;
570 }
571
572 /* Helper function for instructions used to push multiple words.  */
573
574 static void
575 nds32_push_multiple_words (struct nds32_frame_cache *cache, int rb, int re,
576                            int enable4)
577 {
578   CORE_ADDR sp_offset = cache->sp_offset;
579   int i;
580
581   /* Check LP, GP, FP in enable4.  */
582   for (i = 1; i <= 3; i++)
583     {
584       if ((enable4 >> i) & 0x1)
585         {
586           sp_offset += 4;
587           cache->saved_regs[NDS32_SP_REGNUM - i] = sp_offset;
588         }
589     }
590
591   /* Skip case where re == rb == sp.  */
592   if ((rb < REG_FP) && (re < REG_FP))
593     {
594       for (i = re; i >= rb; i--)
595         {
596           sp_offset += 4;
597           cache->saved_regs[i] = sp_offset;
598         }
599     }
600
601   /* For sp, update the offset.  */
602   cache->sp_offset = sp_offset;
603 }
604
605 /* Analyze the instructions within the given address range.  If CACHE
606    is non-NULL, fill it in.  Return the first address beyond the given
607    address range.  If CACHE is NULL, return the first address not
608    recognized as a prologue instruction.  */
609
610 static CORE_ADDR
611 nds32_analyze_prologue (struct gdbarch *gdbarch, CORE_ADDR pc,
612                         CORE_ADDR limit_pc, struct nds32_frame_cache *cache)
613 {
614   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
615   int abi_use_fpr = nds32_abi_use_fpr (tdep->elf_abi);
616   /* Current scanning status.  */
617   int in_prologue_bb = 0;
618   int val_ta = 0;
619   uint32_t insn, insn_len;
620
621   for (; pc < limit_pc; pc += insn_len)
622     {
623       insn = read_memory_unsigned_integer (pc, 4, BFD_ENDIAN_BIG);
624
625       if ((insn & 0x80000000) == 0)
626         {
627           /* 32-bit instruction */
628           insn_len = 4;
629
630           if (CHOP_BITS (insn, 15) == N32_TYPE2 (ADDI, REG_SP, REG_SP, 0))
631             {
632               /* addi $sp, $sp, imm15s */
633               int imm15s = N32_IMM15S (insn);
634
635               if (imm15s < 0)
636                 {
637                   if (cache != NULL)
638                     cache->sp_offset += -imm15s;
639
640                   in_prologue_bb = 1;
641                   continue;
642                 }
643             }
644           else if (CHOP_BITS (insn, 15) == N32_TYPE2 (ADDI, REG_FP, REG_SP, 0))
645             {
646               /* addi $fp, $sp, imm15s */
647               int imm15s = N32_IMM15S (insn);
648
649               if (imm15s > 0)
650                 {
651                   if (cache != NULL)
652                     cache->fp_offset = cache->sp_offset - imm15s;
653
654                   in_prologue_bb = 1;
655                   continue;
656                 }
657             }
658           else if ((insn & ~(__MASK (19) << 6)) == N32_SMW_ADM
659                    && N32_RA5 (insn) == REG_SP)
660             {
661               /* smw.adm Rb, [$sp], Re, enable4 */
662               if (cache != NULL)
663                 nds32_push_multiple_words (cache, N32_RT5 (insn),
664                                            N32_RB5 (insn),
665                                            N32_LSMW_ENABLE4 (insn));
666               in_prologue_bb = 1;
667               continue;
668             }
669           else if (insn == N32_ALU1 (ADD, REG_SP, REG_SP, REG_TA)
670                    || insn == N32_ALU1 (ADD, REG_SP, REG_TA, REG_SP))
671             {
672               /* add $sp, $sp, $ta */
673               /* add $sp, $ta, $sp */
674               if (val_ta < 0)
675                 {
676                   if (cache != NULL)
677                     cache->sp_offset += -val_ta;
678
679                   in_prologue_bb = 1;
680                   continue;
681                 }
682             }
683           else if (CHOP_BITS (insn, 20) == N32_TYPE1 (MOVI, REG_TA, 0))
684             {
685               /* movi $ta, imm20s */
686               if (cache != NULL)
687                 val_ta = N32_IMM20S (insn);
688
689               continue;
690             }
691           else if (CHOP_BITS (insn, 20) == N32_TYPE1 (SETHI, REG_TA, 0))
692             {
693               /* sethi $ta, imm20u */
694               if (cache != NULL)
695                 val_ta = N32_IMM20U (insn) << 12;
696
697               continue;
698             }
699           else if (CHOP_BITS (insn, 15) == N32_TYPE2 (ORI, REG_TA, REG_TA, 0))
700             {
701               /* ori $ta, $ta, imm15u */
702               if (cache != NULL)
703                 val_ta |= N32_IMM15U (insn);
704
705               continue;
706             }
707           else if (CHOP_BITS (insn, 15) == N32_TYPE2 (ADDI, REG_TA, REG_TA, 0))
708             {
709               /* addi $ta, $ta, imm15s */
710               if (cache != NULL)
711                 val_ta += N32_IMM15S (insn);
712
713               continue;
714             }
715           if (insn == N32_ALU1 (ADD, REG_GP, REG_TA, REG_GP)
716               || insn == N32_ALU1 (ADD, REG_GP, REG_GP, REG_TA))
717             {
718               /* add $gp, $ta, $gp */
719               /* add $gp, $gp, $ta */
720               in_prologue_bb = 1;
721               continue;
722             }
723           else if (CHOP_BITS (insn, 20) == N32_TYPE1 (MOVI, REG_GP, 0))
724             {
725               /* movi $gp, imm20s */
726               in_prologue_bb = 1;
727               continue;
728             }
729           else if (CHOP_BITS (insn, 20) == N32_TYPE1 (SETHI, REG_GP, 0))
730             {
731               /* sethi $gp, imm20u */
732               in_prologue_bb = 1;
733               continue;
734             }
735           else if (CHOP_BITS (insn, 15) == N32_TYPE2 (ORI, REG_GP, REG_GP, 0))
736             {
737               /* ori $gp, $gp, imm15u */
738               in_prologue_bb = 1;
739               continue;
740             }
741           else
742             {
743               /* Jump/Branch insns never appear in prologue basic block.
744                  The loop can be escaped early when these insns are met.  */
745               if (in_prologue_bb == 1)
746                 {
747                   int op = N32_OP6 (insn);
748
749                   if (op == N32_OP6_JI
750                       || op == N32_OP6_JREG
751                       || op == N32_OP6_BR1
752                       || op == N32_OP6_BR2
753                       || op == N32_OP6_BR3)
754                     break;
755                 }
756             }
757
758           if (abi_use_fpr && N32_OP6 (insn) == N32_OP6_SDC
759               && __GF (insn, 12, 3) == 0)
760             {
761               /* For FPU insns, CP (bit [13:14]) should be CP0,  and only
762                  normal form (bit [12] == 0) is used.  */
763
764               /* fsdi FDt, [$sp + (imm12s << 2)] */
765               if (N32_RA5 (insn) == REG_SP)
766                 continue;
767             }
768
769           /* The optimizer might shove anything into the prologue, if
770              we build up cache (cache != NULL) from analyzing prologue,
771              we just skip what we don't recognize and analyze further to
772              make cache as complete as possible.  However, if we skip
773              prologue, we'll stop immediately on unrecognized
774              instruction.  */
775           if (cache == NULL)
776             break;
777         }
778       else
779         {
780           /* 16-bit instruction */
781           insn_len = 2;
782
783           insn >>= 16;
784
785           if (CHOP_BITS (insn, 10) == N16_TYPE10 (ADDI10S, 0))
786             {
787               /* addi10s.sp */
788               int imm10s = N16_IMM10S (insn);
789
790               if (imm10s < 0)
791                 {
792                   if (cache != NULL)
793                     cache->sp_offset += -imm10s;
794
795                   in_prologue_bb = 1;
796                   continue;
797                 }
798             }
799           else if (__GF (insn, 7, 8) == N16_T25_PUSH25)
800             {
801               /* push25 */
802               if (cache != NULL)
803                 {
804                   int imm8u = (insn & 0x1f) << 3;
805                   int re = (insn >> 5) & 0x3;
806                   const int reg_map[] = { 6, 8, 10, 14 };
807
808                   /* Operation 1 -- smw.adm R6, [$sp], Re, #0xe */
809                   nds32_push_multiple_words (cache, 6, reg_map[re], 0xe);
810
811                   /* Operation 2 -- sp = sp - (imm5u << 3) */
812                   cache->sp_offset += imm8u;
813                 }
814
815               in_prologue_bb = 1;
816               continue;
817             }
818           else if (insn == N16_TYPE5 (ADD5PC, REG_GP))
819             {
820               /* add5.pc $gp */
821               in_prologue_bb = 1;
822               continue;
823             }
824           else if (CHOP_BITS (insn, 5) == N16_TYPE55 (MOVI55, REG_GP, 0))
825             {
826               /* movi55 $gp, imm5s */
827               in_prologue_bb = 1;
828               continue;
829             }
830           else
831             {
832               /* Jump/Branch insns never appear in prologue basic block.
833                  The loop can be escaped early when these insns are met.  */
834               if (in_prologue_bb == 1)
835                 {
836                   uint32_t insn5 = CHOP_BITS (insn, 5);
837                   uint32_t insn8 = CHOP_BITS (insn, 8);
838                   uint32_t insn38 = CHOP_BITS (insn, 11);
839
840                   if (insn5 == N16_TYPE5 (JR5, 0)
841                       || insn5 == N16_TYPE5 (JRAL5, 0)
842                       || insn5 == N16_TYPE5 (RET5, 0)
843                       || insn8 == N16_TYPE8 (J8, 0)
844                       || insn8 == N16_TYPE8 (BEQZS8, 0)
845                       || insn8 == N16_TYPE8 (BNEZS8, 0)
846                       || insn38 == N16_TYPE38 (BEQZ38, 0, 0)
847                       || insn38 == N16_TYPE38 (BNEZ38, 0, 0)
848                       || insn38 == N16_TYPE38 (BEQS38, 0, 0)
849                       || insn38 == N16_TYPE38 (BNES38, 0, 0))
850                     break;
851                 }
852             }
853
854           /* The optimizer might shove anything into the prologue, if
855              we build up cache (cache != NULL) from analyzing prologue,
856              we just skip what we don't recognize and analyze further to
857              make cache as complete as possible.  However, if we skip
858              prologue, we'll stop immediately on unrecognized
859              instruction.  */
860           if (cache == NULL)
861             break;
862         }
863     }
864
865   return pc;
866 }
867
868 /* Implement the "skip_prologue" gdbarch method.
869
870    Find the end of function prologue.  */
871
872 static CORE_ADDR
873 nds32_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
874 {
875   CORE_ADDR func_addr, limit_pc;
876
877   /* See if we can determine the end of the prologue via the symbol table.
878      If so, then return either PC, or the PC after the prologue, whichever
879      is greater.  */
880   if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
881     {
882       CORE_ADDR post_prologue_pc
883         = skip_prologue_using_sal (gdbarch, func_addr);
884       if (post_prologue_pc != 0)
885         return std::max (pc, post_prologue_pc);
886     }
887
888   /* Can't determine prologue from the symbol table, need to examine
889      instructions.  */
890
891   /* Find an upper limit on the function prologue using the debug
892      information.  If the debug information could not be used to provide
893      that bound, then use an arbitrary large number as the upper bound.  */
894   limit_pc = skip_prologue_using_sal (gdbarch, pc);
895   if (limit_pc == 0)
896     limit_pc = pc + 128;        /* Magic.  */
897
898   /* Find the end of prologue.  */
899   return nds32_analyze_prologue (gdbarch, pc, limit_pc, NULL);
900 }
901
902 /* Allocate and fill in *THIS_CACHE with information about the prologue of
903    *THIS_FRAME.  Do not do this if *THIS_CACHE was already allocated.  Return
904    a pointer to the current nds32_frame_cache in *THIS_CACHE.  */
905
906 static struct nds32_frame_cache *
907 nds32_frame_cache (struct frame_info *this_frame, void **this_cache)
908 {
909   struct gdbarch *gdbarch = get_frame_arch (this_frame);
910   struct nds32_frame_cache *cache;
911   CORE_ADDR current_pc;
912   ULONGEST prev_sp;
913   ULONGEST this_base;
914   int i;
915
916   if (*this_cache)
917     return (struct nds32_frame_cache *) *this_cache;
918
919   cache = nds32_alloc_frame_cache ();
920   *this_cache = cache;
921
922   cache->pc = get_frame_func (this_frame);
923   current_pc = get_frame_pc (this_frame);
924   nds32_analyze_prologue (gdbarch, cache->pc, current_pc, cache);
925
926   /* Compute the previous frame's stack pointer (which is also the
927      frame's ID's stack address), and this frame's base pointer.  */
928   if (cache->fp_offset != INVALID_OFFSET)
929     {
930       /* FP is set in prologue, so it can be used to calculate other info.  */
931       this_base = get_frame_register_unsigned (this_frame, NDS32_FP_REGNUM);
932       prev_sp = this_base + cache->fp_offset;
933     }
934   else
935     {
936       this_base = get_frame_register_unsigned (this_frame, NDS32_SP_REGNUM);
937       prev_sp = this_base + cache->sp_offset;
938     }
939
940   cache->prev_sp = prev_sp;
941   cache->base = this_base;
942
943   /* Adjust all the saved registers such that they contain addresses
944      instead of offsets.  */
945   for (i = 0; i < NDS32_NUM_SAVED_REGS; i++)
946     if (cache->saved_regs[i] != REG_UNAVAIL)
947       cache->saved_regs[i] = cache->prev_sp - cache->saved_regs[i];
948
949   return cache;
950 }
951
952 /* Implement the "this_id" frame_unwind method.
953
954    Our frame ID for a normal frame is the current function's starting
955    PC and the caller's SP when we were called.  */
956
957 static void
958 nds32_frame_this_id (struct frame_info *this_frame,
959                      void **this_cache, struct frame_id *this_id)
960 {
961   struct nds32_frame_cache *cache = nds32_frame_cache (this_frame, this_cache);
962
963   /* This marks the outermost frame.  */
964   if (cache->prev_sp == 0)
965     return;
966
967   *this_id = frame_id_build (cache->prev_sp, cache->pc);
968 }
969
970 /* Implement the "prev_register" frame_unwind method.  */
971
972 static struct value *
973 nds32_frame_prev_register (struct frame_info *this_frame, void **this_cache,
974                            int regnum)
975 {
976   struct nds32_frame_cache *cache = nds32_frame_cache (this_frame, this_cache);
977
978   if (regnum == NDS32_SP_REGNUM)
979     return frame_unwind_got_constant (this_frame, regnum, cache->prev_sp);
980
981   /* The PC of the previous frame is stored in the LP register of
982      the current frame.  */
983   if (regnum == NDS32_PC_REGNUM)
984     regnum = NDS32_LP_REGNUM;
985
986   if (regnum < NDS32_NUM_SAVED_REGS && cache->saved_regs[regnum] != REG_UNAVAIL)
987     return frame_unwind_got_memory (this_frame, regnum,
988                                     cache->saved_regs[regnum]);
989
990   return frame_unwind_got_register (this_frame, regnum, regnum);
991 }
992
993 static const struct frame_unwind nds32_frame_unwind =
994 {
995   NORMAL_FRAME,
996   default_frame_unwind_stop_reason,
997   nds32_frame_this_id,
998   nds32_frame_prev_register,
999   NULL,
1000   default_frame_sniffer,
1001 };
1002
1003 /* Return the frame base address of *THIS_FRAME.  */
1004
1005 static CORE_ADDR
1006 nds32_frame_base_address (struct frame_info *this_frame, void **this_cache)
1007 {
1008   struct nds32_frame_cache *cache = nds32_frame_cache (this_frame, this_cache);
1009
1010   return cache->base;
1011 }
1012
1013 static const struct frame_base nds32_frame_base =
1014 {
1015   &nds32_frame_unwind,
1016   nds32_frame_base_address,
1017   nds32_frame_base_address,
1018   nds32_frame_base_address
1019 };
1020 \f
1021 /* Helper function for instructions used to pop multiple words.  */
1022
1023 static void
1024 nds32_pop_multiple_words (struct nds32_frame_cache *cache, int rb, int re,
1025                           int enable4)
1026 {
1027   CORE_ADDR sp_offset = cache->sp_offset;
1028   int i;
1029
1030   /* Skip case where re == rb == sp.  */
1031   if ((rb < REG_FP) && (re < REG_FP))
1032     {
1033       for (i = rb; i <= re; i++)
1034         {
1035           cache->saved_regs[i] = sp_offset;
1036           sp_offset += 4;
1037         }
1038     }
1039
1040   /* Check FP, GP, LP in enable4.  */
1041   for (i = 3; i >= 1; i--)
1042     {
1043       if ((enable4 >> i) & 0x1)
1044         {
1045           cache->saved_regs[NDS32_SP_REGNUM - i] = sp_offset;
1046           sp_offset += 4;
1047         }
1048     }
1049
1050   /* For sp, update the offset.  */
1051   cache->sp_offset = sp_offset;
1052 }
1053
1054 /* The instruction sequences in NDS32 epilogue are
1055
1056    INSN_RESET_SP  (optional)
1057                   (If exists, this must be the first instruction in epilogue
1058                    and the stack has not been destroyed.).
1059    INSN_RECOVER  (optional).
1060    INSN_RETURN/INSN_RECOVER_RETURN  (required).  */
1061
1062 /* Helper function for analyzing the given 32-bit INSN.  If CACHE is non-NULL,
1063    the necessary information will be recorded.  */
1064
1065 static inline int
1066 nds32_analyze_epilogue_insn32 (int abi_use_fpr, uint32_t insn,
1067                                struct nds32_frame_cache *cache)
1068 {
1069   if (CHOP_BITS (insn, 15) == N32_TYPE2 (ADDI, REG_SP, REG_SP, 0)
1070       && N32_IMM15S (insn) > 0)
1071     /* addi $sp, $sp, imm15s */
1072     return INSN_RESET_SP;
1073   else if (CHOP_BITS (insn, 15) == N32_TYPE2 (ADDI, REG_SP, REG_FP, 0)
1074            && N32_IMM15S (insn) < 0)
1075     /* addi $sp, $fp, imm15s */
1076     return INSN_RESET_SP;
1077   else if ((insn & ~(__MASK (19) << 6)) == N32_LMW_BIM
1078            && N32_RA5 (insn) == REG_SP)
1079     {
1080       /* lmw.bim Rb, [$sp], Re, enable4 */
1081       if (cache != NULL)
1082         nds32_pop_multiple_words (cache, N32_RT5 (insn),
1083                                   N32_RB5 (insn), N32_LSMW_ENABLE4 (insn));
1084
1085       return INSN_RECOVER;
1086     }
1087   else if (insn == N32_JREG (JR, 0, REG_LP, 0, 1))
1088     /* ret $lp */
1089     return INSN_RETURN;
1090   else if (insn == N32_ALU1 (ADD, REG_SP, REG_SP, REG_TA)
1091            || insn == N32_ALU1 (ADD, REG_SP, REG_TA, REG_SP))
1092     /* add $sp, $sp, $ta */
1093     /* add $sp, $ta, $sp */
1094     return INSN_RESET_SP;
1095   else if (abi_use_fpr
1096            && (insn & ~(__MASK (5) << 20 | __MASK (13))) == N32_FLDI_SP)
1097     {
1098       if (__GF (insn, 12, 1) == 0)
1099         /* fldi FDt, [$sp + (imm12s << 2)] */
1100         return INSN_RECOVER;
1101       else
1102         {
1103           /* fldi.bi FDt, [$sp], (imm12s << 2) */
1104           int offset = N32_IMM12S (insn) << 2;
1105
1106           if (offset == 8 || offset == 12)
1107             {
1108               if (cache != NULL)
1109                 cache->sp_offset += offset;
1110
1111               return INSN_RECOVER;
1112             }
1113         }
1114     }
1115
1116   return INSN_NORMAL;
1117 }
1118
1119 /* Helper function for analyzing the given 16-bit INSN.  If CACHE is non-NULL,
1120    the necessary information will be recorded.  */
1121
1122 static inline int
1123 nds32_analyze_epilogue_insn16 (uint32_t insn, struct nds32_frame_cache *cache)
1124 {
1125   if (insn == N16_TYPE5 (RET5, REG_LP))
1126     /* ret5 $lp */
1127     return INSN_RETURN;
1128   else if (CHOP_BITS (insn, 10) == N16_TYPE10 (ADDI10S, 0))
1129     {
1130       /* addi10s.sp */
1131       int imm10s = N16_IMM10S (insn);
1132
1133       if (imm10s > 0)
1134         {
1135           if (cache != NULL)
1136             cache->sp_offset += imm10s;
1137
1138           return INSN_RECOVER;
1139         }
1140     }
1141   else if (__GF (insn, 7, 8) == N16_T25_POP25)
1142     {
1143       /* pop25 */
1144       if (cache != NULL)
1145         {
1146           int imm8u = (insn & 0x1f) << 3;
1147           int re = (insn >> 5) & 0x3;
1148           const int reg_map[] = { 6, 8, 10, 14 };
1149
1150           /* Operation 1 -- sp = sp + (imm5u << 3) */
1151           cache->sp_offset += imm8u;
1152
1153           /* Operation 2 -- lmw.bim R6, [$sp], Re, #0xe */
1154           nds32_pop_multiple_words (cache, 6, reg_map[re], 0xe);
1155         }
1156
1157       /* Operation 3 -- ret $lp */
1158       return INSN_RECOVER_RETURN;
1159     }
1160
1161   return INSN_NORMAL;
1162 }
1163
1164 /* Analyze a reasonable amount of instructions from the given PC to find
1165    the instruction used to return to the caller.  Return 1 if the 'return'
1166    instruction could be found, 0 otherwise.
1167
1168    If CACHE is non-NULL, fill it in.  */
1169
1170 static int
1171 nds32_analyze_epilogue (struct gdbarch *gdbarch, CORE_ADDR pc,
1172                         struct nds32_frame_cache *cache)
1173 {
1174   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1175   int abi_use_fpr = nds32_abi_use_fpr (tdep->elf_abi);
1176   CORE_ADDR limit_pc;
1177   uint32_t insn, insn_len;
1178   int insn_type = INSN_NORMAL;
1179
1180   if (abi_use_fpr)
1181     limit_pc = pc + 48;
1182   else
1183     limit_pc = pc + 16;
1184
1185   for (; pc < limit_pc; pc += insn_len)
1186     {
1187       insn = read_memory_unsigned_integer (pc, 4, BFD_ENDIAN_BIG);
1188
1189       if ((insn & 0x80000000) == 0)
1190         {
1191           /* 32-bit instruction */
1192           insn_len = 4;
1193
1194           insn_type = nds32_analyze_epilogue_insn32 (abi_use_fpr, insn, cache);
1195           if (insn_type == INSN_RETURN)
1196             return 1;
1197           else if (insn_type == INSN_RECOVER)
1198             continue;
1199         }
1200       else
1201         {
1202           /* 16-bit instruction */
1203           insn_len = 2;
1204
1205           insn >>= 16;
1206           insn_type = nds32_analyze_epilogue_insn16 (insn, cache);
1207           if (insn_type == INSN_RETURN || insn_type == INSN_RECOVER_RETURN)
1208             return 1;
1209           else if (insn_type == INSN_RECOVER)
1210             continue;
1211         }
1212
1213       /* Stop the scan if this is an unexpected instruction.  */
1214       break;
1215     }
1216
1217   return 0;
1218 }
1219
1220 /* Implement the "stack_frame_destroyed_p" gdbarch method.  */
1221
1222 static int
1223 nds32_stack_frame_destroyed_p (struct gdbarch *gdbarch, CORE_ADDR addr)
1224 {
1225   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1226   int abi_use_fpr = nds32_abi_use_fpr (tdep->elf_abi);
1227   int insn_type = INSN_NORMAL;
1228   int ret_found = 0;
1229   uint32_t insn;
1230
1231   insn = read_memory_unsigned_integer (addr, 4, BFD_ENDIAN_BIG);
1232
1233   if ((insn & 0x80000000) == 0)
1234     {
1235       /* 32-bit instruction */
1236
1237       insn_type = nds32_analyze_epilogue_insn32 (abi_use_fpr, insn, NULL);
1238     }
1239   else
1240     {
1241       /* 16-bit instruction */
1242
1243       insn >>= 16;
1244       insn_type = nds32_analyze_epilogue_insn16 (insn, NULL);
1245     }
1246
1247   if (insn_type == INSN_NORMAL || insn_type == INSN_RESET_SP)
1248     return 0;
1249
1250   /* Search the required 'return' instruction within the following reasonable
1251      instructions.  */
1252   ret_found = nds32_analyze_epilogue (gdbarch, addr, NULL);
1253   if (ret_found == 0)
1254     return 0;
1255
1256   /* Scan backwards to make sure that the last instruction has adjusted
1257      stack.  Both a 16-bit and a 32-bit instruction will be tried.  This is
1258      just a heuristic, so the false positives will be acceptable.  */
1259   insn = read_memory_unsigned_integer (addr - 2, 4, BFD_ENDIAN_BIG);
1260
1261   /* Only 16-bit instructions are possible at addr - 2.  */
1262   if ((insn & 0x80000000) != 0)
1263     {
1264       /* This may be a 16-bit instruction or part of a 32-bit instruction.  */
1265
1266       insn_type = nds32_analyze_epilogue_insn16 (insn >> 16, NULL);
1267       if (insn_type == INSN_RECOVER)
1268         return 1;
1269     }
1270
1271   insn = read_memory_unsigned_integer (addr - 4, 4, BFD_ENDIAN_BIG);
1272
1273   /* If this is a 16-bit instruction at addr - 4, then there must be another
1274      16-bit instruction at addr - 2, so only 32-bit instructions need to
1275      be analyzed here.  */
1276   if ((insn & 0x80000000) == 0)
1277     {
1278       /* This may be a 32-bit instruction or part of a 32-bit instruction.  */
1279
1280       insn_type = nds32_analyze_epilogue_insn32 (abi_use_fpr, insn, NULL);
1281       if (insn_type == INSN_RECOVER || insn_type == INSN_RESET_SP)
1282         return 1;
1283     }
1284
1285   return 0;
1286 }
1287
1288 /* Implement the "sniffer" frame_unwind method.  */
1289
1290 static int
1291 nds32_epilogue_frame_sniffer (const struct frame_unwind *self,
1292                               struct frame_info *this_frame, void **this_cache)
1293 {
1294   if (frame_relative_level (this_frame) == 0)
1295     return nds32_stack_frame_destroyed_p (get_frame_arch (this_frame),
1296                                           get_frame_pc (this_frame));
1297   else
1298     return 0;
1299 }
1300
1301 /* Allocate and fill in *THIS_CACHE with information needed to unwind
1302    *THIS_FRAME within epilogue.  Do not do this if *THIS_CACHE was already
1303    allocated.  Return a pointer to the current nds32_frame_cache in
1304    *THIS_CACHE.  */
1305
1306 static struct nds32_frame_cache *
1307 nds32_epilogue_frame_cache (struct frame_info *this_frame, void **this_cache)
1308 {
1309   struct gdbarch *gdbarch = get_frame_arch (this_frame);
1310   struct nds32_frame_cache *cache;
1311   CORE_ADDR current_pc, current_sp;
1312   int i;
1313
1314   if (*this_cache)
1315     return (struct nds32_frame_cache *) *this_cache;
1316
1317   cache = nds32_alloc_frame_cache ();
1318   *this_cache = cache;
1319
1320   cache->pc = get_frame_func (this_frame);
1321   current_pc = get_frame_pc (this_frame);
1322   nds32_analyze_epilogue (gdbarch, current_pc, cache);
1323
1324   current_sp = get_frame_register_unsigned (this_frame, NDS32_SP_REGNUM);
1325   cache->prev_sp = current_sp + cache->sp_offset;
1326
1327   /* Adjust all the saved registers such that they contain addresses
1328      instead of offsets.  */
1329   for (i = 0; i < NDS32_NUM_SAVED_REGS; i++)
1330     if (cache->saved_regs[i] != REG_UNAVAIL)
1331       cache->saved_regs[i] = current_sp + cache->saved_regs[i];
1332
1333   return cache;
1334 }
1335
1336 /* Implement the "this_id" frame_unwind method.  */
1337
1338 static void
1339 nds32_epilogue_frame_this_id (struct frame_info *this_frame,
1340                               void **this_cache, struct frame_id *this_id)
1341 {
1342   struct nds32_frame_cache *cache
1343     = nds32_epilogue_frame_cache (this_frame, this_cache);
1344
1345   /* This marks the outermost frame.  */
1346   if (cache->prev_sp == 0)
1347     return;
1348
1349   *this_id = frame_id_build (cache->prev_sp, cache->pc);
1350 }
1351
1352 /* Implement the "prev_register" frame_unwind method.  */
1353
1354 static struct value *
1355 nds32_epilogue_frame_prev_register (struct frame_info *this_frame,
1356                                     void **this_cache, int regnum)
1357 {
1358   struct nds32_frame_cache *cache
1359     = nds32_epilogue_frame_cache (this_frame, this_cache);
1360
1361   if (regnum == NDS32_SP_REGNUM)
1362     return frame_unwind_got_constant (this_frame, regnum, cache->prev_sp);
1363
1364   /* The PC of the previous frame is stored in the LP register of
1365      the current frame.  */
1366   if (regnum == NDS32_PC_REGNUM)
1367     regnum = NDS32_LP_REGNUM;
1368
1369   if (regnum < NDS32_NUM_SAVED_REGS && cache->saved_regs[regnum] != REG_UNAVAIL)
1370     return frame_unwind_got_memory (this_frame, regnum,
1371                                     cache->saved_regs[regnum]);
1372
1373   return frame_unwind_got_register (this_frame, regnum, regnum);
1374 }
1375
1376 static const struct frame_unwind nds32_epilogue_frame_unwind =
1377 {
1378   NORMAL_FRAME,
1379   default_frame_unwind_stop_reason,
1380   nds32_epilogue_frame_this_id,
1381   nds32_epilogue_frame_prev_register,
1382   NULL,
1383   nds32_epilogue_frame_sniffer
1384 };
1385 \f
1386 /* Implement the "dummy_id" gdbarch method.  */
1387
1388 static struct frame_id
1389 nds32_dummy_id (struct gdbarch *gdbarch, struct frame_info *this_frame)
1390 {
1391   CORE_ADDR sp = get_frame_register_unsigned (this_frame, NDS32_SP_REGNUM);
1392
1393   return frame_id_build (sp, get_frame_pc (this_frame));
1394 }
1395
1396 /* Implement the "unwind_pc" gdbarch method.  */
1397
1398 static CORE_ADDR
1399 nds32_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame)
1400 {
1401   return frame_unwind_register_unsigned (next_frame, NDS32_PC_REGNUM);
1402 }
1403
1404 /* Implement the "unwind_sp" gdbarch method.  */
1405
1406 static CORE_ADDR
1407 nds32_unwind_sp (struct gdbarch *gdbarch, struct frame_info *next_frame)
1408 {
1409   return frame_unwind_register_unsigned (next_frame, NDS32_SP_REGNUM);
1410 }
1411 \f
1412 /* Floating type and struct type that has only one floating type member
1413    can pass value using FPU registers (when FPU ABI is used).  */
1414
1415 static int
1416 nds32_check_calling_use_fpr (struct type *type)
1417 {
1418   struct type *t;
1419   enum type_code typecode;
1420
1421   t = type;
1422   while (1)
1423     {
1424       t = check_typedef (t);
1425       typecode = TYPE_CODE (t);
1426       if (typecode != TYPE_CODE_STRUCT)
1427         break;
1428       else if (TYPE_NFIELDS (t) != 1)
1429         return 0;
1430       else
1431         t = TYPE_FIELD_TYPE (t, 0);
1432     }
1433
1434   return typecode == TYPE_CODE_FLT;
1435 }
1436
1437 /* Return the alignment (in bytes) of the given type.  */
1438
1439 static int
1440 nds32_type_align (struct type *type)
1441 {
1442   int n;
1443   int align;
1444   int falign;
1445
1446   type = check_typedef (type);
1447   switch (TYPE_CODE (type))
1448     {
1449     default:
1450       /* Should never happen.  */
1451       internal_error (__FILE__, __LINE__, _("unknown type alignment"));
1452       return 4;
1453
1454     case TYPE_CODE_PTR:
1455     case TYPE_CODE_ENUM:
1456     case TYPE_CODE_INT:
1457     case TYPE_CODE_FLT:
1458     case TYPE_CODE_SET:
1459     case TYPE_CODE_RANGE:
1460     case TYPE_CODE_REF:
1461     case TYPE_CODE_CHAR:
1462     case TYPE_CODE_BOOL:
1463       return TYPE_LENGTH (type);
1464
1465     case TYPE_CODE_ARRAY:
1466     case TYPE_CODE_COMPLEX:
1467       return nds32_type_align (TYPE_TARGET_TYPE (type));
1468
1469     case TYPE_CODE_STRUCT:
1470     case TYPE_CODE_UNION:
1471       align = 1;
1472       for (n = 0; n < TYPE_NFIELDS (type); n++)
1473         {
1474           falign = nds32_type_align (TYPE_FIELD_TYPE (type, n));
1475           if (falign > align)
1476             align = falign;
1477         }
1478       return align;
1479     }
1480 }
1481
1482 /* Implement the "push_dummy_call" gdbarch method.  */
1483
1484 static CORE_ADDR
1485 nds32_push_dummy_call (struct gdbarch *gdbarch, struct value *function,
1486                        struct regcache *regcache, CORE_ADDR bp_addr,
1487                        int nargs, struct value **args, CORE_ADDR sp,
1488                        int struct_return, CORE_ADDR struct_addr)
1489 {
1490   const int REND = 6;           /* End for register offset.  */
1491   int goff = 0;                 /* Current gpr offset for argument.  */
1492   int foff = 0;                 /* Current fpr offset for argument.  */
1493   int soff = 0;                 /* Current stack offset for argument.  */
1494   int i;
1495   ULONGEST regval;
1496   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1497   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1498   struct type *func_type = value_type (function);
1499   int abi_use_fpr = nds32_abi_use_fpr (tdep->elf_abi);
1500   int abi_split = nds32_abi_split (tdep->elf_abi);
1501
1502   /* Set the return address.  For the NDS32, the return breakpoint is
1503      always at BP_ADDR.  */
1504   regcache_cooked_write_unsigned (regcache, NDS32_LP_REGNUM, bp_addr);
1505
1506   /* If STRUCT_RETURN is true, then the struct return address (in
1507      STRUCT_ADDR) will consume the first argument-passing register.
1508      Both adjust the register count and store that value.  */
1509   if (struct_return)
1510     {
1511       regcache_cooked_write_unsigned (regcache, NDS32_R0_REGNUM, struct_addr);
1512       goff++;
1513     }
1514
1515   /* Now make sure there's space on the stack */
1516   for (i = 0; i < nargs; i++)
1517     {
1518       struct type *type = value_type (args[i]);
1519       int align = nds32_type_align (type);
1520
1521       /* If align is zero, it may be an empty struct.
1522          Just ignore the argument of empty struct.  */
1523       if (align == 0)
1524         continue;
1525
1526       sp -= TYPE_LENGTH (type);
1527       sp = align_down (sp, align);
1528     }
1529
1530   /* Stack must be 8-byte aligned.  */
1531   sp = align_down (sp, 8);
1532
1533   soff = 0;
1534   for (i = 0; i < nargs; i++)
1535     {
1536       const gdb_byte *val;
1537       int align, len;
1538       struct type *type;
1539       int calling_use_fpr;
1540       int use_fpr = 0;
1541
1542       type = value_type (args[i]);
1543       calling_use_fpr = nds32_check_calling_use_fpr (type);
1544       len = TYPE_LENGTH (type);
1545       align = nds32_type_align (type);
1546       val = value_contents (args[i]);
1547
1548       /* The size of a composite type larger than 4 bytes will be rounded
1549          up to the nearest multiple of 4.  */
1550       if (len > 4)
1551         len = align_up (len, 4);
1552
1553       /* Variadic functions are handled differently between AABI and ABI2FP+.
1554
1555          For AABI, the caller pushes arguments in registers, callee stores
1556          unnamed arguments in stack, and then va_arg fetch arguments in stack.
1557          Therefore, we don't have to handle variadic functions specially.
1558
1559          For ABI2FP+, the caller pushes only named arguments in registers
1560          and pushes all unnamed arguments in stack.  */
1561
1562       if (abi_use_fpr && TYPE_VARARGS (func_type)
1563           && i >= TYPE_NFIELDS (func_type))
1564         goto use_stack;
1565
1566       /* Try to use FPRs to pass arguments only when
1567          1. The program is built using toolchain with FPU support.
1568          2. The type of this argument can use FPR to pass value.  */
1569       use_fpr = abi_use_fpr && calling_use_fpr;
1570
1571       if (use_fpr)
1572         {
1573           if (tdep->fpu_freg == -1)
1574             goto error_no_fpr;
1575
1576           /* Adjust alignment.  */
1577           if ((align >> 2) > 0)
1578             foff = align_up (foff, align >> 2);
1579
1580           if (foff < REND)
1581             {
1582               switch (len)
1583                 {
1584                 case 4:
1585                   regcache_cooked_write (regcache,
1586                                          tdep->fs0_regnum + foff, val);
1587                   foff++;
1588                   break;
1589                 case 8:
1590                   regcache_cooked_write (regcache,
1591                                          NDS32_FD0_REGNUM + (foff >> 1), val);
1592                   foff += 2;
1593                   break;
1594                 default:
1595                   /* Long double?  */
1596                   internal_error (__FILE__, __LINE__,
1597                                   "Do not know how to handle %d-byte double.\n",
1598                                   len);
1599                   break;
1600                 }
1601               continue;
1602             }
1603         }
1604       else
1605         {
1606           /*
1607              When passing arguments using GPRs,
1608
1609              * A composite type not larger than 4 bytes is passed in $rN.
1610                The format is as if the value is loaded with load instruction
1611                of corresponding size (e.g., LB, LH, LW).
1612
1613                For example,
1614
1615                        r0
1616                        31      0
1617                LITTLE: [x x b a]
1618                   BIG: [x x a b]
1619
1620              * Otherwise, a composite type is passed in consecutive registers.
1621                The size is rounded up to the nearest multiple of 4.
1622                The successive registers hold the parts of the argument as if
1623                were loaded using lmw instructions.
1624
1625                For example,
1626
1627                        r0        r1
1628                        31      0 31      0
1629                LITTLE: [d c b a] [x x x e]
1630                   BIG: [a b c d] [e x x x]
1631            */
1632
1633           /* Adjust alignment.  */
1634           if ((align >> 2) > 0)
1635             goff = align_up (goff, align >> 2);
1636
1637           if (len <= (REND - goff) * 4)
1638             {
1639               /* This argument can be passed wholly via GPRs.  */
1640               while (len > 0)
1641                 {
1642                   regval = extract_unsigned_integer (val, (len > 4) ? 4 : len,
1643                                                      byte_order);
1644                   regcache_cooked_write_unsigned (regcache,
1645                                                   NDS32_R0_REGNUM + goff,
1646                                                   regval);
1647                   len -= 4;
1648                   val += 4;
1649                   goff++;
1650                 }
1651               continue;
1652             }
1653           else if (abi_split)
1654             {
1655               /* Some parts of this argument can be passed via GPRs.  */
1656               while (goff < REND)
1657                 {
1658                   regval = extract_unsigned_integer (val, (len > 4) ? 4 : len,
1659                                                      byte_order);
1660                   regcache_cooked_write_unsigned (regcache,
1661                                                   NDS32_R0_REGNUM + goff,
1662                                                   regval);
1663                   len -= 4;
1664                   val += 4;
1665                   goff++;
1666                 }
1667             }
1668         }
1669
1670 use_stack:
1671       /*
1672          When pushing (split parts of) an argument into stack,
1673
1674          * A composite type not larger than 4 bytes is copied to different
1675            base address.
1676            In little-endian, the first byte of this argument is aligned
1677            at the low address of the next free word.
1678            In big-endian, the last byte of this argument is aligned
1679            at the high address of the next free word.
1680
1681            For example,
1682
1683            sp [ - ]  [ c ] hi
1684               [ c ]  [ b ]
1685               [ b ]  [ a ]
1686               [ a ]  [ - ] lo
1687              LITTLE   BIG
1688        */
1689
1690       /* Adjust alignment.  */
1691       soff = align_up (soff, align);
1692
1693       while (len > 0)
1694         {
1695           int rlen = (len > 4) ? 4 : len;
1696
1697           if (byte_order == BFD_ENDIAN_BIG)
1698             write_memory (sp + soff + 4 - rlen, val, rlen);
1699           else
1700             write_memory (sp + soff, val, rlen);
1701
1702           len -= 4;
1703           val += 4;
1704           soff += 4;
1705         }
1706     }
1707
1708   /* Finally, update the SP register.  */
1709   regcache_cooked_write_unsigned (regcache, NDS32_SP_REGNUM, sp);
1710
1711   return sp;
1712
1713 error_no_fpr:
1714   /* If use_fpr, but no floating-point register exists,
1715      then it is an error.  */
1716   error (_("Fail to call. FPU registers are required."));
1717 }
1718 \f
1719 /* Read, for architecture GDBARCH, a function return value of TYPE
1720    from REGCACHE, and copy that into VALBUF.  */
1721
1722 static void
1723 nds32_extract_return_value (struct gdbarch *gdbarch, struct type *type,
1724                             struct regcache *regcache, gdb_byte *valbuf)
1725 {
1726   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1727   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1728   int abi_use_fpr = nds32_abi_use_fpr (tdep->elf_abi);
1729   int calling_use_fpr;
1730   int len;
1731
1732   calling_use_fpr = nds32_check_calling_use_fpr (type);
1733   len = TYPE_LENGTH (type);
1734
1735   if (abi_use_fpr && calling_use_fpr)
1736     {
1737       if (len == 4)
1738         regcache_cooked_read (regcache, tdep->fs0_regnum, valbuf);
1739       else if (len == 8)
1740         regcache_cooked_read (regcache, NDS32_FD0_REGNUM, valbuf);
1741       else
1742         internal_error (__FILE__, __LINE__,
1743                         _("Cannot extract return value of %d bytes "
1744                           "long floating-point."), len);
1745     }
1746   else
1747     {
1748       /*
1749          When returning result,
1750
1751          * A composite type not larger than 4 bytes is returned in $r0.
1752            The format is as if the result is loaded with load instruction
1753            of corresponding size (e.g., LB, LH, LW).
1754
1755            For example,
1756
1757                    r0
1758                    31      0
1759            LITTLE: [x x b a]
1760               BIG: [x x a b]
1761
1762          * Otherwise, a composite type not larger than 8 bytes is returned
1763            in $r0 and $r1.
1764            In little-endian, the first word is loaded in $r0.
1765            In big-endian, the last word is loaded in $r1.
1766
1767            For example,
1768
1769                    r0        r1
1770                    31      0 31      0
1771            LITTLE: [d c b a] [x x x e]
1772               BIG: [x x x a] [b c d e]
1773        */
1774
1775       ULONGEST tmp;
1776
1777       if (len < 4)
1778         {
1779           /* By using store_unsigned_integer we avoid having to do
1780              anything special for small big-endian values.  */
1781           regcache_cooked_read_unsigned (regcache, NDS32_R0_REGNUM, &tmp);
1782           store_unsigned_integer (valbuf, len, byte_order, tmp);
1783         }
1784       else if (len == 4)
1785         {
1786           regcache_cooked_read (regcache, NDS32_R0_REGNUM, valbuf);
1787         }
1788       else if (len < 8)
1789         {
1790           int len1, len2;
1791
1792           len1 = byte_order == BFD_ENDIAN_BIG ? len - 4 : 4;
1793           len2 = len - len1;
1794
1795           regcache_cooked_read_unsigned (regcache, NDS32_R0_REGNUM, &tmp);
1796           store_unsigned_integer (valbuf, len1, byte_order, tmp);
1797
1798           regcache_cooked_read_unsigned (regcache, NDS32_R0_REGNUM + 1, &tmp);
1799           store_unsigned_integer (valbuf + len1, len2, byte_order, tmp);
1800         }
1801       else
1802         {
1803           regcache_cooked_read (regcache, NDS32_R0_REGNUM, valbuf);
1804           regcache_cooked_read (regcache, NDS32_R0_REGNUM + 1, valbuf + 4);
1805         }
1806     }
1807 }
1808
1809 /* Write, for architecture GDBARCH, a function return value of TYPE
1810    from VALBUF into REGCACHE.  */
1811
1812 static void
1813 nds32_store_return_value (struct gdbarch *gdbarch, struct type *type,
1814                           struct regcache *regcache, const gdb_byte *valbuf)
1815 {
1816   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1817   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
1818   int abi_use_fpr = nds32_abi_use_fpr (tdep->elf_abi);
1819   int calling_use_fpr;
1820   int len;
1821
1822   calling_use_fpr = nds32_check_calling_use_fpr (type);
1823   len = TYPE_LENGTH (type);
1824
1825   if (abi_use_fpr && calling_use_fpr)
1826     {
1827       if (len == 4)
1828         regcache_cooked_write (regcache, tdep->fs0_regnum, valbuf);
1829       else if (len == 8)
1830         regcache_cooked_write (regcache, NDS32_FD0_REGNUM, valbuf);
1831       else
1832         internal_error (__FILE__, __LINE__,
1833                         _("Cannot store return value of %d bytes "
1834                           "long floating-point."), len);
1835     }
1836   else
1837     {
1838       ULONGEST regval;
1839
1840       if (len < 4)
1841         {
1842           regval = extract_unsigned_integer (valbuf, len, byte_order);
1843           regcache_cooked_write_unsigned (regcache, NDS32_R0_REGNUM, regval);
1844         }
1845       else if (len == 4)
1846         {
1847           regcache_cooked_write (regcache, NDS32_R0_REGNUM, valbuf);
1848         }
1849       else if (len < 8)
1850         {
1851           int len1, len2;
1852
1853           len1 = byte_order == BFD_ENDIAN_BIG ? len - 4 : 4;
1854           len2 = len - len1;
1855
1856           regval = extract_unsigned_integer (valbuf, len1, byte_order);
1857           regcache_cooked_write_unsigned (regcache, NDS32_R0_REGNUM, regval);
1858
1859           regval = extract_unsigned_integer (valbuf + len1, len2, byte_order);
1860           regcache_cooked_write_unsigned (regcache, NDS32_R0_REGNUM + 1,
1861                                           regval);
1862         }
1863       else
1864         {
1865           regcache_cooked_write (regcache, NDS32_R0_REGNUM, valbuf);
1866           regcache_cooked_write (regcache, NDS32_R0_REGNUM + 1, valbuf + 4);
1867         }
1868     }
1869 }
1870
1871 /* Implement the "return_value" gdbarch method.
1872
1873    Determine, for architecture GDBARCH, how a return value of TYPE
1874    should be returned.  If it is supposed to be returned in registers,
1875    and READBUF is non-zero, read the appropriate value from REGCACHE,
1876    and copy it into READBUF.  If WRITEBUF is non-zero, write the value
1877    from WRITEBUF into REGCACHE.  */
1878
1879 static enum return_value_convention
1880 nds32_return_value (struct gdbarch *gdbarch, struct value *func_type,
1881                     struct type *type, struct regcache *regcache,
1882                     gdb_byte *readbuf, const gdb_byte *writebuf)
1883 {
1884   if (TYPE_LENGTH (type) > 8)
1885     {
1886       return RETURN_VALUE_STRUCT_CONVENTION;
1887     }
1888   else
1889     {
1890       if (readbuf != NULL)
1891         nds32_extract_return_value (gdbarch, type, regcache, readbuf);
1892       if (writebuf != NULL)
1893         nds32_store_return_value (gdbarch, type, regcache, writebuf);
1894
1895       return RETURN_VALUE_REGISTER_CONVENTION;
1896     }
1897 }
1898 \f
1899 /* Implement the "get_longjmp_target" gdbarch method.  */
1900
1901 static int
1902 nds32_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
1903 {
1904   gdb_byte buf[4];
1905   CORE_ADDR jb_addr;
1906   struct gdbarch *gdbarch = get_frame_arch (frame);
1907   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
1908
1909   jb_addr = get_frame_register_unsigned (frame, NDS32_R0_REGNUM);
1910
1911   if (target_read_memory (jb_addr + 11 * 4, buf, 4))
1912     return 0;
1913
1914   *pc = extract_unsigned_integer (buf, 4, byte_order);
1915   return 1;
1916 }
1917 \f
1918 /* Validate the given TDESC, and fixed-number some registers in it.
1919    Return 0 if the given TDESC does not contain the required feature
1920    or not contain required registers.  */
1921
1922 static int
1923 nds32_validate_tdesc_p (const struct target_desc *tdesc,
1924                         struct tdesc_arch_data *tdesc_data,
1925                         int *fpu_freg, int *use_pseudo_fsrs)
1926 {
1927   const struct tdesc_feature *feature;
1928   int i, valid_p;
1929
1930   feature = tdesc_find_feature (tdesc, "org.gnu.gdb.nds32.core");
1931   if (feature == NULL)
1932     return 0;
1933
1934   valid_p = 1;
1935   /* Validate and fixed-number R0-R10.  */
1936   for (i = NDS32_R0_REGNUM; i <= NDS32_R0_REGNUM + 10; i++)
1937     valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
1938                                         nds32_register_names[i]);
1939
1940   /* Validate R15.  */
1941   valid_p &= tdesc_unnumbered_register (feature,
1942                                         nds32_register_names[NDS32_TA_REGNUM]);
1943
1944   /* Validate and fixed-number FP, GP, LP, SP, PC.  */
1945   for (i = NDS32_FP_REGNUM; i <= NDS32_PC_REGNUM; i++)
1946     valid_p &= tdesc_numbered_register (feature, tdesc_data, i,
1947                                         nds32_register_names[i]);
1948
1949   if (!valid_p)
1950     return 0;
1951
1952   /* Fixed-number R11-R27.  */
1953   for (i = NDS32_R0_REGNUM + 11; i <= NDS32_R0_REGNUM + 27; i++)
1954     tdesc_numbered_register (feature, tdesc_data, i, nds32_register_names[i]);
1955
1956   feature = tdesc_find_feature (tdesc, "org.gnu.gdb.nds32.fpu");
1957   if (feature != NULL)
1958     {
1959       int num_fdr_regs, num_fsr_regs, fs0_regnum, num_listed_fsr;
1960       int freg = -1;
1961
1962       /* Guess FPU configuration via listed registers.  */
1963       if (tdesc_unnumbered_register (feature, "fd31"))
1964         freg = 3;
1965       else if (tdesc_unnumbered_register (feature, "fd15"))
1966         freg = 2;
1967       else if (tdesc_unnumbered_register (feature, "fd7"))
1968         freg = 1;
1969       else if (tdesc_unnumbered_register (feature, "fd3"))
1970         freg = 0;
1971
1972       if (freg == -1)
1973         /* Required FDR is not found.  */
1974         return 0;
1975       else
1976         *fpu_freg = freg;
1977
1978       /* Validate and fixed-number required FDRs.  */
1979       num_fdr_regs = num_fdr_map[freg];
1980       for (i = 0; i < num_fdr_regs; i++)
1981         valid_p &= tdesc_numbered_register (feature, tdesc_data,
1982                                             NDS32_FD0_REGNUM + i,
1983                                             nds32_fdr_register_names[i]);
1984       if (!valid_p)
1985         return 0;
1986
1987       /* Count the number of listed FSRs, and fixed-number them if present.  */
1988       num_fsr_regs = num_fsr_map[freg];
1989       fs0_regnum = NDS32_FD0_REGNUM + num_fdr_regs;
1990       num_listed_fsr = 0;
1991       for (i = 0; i < num_fsr_regs; i++)
1992         num_listed_fsr += tdesc_numbered_register (feature, tdesc_data,
1993                                                    fs0_regnum + i,
1994                                                    nds32_fsr_register_names[i]);
1995
1996       if (num_listed_fsr == 0)
1997         /* No required FSRs are listed explicitly,  make them pseudo registers
1998            of FDRs.  */
1999         *use_pseudo_fsrs = 1;
2000       else if (num_listed_fsr == num_fsr_regs)
2001         /* All required FSRs are listed explicitly.  */
2002         *use_pseudo_fsrs = 0;
2003       else
2004         /* Some required FSRs are missing.  */
2005         return 0;
2006     }
2007
2008   return 1;
2009 }
2010
2011 /* Initialize the current architecture based on INFO.  If possible,
2012    re-use an architecture from ARCHES, which is a list of
2013    architectures already created during this debugging session.
2014
2015    Called e.g. at program startup, when reading a core file, and when
2016    reading a binary file.  */
2017
2018 static struct gdbarch *
2019 nds32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
2020 {
2021   struct gdbarch *gdbarch;
2022   struct gdbarch_tdep *tdep;
2023   struct gdbarch_list *best_arch;
2024   struct tdesc_arch_data *tdesc_data = NULL;
2025   const struct target_desc *tdesc = info.target_desc;
2026   int elf_abi = E_NDS_ABI_AABI;
2027   int fpu_freg = -1;
2028   int use_pseudo_fsrs = 0;
2029   int i, num_regs, maxregs;
2030
2031   /* Extract the elf_flags if available.  */
2032   if (info.abfd && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
2033     elf_abi = elf_elfheader (info.abfd)->e_flags & EF_NDS_ABI;
2034
2035   /* If there is already a candidate, use it.  */
2036   for (best_arch = gdbarch_list_lookup_by_info (arches, &info);
2037        best_arch != NULL;
2038        best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
2039     {
2040       struct gdbarch_tdep *idep = gdbarch_tdep (best_arch->gdbarch);
2041
2042       if (idep->elf_abi != elf_abi)
2043         continue;
2044
2045       /* Found a match.  */
2046       break;
2047     }
2048
2049   if (best_arch != NULL)
2050     return best_arch->gdbarch;
2051
2052   if (!tdesc_has_registers (tdesc))
2053     tdesc = tdesc_nds32;
2054
2055   tdesc_data = tdesc_data_alloc ();
2056
2057   if (!nds32_validate_tdesc_p (tdesc, tdesc_data, &fpu_freg, &use_pseudo_fsrs))
2058     {
2059       tdesc_data_cleanup (tdesc_data);
2060       return NULL;
2061     }
2062
2063   /* Allocate space for the new architecture.  */
2064   tdep = XCNEW (struct gdbarch_tdep);
2065   tdep->fpu_freg = fpu_freg;
2066   tdep->use_pseudo_fsrs = use_pseudo_fsrs;
2067   tdep->fs0_regnum = -1;
2068   tdep->elf_abi = elf_abi;
2069
2070   gdbarch = gdbarch_alloc (&info, tdep);
2071
2072   if (fpu_freg == -1)
2073     num_regs = NDS32_NUM_REGS;
2074   else if (use_pseudo_fsrs == 1)
2075     {
2076       set_gdbarch_pseudo_register_read (gdbarch, nds32_pseudo_register_read);
2077       set_gdbarch_pseudo_register_write (gdbarch, nds32_pseudo_register_write);
2078       set_tdesc_pseudo_register_name (gdbarch, nds32_pseudo_register_name);
2079       set_tdesc_pseudo_register_type (gdbarch, nds32_pseudo_register_type);
2080       set_gdbarch_num_pseudo_regs (gdbarch, num_fsr_map[fpu_freg]);
2081
2082       num_regs = NDS32_NUM_REGS + num_fdr_map[fpu_freg];
2083     }
2084   else
2085     num_regs = NDS32_NUM_REGS + num_fdr_map[fpu_freg] + num_fsr_map[fpu_freg];
2086
2087   set_gdbarch_num_regs (gdbarch, num_regs);
2088   tdesc_use_registers (gdbarch, tdesc, tdesc_data);
2089
2090   /* Cache the register number of fs0.  */
2091   if (fpu_freg != -1)
2092     tdep->fs0_regnum = user_reg_map_name_to_regnum (gdbarch, "fs0", -1);
2093
2094   /* Add NDS32 register aliases.  To avoid search in user register name space,
2095      user_reg_map_name_to_regnum is not used.  */
2096   maxregs = (gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch));
2097   for (i = 0; i < ARRAY_SIZE (nds32_register_aliases); i++)
2098     {
2099       int regnum, j;
2100
2101       regnum = -1;
2102       /* Search register name space.  */
2103       for (j = 0; j < maxregs; j++)
2104         {
2105           const char *regname = gdbarch_register_name (gdbarch, j);
2106
2107           if (regname != NULL
2108               && strcmp (regname, nds32_register_aliases[i].name) == 0)
2109             {
2110               regnum = j;
2111               break;
2112             }
2113         }
2114
2115       /* Try next alias entry if the given name can not be found in register
2116          name space.  */
2117       if (regnum == -1)
2118         continue;
2119
2120       user_reg_add (gdbarch, nds32_register_aliases[i].alias,
2121                     value_of_nds32_reg, (const void *) (intptr_t) regnum);
2122     }
2123
2124   nds32_add_reggroups (gdbarch);
2125
2126   /* Hook in ABI-specific overrides, if they have been registered.  */
2127   info.tdep_info = (void *) tdesc_data;
2128   gdbarch_init_osabi (info, gdbarch);
2129
2130   /* Override tdesc_register callbacks for system registers.  */
2131   set_gdbarch_register_reggroup_p (gdbarch, nds32_register_reggroup_p);
2132
2133   set_gdbarch_sp_regnum (gdbarch, NDS32_SP_REGNUM);
2134   set_gdbarch_pc_regnum (gdbarch, NDS32_PC_REGNUM);
2135   set_gdbarch_unwind_sp (gdbarch, nds32_unwind_sp);
2136   set_gdbarch_unwind_pc (gdbarch, nds32_unwind_pc);
2137   set_gdbarch_stack_frame_destroyed_p (gdbarch, nds32_stack_frame_destroyed_p);
2138   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, nds32_dwarf2_reg_to_regnum);
2139
2140   set_gdbarch_push_dummy_call (gdbarch, nds32_push_dummy_call);
2141   set_gdbarch_return_value (gdbarch, nds32_return_value);
2142   set_gdbarch_dummy_id (gdbarch, nds32_dummy_id);
2143
2144   set_gdbarch_skip_prologue (gdbarch, nds32_skip_prologue);
2145   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
2146   set_gdbarch_breakpoint_kind_from_pc (gdbarch,
2147                                        nds32_breakpoint::kind_from_pc);
2148   set_gdbarch_sw_breakpoint_from_kind (gdbarch,
2149                                        nds32_breakpoint::bp_from_kind);
2150
2151   set_gdbarch_frame_align (gdbarch, nds32_frame_align);
2152   frame_base_set_default (gdbarch, &nds32_frame_base);
2153
2154   set_gdbarch_print_insn (gdbarch, print_insn_nds32);
2155
2156   /* Handle longjmp.  */
2157   set_gdbarch_get_longjmp_target (gdbarch, nds32_get_longjmp_target);
2158
2159   /* The order of appending is the order it check frame.  */
2160   dwarf2_append_unwinders (gdbarch);
2161   frame_unwind_append_unwinder (gdbarch, &nds32_epilogue_frame_unwind);
2162   frame_unwind_append_unwinder (gdbarch, &nds32_frame_unwind);
2163
2164   return gdbarch;
2165 }
2166
2167 void
2168 _initialize_nds32_tdep (void)
2169 {
2170   /* Initialize gdbarch.  */
2171   register_gdbarch_init (bfd_arch_nds32, nds32_gdbarch_init);
2172
2173   initialize_tdesc_nds32 ();
2174   nds32_init_reggroups ();
2175 }