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