Simplify tui_show_disassem
[external/binutils.git] / gdb / riscv-tdep.c
1 /* Target-dependent code for the RISC-V architecture, for GDB.
2
3    Copyright (C) 2018-2019 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include "frame.h"
22 #include "inferior.h"
23 #include "symtab.h"
24 #include "value.h"
25 #include "gdbcmd.h"
26 #include "language.h"
27 #include "gdbcore.h"
28 #include "symfile.h"
29 #include "objfiles.h"
30 #include "gdbtypes.h"
31 #include "target.h"
32 #include "arch-utils.h"
33 #include "regcache.h"
34 #include "osabi.h"
35 #include "riscv-tdep.h"
36 #include "block.h"
37 #include "reggroups.h"
38 #include "opcode/riscv.h"
39 #include "elf/riscv.h"
40 #include "elf-bfd.h"
41 #include "symcat.h"
42 #include "dis-asm.h"
43 #include "frame-unwind.h"
44 #include "frame-base.h"
45 #include "trad-frame.h"
46 #include "infcall.h"
47 #include "floatformat.h"
48 #include "remote.h"
49 #include "target-descriptions.h"
50 #include "dwarf2-frame.h"
51 #include "user-regs.h"
52 #include "valprint.h"
53 #include "gdbsupport/common-defs.h"
54 #include "opcode/riscv-opc.h"
55 #include "cli/cli-decode.h"
56 #include "observable.h"
57 #include "prologue-value.h"
58 #include "arch/riscv.h"
59
60 /* The stack must be 16-byte aligned.  */
61 #define SP_ALIGNMENT 16
62
63 /* The biggest alignment that the target supports.  */
64 #define BIGGEST_ALIGNMENT 16
65
66 /* Define a series of is_XXX_insn functions to check if the value INSN
67    is an instance of instruction XXX.  */
68 #define DECLARE_INSN(INSN_NAME, INSN_MATCH, INSN_MASK) \
69 static inline bool is_ ## INSN_NAME ## _insn (long insn) \
70 { \
71   return (insn & INSN_MASK) == INSN_MATCH; \
72 }
73 #include "opcode/riscv-opc.h"
74 #undef DECLARE_INSN
75
76 /* Cached information about a frame.  */
77
78 struct riscv_unwind_cache
79 {
80   /* The register from which we can calculate the frame base.  This is
81      usually $sp or $fp.  */
82   int frame_base_reg;
83
84   /* The offset from the current value in register FRAME_BASE_REG to the
85      actual frame base address.  */
86   int frame_base_offset;
87
88   /* Information about previous register values.  */
89   struct trad_frame_saved_reg *regs;
90
91   /* The id for this frame.  */
92   struct frame_id this_id;
93
94   /* The base (stack) address for this frame.  This is the stack pointer
95      value on entry to this frame before any adjustments are made.  */
96   CORE_ADDR frame_base;
97 };
98
99 /* RISC-V specific register group for CSRs.  */
100
101 static reggroup *csr_reggroup = NULL;
102
103 /* A set of registers that we expect to find in a tdesc_feature.  These
104    are use in RISCV_GDBARCH_INIT when processing the target description.  */
105
106 struct riscv_register_feature
107 {
108   /* Information for a single register.  */
109   struct register_info
110   {
111     /* The GDB register number for this register.  */
112     int regnum;
113
114     /* List of names for this register.  The first name in this list is the
115        preferred name, the name GDB should use when describing this
116        register.  */
117     std::vector <const char *> names;
118
119     /* When true this register is required in this feature set.  */
120     bool required_p;
121   };
122
123   /* The name for this feature.  This is the name used to find this feature
124      within the target description.  */
125   const char *name;
126
127   /* List of all the registers that we expect that we might find in this
128      register set.  */
129   std::vector <struct register_info> registers;
130 };
131
132 /* The general x-registers feature set.  */
133
134 static const struct riscv_register_feature riscv_xreg_feature =
135 {
136  "org.gnu.gdb.riscv.cpu",
137  {
138    { RISCV_ZERO_REGNUM + 0, { "zero", "x0" }, true },
139    { RISCV_ZERO_REGNUM + 1, { "ra", "x1" }, true },
140    { RISCV_ZERO_REGNUM + 2, { "sp", "x2" }, true },
141    { RISCV_ZERO_REGNUM + 3, { "gp", "x3" }, true },
142    { RISCV_ZERO_REGNUM + 4, { "tp", "x4" }, true },
143    { RISCV_ZERO_REGNUM + 5, { "t0", "x5" }, true },
144    { RISCV_ZERO_REGNUM + 6, { "t1", "x6" }, true },
145    { RISCV_ZERO_REGNUM + 7, { "t2", "x7" }, true },
146    { RISCV_ZERO_REGNUM + 8, { "fp", "x8", "s0" }, true },
147    { RISCV_ZERO_REGNUM + 9, { "s1", "x9" }, true },
148    { RISCV_ZERO_REGNUM + 10, { "a0", "x10" }, true },
149    { RISCV_ZERO_REGNUM + 11, { "a1", "x11" }, true },
150    { RISCV_ZERO_REGNUM + 12, { "a2", "x12" }, true },
151    { RISCV_ZERO_REGNUM + 13, { "a3", "x13" }, true },
152    { RISCV_ZERO_REGNUM + 14, { "a4", "x14" }, true },
153    { RISCV_ZERO_REGNUM + 15, { "a5", "x15" }, true },
154    { RISCV_ZERO_REGNUM + 16, { "a6", "x16" }, true },
155    { RISCV_ZERO_REGNUM + 17, { "a7", "x17" }, true },
156    { RISCV_ZERO_REGNUM + 18, { "s2", "x18" }, true },
157    { RISCV_ZERO_REGNUM + 19, { "s3", "x19" }, true },
158    { RISCV_ZERO_REGNUM + 20, { "s4", "x20" }, true },
159    { RISCV_ZERO_REGNUM + 21, { "s5", "x21" }, true },
160    { RISCV_ZERO_REGNUM + 22, { "s6", "x22" }, true },
161    { RISCV_ZERO_REGNUM + 23, { "s7", "x23" }, true },
162    { RISCV_ZERO_REGNUM + 24, { "s8", "x24" }, true },
163    { RISCV_ZERO_REGNUM + 25, { "s9", "x25" }, true },
164    { RISCV_ZERO_REGNUM + 26, { "s10", "x26" }, true },
165    { RISCV_ZERO_REGNUM + 27, { "s11", "x27" }, true },
166    { RISCV_ZERO_REGNUM + 28, { "t3", "x28" }, true },
167    { RISCV_ZERO_REGNUM + 29, { "t4", "x29" }, true },
168    { RISCV_ZERO_REGNUM + 30, { "t5", "x30" }, true },
169    { RISCV_ZERO_REGNUM + 31, { "t6", "x31" }, true },
170    { RISCV_ZERO_REGNUM + 32, { "pc" }, true }
171  }
172 };
173
174 /* The f-registers feature set.  */
175
176 static const struct riscv_register_feature riscv_freg_feature =
177 {
178  "org.gnu.gdb.riscv.fpu",
179  {
180    { RISCV_FIRST_FP_REGNUM + 0, { "ft0", "f0" }, true },
181    { RISCV_FIRST_FP_REGNUM + 1, { "ft1", "f1" }, true },
182    { RISCV_FIRST_FP_REGNUM + 2, { "ft2", "f2" }, true },
183    { RISCV_FIRST_FP_REGNUM + 3, { "ft3", "f3" }, true },
184    { RISCV_FIRST_FP_REGNUM + 4, { "ft4", "f4" }, true },
185    { RISCV_FIRST_FP_REGNUM + 5, { "ft5", "f5" }, true },
186    { RISCV_FIRST_FP_REGNUM + 6, { "ft6", "f6" }, true },
187    { RISCV_FIRST_FP_REGNUM + 7, { "ft7", "f7" }, true },
188    { RISCV_FIRST_FP_REGNUM + 8, { "fs0", "f8" }, true },
189    { RISCV_FIRST_FP_REGNUM + 9, { "fs1", "f9" }, true },
190    { RISCV_FIRST_FP_REGNUM + 10, { "fa0", "f10" }, true },
191    { RISCV_FIRST_FP_REGNUM + 11, { "fa1", "f11" }, true },
192    { RISCV_FIRST_FP_REGNUM + 12, { "fa2", "f12" }, true },
193    { RISCV_FIRST_FP_REGNUM + 13, { "fa3", "f13" }, true },
194    { RISCV_FIRST_FP_REGNUM + 14, { "fa4", "f14" }, true },
195    { RISCV_FIRST_FP_REGNUM + 15, { "fa5", "f15" }, true },
196    { RISCV_FIRST_FP_REGNUM + 16, { "fa6", "f16" }, true },
197    { RISCV_FIRST_FP_REGNUM + 17, { "fa7", "f17" }, true },
198    { RISCV_FIRST_FP_REGNUM + 18, { "fs2", "f18" }, true },
199    { RISCV_FIRST_FP_REGNUM + 19, { "fs3", "f19" }, true },
200    { RISCV_FIRST_FP_REGNUM + 20, { "fs4", "f20" }, true },
201    { RISCV_FIRST_FP_REGNUM + 21, { "fs5", "f21" }, true },
202    { RISCV_FIRST_FP_REGNUM + 22, { "fs6", "f22" }, true },
203    { RISCV_FIRST_FP_REGNUM + 23, { "fs7", "f23" }, true },
204    { RISCV_FIRST_FP_REGNUM + 24, { "fs8", "f24" }, true },
205    { RISCV_FIRST_FP_REGNUM + 25, { "fs9", "f25" }, true },
206    { RISCV_FIRST_FP_REGNUM + 26, { "fs10", "f26" }, true },
207    { RISCV_FIRST_FP_REGNUM + 27, { "fs11", "f27" }, true },
208    { RISCV_FIRST_FP_REGNUM + 28, { "ft8", "f28" }, true },
209    { RISCV_FIRST_FP_REGNUM + 29, { "ft9", "f29" }, true },
210    { RISCV_FIRST_FP_REGNUM + 30, { "ft10", "f30" }, true },
211    { RISCV_FIRST_FP_REGNUM + 31, { "ft11", "f31" }, true },
212
213    { RISCV_CSR_FFLAGS_REGNUM, { "fflags" }, true },
214    { RISCV_CSR_FRM_REGNUM, { "frm" }, true },
215    { RISCV_CSR_FCSR_REGNUM, { "fcsr" }, true },
216
217  }
218 };
219
220 /* Set of virtual registers.  These are not physical registers on the
221    hardware, but might be available from the target.  These are not pseudo
222    registers, reading these really does result in a register read from the
223    target, it is just that there might not be a physical register backing
224    the result.  */
225
226 static const struct riscv_register_feature riscv_virtual_feature =
227 {
228  "org.gnu.gdb.riscv.virtual",
229  {
230    { RISCV_PRIV_REGNUM, { "priv" }, false }
231  }
232 };
233
234 /* Feature set for CSRs.  This set is NOT constant as the register names
235    list for each register is not complete.  The aliases are computed
236    during RISCV_CREATE_CSR_ALIASES.  */
237
238 static struct riscv_register_feature riscv_csr_feature =
239 {
240  "org.gnu.gdb.riscv.csr",
241  {
242 #define DECLARE_CSR(NAME,VALUE) \
243   { RISCV_ ## VALUE ## _REGNUM, { # NAME }, false },
244 #include "opcode/riscv-opc.h"
245 #undef DECLARE_CSR
246  }
247 };
248
249 /* Complete RISCV_CSR_FEATURE, building the CSR alias names and adding them
250    to the name list for each register.  */
251
252 static void
253 riscv_create_csr_aliases ()
254 {
255   for (auto &reg : riscv_csr_feature.registers)
256     {
257       int csr_num = reg.regnum - RISCV_FIRST_CSR_REGNUM;
258       const char *alias = xstrprintf ("csr%d", csr_num);
259       reg.names.push_back (alias);
260     }
261 }
262
263 /* Controls whether we place compressed breakpoints or not.  When in auto
264    mode GDB tries to determine if the target supports compressed
265    breakpoints, and uses them if it does.  */
266
267 static enum auto_boolean use_compressed_breakpoints;
268
269 /* The show callback for 'show riscv use-compressed-breakpoints'.  */
270
271 static void
272 show_use_compressed_breakpoints (struct ui_file *file, int from_tty,
273                                  struct cmd_list_element *c,
274                                  const char *value)
275 {
276   fprintf_filtered (file,
277                     _("Debugger's use of compressed breakpoints is set "
278                       "to %s.\n"), value);
279 }
280
281 /* The set and show lists for 'set riscv' and 'show riscv' prefixes.  */
282
283 static struct cmd_list_element *setriscvcmdlist = NULL;
284 static struct cmd_list_element *showriscvcmdlist = NULL;
285
286 /* The show callback for the 'show riscv' prefix command.  */
287
288 static void
289 show_riscv_command (const char *args, int from_tty)
290 {
291   help_list (showriscvcmdlist, "show riscv ", all_commands, gdb_stdout);
292 }
293
294 /* The set callback for the 'set riscv' prefix command.  */
295
296 static void
297 set_riscv_command (const char *args, int from_tty)
298 {
299   printf_unfiltered
300     (_("\"set riscv\" must be followed by an appropriate subcommand.\n"));
301   help_list (setriscvcmdlist, "set riscv ", all_commands, gdb_stdout);
302 }
303
304 /* The set and show lists for 'set riscv' and 'show riscv' prefixes.  */
305
306 static struct cmd_list_element *setdebugriscvcmdlist = NULL;
307 static struct cmd_list_element *showdebugriscvcmdlist = NULL;
308
309 /* The show callback for the 'show debug riscv' prefix command.  */
310
311 static void
312 show_debug_riscv_command (const char *args, int from_tty)
313 {
314   help_list (showdebugriscvcmdlist, "show debug riscv ", all_commands, gdb_stdout);
315 }
316
317 /* The set callback for the 'set debug riscv' prefix command.  */
318
319 static void
320 set_debug_riscv_command (const char *args, int from_tty)
321 {
322   printf_unfiltered
323     (_("\"set debug riscv\" must be followed by an appropriate subcommand.\n"));
324   help_list (setdebugriscvcmdlist, "set debug riscv ", all_commands, gdb_stdout);
325 }
326
327 /* The show callback for all 'show debug riscv VARNAME' variables.  */
328
329 static void
330 show_riscv_debug_variable (struct ui_file *file, int from_tty,
331                            struct cmd_list_element *c,
332                            const char *value)
333 {
334   fprintf_filtered (file,
335                     _("RiscV debug variable `%s' is set to: %s\n"),
336                     c->name, value);
337 }
338
339 /* When this is set to non-zero debugging information about breakpoint
340    kinds will be printed.  */
341
342 static unsigned int riscv_debug_breakpoints = 0;
343
344 /* When this is set to non-zero debugging information about inferior calls
345    will be printed.  */
346
347 static unsigned int riscv_debug_infcall = 0;
348
349 /* When this is set to non-zero debugging information about stack unwinding
350    will be printed.  */
351
352 static unsigned int riscv_debug_unwinder = 0;
353
354 /* When this is set to non-zero debugging information about gdbarch
355    initialisation will be printed.  */
356
357 static unsigned int riscv_debug_gdbarch = 0;
358
359 /* See riscv-tdep.h.  */
360
361 int
362 riscv_isa_xlen (struct gdbarch *gdbarch)
363 {
364   return gdbarch_tdep (gdbarch)->isa_features.xlen;
365 }
366
367 /* See riscv-tdep.h.  */
368
369 int
370 riscv_abi_xlen (struct gdbarch *gdbarch)
371 {
372   return gdbarch_tdep (gdbarch)->abi_features.xlen;
373 }
374
375 /* See riscv-tdep.h.  */
376
377 int
378 riscv_isa_flen (struct gdbarch *gdbarch)
379 {
380   return gdbarch_tdep (gdbarch)->isa_features.flen;
381 }
382
383 /* See riscv-tdep.h.  */
384
385 int
386 riscv_abi_flen (struct gdbarch *gdbarch)
387 {
388   return gdbarch_tdep (gdbarch)->abi_features.flen;
389 }
390
391 /* Return true if the target for GDBARCH has floating point hardware.  */
392
393 static bool
394 riscv_has_fp_regs (struct gdbarch *gdbarch)
395 {
396   return (riscv_isa_flen (gdbarch) > 0);
397 }
398
399 /* Return true if GDBARCH is using any of the floating point hardware ABIs.  */
400
401 static bool
402 riscv_has_fp_abi (struct gdbarch *gdbarch)
403 {
404   return gdbarch_tdep (gdbarch)->abi_features.flen > 0;
405 }
406
407 /* Return true if REGNO is a floating pointer register.  */
408
409 static bool
410 riscv_is_fp_regno_p (int regno)
411 {
412   return (regno >= RISCV_FIRST_FP_REGNUM
413           && regno <= RISCV_LAST_FP_REGNUM);
414 }
415
416 /* Implement the breakpoint_kind_from_pc gdbarch method.  */
417
418 static int
419 riscv_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
420 {
421   if (use_compressed_breakpoints == AUTO_BOOLEAN_AUTO)
422     {
423       bool unaligned_p = false;
424       gdb_byte buf[1];
425
426       /* Some targets don't support unaligned reads.  The address can only
427          be unaligned if the C extension is supported.  So it is safe to
428          use a compressed breakpoint in this case.  */
429       if (*pcptr & 0x2)
430         unaligned_p = true;
431       else
432         {
433           /* Read the opcode byte to determine the instruction length.  If
434              the read fails this may be because we tried to set the
435              breakpoint at an invalid address, in this case we provide a
436              fake result which will give a breakpoint length of 4.
437              Hopefully when we try to actually insert the breakpoint we
438              will see a failure then too which will be reported to the
439              user.  */
440           if (target_read_code (*pcptr, buf, 1) == -1)
441             buf[0] = 0;
442           read_code (*pcptr, buf, 1);
443         }
444
445       if (riscv_debug_breakpoints)
446         {
447           const char *bp = (unaligned_p || riscv_insn_length (buf[0]) == 2
448                             ? "C.EBREAK" : "EBREAK");
449
450           fprintf_unfiltered (gdb_stdlog, "Using %s for breakpoint at %s ",
451                               bp, paddress (gdbarch, *pcptr));
452           if (unaligned_p)
453             fprintf_unfiltered (gdb_stdlog, "(unaligned address)\n");
454           else
455             fprintf_unfiltered (gdb_stdlog, "(instruction length %d)\n",
456                                 riscv_insn_length (buf[0]));
457         }
458       if (unaligned_p || riscv_insn_length (buf[0]) == 2)
459         return 2;
460       else
461         return 4;
462     }
463   else if (use_compressed_breakpoints == AUTO_BOOLEAN_TRUE)
464     return 2;
465   else
466     return 4;
467 }
468
469 /* Implement the sw_breakpoint_from_kind gdbarch method.  */
470
471 static const gdb_byte *
472 riscv_sw_breakpoint_from_kind (struct gdbarch *gdbarch, int kind, int *size)
473 {
474   static const gdb_byte ebreak[] = { 0x73, 0x00, 0x10, 0x00, };
475   static const gdb_byte c_ebreak[] = { 0x02, 0x90 };
476
477   *size = kind;
478   switch (kind)
479     {
480     case 2:
481       return c_ebreak;
482     case 4:
483       return ebreak;
484     default:
485       gdb_assert_not_reached (_("unhandled breakpoint kind"));
486     }
487 }
488
489 /* Callback function for user_reg_add.  */
490
491 static struct value *
492 value_of_riscv_user_reg (struct frame_info *frame, const void *baton)
493 {
494   const int *reg_p = (const int *) baton;
495   return value_of_register (*reg_p, frame);
496 }
497
498 /* Implement the register_name gdbarch method.  This is used instead of
499    the function supplied by calling TDESC_USE_REGISTERS so that we can
500    ensure the preferred names are offered.  */
501
502 static const char *
503 riscv_register_name (struct gdbarch *gdbarch, int regnum)
504 {
505   /* Lookup the name through the target description.  If we get back NULL
506      then this is an unknown register.  If we do get a name back then we
507      look up the registers preferred name below.  */
508   const char *name = tdesc_register_name (gdbarch, regnum);
509   if (name == NULL || name[0] == '\0')
510     return NULL;
511
512   if (regnum >= RISCV_ZERO_REGNUM && regnum < RISCV_FIRST_FP_REGNUM)
513     {
514       gdb_assert (regnum < riscv_xreg_feature.registers.size ());
515       return riscv_xreg_feature.registers[regnum].names[0];
516     }
517
518   if (regnum >= RISCV_FIRST_FP_REGNUM && regnum <= RISCV_LAST_FP_REGNUM)
519     {
520       if (riscv_has_fp_regs (gdbarch))
521         {
522           regnum -= RISCV_FIRST_FP_REGNUM;
523           gdb_assert (regnum < riscv_freg_feature.registers.size ());
524           return riscv_freg_feature.registers[regnum].names[0];
525         }
526       else
527         return NULL;
528     }
529
530   /* Check that there's no gap between the set of registers handled above,
531      and the set of registers handled next.  */
532   gdb_assert ((RISCV_LAST_FP_REGNUM + 1) == RISCV_FIRST_CSR_REGNUM);
533
534   if (regnum >= RISCV_FIRST_CSR_REGNUM && regnum <= RISCV_LAST_CSR_REGNUM)
535     {
536 #define DECLARE_CSR(NAME,VALUE) \
537       case RISCV_ ## VALUE ## _REGNUM: return # NAME;
538
539       switch (regnum)
540         {
541 #include "opcode/riscv-opc.h"
542         }
543 #undef DECLARE_CSR
544     }
545
546   if (regnum == RISCV_PRIV_REGNUM)
547     return "priv";
548
549   /* It is possible that that the target provides some registers that GDB
550      is unaware of, in that case just return the NAME from the target
551      description.  */
552   return name;
553 }
554
555 /* Construct a type for 64-bit FP registers.  */
556
557 static struct type *
558 riscv_fpreg_d_type (struct gdbarch *gdbarch)
559 {
560   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
561
562   if (tdep->riscv_fpreg_d_type == nullptr)
563     {
564       const struct builtin_type *bt = builtin_type (gdbarch);
565
566       /* The type we're building is this: */
567 #if 0
568       union __gdb_builtin_type_fpreg_d
569       {
570         float f;
571         double d;
572       };
573 #endif
574
575       struct type *t;
576
577       t = arch_composite_type (gdbarch,
578                                "__gdb_builtin_type_fpreg_d", TYPE_CODE_UNION);
579       append_composite_type_field (t, "float", bt->builtin_float);
580       append_composite_type_field (t, "double", bt->builtin_double);
581       TYPE_VECTOR (t) = 1;
582       TYPE_NAME (t) = "builtin_type_fpreg_d";
583       tdep->riscv_fpreg_d_type = t;
584     }
585
586   return tdep->riscv_fpreg_d_type;
587 }
588
589 /* Implement the register_type gdbarch method.  This is installed as an
590    for the override setup by TDESC_USE_REGISTERS, for most registers we
591    delegate the type choice to the target description, but for a few
592    registers we try to improve the types if the target description has
593    taken a simplistic approach.  */
594
595 static struct type *
596 riscv_register_type (struct gdbarch *gdbarch, int regnum)
597 {
598   struct type *type = tdesc_register_type (gdbarch, regnum);
599   int xlen = riscv_isa_xlen (gdbarch);
600
601   /* We want to perform some specific type "fixes" in cases where we feel
602      that we really can do better than the target description.  For all
603      other cases we just return what the target description says.  */
604   if (riscv_is_fp_regno_p (regnum))
605     {
606       /* This spots the case for RV64 where the double is defined as
607          either 'ieee_double' or 'float' (which is the generic name that
608          converts to 'double' on 64-bit).  In these cases its better to
609          present the registers using a union type.  */
610       int flen = riscv_isa_flen (gdbarch);
611       if (flen == 8
612           && TYPE_CODE (type) == TYPE_CODE_FLT
613           && TYPE_LENGTH (type) == flen
614           && (strcmp (TYPE_NAME (type), "builtin_type_ieee_double") == 0
615               || strcmp (TYPE_NAME (type), "double") == 0))
616         type = riscv_fpreg_d_type (gdbarch);
617     }
618
619   if ((regnum == gdbarch_pc_regnum (gdbarch)
620        || regnum == RISCV_RA_REGNUM
621        || regnum == RISCV_FP_REGNUM
622        || regnum == RISCV_SP_REGNUM
623        || regnum == RISCV_GP_REGNUM
624        || regnum == RISCV_TP_REGNUM)
625       && TYPE_CODE (type) == TYPE_CODE_INT
626       && TYPE_LENGTH (type) == xlen)
627     {
628       /* This spots the case where some interesting registers are defined
629          as simple integers of the expected size, we force these registers
630          to be pointers as we believe that is more useful.  */
631       if (regnum == gdbarch_pc_regnum (gdbarch)
632           || regnum == RISCV_RA_REGNUM)
633         type = builtin_type (gdbarch)->builtin_func_ptr;
634       else if (regnum == RISCV_FP_REGNUM
635                || regnum == RISCV_SP_REGNUM
636                || regnum == RISCV_GP_REGNUM
637                || regnum == RISCV_TP_REGNUM)
638         type = builtin_type (gdbarch)->builtin_data_ptr;
639     }
640
641   return type;
642 }
643
644 /* Helper for riscv_print_registers_info, prints info for a single register
645    REGNUM.  */
646
647 static void
648 riscv_print_one_register_info (struct gdbarch *gdbarch,
649                                struct ui_file *file,
650                                struct frame_info *frame,
651                                int regnum)
652 {
653   const char *name = gdbarch_register_name (gdbarch, regnum);
654   struct value *val;
655   struct type *regtype;
656   int print_raw_format;
657   enum tab_stops { value_column_1 = 15 };
658
659   fputs_filtered (name, file);
660   print_spaces_filtered (value_column_1 - strlen (name), file);
661
662   try
663     {
664       val = value_of_register (regnum, frame);
665       regtype = value_type (val);
666     }
667   catch (const gdb_exception_error &ex)
668     {
669       /* Handle failure to read a register without interrupting the entire
670          'info registers' flow.  */
671       fprintf_filtered (file, "%s\n", ex.what ());
672       return;
673     }
674
675   print_raw_format = (value_entirely_available (val)
676                       && !value_optimized_out (val));
677
678   if (TYPE_CODE (regtype) == TYPE_CODE_FLT
679       || (TYPE_CODE (regtype) == TYPE_CODE_UNION
680           && TYPE_NFIELDS (regtype) == 2
681           && TYPE_CODE (TYPE_FIELD_TYPE (regtype, 0)) == TYPE_CODE_FLT
682           && TYPE_CODE (TYPE_FIELD_TYPE (regtype, 1)) == TYPE_CODE_FLT)
683       || (TYPE_CODE (regtype) == TYPE_CODE_UNION
684           && TYPE_NFIELDS (regtype) == 3
685           && TYPE_CODE (TYPE_FIELD_TYPE (regtype, 0)) == TYPE_CODE_FLT
686           && TYPE_CODE (TYPE_FIELD_TYPE (regtype, 1)) == TYPE_CODE_FLT
687           && TYPE_CODE (TYPE_FIELD_TYPE (regtype, 2)) == TYPE_CODE_FLT))
688     {
689       struct value_print_options opts;
690       const gdb_byte *valaddr = value_contents_for_printing (val);
691       enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (regtype));
692
693       get_user_print_options (&opts);
694       opts.deref_ref = 1;
695
696       val_print (regtype,
697                  value_embedded_offset (val), 0,
698                  file, 0, val, &opts, current_language);
699
700       if (print_raw_format)
701         {
702           fprintf_filtered (file, "\t(raw ");
703           print_hex_chars (file, valaddr, TYPE_LENGTH (regtype), byte_order,
704                            true);
705           fprintf_filtered (file, ")");
706         }
707     }
708   else
709     {
710       struct value_print_options opts;
711
712       /* Print the register in hex.  */
713       get_formatted_print_options (&opts, 'x');
714       opts.deref_ref = 1;
715       val_print (regtype,
716                  value_embedded_offset (val), 0,
717                  file, 0, val, &opts, current_language);
718
719       if (print_raw_format)
720         {
721           if (regnum == RISCV_CSR_MSTATUS_REGNUM)
722             {
723               LONGEST d;
724               int size = register_size (gdbarch, regnum);
725               unsigned xlen;
726
727               /* The SD field is always in the upper bit of MSTATUS, regardless
728                  of the number of bits in MSTATUS.  */
729               d = value_as_long (val);
730               xlen = size * 8;
731               fprintf_filtered (file,
732                                 "\tSD:%X VM:%02X MXR:%X PUM:%X MPRV:%X XS:%X "
733                                 "FS:%X MPP:%x HPP:%X SPP:%X MPIE:%X HPIE:%X "
734                                 "SPIE:%X UPIE:%X MIE:%X HIE:%X SIE:%X UIE:%X",
735                                 (int) ((d >> (xlen - 1)) & 0x1),
736                                 (int) ((d >> 24) & 0x1f),
737                                 (int) ((d >> 19) & 0x1),
738                                 (int) ((d >> 18) & 0x1),
739                                 (int) ((d >> 17) & 0x1),
740                                 (int) ((d >> 15) & 0x3),
741                                 (int) ((d >> 13) & 0x3),
742                                 (int) ((d >> 11) & 0x3),
743                                 (int) ((d >> 9) & 0x3),
744                                 (int) ((d >> 8) & 0x1),
745                                 (int) ((d >> 7) & 0x1),
746                                 (int) ((d >> 6) & 0x1),
747                                 (int) ((d >> 5) & 0x1),
748                                 (int) ((d >> 4) & 0x1),
749                                 (int) ((d >> 3) & 0x1),
750                                 (int) ((d >> 2) & 0x1),
751                                 (int) ((d >> 1) & 0x1),
752                                 (int) ((d >> 0) & 0x1));
753             }
754           else if (regnum == RISCV_CSR_MISA_REGNUM)
755             {
756               int base;
757               unsigned xlen, i;
758               LONGEST d;
759               int size = register_size (gdbarch, regnum);
760
761               /* The MXL field is always in the upper two bits of MISA,
762                  regardless of the number of bits in MISA.  Mask out other
763                  bits to ensure we have a positive value.  */
764               d = value_as_long (val);
765               base = (d >> ((size * 8) - 2)) & 0x3;
766               xlen = 16;
767
768               for (; base > 0; base--)
769                 xlen *= 2;
770               fprintf_filtered (file, "\tRV%d", xlen);
771
772               for (i = 0; i < 26; i++)
773                 {
774                   if (d & (1 << i))
775                     fprintf_filtered (file, "%c", 'A' + i);
776                 }
777             }
778           else if (regnum == RISCV_CSR_FCSR_REGNUM
779                    || regnum == RISCV_CSR_FFLAGS_REGNUM
780                    || regnum == RISCV_CSR_FRM_REGNUM)
781             {
782               LONGEST d;
783
784               d = value_as_long (val);
785
786               fprintf_filtered (file, "\t");
787               if (regnum != RISCV_CSR_FRM_REGNUM)
788                 fprintf_filtered (file,
789                                   "RD:%01X NV:%d DZ:%d OF:%d UF:%d NX:%d",
790                                   (int) ((d >> 5) & 0x7),
791                                   (int) ((d >> 4) & 0x1),
792                                   (int) ((d >> 3) & 0x1),
793                                   (int) ((d >> 2) & 0x1),
794                                   (int) ((d >> 1) & 0x1),
795                                   (int) ((d >> 0) & 0x1));
796
797               if (regnum != RISCV_CSR_FFLAGS_REGNUM)
798                 {
799                   static const char * const sfrm[] =
800                     {
801                       "RNE (round to nearest; ties to even)",
802                       "RTZ (Round towards zero)",
803                       "RDN (Round down towards -INF)",
804                       "RUP (Round up towards +INF)",
805                       "RMM (Round to nearest; ties to max magnitude)",
806                       "INVALID[5]",
807                       "INVALID[6]",
808                       "dynamic rounding mode",
809                     };
810                   int frm = ((regnum == RISCV_CSR_FCSR_REGNUM)
811                              ? (d >> 5) : d) & 0x3;
812
813                   fprintf_filtered (file, "%sFRM:%i [%s]",
814                                     (regnum == RISCV_CSR_FCSR_REGNUM
815                                      ? " " : ""),
816                                     frm, sfrm[frm]);
817                 }
818             }
819           else if (regnum == RISCV_PRIV_REGNUM)
820             {
821               LONGEST d;
822               uint8_t priv;
823
824               d = value_as_long (val);
825               priv = d & 0xff;
826
827               if (priv < 4)
828                 {
829                   static const char * const sprv[] =
830                     {
831                       "User/Application",
832                       "Supervisor",
833                       "Hypervisor",
834                       "Machine"
835                     };
836                   fprintf_filtered (file, "\tprv:%d [%s]",
837                                     priv, sprv[priv]);
838                 }
839               else
840                 fprintf_filtered (file, "\tprv:%d [INVALID]", priv);
841             }
842           else
843             {
844               /* If not a vector register, print it also according to its
845                  natural format.  */
846               if (TYPE_VECTOR (regtype) == 0)
847                 {
848                   get_user_print_options (&opts);
849                   opts.deref_ref = 1;
850                   fprintf_filtered (file, "\t");
851                   val_print (regtype,
852                              value_embedded_offset (val), 0,
853                              file, 0, val, &opts, current_language);
854                 }
855             }
856         }
857     }
858   fprintf_filtered (file, "\n");
859 }
860
861 /* Return true if REGNUM is a valid CSR register.  The CSR register space
862    is sparsely populated, so not every number is a named CSR.  */
863
864 static bool
865 riscv_is_regnum_a_named_csr (int regnum)
866 {
867   gdb_assert (regnum >= RISCV_FIRST_CSR_REGNUM
868               && regnum <= RISCV_LAST_CSR_REGNUM);
869
870   switch (regnum)
871     {
872 #define DECLARE_CSR(name, num) case RISCV_ ## num ## _REGNUM:
873 #include "opcode/riscv-opc.h"
874 #undef DECLARE_CSR
875       return true;
876
877     default:
878       return false;
879     }
880 }
881
882 /* Implement the register_reggroup_p gdbarch method.  Is REGNUM a member
883    of REGGROUP?  */
884
885 static int
886 riscv_register_reggroup_p (struct gdbarch  *gdbarch, int regnum,
887                            struct reggroup *reggroup)
888 {
889   /* Used by 'info registers' and 'info registers <groupname>'.  */
890
891   if (gdbarch_register_name (gdbarch, regnum) == NULL
892       || gdbarch_register_name (gdbarch, regnum)[0] == '\0')
893     return 0;
894
895   if (regnum > RISCV_LAST_REGNUM)
896     {
897       int ret = tdesc_register_in_reggroup_p (gdbarch, regnum, reggroup);
898       if (ret != -1)
899         return ret;
900
901       return default_register_reggroup_p (gdbarch, regnum, reggroup);
902     }
903
904   if (reggroup == all_reggroup)
905     {
906       if (regnum < RISCV_FIRST_CSR_REGNUM || regnum == RISCV_PRIV_REGNUM)
907         return 1;
908       if (riscv_is_regnum_a_named_csr (regnum))
909         return 1;
910       return 0;
911     }
912   else if (reggroup == float_reggroup)
913     return (riscv_is_fp_regno_p (regnum)
914             || regnum == RISCV_CSR_FCSR_REGNUM
915             || regnum == RISCV_CSR_FFLAGS_REGNUM
916             || regnum == RISCV_CSR_FRM_REGNUM);
917   else if (reggroup == general_reggroup)
918     return regnum < RISCV_FIRST_FP_REGNUM;
919   else if (reggroup == restore_reggroup || reggroup == save_reggroup)
920     {
921       if (riscv_has_fp_regs (gdbarch))
922         return (regnum <= RISCV_LAST_FP_REGNUM
923                 || regnum == RISCV_CSR_FCSR_REGNUM
924                 || regnum == RISCV_CSR_FFLAGS_REGNUM
925                 || regnum == RISCV_CSR_FRM_REGNUM);
926       else
927         return regnum < RISCV_FIRST_FP_REGNUM;
928     }
929   else if (reggroup == system_reggroup || reggroup == csr_reggroup)
930     {
931       if (regnum == RISCV_PRIV_REGNUM)
932         return 1;
933       if (regnum < RISCV_FIRST_CSR_REGNUM || regnum > RISCV_LAST_CSR_REGNUM)
934         return 0;
935       if (riscv_is_regnum_a_named_csr (regnum))
936         return 1;
937       return 0;
938     }
939   else if (reggroup == vector_reggroup)
940     return 0;
941   else
942     return 0;
943 }
944
945 /* Implement the print_registers_info gdbarch method.  This is used by
946    'info registers' and 'info all-registers'.  */
947
948 static void
949 riscv_print_registers_info (struct gdbarch *gdbarch,
950                             struct ui_file *file,
951                             struct frame_info *frame,
952                             int regnum, int print_all)
953 {
954   if (regnum != -1)
955     {
956       /* Print one specified register.  */
957       if (gdbarch_register_name (gdbarch, regnum) == NULL
958           || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
959         error (_("Not a valid register for the current processor type"));
960       riscv_print_one_register_info (gdbarch, file, frame, regnum);
961     }
962   else
963     {
964       struct reggroup *reggroup;
965
966       if (print_all)
967         reggroup = all_reggroup;
968       else
969         reggroup = general_reggroup;
970
971       for (regnum = 0; regnum <= RISCV_LAST_REGNUM; ++regnum)
972         {
973           /* Zero never changes, so might as well hide by default.  */
974           if (regnum == RISCV_ZERO_REGNUM && !print_all)
975             continue;
976
977           /* Registers with no name are not valid on this ISA.  */
978           if (gdbarch_register_name (gdbarch, regnum) == NULL
979               || *(gdbarch_register_name (gdbarch, regnum)) == '\0')
980             continue;
981
982           /* Is the register in the group we're interested in?  */
983           if (!gdbarch_register_reggroup_p (gdbarch, regnum, reggroup))
984             continue;
985
986           riscv_print_one_register_info (gdbarch, file, frame, regnum);
987         }
988     }
989 }
990
991 /* Class that handles one decoded RiscV instruction.  */
992
993 class riscv_insn
994 {
995 public:
996
997   /* Enum of all the opcodes that GDB cares about during the prologue scan.  */
998   enum opcode
999     {
1000       /* Unknown value is used at initialisation time.  */
1001       UNKNOWN = 0,
1002
1003       /* These instructions are all the ones we are interested in during the
1004          prologue scan.  */
1005       ADD,
1006       ADDI,
1007       ADDIW,
1008       ADDW,
1009       AUIPC,
1010       LUI,
1011       SD,
1012       SW,
1013       /* These are needed for software breakopint support.  */
1014       JAL,
1015       JALR,
1016       BEQ,
1017       BNE,
1018       BLT,
1019       BGE,
1020       BLTU,
1021       BGEU,
1022       /* These are needed for stepping over atomic sequences.  */
1023       LR,
1024       SC,
1025
1026       /* Other instructions are not interesting during the prologue scan, and
1027          are ignored.  */
1028       OTHER
1029     };
1030
1031   riscv_insn ()
1032     : m_length (0),
1033       m_opcode (OTHER),
1034       m_rd (0),
1035       m_rs1 (0),
1036       m_rs2 (0)
1037   {
1038     /* Nothing.  */
1039   }
1040
1041   void decode (struct gdbarch *gdbarch, CORE_ADDR pc);
1042
1043   /* Get the length of the instruction in bytes.  */
1044   int length () const
1045   { return m_length; }
1046
1047   /* Get the opcode for this instruction.  */
1048   enum opcode opcode () const
1049   { return m_opcode; }
1050
1051   /* Get destination register field for this instruction.  This is only
1052      valid if the OPCODE implies there is such a field for this
1053      instruction.  */
1054   int rd () const
1055   { return m_rd; }
1056
1057   /* Get the RS1 register field for this instruction.  This is only valid
1058      if the OPCODE implies there is such a field for this instruction.  */
1059   int rs1 () const
1060   { return m_rs1; }
1061
1062   /* Get the RS2 register field for this instruction.  This is only valid
1063      if the OPCODE implies there is such a field for this instruction.  */
1064   int rs2 () const
1065   { return m_rs2; }
1066
1067   /* Get the immediate for this instruction in signed form.  This is only
1068      valid if the OPCODE implies there is such a field for this
1069      instruction.  */
1070   int imm_signed () const
1071   { return m_imm.s; }
1072
1073 private:
1074
1075   /* Extract 5 bit register field at OFFSET from instruction OPCODE.  */
1076   int decode_register_index (unsigned long opcode, int offset)
1077   {
1078     return (opcode >> offset) & 0x1F;
1079   }
1080
1081   /* Extract 5 bit register field at OFFSET from instruction OPCODE.  */
1082   int decode_register_index_short (unsigned long opcode, int offset)
1083   {
1084     return ((opcode >> offset) & 0x7) + 8;
1085   }
1086
1087   /* Helper for DECODE, decode 32-bit R-type instruction.  */
1088   void decode_r_type_insn (enum opcode opcode, ULONGEST ival)
1089   {
1090     m_opcode = opcode;
1091     m_rd = decode_register_index (ival, OP_SH_RD);
1092     m_rs1 = decode_register_index (ival, OP_SH_RS1);
1093     m_rs2 = decode_register_index (ival, OP_SH_RS2);
1094   }
1095
1096   /* Helper for DECODE, decode 16-bit compressed R-type instruction.  */
1097   void decode_cr_type_insn (enum opcode opcode, ULONGEST ival)
1098   {
1099     m_opcode = opcode;
1100     m_rd = m_rs1 = decode_register_index (ival, OP_SH_CRS1S);
1101     m_rs2 = decode_register_index (ival, OP_SH_CRS2);
1102   }
1103
1104   /* Helper for DECODE, decode 32-bit I-type instruction.  */
1105   void decode_i_type_insn (enum opcode opcode, ULONGEST ival)
1106   {
1107     m_opcode = opcode;
1108     m_rd = decode_register_index (ival, OP_SH_RD);
1109     m_rs1 = decode_register_index (ival, OP_SH_RS1);
1110     m_imm.s = EXTRACT_ITYPE_IMM (ival);
1111   }
1112
1113   /* Helper for DECODE, decode 16-bit compressed I-type instruction.  */
1114   void decode_ci_type_insn (enum opcode opcode, ULONGEST ival)
1115   {
1116     m_opcode = opcode;
1117     m_rd = m_rs1 = decode_register_index (ival, OP_SH_CRS1S);
1118     m_imm.s = EXTRACT_RVC_IMM (ival);
1119   }
1120
1121   /* Helper for DECODE, decode 32-bit S-type instruction.  */
1122   void decode_s_type_insn (enum opcode opcode, ULONGEST ival)
1123   {
1124     m_opcode = opcode;
1125     m_rs1 = decode_register_index (ival, OP_SH_RS1);
1126     m_rs2 = decode_register_index (ival, OP_SH_RS2);
1127     m_imm.s = EXTRACT_STYPE_IMM (ival);
1128   }
1129
1130   /* Helper for DECODE, decode 16-bit CS-type instruction.  The immediate
1131      encoding is different for each CS format instruction, so extracting
1132      the immediate is left up to the caller, who should pass the extracted
1133      immediate value through in IMM.  */
1134   void decode_cs_type_insn (enum opcode opcode, ULONGEST ival, int imm)
1135   {
1136     m_opcode = opcode;
1137     m_imm.s = imm;
1138     m_rs1 = decode_register_index_short (ival, OP_SH_CRS1S);
1139     m_rs2 = decode_register_index_short (ival, OP_SH_CRS2S);
1140   }
1141
1142   /* Helper for DECODE, decode 16-bit CSS-type instruction.  The immediate
1143      encoding is different for each CSS format instruction, so extracting
1144      the immediate is left up to the caller, who should pass the extracted
1145      immediate value through in IMM.  */
1146   void decode_css_type_insn (enum opcode opcode, ULONGEST ival, int imm)
1147   {
1148     m_opcode = opcode;
1149     m_imm.s = imm;
1150     m_rs1 = RISCV_SP_REGNUM;
1151     /* Not a compressed register number in this case.  */
1152     m_rs2 = decode_register_index (ival, OP_SH_CRS2);
1153   }
1154
1155   /* Helper for DECODE, decode 32-bit U-type instruction.  */
1156   void decode_u_type_insn (enum opcode opcode, ULONGEST ival)
1157   {
1158     m_opcode = opcode;
1159     m_rd = decode_register_index (ival, OP_SH_RD);
1160     m_imm.s = EXTRACT_UTYPE_IMM (ival);
1161   }
1162
1163   /* Helper for DECODE, decode 32-bit J-type instruction.  */
1164   void decode_j_type_insn (enum opcode opcode, ULONGEST ival)
1165   {
1166     m_opcode = opcode;
1167     m_rd = decode_register_index (ival, OP_SH_RD);
1168     m_imm.s = EXTRACT_UJTYPE_IMM (ival);
1169   }
1170
1171   /* Helper for DECODE, decode 32-bit J-type instruction.  */
1172   void decode_cj_type_insn (enum opcode opcode, ULONGEST ival)
1173   {
1174     m_opcode = opcode;
1175     m_imm.s = EXTRACT_RVC_J_IMM (ival);
1176   }
1177
1178   void decode_b_type_insn (enum opcode opcode, ULONGEST ival)
1179   {
1180     m_opcode = opcode;
1181     m_rs1 = decode_register_index (ival, OP_SH_RS1);
1182     m_rs2 = decode_register_index (ival, OP_SH_RS2);
1183     m_imm.s = EXTRACT_SBTYPE_IMM (ival);
1184   }
1185
1186   void decode_cb_type_insn (enum opcode opcode, ULONGEST ival)
1187   {
1188     m_opcode = opcode;
1189     m_rs1 = decode_register_index_short (ival, OP_SH_CRS1S);
1190     m_imm.s = EXTRACT_RVC_B_IMM (ival);
1191   }
1192
1193   /* Fetch instruction from target memory at ADDR, return the content of
1194      the instruction, and update LEN with the instruction length.  */
1195   static ULONGEST fetch_instruction (struct gdbarch *gdbarch,
1196                                      CORE_ADDR addr, int *len);
1197
1198   /* The length of the instruction in bytes.  Should be 2 or 4.  */
1199   int m_length;
1200
1201   /* The instruction opcode.  */
1202   enum opcode m_opcode;
1203
1204   /* The three possible registers an instruction might reference.  Not
1205      every instruction fills in all of these registers.  Which fields are
1206      valid depends on the opcode.  The naming of these fields matches the
1207      naming in the riscv isa manual.  */
1208   int m_rd;
1209   int m_rs1;
1210   int m_rs2;
1211
1212   /* Possible instruction immediate.  This is only valid if the instruction
1213      format contains an immediate, not all instruction, whether this is
1214      valid depends on the opcode.  Despite only having one format for now
1215      the immediate is packed into a union, later instructions might require
1216      an unsigned formatted immediate, having the union in place now will
1217      reduce the need for code churn later.  */
1218   union riscv_insn_immediate
1219   {
1220     riscv_insn_immediate ()
1221       : s (0)
1222     {
1223       /* Nothing.  */
1224     }
1225
1226     int s;
1227   } m_imm;
1228 };
1229
1230 /* Fetch instruction from target memory at ADDR, return the content of the
1231    instruction, and update LEN with the instruction length.  */
1232
1233 ULONGEST
1234 riscv_insn::fetch_instruction (struct gdbarch *gdbarch,
1235                                CORE_ADDR addr, int *len)
1236 {
1237   enum bfd_endian byte_order = gdbarch_byte_order_for_code (gdbarch);
1238   gdb_byte buf[8];
1239   int instlen, status;
1240
1241   /* All insns are at least 16 bits.  */
1242   status = target_read_memory (addr, buf, 2);
1243   if (status)
1244     memory_error (TARGET_XFER_E_IO, addr);
1245
1246   /* If we need more, grab it now.  */
1247   instlen = riscv_insn_length (buf[0]);
1248   gdb_assert (instlen <= sizeof (buf));
1249   *len = instlen;
1250
1251   if (instlen > 2)
1252     {
1253       status = target_read_memory (addr + 2, buf + 2, instlen - 2);
1254       if (status)
1255         memory_error (TARGET_XFER_E_IO, addr + 2);
1256     }
1257
1258   return extract_unsigned_integer (buf, instlen, byte_order);
1259 }
1260
1261 /* Fetch from target memory an instruction at PC and decode it.  This can
1262    throw an error if the memory access fails, callers are responsible for
1263    handling this error if that is appropriate.  */
1264
1265 void
1266 riscv_insn::decode (struct gdbarch *gdbarch, CORE_ADDR pc)
1267 {
1268   ULONGEST ival;
1269
1270   /* Fetch the instruction, and the instructions length.  */
1271   ival = fetch_instruction (gdbarch, pc, &m_length);
1272
1273   if (m_length == 4)
1274     {
1275       if (is_add_insn (ival))
1276         decode_r_type_insn (ADD, ival);
1277       else if (is_addw_insn (ival))
1278         decode_r_type_insn (ADDW, ival);
1279       else if (is_addi_insn (ival))
1280         decode_i_type_insn (ADDI, ival);
1281       else if (is_addiw_insn (ival))
1282         decode_i_type_insn (ADDIW, ival);
1283       else if (is_auipc_insn (ival))
1284         decode_u_type_insn (AUIPC, ival);
1285       else if (is_lui_insn (ival))
1286         decode_u_type_insn (LUI, ival);
1287       else if (is_sd_insn (ival))
1288         decode_s_type_insn (SD, ival);
1289       else if (is_sw_insn (ival))
1290         decode_s_type_insn (SW, ival);
1291       else if (is_jal_insn (ival))
1292         decode_j_type_insn (JAL, ival);
1293       else if (is_jalr_insn (ival))
1294         decode_i_type_insn (JALR, ival);
1295       else if (is_beq_insn (ival))
1296         decode_b_type_insn (BEQ, ival);
1297       else if (is_bne_insn (ival))
1298         decode_b_type_insn (BNE, ival);
1299       else if (is_blt_insn (ival))
1300         decode_b_type_insn (BLT, ival);
1301       else if (is_bge_insn (ival))
1302         decode_b_type_insn (BGE, ival);
1303       else if (is_bltu_insn (ival))
1304         decode_b_type_insn (BLTU, ival);
1305       else if (is_bgeu_insn (ival))
1306         decode_b_type_insn (BGEU, ival);
1307       else if (is_lr_w_insn (ival))
1308         decode_r_type_insn (LR, ival);
1309       else if (is_lr_d_insn (ival))
1310         decode_r_type_insn (LR, ival);
1311       else if (is_sc_w_insn (ival))
1312         decode_r_type_insn (SC, ival);
1313       else if (is_sc_d_insn (ival))
1314         decode_r_type_insn (SC, ival);
1315       else
1316         /* None of the other fields are valid in this case.  */
1317         m_opcode = OTHER;
1318     }
1319   else if (m_length == 2)
1320     {
1321       int xlen = riscv_isa_xlen (gdbarch);
1322
1323       /* C_ADD and C_JALR have the same opcode.  If RS2 is 0, then this is a
1324          C_JALR.  So must try to match C_JALR first as it has more bits in
1325          mask.  */
1326       if (is_c_jalr_insn (ival))
1327         decode_cr_type_insn (JALR, ival);
1328       else if (is_c_add_insn (ival))
1329         decode_cr_type_insn (ADD, ival);
1330       /* C_ADDW is RV64 and RV128 only.  */
1331       else if (xlen != 4 && is_c_addw_insn (ival))
1332         decode_cr_type_insn (ADDW, ival);
1333       else if (is_c_addi_insn (ival))
1334         decode_ci_type_insn (ADDI, ival);
1335       /* C_ADDIW and C_JAL have the same opcode.  C_ADDIW is RV64 and RV128
1336          only and C_JAL is RV32 only.  */
1337       else if (xlen != 4 && is_c_addiw_insn (ival))
1338         decode_ci_type_insn (ADDIW, ival);
1339       else if (xlen == 4 && is_c_jal_insn (ival))
1340         decode_cj_type_insn (JAL, ival);
1341       /* C_ADDI16SP and C_LUI have the same opcode.  If RD is 2, then this is a
1342          C_ADDI16SP.  So must try to match C_ADDI16SP first as it has more bits
1343          in mask.  */
1344       else if (is_c_addi16sp_insn (ival))
1345         {
1346           m_opcode = ADDI;
1347           m_rd = m_rs1 = decode_register_index (ival, OP_SH_RD);
1348           m_imm.s = EXTRACT_RVC_ADDI16SP_IMM (ival);
1349         }
1350       else if (is_c_addi4spn_insn (ival))
1351         {
1352           m_opcode = ADDI;
1353           m_rd = decode_register_index_short (ival, OP_SH_CRS2S);
1354           m_rs1 = RISCV_SP_REGNUM;
1355           m_imm.s = EXTRACT_RVC_ADDI4SPN_IMM (ival);
1356         }
1357       else if (is_c_lui_insn (ival))
1358         {
1359           m_opcode = LUI;
1360           m_rd = decode_register_index (ival, OP_SH_CRS1S);
1361           m_imm.s = EXTRACT_RVC_LUI_IMM (ival);
1362         }
1363       /* C_SD and C_FSW have the same opcode.  C_SD is RV64 and RV128 only,
1364          and C_FSW is RV32 only.  */
1365       else if (xlen != 4 && is_c_sd_insn (ival))
1366         decode_cs_type_insn (SD, ival, EXTRACT_RVC_LD_IMM (ival));
1367       else if (is_c_sw_insn (ival))
1368         decode_cs_type_insn (SW, ival, EXTRACT_RVC_LW_IMM (ival));
1369       else if (is_c_swsp_insn (ival))
1370         decode_css_type_insn (SW, ival, EXTRACT_RVC_SWSP_IMM (ival));
1371       else if (xlen != 4 && is_c_sdsp_insn (ival))
1372         decode_css_type_insn (SW, ival, EXTRACT_RVC_SDSP_IMM (ival));
1373       /* C_JR and C_MV have the same opcode.  If RS2 is 0, then this is a C_JR.
1374          So must try to match C_JR first as it ahs more bits in mask.  */
1375       else if (is_c_jr_insn (ival))
1376         decode_cr_type_insn (JALR, ival);
1377       else if (is_c_j_insn (ival))
1378         decode_cj_type_insn (JAL, ival);
1379       else if (is_c_beqz_insn (ival))
1380         decode_cb_type_insn (BEQ, ival);
1381       else if (is_c_bnez_insn (ival))
1382         decode_cb_type_insn (BNE, ival);
1383       else
1384         /* None of the other fields of INSN are valid in this case.  */
1385         m_opcode = OTHER;
1386     }
1387   else
1388     {
1389       /* This must be a 6 or 8 byte instruction, we don't currently decode
1390          any of these, so just ignore it.  */
1391       gdb_assert (m_length == 6 || m_length == 8);
1392       m_opcode = OTHER;
1393     }
1394 }
1395
1396 /* The prologue scanner.  This is currently only used for skipping the
1397    prologue of a function when the DWARF information is not sufficient.
1398    However, it is written with filling of the frame cache in mind, which
1399    is why different groups of stack setup instructions are split apart
1400    during the core of the inner loop.  In the future, the intention is to
1401    extend this function to fully support building up a frame cache that
1402    can unwind register values when there is no DWARF information.  */
1403
1404 static CORE_ADDR
1405 riscv_scan_prologue (struct gdbarch *gdbarch,
1406                      CORE_ADDR start_pc, CORE_ADDR end_pc,
1407                      struct riscv_unwind_cache *cache)
1408 {
1409   CORE_ADDR cur_pc, next_pc, after_prologue_pc;
1410   CORE_ADDR end_prologue_addr = 0;
1411
1412   /* Find an upper limit on the function prologue using the debug
1413      information.  If the debug information could not be used to provide
1414      that bound, then use an arbitrary large number as the upper bound.  */
1415   after_prologue_pc = skip_prologue_using_sal (gdbarch, start_pc);
1416   if (after_prologue_pc == 0)
1417     after_prologue_pc = start_pc + 100;   /* Arbitrary large number.  */
1418   if (after_prologue_pc < end_pc)
1419     end_pc = after_prologue_pc;
1420
1421   pv_t regs[RISCV_NUM_INTEGER_REGS]; /* Number of GPR.  */
1422   for (int regno = 0; regno < RISCV_NUM_INTEGER_REGS; regno++)
1423     regs[regno] = pv_register (regno, 0);
1424   pv_area stack (RISCV_SP_REGNUM, gdbarch_addr_bit (gdbarch));
1425
1426   if (riscv_debug_unwinder)
1427     fprintf_unfiltered
1428       (gdb_stdlog,
1429        "Prologue scan for function starting at %s (limit %s)\n",
1430        core_addr_to_string (start_pc),
1431        core_addr_to_string (end_pc));
1432
1433   for (next_pc = cur_pc = start_pc; cur_pc < end_pc; cur_pc = next_pc)
1434     {
1435       struct riscv_insn insn;
1436
1437       /* Decode the current instruction, and decide where the next
1438          instruction lives based on the size of this instruction.  */
1439       insn.decode (gdbarch, cur_pc);
1440       gdb_assert (insn.length () > 0);
1441       next_pc = cur_pc + insn.length ();
1442
1443       /* Look for common stack adjustment insns.  */
1444       if ((insn.opcode () == riscv_insn::ADDI
1445            || insn.opcode () == riscv_insn::ADDIW)
1446           && insn.rd () == RISCV_SP_REGNUM
1447           && insn.rs1 () == RISCV_SP_REGNUM)
1448         {
1449           /* Handle: addi sp, sp, -i
1450              or:     addiw sp, sp, -i  */
1451           gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
1452           gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
1453           regs[insn.rd ()]
1454             = pv_add_constant (regs[insn.rs1 ()], insn.imm_signed ());
1455         }
1456       else if ((insn.opcode () == riscv_insn::SW
1457                 || insn.opcode () == riscv_insn::SD)
1458                && (insn.rs1 () == RISCV_SP_REGNUM
1459                    || insn.rs1 () == RISCV_FP_REGNUM))
1460         {
1461           /* Handle: sw reg, offset(sp)
1462              or:     sd reg, offset(sp)
1463              or:     sw reg, offset(s0)
1464              or:     sd reg, offset(s0)  */
1465           /* Instruction storing a register onto the stack.  */
1466           gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
1467           gdb_assert (insn.rs2 () < RISCV_NUM_INTEGER_REGS);
1468           stack.store (pv_add_constant (regs[insn.rs1 ()], insn.imm_signed ()),
1469                         (insn.opcode () == riscv_insn::SW ? 4 : 8),
1470                         regs[insn.rs2 ()]);
1471         }
1472       else if (insn.opcode () == riscv_insn::ADDI
1473                && insn.rd () == RISCV_FP_REGNUM
1474                && insn.rs1 () == RISCV_SP_REGNUM)
1475         {
1476           /* Handle: addi s0, sp, size  */
1477           /* Instructions setting up the frame pointer.  */
1478           gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
1479           gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
1480           regs[insn.rd ()]
1481             = pv_add_constant (regs[insn.rs1 ()], insn.imm_signed ());
1482         }
1483       else if ((insn.opcode () == riscv_insn::ADD
1484                 || insn.opcode () == riscv_insn::ADDW)
1485                && insn.rd () == RISCV_FP_REGNUM
1486                && insn.rs1 () == RISCV_SP_REGNUM
1487                && insn.rs2 () == RISCV_ZERO_REGNUM)
1488         {
1489           /* Handle: add s0, sp, 0
1490              or:     addw s0, sp, 0  */
1491           /* Instructions setting up the frame pointer.  */
1492           gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
1493           gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
1494           regs[insn.rd ()] = pv_add_constant (regs[insn.rs1 ()], 0);
1495         }
1496       else if ((insn.opcode () == riscv_insn::ADDI
1497                 && insn.rd () == RISCV_ZERO_REGNUM
1498                 && insn.rs1 () == RISCV_ZERO_REGNUM
1499                 && insn.imm_signed () == 0))
1500         {
1501           /* Handle: add x0, x0, 0   (NOP)  */
1502         }
1503       else if (insn.opcode () == riscv_insn::AUIPC)
1504         {
1505           gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
1506           regs[insn.rd ()] = pv_constant (cur_pc + insn.imm_signed ());
1507         }
1508       else if (insn.opcode () == riscv_insn::LUI)
1509         {
1510           /* Handle: lui REG, n
1511              Where REG is not gp register.  */
1512           gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
1513           regs[insn.rd ()] = pv_constant (insn.imm_signed ());
1514         }
1515       else if (insn.opcode () == riscv_insn::ADDI)
1516         {
1517           /* Handle: addi REG1, REG2, IMM  */
1518           gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
1519           gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
1520           regs[insn.rd ()]
1521             = pv_add_constant (regs[insn.rs1 ()], insn.imm_signed ());
1522         }
1523       else if (insn.opcode () == riscv_insn::ADD)
1524         {
1525           /* Handle: addi REG1, REG2, IMM  */
1526           gdb_assert (insn.rd () < RISCV_NUM_INTEGER_REGS);
1527           gdb_assert (insn.rs1 () < RISCV_NUM_INTEGER_REGS);
1528           gdb_assert (insn.rs2 () < RISCV_NUM_INTEGER_REGS);
1529           regs[insn.rd ()] = pv_add (regs[insn.rs1 ()], regs[insn.rs2 ()]);
1530         }
1531       else
1532         {
1533           end_prologue_addr = cur_pc;
1534           break;
1535         }
1536     }
1537
1538   if (end_prologue_addr == 0)
1539     end_prologue_addr = cur_pc;
1540
1541   if (riscv_debug_unwinder)
1542     fprintf_unfiltered (gdb_stdlog, "End of prologue at %s\n",
1543                         core_addr_to_string (end_prologue_addr));
1544
1545   if (cache != NULL)
1546     {
1547       /* Figure out if it is a frame pointer or just a stack pointer.  Also
1548          the offset held in the pv_t is from the original register value to
1549          the current value, which for a grows down stack means a negative
1550          value.  The FRAME_BASE_OFFSET is the negation of this, how to get
1551          from the current value to the original value.  */
1552       if (pv_is_register (regs[RISCV_FP_REGNUM], RISCV_SP_REGNUM))
1553         {
1554           cache->frame_base_reg = RISCV_FP_REGNUM;
1555           cache->frame_base_offset = -regs[RISCV_FP_REGNUM].k;
1556         }
1557       else
1558         {
1559           cache->frame_base_reg = RISCV_SP_REGNUM;
1560           cache->frame_base_offset = -regs[RISCV_SP_REGNUM].k;
1561         }
1562
1563       /* Assign offset from old SP to all saved registers.  As we don't
1564          have the previous value for the frame base register at this
1565          point, we store the offset as the address in the trad_frame, and
1566          then convert this to an actual address later.  */
1567       for (int i = 0; i <= RISCV_NUM_INTEGER_REGS; i++)
1568         {
1569           CORE_ADDR offset;
1570           if (stack.find_reg (gdbarch, i, &offset))
1571             {
1572               if (riscv_debug_unwinder)
1573                 {
1574                   /* Display OFFSET as a signed value, the offsets are from
1575                      the frame base address to the registers location on
1576                      the stack, with a descending stack this means the
1577                      offsets are always negative.  */
1578                   fprintf_unfiltered (gdb_stdlog,
1579                                       "Register $%s at stack offset %s\n",
1580                                       gdbarch_register_name (gdbarch, i),
1581                                       plongest ((LONGEST) offset));
1582                 }
1583               trad_frame_set_addr (cache->regs, i, offset);
1584             }
1585         }
1586     }
1587
1588   return end_prologue_addr;
1589 }
1590
1591 /* Implement the riscv_skip_prologue gdbarch method.  */
1592
1593 static CORE_ADDR
1594 riscv_skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc)
1595 {
1596   CORE_ADDR func_addr;
1597
1598   /* See if we can determine the end of the prologue via the symbol
1599      table.  If so, then return either PC, or the PC after the
1600      prologue, whichever is greater.  */
1601   if (find_pc_partial_function (pc, NULL, &func_addr, NULL))
1602     {
1603       CORE_ADDR post_prologue_pc
1604         = skip_prologue_using_sal (gdbarch, func_addr);
1605
1606       if (post_prologue_pc != 0)
1607         return std::max (pc, post_prologue_pc);
1608     }
1609
1610   /* Can't determine prologue from the symbol table, need to examine
1611      instructions.  Pass -1 for the end address to indicate the prologue
1612      scanner can scan as far as it needs to find the end of the prologue.  */
1613   return riscv_scan_prologue (gdbarch, pc, ((CORE_ADDR) -1), NULL);
1614 }
1615
1616 /* Implement the gdbarch push dummy code callback.  */
1617
1618 static CORE_ADDR
1619 riscv_push_dummy_code (struct gdbarch *gdbarch, CORE_ADDR sp,
1620                        CORE_ADDR funaddr, struct value **args, int nargs,
1621                        struct type *value_type, CORE_ADDR *real_pc,
1622                        CORE_ADDR *bp_addr, struct regcache *regcache)
1623 {
1624   /* A nop instruction is 'add x0, x0, 0'.  */
1625   static const gdb_byte nop_insn[] = { 0x13, 0x00, 0x00, 0x00 };
1626
1627   /* Allocate space for a breakpoint, and keep the stack correctly
1628      aligned.  The space allocated here must be at least big enough to
1629      accommodate the NOP_INSN defined above.  */
1630   sp -= 16;
1631   *bp_addr = sp;
1632   *real_pc = funaddr;
1633
1634   /* When we insert a breakpoint we select whether to use a compressed
1635      breakpoint or not based on the existing contents of the memory.
1636
1637      If the breakpoint is being placed onto the stack as part of setting up
1638      for an inferior call from GDB, then the existing stack contents may
1639      randomly appear to be a compressed instruction, causing GDB to insert
1640      a compressed breakpoint.  If this happens on a target that does not
1641      support compressed instructions then this could cause problems.
1642
1643      To prevent this issue we write an uncompressed nop onto the stack at
1644      the location where the breakpoint will be inserted.  In this way we
1645      ensure that we always use an uncompressed breakpoint, which should
1646      work on all targets.
1647
1648      We call TARGET_WRITE_MEMORY here so that if the write fails we don't
1649      throw an exception.  Instead we ignore the error and move on.  The
1650      assumption is that either GDB will error later when actually trying to
1651      insert a software breakpoint, or GDB will use hardware breakpoints and
1652      there will be no need to write to memory later.  */
1653   int status = target_write_memory (*bp_addr, nop_insn, sizeof (nop_insn));
1654
1655   if (riscv_debug_breakpoints || riscv_debug_infcall)
1656     fprintf_unfiltered (gdb_stdlog,
1657                         "Writing %lld-byte nop instruction to %s: %s\n",
1658                         ((unsigned long long) sizeof (nop_insn)),
1659                         paddress (gdbarch, *bp_addr),
1660                         (status == 0 ? "success" : "failed"));
1661
1662   return sp;
1663 }
1664
1665 /* Implement the gdbarch type alignment method, overrides the generic
1666    alignment algorithm for anything that is RISC-V specific.  */
1667
1668 static ULONGEST
1669 riscv_type_align (gdbarch *gdbarch, type *type)
1670 {
1671   type = check_typedef (type);
1672   if (TYPE_CODE (type) == TYPE_CODE_ARRAY && TYPE_VECTOR (type))
1673     return std::min (TYPE_LENGTH (type), (ULONGEST) BIGGEST_ALIGNMENT);
1674
1675   /* Anything else will be aligned by the generic code.  */
1676   return 0;
1677 }
1678
1679 /* Holds information about a single argument either being passed to an
1680    inferior function, or returned from an inferior function.  This includes
1681    information about the size, type, etc of the argument, and also
1682    information about how the argument will be passed (or returned).  */
1683
1684 struct riscv_arg_info
1685 {
1686   /* Contents of the argument.  */
1687   const gdb_byte *contents;
1688
1689   /* Length of argument.  */
1690   int length;
1691
1692   /* Alignment required for an argument of this type.  */
1693   int align;
1694
1695   /* The type for this argument.  */
1696   struct type *type;
1697
1698   /* Each argument can have either 1 or 2 locations assigned to it.  Each
1699      location describes where part of the argument will be placed.  The
1700      second location is valid based on the LOC_TYPE and C_LENGTH fields
1701      of the first location (which is always valid).  */
1702   struct location
1703   {
1704     /* What type of location this is.  */
1705     enum location_type
1706       {
1707        /* Argument passed in a register.  */
1708        in_reg,
1709
1710        /* Argument passed as an on stack argument.  */
1711        on_stack,
1712
1713        /* Argument passed by reference.  The second location is always
1714           valid for a BY_REF argument, and describes where the address
1715           of the BY_REF argument should be placed.  */
1716        by_ref
1717       } loc_type;
1718
1719     /* Information that depends on the location type.  */
1720     union
1721     {
1722       /* Which register number to use.  */
1723       int regno;
1724
1725       /* The offset into the stack region.  */
1726       int offset;
1727     } loc_data;
1728
1729     /* The length of contents covered by this location.  If this is less
1730        than the total length of the argument, then the second location
1731        will be valid, and will describe where the rest of the argument
1732        will go.  */
1733     int c_length;
1734
1735     /* The offset within CONTENTS for this part of the argument.  Will
1736        always be 0 for the first part.  For the second part of the
1737        argument, this might be the C_LENGTH value of the first part,
1738        however, if we are passing a structure in two registers, and there's
1739        is padding between the first and second field, then this offset
1740        might be greater than the length of the first argument part.  When
1741        the second argument location is not holding part of the argument
1742        value, but is instead holding the address of a reference argument,
1743        then this offset will be set to 0.  */
1744     int c_offset;
1745   } argloc[2];
1746
1747   /* TRUE if this is an unnamed argument.  */
1748   bool is_unnamed;
1749 };
1750
1751 /* Information about a set of registers being used for passing arguments as
1752    part of a function call.  The register set must be numerically
1753    sequential from NEXT_REGNUM to LAST_REGNUM.  The register set can be
1754    disabled from use by setting NEXT_REGNUM greater than LAST_REGNUM.  */
1755
1756 struct riscv_arg_reg
1757 {
1758   riscv_arg_reg (int first, int last)
1759     : next_regnum (first),
1760       last_regnum (last)
1761   {
1762     /* Nothing.  */
1763   }
1764
1765   /* The GDB register number to use in this set.  */
1766   int next_regnum;
1767
1768   /* The last GDB register number to use in this set.  */
1769   int last_regnum;
1770 };
1771
1772 /* Arguments can be passed as on stack arguments, or by reference.  The
1773    on stack arguments must be in a continuous region starting from $sp,
1774    while the by reference arguments can be anywhere, but we'll put them
1775    on the stack after (at higher address) the on stack arguments.
1776
1777    This might not be the right approach to take.  The ABI is clear that
1778    an argument passed by reference can be modified by the callee, which
1779    us placing the argument (temporarily) onto the stack will not achieve
1780    (changes will be lost).  There's also the possibility that very large
1781    arguments could overflow the stack.
1782
1783    This struct is used to track offset into these two areas for where
1784    arguments are to be placed.  */
1785 struct riscv_memory_offsets
1786 {
1787   riscv_memory_offsets ()
1788     : arg_offset (0),
1789       ref_offset (0)
1790   {
1791     /* Nothing.  */
1792   }
1793
1794   /* Offset into on stack argument area.  */
1795   int arg_offset;
1796
1797   /* Offset into the pass by reference area.  */
1798   int ref_offset;
1799 };
1800
1801 /* Holds information about where arguments to a call will be placed.  This
1802    is updated as arguments are added onto the call, and can be used to
1803    figure out where the next argument should be placed.  */
1804
1805 struct riscv_call_info
1806 {
1807   riscv_call_info (struct gdbarch *gdbarch)
1808     : int_regs (RISCV_A0_REGNUM, RISCV_A0_REGNUM + 7),
1809       float_regs (RISCV_FA0_REGNUM, RISCV_FA0_REGNUM + 7)
1810   {
1811     xlen = riscv_abi_xlen (gdbarch);
1812     flen = riscv_abi_flen (gdbarch);
1813
1814     /* Disable use of floating point registers if needed.  */
1815     if (!riscv_has_fp_abi (gdbarch))
1816       float_regs.next_regnum = float_regs.last_regnum + 1;
1817   }
1818
1819   /* Track the memory areas used for holding in-memory arguments to a
1820      call.  */
1821   struct riscv_memory_offsets memory;
1822
1823   /* Holds information about the next integer register to use for passing
1824      an argument.  */
1825   struct riscv_arg_reg int_regs;
1826
1827   /* Holds information about the next floating point register to use for
1828      passing an argument.  */
1829   struct riscv_arg_reg float_regs;
1830
1831   /* The XLEN and FLEN are copied in to this structure for convenience, and
1832      are just the results of calling RISCV_ABI_XLEN and RISCV_ABI_FLEN.  */
1833   int xlen;
1834   int flen;
1835 };
1836
1837 /* Return the number of registers available for use as parameters in the
1838    register set REG.  Returned value can be 0 or more.  */
1839
1840 static int
1841 riscv_arg_regs_available (struct riscv_arg_reg *reg)
1842 {
1843   if (reg->next_regnum > reg->last_regnum)
1844     return 0;
1845
1846   return (reg->last_regnum - reg->next_regnum + 1);
1847 }
1848
1849 /* If there is at least one register available in the register set REG then
1850    the next register from REG is assigned to LOC and the length field of
1851    LOC is updated to LENGTH.  The register set REG is updated to indicate
1852    that the assigned register is no longer available and the function
1853    returns true.
1854
1855    If there are no registers available in REG then the function returns
1856    false, and LOC and REG are unchanged.  */
1857
1858 static bool
1859 riscv_assign_reg_location (struct riscv_arg_info::location *loc,
1860                            struct riscv_arg_reg *reg,
1861                            int length, int offset)
1862 {
1863   if (reg->next_regnum <= reg->last_regnum)
1864     {
1865       loc->loc_type = riscv_arg_info::location::in_reg;
1866       loc->loc_data.regno = reg->next_regnum;
1867       reg->next_regnum++;
1868       loc->c_length = length;
1869       loc->c_offset = offset;
1870       return true;
1871     }
1872
1873   return false;
1874 }
1875
1876 /* Assign LOC a location as the next stack parameter, and update MEMORY to
1877    record that an area of stack has been used to hold the parameter
1878    described by LOC.
1879
1880    The length field of LOC is updated to LENGTH, the length of the
1881    parameter being stored, and ALIGN is the alignment required by the
1882    parameter, which will affect how memory is allocated out of MEMORY.  */
1883
1884 static void
1885 riscv_assign_stack_location (struct riscv_arg_info::location *loc,
1886                              struct riscv_memory_offsets *memory,
1887                              int length, int align)
1888 {
1889   loc->loc_type = riscv_arg_info::location::on_stack;
1890   memory->arg_offset
1891     = align_up (memory->arg_offset, align);
1892   loc->loc_data.offset = memory->arg_offset;
1893   memory->arg_offset += length;
1894   loc->c_length = length;
1895
1896   /* Offset is always 0, either we're the first location part, in which
1897      case we're reading content from the start of the argument, or we're
1898      passing the address of a reference argument, so 0.  */
1899   loc->c_offset = 0;
1900 }
1901
1902 /* Update AINFO, which describes an argument that should be passed or
1903    returned using the integer ABI.  The argloc fields within AINFO are
1904    updated to describe the location in which the argument will be passed to
1905    a function, or returned from a function.
1906
1907    The CINFO structure contains the ongoing call information, the holds
1908    information such as which argument registers are remaining to be
1909    assigned to parameter, and how much memory has been used by parameters
1910    so far.
1911
1912    By examining the state of CINFO a suitable location can be selected,
1913    and assigned to AINFO.  */
1914
1915 static void
1916 riscv_call_arg_scalar_int (struct riscv_arg_info *ainfo,
1917                            struct riscv_call_info *cinfo)
1918 {
1919   if (ainfo->length > (2 * cinfo->xlen))
1920     {
1921       /* Argument is going to be passed by reference.  */
1922       ainfo->argloc[0].loc_type
1923         = riscv_arg_info::location::by_ref;
1924       cinfo->memory.ref_offset
1925         = align_up (cinfo->memory.ref_offset, ainfo->align);
1926       ainfo->argloc[0].loc_data.offset = cinfo->memory.ref_offset;
1927       cinfo->memory.ref_offset += ainfo->length;
1928       ainfo->argloc[0].c_length = ainfo->length;
1929
1930       /* The second location for this argument is given over to holding the
1931          address of the by-reference data.  Pass 0 for the offset as this
1932          is not part of the actual argument value.  */
1933       if (!riscv_assign_reg_location (&ainfo->argloc[1],
1934                                       &cinfo->int_regs,
1935                                       cinfo->xlen, 0))
1936         riscv_assign_stack_location (&ainfo->argloc[1],
1937                                      &cinfo->memory, cinfo->xlen,
1938                                      cinfo->xlen);
1939     }
1940   else
1941     {
1942       int len = std::min (ainfo->length, cinfo->xlen);
1943       int align = std::max (ainfo->align, cinfo->xlen);
1944
1945       /* Unnamed arguments in registers that require 2*XLEN alignment are
1946          passed in an aligned register pair.  */
1947       if (ainfo->is_unnamed && (align == cinfo->xlen * 2)
1948           && cinfo->int_regs.next_regnum & 1)
1949         cinfo->int_regs.next_regnum++;
1950
1951       if (!riscv_assign_reg_location (&ainfo->argloc[0],
1952                                       &cinfo->int_regs, len, 0))
1953         riscv_assign_stack_location (&ainfo->argloc[0],
1954                                      &cinfo->memory, len, align);
1955
1956       if (len < ainfo->length)
1957         {
1958           len = ainfo->length - len;
1959           if (!riscv_assign_reg_location (&ainfo->argloc[1],
1960                                           &cinfo->int_regs, len,
1961                                           cinfo->xlen))
1962             riscv_assign_stack_location (&ainfo->argloc[1],
1963                                          &cinfo->memory, len, cinfo->xlen);
1964         }
1965     }
1966 }
1967
1968 /* Like RISCV_CALL_ARG_SCALAR_INT, except the argument described by AINFO
1969    is being passed with the floating point ABI.  */
1970
1971 static void
1972 riscv_call_arg_scalar_float (struct riscv_arg_info *ainfo,
1973                              struct riscv_call_info *cinfo)
1974 {
1975   if (ainfo->length > cinfo->flen || ainfo->is_unnamed)
1976     return riscv_call_arg_scalar_int (ainfo, cinfo);
1977   else
1978     {
1979       if (!riscv_assign_reg_location (&ainfo->argloc[0],
1980                                       &cinfo->float_regs,
1981                                       ainfo->length, 0))
1982         return riscv_call_arg_scalar_int (ainfo, cinfo);
1983     }
1984 }
1985
1986 /* Like RISCV_CALL_ARG_SCALAR_INT, except the argument described by AINFO
1987    is a complex floating point argument, and is therefore handled
1988    differently to other argument types.  */
1989
1990 static void
1991 riscv_call_arg_complex_float (struct riscv_arg_info *ainfo,
1992                               struct riscv_call_info *cinfo)
1993 {
1994   if (ainfo->length <= (2 * cinfo->flen)
1995       && riscv_arg_regs_available (&cinfo->float_regs) >= 2
1996       && !ainfo->is_unnamed)
1997     {
1998       bool result;
1999       int len = ainfo->length / 2;
2000
2001       result = riscv_assign_reg_location (&ainfo->argloc[0],
2002                                           &cinfo->float_regs, len, 0);
2003       gdb_assert (result);
2004
2005       result = riscv_assign_reg_location (&ainfo->argloc[1],
2006                                           &cinfo->float_regs, len, len);
2007       gdb_assert (result);
2008     }
2009   else
2010     return riscv_call_arg_scalar_int (ainfo, cinfo);
2011 }
2012
2013 /* A structure used for holding information about a structure type within
2014    the inferior program.  The RiscV ABI has special rules for handling some
2015    structures with a single field or with two fields.  The counting of
2016    fields here is done after flattening out all nested structures.  */
2017
2018 class riscv_struct_info
2019 {
2020 public:
2021   riscv_struct_info ()
2022     : m_number_of_fields (0),
2023       m_types { nullptr, nullptr },
2024       m_offsets { 0, 0 }
2025   {
2026     /* Nothing.  */
2027   }
2028
2029   /* Analyse TYPE descending into nested structures, count the number of
2030      scalar fields and record the types of the first two fields found.  */
2031   void analyse (struct type *type)
2032   {
2033     analyse_inner (type, 0);
2034   }
2035
2036   /* The number of scalar fields found in the analysed type.  This is
2037      currently only accurate if the value returned is 0, 1, or 2 as the
2038      analysis stops counting when the number of fields is 3.  This is
2039      because the RiscV ABI only has special cases for 1 or 2 fields,
2040      anything else we just don't care about.  */
2041   int number_of_fields () const
2042   { return m_number_of_fields; }
2043
2044   /* Return the type for scalar field INDEX within the analysed type.  Will
2045      return nullptr if there is no field at that index.  Only INDEX values
2046      0 and 1 can be requested as the RiscV ABI only has special cases for
2047      structures with 1 or 2 fields.  */
2048   struct type *field_type (int index) const
2049   {
2050     gdb_assert (index < (sizeof (m_types) / sizeof (m_types[0])));
2051     return m_types[index];
2052   }
2053
2054   /* Return the offset of scalar field INDEX within the analysed type. Will
2055      return 0 if there is no field at that index.  Only INDEX values 0 and
2056      1 can be requested as the RiscV ABI only has special cases for
2057      structures with 1 or 2 fields.  */
2058   int field_offset (int index) const
2059   {
2060     gdb_assert (index < (sizeof (m_offsets) / sizeof (m_offsets[0])));
2061     return m_offsets[index];
2062   }
2063
2064 private:
2065   /* The number of scalar fields found within the structure after recursing
2066      into nested structures.  */
2067   int m_number_of_fields;
2068
2069   /* The types of the first two scalar fields found within the structure
2070      after recursing into nested structures.  */
2071   struct type *m_types[2];
2072
2073   /* The offsets of the first two scalar fields found within the structure
2074      after recursing into nested structures.  */
2075   int m_offsets[2];
2076
2077   /* Recursive core for ANALYSE, the OFFSET parameter tracks the byte
2078      offset from the start of the top level structure being analysed.  */
2079   void analyse_inner (struct type *type, int offset);
2080 };
2081
2082 /* See description in class declaration.  */
2083
2084 void
2085 riscv_struct_info::analyse_inner (struct type *type, int offset)
2086 {
2087   unsigned int count = TYPE_NFIELDS (type);
2088   unsigned int i;
2089
2090   for (i = 0; i < count; ++i)
2091     {
2092       if (TYPE_FIELD_LOC_KIND (type, i) != FIELD_LOC_KIND_BITPOS)
2093         continue;
2094
2095       struct type *field_type = TYPE_FIELD_TYPE (type, i);
2096       field_type = check_typedef (field_type);
2097       int field_offset
2098         = offset + TYPE_FIELD_BITPOS (type, i) / TARGET_CHAR_BIT;
2099
2100       switch (TYPE_CODE (field_type))
2101         {
2102         case TYPE_CODE_STRUCT:
2103           analyse_inner (field_type, field_offset);
2104           break;
2105
2106         default:
2107           /* RiscV only flattens out structures.  Anything else does not
2108              need to be flattened, we just record the type, and when we
2109              look at the analysis results we'll realise this is not a
2110              structure we can special case, and pass the structure in
2111              memory.  */
2112           if (m_number_of_fields < 2)
2113             {
2114               m_types[m_number_of_fields] = field_type;
2115               m_offsets[m_number_of_fields] = field_offset;
2116             }
2117           m_number_of_fields++;
2118           break;
2119         }
2120
2121       /* RiscV only has special handling for structures with 1 or 2 scalar
2122          fields, any more than that and the structure is just passed in
2123          memory.  We can safely drop out early when we find 3 or more
2124          fields then.  */
2125
2126       if (m_number_of_fields > 2)
2127         return;
2128     }
2129 }
2130
2131 /* Like RISCV_CALL_ARG_SCALAR_INT, except the argument described by AINFO
2132    is a structure.  Small structures on RiscV have some special case
2133    handling in order that the structure might be passed in register.
2134    Larger structures are passed in memory.  After assigning location
2135    information to AINFO, CINFO will have been updated.  */
2136
2137 static void
2138 riscv_call_arg_struct (struct riscv_arg_info *ainfo,
2139                        struct riscv_call_info *cinfo)
2140 {
2141   if (riscv_arg_regs_available (&cinfo->float_regs) >= 1)
2142     {
2143       struct riscv_struct_info sinfo;
2144
2145       sinfo.analyse (ainfo->type);
2146       if (sinfo.number_of_fields () == 1
2147           && TYPE_CODE (sinfo.field_type (0)) == TYPE_CODE_COMPLEX)
2148         {
2149           /* The following is similar to RISCV_CALL_ARG_COMPLEX_FLOAT,
2150              except we use the type of the complex field instead of the
2151              type from AINFO, and the first location might be at a non-zero
2152              offset.  */
2153           if (TYPE_LENGTH (sinfo.field_type (0)) <= (2 * cinfo->flen)
2154               && riscv_arg_regs_available (&cinfo->float_regs) >= 2
2155               && !ainfo->is_unnamed)
2156             {
2157               bool result;
2158               int len = TYPE_LENGTH (sinfo.field_type (0)) / 2;
2159               int offset = sinfo.field_offset (0);
2160
2161               result = riscv_assign_reg_location (&ainfo->argloc[0],
2162                                                   &cinfo->float_regs, len,
2163                                                   offset);
2164               gdb_assert (result);
2165
2166               result = riscv_assign_reg_location (&ainfo->argloc[1],
2167                                                   &cinfo->float_regs, len,
2168                                                   (offset + len));
2169               gdb_assert (result);
2170             }
2171           else
2172             riscv_call_arg_scalar_int (ainfo, cinfo);
2173           return;
2174         }
2175
2176       if (sinfo.number_of_fields () == 1
2177           && TYPE_CODE (sinfo.field_type (0)) == TYPE_CODE_FLT)
2178         {
2179           /* The following is similar to RISCV_CALL_ARG_SCALAR_FLOAT,
2180              except we use the type of the first scalar field instead of
2181              the type from AINFO.  Also the location might be at a non-zero
2182              offset.  */
2183           if (TYPE_LENGTH (sinfo.field_type (0)) > cinfo->flen
2184               || ainfo->is_unnamed)
2185             riscv_call_arg_scalar_int (ainfo, cinfo);
2186           else
2187             {
2188               int offset = sinfo.field_offset (0);
2189               int len = TYPE_LENGTH (sinfo.field_type (0));
2190
2191               if (!riscv_assign_reg_location (&ainfo->argloc[0],
2192                                               &cinfo->float_regs,
2193                                               len, offset))
2194                 riscv_call_arg_scalar_int (ainfo, cinfo);
2195             }
2196           return;
2197         }
2198
2199       if (sinfo.number_of_fields () == 2
2200           && TYPE_CODE (sinfo.field_type (0)) == TYPE_CODE_FLT
2201           && TYPE_LENGTH (sinfo.field_type (0)) <= cinfo->flen
2202           && TYPE_CODE (sinfo.field_type (1)) == TYPE_CODE_FLT
2203           && TYPE_LENGTH (sinfo.field_type (1)) <= cinfo->flen
2204           && riscv_arg_regs_available (&cinfo->float_regs) >= 2)
2205         {
2206           int len0 = TYPE_LENGTH (sinfo.field_type (0));
2207           int offset = sinfo.field_offset (0);
2208           if (!riscv_assign_reg_location (&ainfo->argloc[0],
2209                                           &cinfo->float_regs, len0, offset))
2210             error (_("failed during argument setup"));
2211
2212           int len1 = TYPE_LENGTH (sinfo.field_type (1));
2213           offset = sinfo.field_offset (1);
2214           gdb_assert (len1 <= (TYPE_LENGTH (ainfo->type)
2215                                - TYPE_LENGTH (sinfo.field_type (0))));
2216
2217           if (!riscv_assign_reg_location (&ainfo->argloc[1],
2218                                           &cinfo->float_regs,
2219                                           len1, offset))
2220             error (_("failed during argument setup"));
2221           return;
2222         }
2223
2224       if (sinfo.number_of_fields () == 2
2225           && riscv_arg_regs_available (&cinfo->int_regs) >= 1
2226           && (TYPE_CODE (sinfo.field_type (0)) == TYPE_CODE_FLT
2227               && TYPE_LENGTH (sinfo.field_type (0)) <= cinfo->flen
2228               && is_integral_type (sinfo.field_type (1))
2229               && TYPE_LENGTH (sinfo.field_type (1)) <= cinfo->xlen))
2230         {
2231           int  len0 = TYPE_LENGTH (sinfo.field_type (0));
2232           int offset = sinfo.field_offset (0);
2233           if (!riscv_assign_reg_location (&ainfo->argloc[0],
2234                                           &cinfo->float_regs, len0, offset))
2235             error (_("failed during argument setup"));
2236
2237           int len1 = TYPE_LENGTH (sinfo.field_type (1));
2238           offset = sinfo.field_offset (1);
2239           gdb_assert (len1 <= cinfo->xlen);
2240           if (!riscv_assign_reg_location (&ainfo->argloc[1],
2241                                           &cinfo->int_regs, len1, offset))
2242             error (_("failed during argument setup"));
2243           return;
2244         }
2245
2246       if (sinfo.number_of_fields () == 2
2247           && riscv_arg_regs_available (&cinfo->int_regs) >= 1
2248           && (is_integral_type (sinfo.field_type (0))
2249               && TYPE_LENGTH (sinfo.field_type (0)) <= cinfo->xlen
2250               && TYPE_CODE (sinfo.field_type (1)) == TYPE_CODE_FLT
2251               && TYPE_LENGTH (sinfo.field_type (1)) <= cinfo->flen))
2252         {
2253           int len0 = TYPE_LENGTH (sinfo.field_type (0));
2254           int len1 = TYPE_LENGTH (sinfo.field_type (1));
2255
2256           gdb_assert (len0 <= cinfo->xlen);
2257           gdb_assert (len1 <= cinfo->flen);
2258
2259           int offset = sinfo.field_offset (0);
2260           if (!riscv_assign_reg_location (&ainfo->argloc[0],
2261                                           &cinfo->int_regs, len0, offset))
2262             error (_("failed during argument setup"));
2263
2264           offset = sinfo.field_offset (1);
2265           if (!riscv_assign_reg_location (&ainfo->argloc[1],
2266                                           &cinfo->float_regs,
2267                                           len1, offset))
2268             error (_("failed during argument setup"));
2269
2270           return;
2271         }
2272     }
2273
2274   /* Non of the structure flattening cases apply, so we just pass using
2275      the integer ABI.  */
2276   riscv_call_arg_scalar_int (ainfo, cinfo);
2277 }
2278
2279 /* Assign a location to call (or return) argument AINFO, the location is
2280    selected from CINFO which holds information about what call argument
2281    locations are available for use next.  The TYPE is the type of the
2282    argument being passed, this information is recorded into AINFO (along
2283    with some additional information derived from the type).  IS_UNNAMED
2284    is true if this is an unnamed (stdarg) argument, this info is also
2285    recorded into AINFO.
2286
2287    After assigning a location to AINFO, CINFO will have been updated.  */
2288
2289 static void
2290 riscv_arg_location (struct gdbarch *gdbarch,
2291                     struct riscv_arg_info *ainfo,
2292                     struct riscv_call_info *cinfo,
2293                     struct type *type, bool is_unnamed)
2294 {
2295   ainfo->type = type;
2296   ainfo->length = TYPE_LENGTH (ainfo->type);
2297   ainfo->align = type_align (ainfo->type);
2298   ainfo->is_unnamed = is_unnamed;
2299   ainfo->contents = nullptr;
2300   ainfo->argloc[0].c_length = 0;
2301   ainfo->argloc[1].c_length = 0;
2302
2303   switch (TYPE_CODE (ainfo->type))
2304     {
2305     case TYPE_CODE_INT:
2306     case TYPE_CODE_BOOL:
2307     case TYPE_CODE_CHAR:
2308     case TYPE_CODE_RANGE:
2309     case TYPE_CODE_ENUM:
2310     case TYPE_CODE_PTR:
2311       if (ainfo->length <= cinfo->xlen)
2312         {
2313           ainfo->type = builtin_type (gdbarch)->builtin_long;
2314           ainfo->length = cinfo->xlen;
2315         }
2316       else if (ainfo->length <= (2 * cinfo->xlen))
2317         {
2318           ainfo->type = builtin_type (gdbarch)->builtin_long_long;
2319           ainfo->length = 2 * cinfo->xlen;
2320         }
2321
2322       /* Recalculate the alignment requirement.  */
2323       ainfo->align = type_align (ainfo->type);
2324       riscv_call_arg_scalar_int (ainfo, cinfo);
2325       break;
2326
2327     case TYPE_CODE_FLT:
2328       riscv_call_arg_scalar_float (ainfo, cinfo);
2329       break;
2330
2331     case TYPE_CODE_COMPLEX:
2332       riscv_call_arg_complex_float (ainfo, cinfo);
2333       break;
2334
2335     case TYPE_CODE_STRUCT:
2336       riscv_call_arg_struct (ainfo, cinfo);
2337       break;
2338
2339     default:
2340       riscv_call_arg_scalar_int (ainfo, cinfo);
2341       break;
2342     }
2343 }
2344
2345 /* Used for printing debug information about the call argument location in
2346    INFO to STREAM.  The addresses in SP_REFS and SP_ARGS are the base
2347    addresses for the location of pass-by-reference and
2348    arguments-on-the-stack memory areas.  */
2349
2350 static void
2351 riscv_print_arg_location (ui_file *stream, struct gdbarch *gdbarch,
2352                           struct riscv_arg_info *info,
2353                           CORE_ADDR sp_refs, CORE_ADDR sp_args)
2354 {
2355   fprintf_unfiltered (stream, "type: '%s', length: 0x%x, alignment: 0x%x",
2356                       TYPE_SAFE_NAME (info->type), info->length, info->align);
2357   switch (info->argloc[0].loc_type)
2358     {
2359     case riscv_arg_info::location::in_reg:
2360       fprintf_unfiltered
2361         (stream, ", register %s",
2362          gdbarch_register_name (gdbarch, info->argloc[0].loc_data.regno));
2363       if (info->argloc[0].c_length < info->length)
2364         {
2365           switch (info->argloc[1].loc_type)
2366             {
2367             case riscv_arg_info::location::in_reg:
2368               fprintf_unfiltered
2369                 (stream, ", register %s",
2370                  gdbarch_register_name (gdbarch,
2371                                         info->argloc[1].loc_data.regno));
2372               break;
2373
2374             case riscv_arg_info::location::on_stack:
2375               fprintf_unfiltered (stream, ", on stack at offset 0x%x",
2376                                   info->argloc[1].loc_data.offset);
2377               break;
2378
2379             case riscv_arg_info::location::by_ref:
2380             default:
2381               /* The second location should never be a reference, any
2382                  argument being passed by reference just places its address
2383                  in the first location and is done.  */
2384               error (_("invalid argument location"));
2385               break;
2386             }
2387
2388           if (info->argloc[1].c_offset > info->argloc[0].c_length)
2389             fprintf_unfiltered (stream, " (offset 0x%x)",
2390                                 info->argloc[1].c_offset);
2391         }
2392       break;
2393
2394     case riscv_arg_info::location::on_stack:
2395       fprintf_unfiltered (stream, ", on stack at offset 0x%x",
2396                           info->argloc[0].loc_data.offset);
2397       break;
2398
2399     case riscv_arg_info::location::by_ref:
2400       fprintf_unfiltered
2401         (stream, ", by reference, data at offset 0x%x (%s)",
2402          info->argloc[0].loc_data.offset,
2403          core_addr_to_string (sp_refs + info->argloc[0].loc_data.offset));
2404       if (info->argloc[1].loc_type
2405           == riscv_arg_info::location::in_reg)
2406         fprintf_unfiltered
2407           (stream, ", address in register %s",
2408            gdbarch_register_name (gdbarch, info->argloc[1].loc_data.regno));
2409       else
2410         {
2411           gdb_assert (info->argloc[1].loc_type
2412                       == riscv_arg_info::location::on_stack);
2413           fprintf_unfiltered
2414             (stream, ", address on stack at offset 0x%x (%s)",
2415              info->argloc[1].loc_data.offset,
2416              core_addr_to_string (sp_args + info->argloc[1].loc_data.offset));
2417         }
2418       break;
2419
2420     default:
2421       gdb_assert_not_reached (_("unknown argument location type"));
2422     }
2423 }
2424
2425 /* Implement the push dummy call gdbarch callback.  */
2426
2427 static CORE_ADDR
2428 riscv_push_dummy_call (struct gdbarch *gdbarch,
2429                        struct value *function,
2430                        struct regcache *regcache,
2431                        CORE_ADDR bp_addr,
2432                        int nargs,
2433                        struct value **args,
2434                        CORE_ADDR sp,
2435                        function_call_return_method return_method,
2436                        CORE_ADDR struct_addr)
2437 {
2438   int i;
2439   CORE_ADDR sp_args, sp_refs;
2440   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
2441
2442   struct riscv_arg_info *arg_info =
2443     (struct riscv_arg_info *) alloca (nargs * sizeof (struct riscv_arg_info));
2444
2445   struct riscv_call_info call_info (gdbarch);
2446
2447   CORE_ADDR osp = sp;
2448
2449   struct type *ftype = check_typedef (value_type (function));
2450
2451   if (TYPE_CODE (ftype) == TYPE_CODE_PTR)
2452     ftype = check_typedef (TYPE_TARGET_TYPE (ftype));
2453
2454   /* We'll use register $a0 if we're returning a struct.  */
2455   if (return_method == return_method_struct)
2456     ++call_info.int_regs.next_regnum;
2457
2458   for (i = 0; i < nargs; ++i)
2459     {
2460       struct value *arg_value;
2461       struct type *arg_type;
2462       struct riscv_arg_info *info = &arg_info[i];
2463
2464       arg_value = args[i];
2465       arg_type = check_typedef (value_type (arg_value));
2466
2467       riscv_arg_location (gdbarch, info, &call_info, arg_type,
2468                           TYPE_VARARGS (ftype) && i >= TYPE_NFIELDS (ftype));
2469
2470       if (info->type != arg_type)
2471         arg_value = value_cast (info->type, arg_value);
2472       info->contents = value_contents (arg_value);
2473     }
2474
2475   /* Adjust the stack pointer and align it.  */
2476   sp = sp_refs = align_down (sp - call_info.memory.ref_offset, SP_ALIGNMENT);
2477   sp = sp_args = align_down (sp - call_info.memory.arg_offset, SP_ALIGNMENT);
2478
2479   if (riscv_debug_infcall > 0)
2480     {
2481       fprintf_unfiltered (gdb_stdlog, "dummy call args:\n");
2482       fprintf_unfiltered (gdb_stdlog, ": floating point ABI %s in use\n",
2483                (riscv_has_fp_abi (gdbarch) ? "is" : "is not"));
2484       fprintf_unfiltered (gdb_stdlog, ": xlen: %d\n: flen: %d\n",
2485                call_info.xlen, call_info.flen);
2486       if (return_method == return_method_struct)
2487         fprintf_unfiltered (gdb_stdlog,
2488                             "[*] struct return pointer in register $A0\n");
2489       for (i = 0; i < nargs; ++i)
2490         {
2491           struct riscv_arg_info *info = &arg_info [i];
2492
2493           fprintf_unfiltered (gdb_stdlog, "[%2d] ", i);
2494           riscv_print_arg_location (gdb_stdlog, gdbarch, info, sp_refs, sp_args);
2495           fprintf_unfiltered (gdb_stdlog, "\n");
2496         }
2497       if (call_info.memory.arg_offset > 0
2498           || call_info.memory.ref_offset > 0)
2499         {
2500           fprintf_unfiltered (gdb_stdlog, "              Original sp: %s\n",
2501                               core_addr_to_string (osp));
2502           fprintf_unfiltered (gdb_stdlog, "Stack required (for args): 0x%x\n",
2503                               call_info.memory.arg_offset);
2504           fprintf_unfiltered (gdb_stdlog, "Stack required (for refs): 0x%x\n",
2505                               call_info.memory.ref_offset);
2506           fprintf_unfiltered (gdb_stdlog, "          Stack allocated: %s\n",
2507                               core_addr_to_string_nz (osp - sp));
2508         }
2509     }
2510
2511   /* Now load the argument into registers, or onto the stack.  */
2512
2513   if (return_method == return_method_struct)
2514     {
2515       gdb_byte buf[sizeof (LONGEST)];
2516
2517       store_unsigned_integer (buf, call_info.xlen, byte_order, struct_addr);
2518       regcache->cooked_write (RISCV_A0_REGNUM, buf);
2519     }
2520
2521   for (i = 0; i < nargs; ++i)
2522     {
2523       CORE_ADDR dst;
2524       int second_arg_length = 0;
2525       const gdb_byte *second_arg_data;
2526       struct riscv_arg_info *info = &arg_info [i];
2527
2528       gdb_assert (info->length > 0);
2529
2530       switch (info->argloc[0].loc_type)
2531         {
2532         case riscv_arg_info::location::in_reg:
2533           {
2534             gdb_byte tmp [sizeof (ULONGEST)];
2535
2536             gdb_assert (info->argloc[0].c_length <= info->length);
2537             /* FP values in FP registers must be NaN-boxed.  */
2538             if (riscv_is_fp_regno_p (info->argloc[0].loc_data.regno)
2539                 && info->argloc[0].c_length < call_info.flen)
2540               memset (tmp, -1, sizeof (tmp));
2541             else
2542               memset (tmp, 0, sizeof (tmp));
2543             memcpy (tmp, (info->contents + info->argloc[0].c_offset),
2544                     info->argloc[0].c_length);
2545             regcache->cooked_write (info->argloc[0].loc_data.regno, tmp);
2546             second_arg_length =
2547               (((info->argloc[0].c_length + info->argloc[0].c_offset) < info->length)
2548                ? info->argloc[1].c_length : 0);
2549             second_arg_data = info->contents + info->argloc[1].c_offset;
2550           }
2551           break;
2552
2553         case riscv_arg_info::location::on_stack:
2554           dst = sp_args + info->argloc[0].loc_data.offset;
2555           write_memory (dst, info->contents, info->length);
2556           second_arg_length = 0;
2557           break;
2558
2559         case riscv_arg_info::location::by_ref:
2560           dst = sp_refs + info->argloc[0].loc_data.offset;
2561           write_memory (dst, info->contents, info->length);
2562
2563           second_arg_length = call_info.xlen;
2564           second_arg_data = (gdb_byte *) &dst;
2565           break;
2566
2567         default:
2568           gdb_assert_not_reached (_("unknown argument location type"));
2569         }
2570
2571       if (second_arg_length > 0)
2572         {
2573           switch (info->argloc[1].loc_type)
2574             {
2575             case riscv_arg_info::location::in_reg:
2576               {
2577                 gdb_byte tmp [sizeof (ULONGEST)];
2578
2579                 gdb_assert ((riscv_is_fp_regno_p (info->argloc[1].loc_data.regno)
2580                              && second_arg_length <= call_info.flen)
2581                             || second_arg_length <= call_info.xlen);
2582                 /* FP values in FP registers must be NaN-boxed.  */
2583                 if (riscv_is_fp_regno_p (info->argloc[1].loc_data.regno)
2584                     && second_arg_length < call_info.flen)
2585                   memset (tmp, -1, sizeof (tmp));
2586                 else
2587                   memset (tmp, 0, sizeof (tmp));
2588                 memcpy (tmp, second_arg_data, second_arg_length);
2589                 regcache->cooked_write (info->argloc[1].loc_data.regno, tmp);
2590               }
2591               break;
2592
2593             case riscv_arg_info::location::on_stack:
2594               {
2595                 CORE_ADDR arg_addr;
2596
2597                 arg_addr = sp_args + info->argloc[1].loc_data.offset;
2598                 write_memory (arg_addr, second_arg_data, second_arg_length);
2599                 break;
2600               }
2601
2602             case riscv_arg_info::location::by_ref:
2603             default:
2604               /* The second location should never be a reference, any
2605                  argument being passed by reference just places its address
2606                  in the first location and is done.  */
2607               error (_("invalid argument location"));
2608               break;
2609             }
2610         }
2611     }
2612
2613   /* Set the dummy return value to bp_addr.
2614      A dummy breakpoint will be setup to execute the call.  */
2615
2616   if (riscv_debug_infcall > 0)
2617     fprintf_unfiltered (gdb_stdlog, ": writing $ra = %s\n",
2618                         core_addr_to_string (bp_addr));
2619   regcache_cooked_write_unsigned (regcache, RISCV_RA_REGNUM, bp_addr);
2620
2621   /* Finally, update the stack pointer.  */
2622
2623   if (riscv_debug_infcall > 0)
2624     fprintf_unfiltered (gdb_stdlog, ": writing $sp = %s\n",
2625                         core_addr_to_string (sp));
2626   regcache_cooked_write_unsigned (regcache, RISCV_SP_REGNUM, sp);
2627
2628   return sp;
2629 }
2630
2631 /* Implement the return_value gdbarch method.  */
2632
2633 static enum return_value_convention
2634 riscv_return_value (struct gdbarch  *gdbarch,
2635                     struct value *function,
2636                     struct type *type,
2637                     struct regcache *regcache,
2638                     gdb_byte *readbuf,
2639                     const gdb_byte *writebuf)
2640 {
2641   struct riscv_call_info call_info (gdbarch);
2642   struct riscv_arg_info info;
2643   struct type *arg_type;
2644
2645   arg_type = check_typedef (type);
2646   riscv_arg_location (gdbarch, &info, &call_info, arg_type, false);
2647
2648   if (riscv_debug_infcall > 0)
2649     {
2650       fprintf_unfiltered (gdb_stdlog, "riscv return value:\n");
2651       fprintf_unfiltered (gdb_stdlog, "[R] ");
2652       riscv_print_arg_location (gdb_stdlog, gdbarch, &info, 0, 0);
2653       fprintf_unfiltered (gdb_stdlog, "\n");
2654     }
2655
2656   if (readbuf != nullptr || writebuf != nullptr)
2657     {
2658         unsigned int arg_len;
2659         struct value *abi_val;
2660         gdb_byte *old_readbuf = nullptr;
2661         int regnum;
2662
2663         /* We only do one thing at a time.  */
2664         gdb_assert (readbuf == nullptr || writebuf == nullptr);
2665
2666         /* In some cases the argument is not returned as the declared type,
2667            and we need to cast to or from the ABI type in order to
2668            correctly access the argument.  When writing to the machine we
2669            do the cast here, when reading from the machine the cast occurs
2670            later, after extracting the value.  As the ABI type can be
2671            larger than the declared type, then the read or write buffers
2672            passed in might be too small.  Here we ensure that we are using
2673            buffers of sufficient size.  */
2674         if (writebuf != nullptr)
2675           {
2676             struct value *arg_val = value_from_contents (arg_type, writebuf);
2677             abi_val = value_cast (info.type, arg_val);
2678             writebuf = value_contents_raw (abi_val);
2679           }
2680         else
2681           {
2682             abi_val = allocate_value (info.type);
2683             old_readbuf = readbuf;
2684             readbuf = value_contents_raw (abi_val);
2685           }
2686         arg_len = TYPE_LENGTH (info.type);
2687
2688         switch (info.argloc[0].loc_type)
2689           {
2690             /* Return value in register(s).  */
2691           case riscv_arg_info::location::in_reg:
2692             {
2693               regnum = info.argloc[0].loc_data.regno;
2694               gdb_assert (info.argloc[0].c_length <= arg_len);
2695               gdb_assert (info.argloc[0].c_length
2696                           <= register_size (gdbarch, regnum));
2697
2698               if (readbuf)
2699                 {
2700                   gdb_byte *ptr = readbuf + info.argloc[0].c_offset;
2701                   regcache->cooked_read_part (regnum, 0,
2702                                               info.argloc[0].c_length,
2703                                               ptr);
2704                 }
2705
2706               if (writebuf)
2707                 {
2708                   const gdb_byte *ptr = writebuf + info.argloc[0].c_offset;
2709                   regcache->cooked_write_part (regnum, 0,
2710                                                info.argloc[0].c_length,
2711                                                ptr);
2712                 }
2713
2714               /* A return value in register can have a second part in a
2715                  second register.  */
2716               if (info.argloc[1].c_length > 0)
2717                 {
2718                   switch (info.argloc[1].loc_type)
2719                     {
2720                     case riscv_arg_info::location::in_reg:
2721                       regnum = info.argloc[1].loc_data.regno;
2722
2723                       gdb_assert ((info.argloc[0].c_length
2724                                    + info.argloc[1].c_length) <= arg_len);
2725                       gdb_assert (info.argloc[1].c_length
2726                                   <= register_size (gdbarch, regnum));
2727
2728                       if (readbuf)
2729                         {
2730                           readbuf += info.argloc[1].c_offset;
2731                           regcache->cooked_read_part (regnum, 0,
2732                                                       info.argloc[1].c_length,
2733                                                       readbuf);
2734                         }
2735
2736                       if (writebuf)
2737                         {
2738                           writebuf += info.argloc[1].c_offset;
2739                           regcache->cooked_write_part (regnum, 0,
2740                                                        info.argloc[1].c_length,
2741                                                        writebuf);
2742                         }
2743                       break;
2744
2745                     case riscv_arg_info::location::by_ref:
2746                     case riscv_arg_info::location::on_stack:
2747                     default:
2748                       error (_("invalid argument location"));
2749                       break;
2750                     }
2751                 }
2752             }
2753             break;
2754
2755             /* Return value by reference will have its address in A0.  */
2756           case riscv_arg_info::location::by_ref:
2757             {
2758               ULONGEST addr;
2759
2760               regcache_cooked_read_unsigned (regcache, RISCV_A0_REGNUM,
2761                                              &addr);
2762               if (readbuf != nullptr)
2763                 read_memory (addr, readbuf, info.length);
2764               if (writebuf != nullptr)
2765                 write_memory (addr, writebuf, info.length);
2766             }
2767             break;
2768
2769           case riscv_arg_info::location::on_stack:
2770           default:
2771             error (_("invalid argument location"));
2772             break;
2773           }
2774
2775         /* This completes the cast from abi type back to the declared type
2776            in the case that we are reading from the machine.  See the
2777            comment at the head of this block for more details.  */
2778         if (readbuf != nullptr)
2779           {
2780             struct value *arg_val = value_cast (arg_type, abi_val);
2781             memcpy (old_readbuf, value_contents_raw (arg_val),
2782                     TYPE_LENGTH (arg_type));
2783           }
2784     }
2785
2786   switch (info.argloc[0].loc_type)
2787     {
2788     case riscv_arg_info::location::in_reg:
2789       return RETURN_VALUE_REGISTER_CONVENTION;
2790     case riscv_arg_info::location::by_ref:
2791       return RETURN_VALUE_ABI_RETURNS_ADDRESS;
2792     case riscv_arg_info::location::on_stack:
2793     default:
2794       error (_("invalid argument location"));
2795     }
2796 }
2797
2798 /* Implement the frame_align gdbarch method.  */
2799
2800 static CORE_ADDR
2801 riscv_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr)
2802 {
2803   return align_down (addr, 16);
2804 }
2805
2806 /* Generate, or return the cached frame cache for the RiscV frame
2807    unwinder.  */
2808
2809 static struct riscv_unwind_cache *
2810 riscv_frame_cache (struct frame_info *this_frame, void **this_cache)
2811 {
2812   CORE_ADDR pc, start_addr;
2813   struct riscv_unwind_cache *cache;
2814   struct gdbarch *gdbarch = get_frame_arch (this_frame);
2815   int numregs, regno;
2816
2817   if ((*this_cache) != NULL)
2818     return (struct riscv_unwind_cache *) *this_cache;
2819
2820   cache = FRAME_OBSTACK_ZALLOC (struct riscv_unwind_cache);
2821   cache->regs = trad_frame_alloc_saved_regs (this_frame);
2822   (*this_cache) = cache;
2823
2824   /* Scan the prologue, filling in the cache.  */
2825   start_addr = get_frame_func (this_frame);
2826   pc = get_frame_pc (this_frame);
2827   riscv_scan_prologue (gdbarch, start_addr, pc, cache);
2828
2829   /* We can now calculate the frame base address.  */
2830   cache->frame_base
2831     = (get_frame_register_signed (this_frame, cache->frame_base_reg)
2832        + cache->frame_base_offset);
2833   if (riscv_debug_unwinder)
2834     fprintf_unfiltered (gdb_stdlog, "Frame base is %s ($%s + 0x%x)\n",
2835                         core_addr_to_string (cache->frame_base),
2836                         gdbarch_register_name (gdbarch,
2837                                                cache->frame_base_reg),
2838                         cache->frame_base_offset);
2839
2840   /* The prologue scanner sets the address of registers stored to the stack
2841      as the offset of that register from the frame base.  The prologue
2842      scanner doesn't know the actual frame base value, and so is unable to
2843      compute the exact address.  We do now know the frame base value, so
2844      update the address of registers stored to the stack.  */
2845   numregs = gdbarch_num_regs (gdbarch) + gdbarch_num_pseudo_regs (gdbarch);
2846   for (regno = 0; regno < numregs; ++regno)
2847     {
2848       if (trad_frame_addr_p (cache->regs, regno))
2849         cache->regs[regno].addr += cache->frame_base;
2850     }
2851
2852   /* The previous $pc can be found wherever the $ra value can be found.
2853      The previous $ra value is gone, this would have been stored be the
2854      previous frame if required.  */
2855   cache->regs[gdbarch_pc_regnum (gdbarch)] = cache->regs[RISCV_RA_REGNUM];
2856   trad_frame_set_unknown (cache->regs, RISCV_RA_REGNUM);
2857
2858   /* Build the frame id.  */
2859   cache->this_id = frame_id_build (cache->frame_base, start_addr);
2860
2861   /* The previous $sp value is the frame base value.  */
2862   trad_frame_set_value (cache->regs, gdbarch_sp_regnum (gdbarch),
2863                         cache->frame_base);
2864
2865   return cache;
2866 }
2867
2868 /* Implement the this_id callback for RiscV frame unwinder.  */
2869
2870 static void
2871 riscv_frame_this_id (struct frame_info *this_frame,
2872                      void **prologue_cache,
2873                      struct frame_id *this_id)
2874 {
2875   struct riscv_unwind_cache *cache;
2876
2877   try
2878     {
2879       cache = riscv_frame_cache (this_frame, prologue_cache);
2880       *this_id = cache->this_id;
2881     }
2882   catch (const gdb_exception_error &ex)
2883     {
2884       /* Ignore errors, this leaves the frame id as the predefined outer
2885          frame id which terminates the backtrace at this point.  */
2886     }
2887 }
2888
2889 /* Implement the prev_register callback for RiscV frame unwinder.  */
2890
2891 static struct value *
2892 riscv_frame_prev_register (struct frame_info *this_frame,
2893                            void **prologue_cache,
2894                            int regnum)
2895 {
2896   struct riscv_unwind_cache *cache;
2897
2898   cache = riscv_frame_cache (this_frame, prologue_cache);
2899   return trad_frame_get_prev_register (this_frame, cache->regs, regnum);
2900 }
2901
2902 /* Structure defining the RiscV normal frame unwind functions.  Since we
2903    are the fallback unwinder (DWARF unwinder is used first), we use the
2904    default frame sniffer, which always accepts the frame.  */
2905
2906 static const struct frame_unwind riscv_frame_unwind =
2907 {
2908   /*.type          =*/ NORMAL_FRAME,
2909   /*.stop_reason   =*/ default_frame_unwind_stop_reason,
2910   /*.this_id       =*/ riscv_frame_this_id,
2911   /*.prev_register =*/ riscv_frame_prev_register,
2912   /*.unwind_data   =*/ NULL,
2913   /*.sniffer       =*/ default_frame_sniffer,
2914   /*.dealloc_cache =*/ NULL,
2915   /*.prev_arch     =*/ NULL,
2916 };
2917
2918 /* Extract a set of required target features out of INFO, specifically the
2919    bfd being executed is examined to see what target features it requires.
2920    IF there is no current bfd, or the bfd doesn't indicate any useful
2921    features then a RISCV_GDBARCH_FEATURES is returned in its default state.  */
2922
2923 static struct riscv_gdbarch_features
2924 riscv_features_from_gdbarch_info (const struct gdbarch_info info)
2925 {
2926   struct riscv_gdbarch_features features;
2927
2928   /* Now try to improve on the defaults by looking at the binary we are
2929      going to execute.  We assume the user knows what they are doing and
2930      that the target will match the binary.  Remember, this code path is
2931      only used at all if the target hasn't given us a description, so this
2932      is really a last ditched effort to do something sane before giving
2933      up.  */
2934   if (info.abfd != NULL
2935       && bfd_get_flavour (info.abfd) == bfd_target_elf_flavour)
2936     {
2937       unsigned char eclass = elf_elfheader (info.abfd)->e_ident[EI_CLASS];
2938       int e_flags = elf_elfheader (info.abfd)->e_flags;
2939
2940       if (eclass == ELFCLASS32)
2941         features.xlen = 4;
2942       else if (eclass == ELFCLASS64)
2943         features.xlen = 8;
2944       else
2945         internal_error (__FILE__, __LINE__,
2946                         _("unknown ELF header class %d"), eclass);
2947
2948       if (e_flags & EF_RISCV_FLOAT_ABI_DOUBLE)
2949         features.flen = 8;
2950       else if (e_flags & EF_RISCV_FLOAT_ABI_SINGLE)
2951         features.flen = 4;
2952     }
2953
2954   return features;
2955 }
2956
2957 /* Find a suitable default target description.  Use the contents of INFO,
2958    specifically the bfd object being executed, to guide the selection of a
2959    suitable default target description.  */
2960
2961 static const struct target_desc *
2962 riscv_find_default_target_description (const struct gdbarch_info info)
2963 {
2964   /* Extract desired feature set from INFO.  */
2965   struct riscv_gdbarch_features features
2966     = riscv_features_from_gdbarch_info (info);
2967
2968   /* If the XLEN field is still 0 then we got nothing useful from INFO.  In
2969      this case we fall back to a minimal useful target, 8-byte x-registers,
2970      with no floating point.  */
2971   if (features.xlen == 0)
2972     features.xlen = 8;
2973
2974   /* Now build a target description based on the feature set.  */
2975   return riscv_create_target_description (features);
2976 }
2977
2978 /* All of the registers in REG_SET are checked for in FEATURE, TDESC_DATA
2979    is updated with the register numbers for each register as listed in
2980    REG_SET.  If any register marked as required in REG_SET is not found in
2981    FEATURE then this function returns false, otherwise, it returns true.  */
2982
2983 static bool
2984 riscv_check_tdesc_feature (struct tdesc_arch_data *tdesc_data,
2985                            const struct tdesc_feature *feature,
2986                            const struct riscv_register_feature *reg_set)
2987 {
2988   for (const auto &reg : reg_set->registers)
2989     {
2990       bool found = false;
2991
2992       for (const char *name : reg.names)
2993         {
2994           found =
2995             tdesc_numbered_register (feature, tdesc_data, reg.regnum, name);
2996
2997           if (found)
2998             break;
2999         }
3000
3001       if (!found && reg.required_p)
3002         return false;
3003     }
3004
3005   return true;
3006 }
3007
3008 /* Add all the expected register sets into GDBARCH.  */
3009
3010 static void
3011 riscv_add_reggroups (struct gdbarch *gdbarch)
3012 {
3013   /* Add predefined register groups.  */
3014   reggroup_add (gdbarch, all_reggroup);
3015   reggroup_add (gdbarch, save_reggroup);
3016   reggroup_add (gdbarch, restore_reggroup);
3017   reggroup_add (gdbarch, system_reggroup);
3018   reggroup_add (gdbarch, vector_reggroup);
3019   reggroup_add (gdbarch, general_reggroup);
3020   reggroup_add (gdbarch, float_reggroup);
3021
3022   /* Add RISC-V specific register groups.  */
3023   reggroup_add (gdbarch, csr_reggroup);
3024 }
3025
3026 /* Create register aliases for all the alternative names that exist for
3027    registers in REG_SET.  */
3028
3029 static void
3030 riscv_setup_register_aliases (struct gdbarch *gdbarch,
3031                               const struct riscv_register_feature *reg_set)
3032 {
3033   for (auto &reg : reg_set->registers)
3034     {
3035       /* The first item in the names list is the preferred name for the
3036          register, this is what RISCV_REGISTER_NAME returns, and so we
3037          don't need to create an alias with that name here.  */
3038       for (int i = 1; i < reg.names.size (); ++i)
3039         user_reg_add (gdbarch, reg.names[i], value_of_riscv_user_reg,
3040                       &reg.regnum);
3041     }
3042 }
3043
3044 /* Implement the "dwarf2_reg_to_regnum" gdbarch method.  */
3045
3046 static int
3047 riscv_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
3048 {
3049   if (reg < RISCV_DWARF_REGNUM_X31)
3050     return RISCV_ZERO_REGNUM + (reg - RISCV_DWARF_REGNUM_X0);
3051
3052   else if (reg < RISCV_DWARF_REGNUM_F31)
3053     return RISCV_FIRST_FP_REGNUM + (reg - RISCV_DWARF_REGNUM_F0);
3054
3055   return -1;
3056 }
3057
3058 /* Initialize the current architecture based on INFO.  If possible,
3059    re-use an architecture from ARCHES, which is a list of
3060    architectures already created during this debugging session.
3061
3062    Called e.g. at program startup, when reading a core file, and when
3063    reading a binary file.  */
3064
3065 static struct gdbarch *
3066 riscv_gdbarch_init (struct gdbarch_info info,
3067                     struct gdbarch_list *arches)
3068 {
3069   struct gdbarch *gdbarch;
3070   struct gdbarch_tdep *tdep;
3071   struct riscv_gdbarch_features features;
3072   const struct target_desc *tdesc = info.target_desc;
3073
3074   /* Ensure we always have a target description.  */
3075   if (!tdesc_has_registers (tdesc))
3076     tdesc = riscv_find_default_target_description (info);
3077   gdb_assert (tdesc);
3078
3079   if (riscv_debug_gdbarch)
3080     fprintf_unfiltered (gdb_stdlog, "Have got a target description\n");
3081
3082   const struct tdesc_feature *feature_cpu
3083     = tdesc_find_feature (tdesc, riscv_xreg_feature.name);
3084   const struct tdesc_feature *feature_fpu
3085     = tdesc_find_feature (tdesc, riscv_freg_feature.name);
3086   const struct tdesc_feature *feature_virtual
3087     = tdesc_find_feature (tdesc, riscv_virtual_feature.name);
3088   const struct tdesc_feature *feature_csr
3089     = tdesc_find_feature (tdesc, riscv_csr_feature.name);
3090
3091   if (feature_cpu == NULL)
3092     return NULL;
3093
3094   struct tdesc_arch_data *tdesc_data = tdesc_data_alloc ();
3095
3096   bool valid_p = riscv_check_tdesc_feature (tdesc_data,
3097                                             feature_cpu,
3098                                             &riscv_xreg_feature);
3099   if (valid_p)
3100     {
3101       /* Check that all of the core cpu registers have the same bitsize.  */
3102       int xlen_bitsize = tdesc_register_bitsize (feature_cpu, "pc");
3103
3104       for (auto &tdesc_reg : feature_cpu->registers)
3105         valid_p &= (tdesc_reg->bitsize == xlen_bitsize);
3106
3107       if (riscv_debug_gdbarch)
3108         fprintf_filtered
3109           (gdb_stdlog,
3110            "From target-description, xlen = %d\n", xlen_bitsize);
3111
3112       features.xlen = (xlen_bitsize / 8);
3113     }
3114
3115   if (feature_fpu != NULL)
3116     {
3117       valid_p &= riscv_check_tdesc_feature (tdesc_data, feature_fpu,
3118                                             &riscv_freg_feature);
3119
3120       /* Search for the first floating point register (by any alias), to
3121          determine the bitsize.  */
3122       int bitsize = -1;
3123       const auto &fp0 = riscv_freg_feature.registers[0];
3124
3125       for (const char *name : fp0.names)
3126         {
3127           if (tdesc_unnumbered_register (feature_fpu, name))
3128             {
3129               bitsize = tdesc_register_bitsize (feature_fpu, name);
3130               break;
3131             }
3132         }
3133
3134       gdb_assert (bitsize != -1);
3135       features.flen = (bitsize / 8);
3136
3137       if (riscv_debug_gdbarch)
3138         fprintf_filtered
3139           (gdb_stdlog,
3140            "From target-description, flen = %d\n", bitsize);
3141     }
3142   else
3143     {
3144       features.flen = 0;
3145
3146       if (riscv_debug_gdbarch)
3147         fprintf_filtered
3148           (gdb_stdlog,
3149            "No FPU in target-description, assume soft-float ABI\n");
3150     }
3151
3152   if (feature_virtual)
3153     riscv_check_tdesc_feature (tdesc_data, feature_virtual,
3154                                &riscv_virtual_feature);
3155
3156   if (feature_csr)
3157     riscv_check_tdesc_feature (tdesc_data, feature_csr,
3158                                &riscv_csr_feature);
3159
3160   if (!valid_p)
3161     {
3162       if (riscv_debug_gdbarch)
3163         fprintf_unfiltered (gdb_stdlog, "Target description is not valid\n");
3164       tdesc_data_cleanup (tdesc_data);
3165       return NULL;
3166     }
3167
3168   /* Have a look at what the supplied (if any) bfd object requires of the
3169      target, then check that this matches with what the target is
3170      providing.  */
3171   struct riscv_gdbarch_features abi_features
3172     = riscv_features_from_gdbarch_info (info);
3173   /* In theory a binary compiled for RV32 could run on an RV64 target,
3174      however, this has not been tested in GDB yet, so for now we require
3175      that the requested xlen match the targets xlen.  */
3176   if (abi_features.xlen != 0 && abi_features.xlen != features.xlen)
3177     error (_("bfd requires xlen %d, but target has xlen %d"),
3178             abi_features.xlen, features.xlen);
3179   /* We do support running binaries compiled for 32-bit float on targets
3180      with 64-bit float, so we only complain if the binary requires more
3181      than the target has available.  */
3182   if (abi_features.flen > features.flen)
3183     error (_("bfd requires flen %d, but target has flen %d"),
3184             abi_features.flen, features.flen);
3185
3186   /* If the ABI_FEATURES xlen is 0 then this indicates we got no useful abi
3187      features from the INFO object.  In this case we assume that the xlen
3188      abi matches the hardware.  */
3189   if (abi_features.xlen == 0)
3190     abi_features.xlen = features.xlen;
3191
3192   /* Find a candidate among the list of pre-declared architectures.  */
3193   for (arches = gdbarch_list_lookup_by_info (arches, &info);
3194        arches != NULL;
3195        arches = gdbarch_list_lookup_by_info (arches->next, &info))
3196     {
3197       /* Check that the feature set of the ARCHES matches the feature set
3198          we are looking for.  If it doesn't then we can't reuse this
3199          gdbarch.  */
3200       struct gdbarch_tdep *other_tdep = gdbarch_tdep (arches->gdbarch);
3201
3202       if (other_tdep->isa_features != features
3203           || other_tdep->abi_features != abi_features)
3204         continue;
3205
3206       break;
3207     }
3208
3209   if (arches != NULL)
3210     {
3211       tdesc_data_cleanup (tdesc_data);
3212       return arches->gdbarch;
3213     }
3214
3215   /* None found, so create a new architecture from the information provided.  */
3216   tdep = new (struct gdbarch_tdep);
3217   gdbarch = gdbarch_alloc (&info, tdep);
3218   tdep->isa_features = features;
3219   tdep->abi_features = abi_features;
3220
3221   /* Target data types.  */
3222   set_gdbarch_short_bit (gdbarch, 16);
3223   set_gdbarch_int_bit (gdbarch, 32);
3224   set_gdbarch_long_bit (gdbarch, riscv_isa_xlen (gdbarch) * 8);
3225   set_gdbarch_long_long_bit (gdbarch, 64);
3226   set_gdbarch_float_bit (gdbarch, 32);
3227   set_gdbarch_double_bit (gdbarch, 64);
3228   set_gdbarch_long_double_bit (gdbarch, 128);
3229   set_gdbarch_long_double_format (gdbarch, floatformats_ia64_quad);
3230   set_gdbarch_ptr_bit (gdbarch, riscv_isa_xlen (gdbarch) * 8);
3231   set_gdbarch_char_signed (gdbarch, 0);
3232   set_gdbarch_type_align (gdbarch, riscv_type_align);
3233
3234   /* Information about the target architecture.  */
3235   set_gdbarch_return_value (gdbarch, riscv_return_value);
3236   set_gdbarch_breakpoint_kind_from_pc (gdbarch, riscv_breakpoint_kind_from_pc);
3237   set_gdbarch_sw_breakpoint_from_kind (gdbarch, riscv_sw_breakpoint_from_kind);
3238   set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1);
3239
3240   /* Functions to analyze frames.  */
3241   set_gdbarch_skip_prologue (gdbarch, riscv_skip_prologue);
3242   set_gdbarch_inner_than (gdbarch, core_addr_lessthan);
3243   set_gdbarch_frame_align (gdbarch, riscv_frame_align);
3244
3245   /* Functions handling dummy frames.  */
3246   set_gdbarch_call_dummy_location (gdbarch, ON_STACK);
3247   set_gdbarch_push_dummy_code (gdbarch, riscv_push_dummy_code);
3248   set_gdbarch_push_dummy_call (gdbarch, riscv_push_dummy_call);
3249
3250   /* Frame unwinders.  Use DWARF debug info if available, otherwise use our own
3251      unwinder.  */
3252   dwarf2_append_unwinders (gdbarch);
3253   frame_unwind_append_unwinder (gdbarch, &riscv_frame_unwind);
3254
3255   /* Register architecture.  */
3256   riscv_add_reggroups (gdbarch);
3257
3258   /* Internal <-> external register number maps.  */
3259   set_gdbarch_dwarf2_reg_to_regnum (gdbarch, riscv_dwarf_reg_to_regnum);
3260
3261   /* We reserve all possible register numbers for the known registers.
3262      This means the target description mechanism will add any target
3263      specific registers after this number.  This helps make debugging GDB
3264      just a little easier.  */
3265   set_gdbarch_num_regs (gdbarch, RISCV_LAST_REGNUM + 1);
3266
3267   /* We don't have to provide the count of 0 here (its the default) but
3268      include this line to make it explicit that, right now, we don't have
3269      any pseudo registers on RISC-V.  */
3270   set_gdbarch_num_pseudo_regs (gdbarch, 0);
3271
3272   /* Some specific register numbers GDB likes to know about.  */
3273   set_gdbarch_sp_regnum (gdbarch, RISCV_SP_REGNUM);
3274   set_gdbarch_pc_regnum (gdbarch, RISCV_PC_REGNUM);
3275
3276   set_gdbarch_print_registers_info (gdbarch, riscv_print_registers_info);
3277
3278   /* Finalise the target description registers.  */
3279   tdesc_use_registers (gdbarch, tdesc, tdesc_data);
3280
3281   /* Override the register type callback setup by the target description
3282      mechanism.  This allows us to provide special type for floating point
3283      registers.  */
3284   set_gdbarch_register_type (gdbarch, riscv_register_type);
3285
3286   /* Override the register name callback setup by the target description
3287      mechanism.  This allows us to force our preferred names for the
3288      registers, no matter what the target description called them.  */
3289   set_gdbarch_register_name (gdbarch, riscv_register_name);
3290
3291   /* Override the register group callback setup by the target description
3292      mechanism.  This allows us to force registers into the groups we
3293      want, ignoring what the target tells us.  */
3294   set_gdbarch_register_reggroup_p (gdbarch, riscv_register_reggroup_p);
3295
3296   /* Create register aliases for alternative register names.  */
3297   riscv_setup_register_aliases (gdbarch, &riscv_xreg_feature);
3298   if (riscv_has_fp_regs (gdbarch))
3299     riscv_setup_register_aliases (gdbarch, &riscv_freg_feature);
3300   riscv_setup_register_aliases (gdbarch, &riscv_csr_feature);
3301
3302   /* Hook in OS ABI-specific overrides, if they have been registered.  */
3303   gdbarch_init_osabi (info, gdbarch);
3304
3305   return gdbarch;
3306 }
3307
3308 /* This decodes the current instruction and determines the address of the
3309    next instruction.  */
3310
3311 static CORE_ADDR
3312 riscv_next_pc (struct regcache *regcache, CORE_ADDR pc)
3313 {
3314   struct gdbarch *gdbarch = regcache->arch ();
3315   struct riscv_insn insn;
3316   CORE_ADDR next_pc;
3317
3318   insn.decode (gdbarch, pc);
3319   next_pc = pc + insn.length ();
3320
3321   if (insn.opcode () == riscv_insn::JAL)
3322     next_pc = pc + insn.imm_signed ();
3323   else if (insn.opcode () == riscv_insn::JALR)
3324     {
3325       LONGEST source;
3326       regcache->cooked_read (insn.rs1 (), &source);
3327       next_pc = (source + insn.imm_signed ()) & ~(CORE_ADDR) 0x1;
3328     }
3329   else if (insn.opcode () == riscv_insn::BEQ)
3330     {
3331       LONGEST src1, src2;
3332       regcache->cooked_read (insn.rs1 (), &src1);
3333       regcache->cooked_read (insn.rs2 (), &src2);
3334       if (src1 == src2)
3335         next_pc = pc + insn.imm_signed ();
3336     }
3337   else if (insn.opcode () == riscv_insn::BNE)
3338     {
3339       LONGEST src1, src2;
3340       regcache->cooked_read (insn.rs1 (), &src1);
3341       regcache->cooked_read (insn.rs2 (), &src2);
3342       if (src1 != src2)
3343         next_pc = pc + insn.imm_signed ();
3344     }
3345   else if (insn.opcode () == riscv_insn::BLT)
3346     {
3347       LONGEST src1, src2;
3348       regcache->cooked_read (insn.rs1 (), &src1);
3349       regcache->cooked_read (insn.rs2 (), &src2);
3350       if (src1 < src2)
3351         next_pc = pc + insn.imm_signed ();
3352     }
3353   else if (insn.opcode () == riscv_insn::BGE)
3354     {
3355       LONGEST src1, src2;
3356       regcache->cooked_read (insn.rs1 (), &src1);
3357       regcache->cooked_read (insn.rs2 (), &src2);
3358       if (src1 >= src2)
3359         next_pc = pc + insn.imm_signed ();
3360     }
3361   else if (insn.opcode () == riscv_insn::BLTU)
3362     {
3363       ULONGEST src1, src2;
3364       regcache->cooked_read (insn.rs1 (), &src1);
3365       regcache->cooked_read (insn.rs2 (), &src2);
3366       if (src1 < src2)
3367         next_pc = pc + insn.imm_signed ();
3368     }
3369   else if (insn.opcode () == riscv_insn::BGEU)
3370     {
3371       ULONGEST src1, src2;
3372       regcache->cooked_read (insn.rs1 (), &src1);
3373       regcache->cooked_read (insn.rs2 (), &src2);
3374       if (src1 >= src2)
3375         next_pc = pc + insn.imm_signed ();
3376     }
3377
3378   return next_pc;
3379 }
3380
3381 /* We can't put a breakpoint in the middle of a lr/sc atomic sequence, so look
3382    for the end of the sequence and put the breakpoint there.  */
3383
3384 static bool
3385 riscv_next_pc_atomic_sequence (struct regcache *regcache, CORE_ADDR pc,
3386                                CORE_ADDR *next_pc)
3387 {
3388   struct gdbarch *gdbarch = regcache->arch ();
3389   struct riscv_insn insn;
3390   CORE_ADDR cur_step_pc = pc;
3391   CORE_ADDR last_addr = 0;
3392
3393   /* First instruction has to be a load reserved.  */
3394   insn.decode (gdbarch, cur_step_pc);
3395   if (insn.opcode () != riscv_insn::LR)
3396     return false;
3397   cur_step_pc = cur_step_pc + insn.length ();
3398
3399   /* Next instruction should be branch to exit.  */
3400   insn.decode (gdbarch, cur_step_pc);
3401   if (insn.opcode () != riscv_insn::BNE)
3402     return false;
3403   last_addr = cur_step_pc + insn.imm_signed ();
3404   cur_step_pc = cur_step_pc + insn.length ();
3405
3406   /* Next instruction should be store conditional.  */
3407   insn.decode (gdbarch, cur_step_pc);
3408   if (insn.opcode () != riscv_insn::SC)
3409     return false;
3410   cur_step_pc = cur_step_pc + insn.length ();
3411
3412   /* Next instruction should be branch to start.  */
3413   insn.decode (gdbarch, cur_step_pc);
3414   if (insn.opcode () != riscv_insn::BNE)
3415     return false;
3416   if (pc != (cur_step_pc + insn.imm_signed ()))
3417     return false;
3418   cur_step_pc = cur_step_pc + insn.length ();
3419
3420   /* We should now be at the end of the sequence.  */
3421   if (cur_step_pc != last_addr)
3422     return false;
3423
3424   *next_pc = cur_step_pc;
3425   return true;
3426 }
3427
3428 /* This is called just before we want to resume the inferior, if we want to
3429    single-step it but there is no hardware or kernel single-step support.  We
3430    find the target of the coming instruction and breakpoint it.  */
3431
3432 std::vector<CORE_ADDR>
3433 riscv_software_single_step (struct regcache *regcache)
3434 {
3435   CORE_ADDR pc, next_pc;
3436
3437   pc = regcache_read_pc (regcache);
3438
3439   if (riscv_next_pc_atomic_sequence (regcache, pc, &next_pc))
3440     return {next_pc};
3441
3442   next_pc = riscv_next_pc (regcache, pc);
3443
3444   return {next_pc};
3445 }
3446
3447 /* Create RISC-V specific reggroups.  */
3448
3449 static void
3450 riscv_init_reggroups ()
3451 {
3452   csr_reggroup = reggroup_new ("csr", USER_REGGROUP);
3453 }
3454
3455 void
3456 _initialize_riscv_tdep (void)
3457 {
3458   riscv_create_csr_aliases ();
3459   riscv_init_reggroups ();
3460
3461   gdbarch_register (bfd_arch_riscv, riscv_gdbarch_init, NULL);
3462
3463   /* Add root prefix command for all "set debug riscv" and "show debug
3464      riscv" commands.  */
3465   add_prefix_cmd ("riscv", no_class, set_debug_riscv_command,
3466                   _("RISC-V specific debug commands."),
3467                   &setdebugriscvcmdlist, "set debug riscv ", 0,
3468                   &setdebuglist);
3469
3470   add_prefix_cmd ("riscv", no_class, show_debug_riscv_command,
3471                   _("RISC-V specific debug commands."),
3472                   &showdebugriscvcmdlist, "show debug riscv ", 0,
3473                   &showdebuglist);
3474
3475   add_setshow_zuinteger_cmd ("breakpoints", class_maintenance,
3476                              &riscv_debug_breakpoints,  _("\
3477 Set riscv breakpoint debugging."), _("\
3478 Show riscv breakpoint debugging."), _("\
3479 When non-zero, print debugging information for the riscv specific parts\n\
3480 of the breakpoint mechanism."),
3481                              NULL,
3482                              show_riscv_debug_variable,
3483                              &setdebugriscvcmdlist, &showdebugriscvcmdlist);
3484
3485   add_setshow_zuinteger_cmd ("infcall", class_maintenance,
3486                              &riscv_debug_infcall,  _("\
3487 Set riscv inferior call debugging."), _("\
3488 Show riscv inferior call debugging."), _("\
3489 When non-zero, print debugging information for the riscv specific parts\n\
3490 of the inferior call mechanism."),
3491                              NULL,
3492                              show_riscv_debug_variable,
3493                              &setdebugriscvcmdlist, &showdebugriscvcmdlist);
3494
3495   add_setshow_zuinteger_cmd ("unwinder", class_maintenance,
3496                              &riscv_debug_unwinder,  _("\
3497 Set riscv stack unwinding debugging."), _("\
3498 Show riscv stack unwinding debugging."), _("\
3499 When non-zero, print debugging information for the riscv specific parts\n\
3500 of the stack unwinding mechanism."),
3501                              NULL,
3502                              show_riscv_debug_variable,
3503                              &setdebugriscvcmdlist, &showdebugriscvcmdlist);
3504
3505   add_setshow_zuinteger_cmd ("gdbarch", class_maintenance,
3506                              &riscv_debug_gdbarch,  _("\
3507 Set riscv gdbarch initialisation debugging."), _("\
3508 Show riscv gdbarch initialisation debugging."), _("\
3509 When non-zero, print debugging information for the riscv gdbarch\n\
3510 initialisation process."),
3511                              NULL,
3512                              show_riscv_debug_variable,
3513                              &setdebugriscvcmdlist, &showdebugriscvcmdlist);
3514
3515   /* Add root prefix command for all "set riscv" and "show riscv" commands.  */
3516   add_prefix_cmd ("riscv", no_class, set_riscv_command,
3517                   _("RISC-V specific commands."),
3518                   &setriscvcmdlist, "set riscv ", 0, &setlist);
3519
3520   add_prefix_cmd ("riscv", no_class, show_riscv_command,
3521                   _("RISC-V specific commands."),
3522                   &showriscvcmdlist, "show riscv ", 0, &showlist);
3523
3524
3525   use_compressed_breakpoints = AUTO_BOOLEAN_AUTO;
3526   add_setshow_auto_boolean_cmd ("use-compressed-breakpoints", no_class,
3527                                 &use_compressed_breakpoints,
3528                                 _("\
3529 Set debugger's use of compressed breakpoints."), _("    \
3530 Show debugger's use of compressed breakpoints."), _("\
3531 Debugging compressed code requires compressed breakpoints to be used. If\n\
3532 left to 'auto' then gdb will use them if the existing instruction is a\n\
3533 compressed instruction. If that doesn't give the correct behavior, then\n\
3534 this option can be used."),
3535                                 NULL,
3536                                 show_use_compressed_breakpoints,
3537                                 &setriscvcmdlist,
3538                                 &showriscvcmdlist);
3539 }