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