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