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