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