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